<?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>46220</bug_id>
          
          <creation_ts>2010-09-21 14:56:45 -0700</creation_ts>
          <short_desc>Fix some Objective-C GC problems and use RetainPtr instead of HardRetain/Release</short_desc>
          <delta_ts>2010-09-22 10:26:33 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>282576</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-21 14:56:45 -0700</bug_when>
    <thetext>Fix some Objective-C GC problems and use RetainPtr instead of HardRetain/Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282601</commentid>
    <comment_count>1</comment_count>
      <attachid>68299</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-21 16:00:05 -0700</bug_when>
    <thetext>Created attachment 68299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282604</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-21 16:10:49 -0700</bug_when>
    <thetext>Attachment 68299 did not build on qt:
Build output: http://queues.webkit.org/results/3996095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282619</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-21 16:27:09 -0700</bug_when>
    <thetext>Attachment 68299 did not build on gtk:
Build output: http://queues.webkit.org/results/3996096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282653</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-21 17:02:10 -0700</bug_when>
    <thetext>Attachment 68299 did not build on chromium:
Build output: http://queues.webkit.org/results/4081046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282659</commentid>
    <comment_count>5</comment_count>
      <attachid>68312</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-21 17:04:58 -0700</bug_when>
    <thetext>Created attachment 68312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282983</commentid>
    <comment_count>6</comment_count>
      <attachid>68312</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-09-22 09:43:39 -0700</bug_when>
    <thetext>Comment on attachment 68312
Patch

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

&gt; WebCore/bindings/objc/ObjCEventListener.h:59
&gt; +        typedef id &lt;DOMEventListener&gt; ObjCListener;

There shouldn&apos;t be a space after id here.

&gt; WebCore/bridge/objc/objc_instance.mm:88
&gt; +    s_exception = nil;

How will not retaining here work in a non-GC environment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282987</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 09:48:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; WebCore/bridge/objc/objc_instance.mm:88
&gt; &gt; +    s_exception = nil;
&gt; 
&gt; How will not retaining here work in a non-GC environment?

This is a global in an Objective-C++ source file; the compiler and garbage collection runtime already handles this correctly without explicit retain/release. We have many other globals like this. An earlier version of my patch attempted to “fix” all those, but then I talked to Tim Hatcher, read some documentation, and did a little testing, and saw this worked fine.

In fact, the problem in ThemeMac.mm quite possibly is Leopard-only because it seems that the SnowLeopard version of GC can handle modifying an Objective-C global through a pointer even though the Leopard version cannot. But the fix is OK for all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282990</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 09:50:52 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; WebCore/bindings/objc/ObjCEventListener.h:59
&gt; &gt; +        typedef id &lt;DOMEventListener&gt; ObjCListener;
&gt; 
&gt; There shouldn&apos;t be a space after id here.

I did a quick grep and I see that we have id without a space in 6 places in WebCore and id with a space in about 50 places, including public headers.

I think we should standardize on one or the other, but for this patch I will leave this site alone -- it matches what used to be there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282996</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 09:55:51 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; &gt; WebCore/bridge/objc/objc_instance.mm:88
&gt; &gt; &gt; +    s_exception = nil;
&gt; &gt; 
&gt; &gt; How will not retaining here work in a non-GC environment?
&gt; 
&gt; This is a global in an Objective-C++ source file; the compiler and garbage collection runtime already handles this correctly without explicit retain/release. We have many other globals like this. An earlier version of my patch attempted to “fix” all those, but then I talked to Tim Hatcher, read some documentation, and did a little testing, and saw this worked fine.
&gt; 
&gt; In fact, the problem in ThemeMac.mm quite possibly is Leopard-only because it seems that the SnowLeopard version of GC can handle modifying an Objective-C global through a pointer even though the Leopard version cannot. But the fix is OK for all platforms.

Oops! You said “non-GC”!

That change was bad. I have to retain/release. Fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283031</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-22 10:26:33 -0700</bug_when>
    <thetext>Committed r68054: &lt;http://trac.webkit.org/changeset/68054&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68299</attachid>
            <date>2010-09-21 16:00:05 -0700</date>
            <delta_ts>2010-09-21 17:04:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46220-20100921160004.patch</filename>
            <type>text/plain</type>
            <size>40159</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzk4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODAgQEAKKzIwMTAtMDktMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBz
b21lIE9iamVjdGl2ZS1DIEdDIHByb2JsZW1zIGFuZCB1c2UgUmV0YWluUHRyIGluc3RlYWQgb2Yg
SGFyZFJldGFpbi9SZWxlYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NjIyMAorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0ZWQuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmg6IFVzZSBhIFJldGFp
blB0ciBmb3IgbV9saXN0ZW5lciwgc2luY2UgdGhhdAorICAgICAgICB3aWxsIGRvIGEgQ0ZSZXRh
aW4sIHdoaWNoIGlzIHJpZ2h0IGZvciBHQyByYXRoZXIgdGhhbiBhbiAtW05TT2JqZWN0IHJldGFp
bl0sCisgICAgICAgIHdoaWNoIGlzIG5vdC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNF
dmVudExpc3RlbmVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6T2JqQ0V2ZW50TGlzdGVuZXI6Ok9i
akNFdmVudExpc3RlbmVyKTogUmVtb3ZlZCBleHBsaWNpdCByZXRhaW4uCisgICAgICAgIChXZWJD
b3JlOjpPYmpDRXZlbnRMaXN0ZW5lcjo6fk9iakNFdmVudExpc3RlbmVyKTogUmVtb3ZlZCBleHBs
aWNpdCByZWxlYXNlIGFuZAorICAgICAgICBhZGRlZCBnZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6
Ok9iakNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6IEFkZGVkIGdldCgpOworCisgICAgICAg
ICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6
c2V0R2xvYmFsRXhjZXB0aW9uKTogUmVtb3ZlZCB1bm5lZWRlZCBIYXJkUmVsZWFzZSBhbmQgSGFy
ZFJldGFpbgorICAgICAgICBjYWxscyBzaW5jZSB0aGlzIGlzIGEgZ2xvYmFsIGFuZCB0aGUgY29t
cGlsZXIgYWxyZWFkeSBoYW5kbGVzIHRoaXMgY29ycmVjdGx5CisgICAgICAgIGluIE9iamVjdGl2
ZS1DKysgZmlsZXMuIFdlIHJlbHkgb24gdGhhdCBpbiBtYW55IG90aGVyIGNsYXNzZXMuCisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmg6IFVzZSBSZXRhaW5QdHIgZm9yIFBsYXRm
b3JtQ3Vyc29yIG9uIE1hYy4KKworICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJzb3I6OnBsYXRmb3JtQ3Vyc29yKTogTW92ZWQgdGhpcyB0byBDdXJz
b3JNYWMgZm9yIHRoZSBNYWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuY3BwOiBSZW1v
dmVkIHJldGFpbi9yZWxlYXNlUGxhdGZvcm1XaWRnZXQgYW5kIG1hZGUgdGhlbQorICAgICAgICBi
b3RoIGlubGluZXMgaW4gdGhlIGhlYWRlciBmaWxlLgorCisgICAgICAgICogcGxhdGZvcm0vV2lk
Z2V0Lmg6IEZpeGVkIGluY2x1ZGVzIGFuZCBhZGRlZCBhbiBpbmNsdWRlIG9mIFJldGFpblB0ci4K
KyAgICAgICAgTWFkZSBwbGF0Zm9ybVdpZGdldCBhbmQgc2V0UGxhdGZvcm1XaWRnZXQgbm9uLWlu
bGluZSBvbiB0aGUgTWFjIHBsYXRmb3JtLgorICAgICAgICBNYWRlIHJlbGVhc2VQbGF0Zm9ybVdp
ZGdldCBhbmQgcmV0YWluUGxhdGZvcm1XaWRnZXQgZW1wdHkgaW5saW5lIGZ1bmN0aW9ucworICAg
ICAgICBmb3Igbm9uLUdUSyBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW06IFJlbW92ZWQgdW5uZWVkZWQgRm91bmRhdGlvbkV4dHJhcy5oCisg
ICAgICAgIGluY2x1ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKTogdXNl
IFJldGFpblB0ciBmb3IgdGhlIHJldHVybiB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkTWFjOjpjbGVhckRhdGEpOiBVc2UgUmV0YWluUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkTWFjOjpnZXREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRN
YWM6OnNldERhdGEpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9DdXJzb3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21DdXJzb3IpOiBVc2UgUmV0YWluUHRy
IGZvciB0aGUgcmV0dXJuIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OmVuc3VyZVBs
YXRmb3JtQ3Vyc29yKTogUmVtb3ZlZCBhbGwgdGhlIGNhbGxzIHRvIEhhcmRSZXRhaW4KKyAgICAg
ICAgc2luY2UgbV9wbGF0Zm9ybUN1cnNvciBpcyBub3cgYSBSZXRhaW5QdHIuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJzb3I6OkN1cnNvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29y
OjpvcGVyYXRvcj0pOiBEaXR0by4gQWxzbyBIYXJkUmVsZWFzZS4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcjo6fkN1cnNvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpwbGF0
Zm9ybUN1cnNvcik6IFVzZSBnZXQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb3Vu
ZGF0aW9uRXh0cmFzLmg6IFJlbW92ZWQgYWxsIHRoZSBmdW5jdGlvbnMgZXhjZXB0IGZvcgorICAg
ICAgICBIYXJkQXV0b3JlbGVhc2UuIExhdGVyIHdlIGNhbiByZW1vdmUgdGhhdCBvbmUgdG9vLgor
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
c2V0VXBCdXR0b25DZWxsKTogQ2hhbmdlZCB0aGlzIGZ1bmN0aW9uIHRvIGhhdmUgYSByZXR1cm4g
dmFsdWUuCisgICAgICAgIE90aGVyd2lzZSB3ZSBlbmQgdXAgdGFraW5nIGEgcG9pbnRlciAoYWN0
dWFsbHkgYSByZWZlcmVuY2UpIHRvIGEgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxlLCB3aGljaCBk
b2VzIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIEdDLgorICAgICAgICAoV2ViQ29yZTo6bm9u
RGVmYXVsdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdEJ1dHRvbik6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6YnV0dG9uKTogQ2hhbmdlZCB0byBjYWxsIHR3byBz
ZXBhcmF0ZSBmdW5jdGlvbnMgd2l0aCB0d28gc2VwYXJhdGUKKyAgICAgICAgZ2xvYmFsIHZhcmlh
YmxlcyB0byBhdm9pZCB0aGUgcHJvYmxlbSB3aXRoIHBvaW50ZXJzIHRvIGdsb2JhbHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojp+V2lkZ2V0KTogUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHJlbGVhc2VQbGF0Zm9ybVdp
ZGdldC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1XaWRnZXQpOiBOb24taW5s
aW5lIHNvIHdlIGNhbiBjb21pcGlsZSB0aGUgaGVhZGVyCisgICAgICAgIHBsYWluIG5vbi1PYmpl
Y3RpdmUtQyBDKysuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldFBsYXRmb3JtV2lkZ2V0
KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVz
cG9uc2UubW06CisgICAgICAgIChtaW1lVHlwZUZyb21VVElUcmVlKTogVXNlIFJldGFpblB0ciBm
b3IgdGhlIHJldHVybiB0eXBlLgorICAgICAgICAoLVtOU1VSTFJlc3BvbnNlIGFkanVzdE1JTUVU
eXBlSWZOZWNlc3NhcnldKTogVXNlIFJldGFpblB0ci4KKwogMjAxMC0wOS0yMSAgVG9ueSBDaGFu
ZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIFFUIGJ1aWxkIGZp
eC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC02NTAsOCArNjUwLDcgQEAgX19aTjdXZWJDb3JlNkxvYWRlcjIw
c2VydmVQZW5kaW5nUmVxdWVzdAogX19aTjdXZWJDb3JlNldpZGdldDEyc2V0RnJhbWVSZWN0RVJL
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmU2V2lkZ2V0MTZyZW1vdmVGcm9tUGFyZW50RXYKIF9f
Wk43V2ViQ29yZTZXaWRnZXQxN2ZyYW1lUmVjdHNDaGFuZ2VkRXYKLV9fWk43V2ViQ29yZTZXaWRn
ZXQyMHJldGFpblBsYXRmb3JtV2lkZ2V0RXYKLV9fWk43V2ViQ29yZTZXaWRnZXQyMXJlbGVhc2VQ
bGF0Zm9ybVdpZGdldEV2CitfX1pON1dlYkNvcmU2V2lkZ2V0MTdzZXRQbGF0Zm9ybVdpZGdldEVQ
Nk5TVmlldwogX19aTjdXZWJDb3JlNldpZGdldDRoaWRlRXYKIF9fWk43V2ViQ29yZTZXaWRnZXQ0
c2hvd0V2CiBfX1pON1dlYkNvcmU2V2lkZ2V0NXBhaW50RVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzdJbnRSZWN0RQpAQCAtMTAzNiw2ICsxMDM1LDcgQEAgX19aTks3V2ViQ29yZTZFZGl0b3I3
Y2FuQ29weUV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjdjYW5FZGl0RXYKIF9fWk5LN1dlYkNvcmU2
RWRpdG9yOGNhblBhc3RlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yOWNhbkRlbGV0ZUV2CitfX1pO
SzdXZWJDb3JlNldpZGdldDE0cGxhdGZvcm1XaWRnZXRFdgogX19aTks3V2ViQ29yZTZXaWRnZXQy
M2NvbnZlcnRUb0NvbnRhaW5pbmdWaWV3RVJLTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlNldp
ZGdldDIzY29udmVydFRvQ29udGFpbmluZ1ZpZXdFUktOU184SW50UG9pbnRFCiBfX1pOSzdXZWJD
b3JlNldpZGdldDI1Y29udmVydEZyb21Db250YWluaW5nVmlld0VSS05TXzdJbnRSZWN0RQpAQCAt
MTE0NCw3ICsxMTQ0LDYgQEAgX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kCiBfd2tTaWduYWxDRlJl
YWRTdHJlYW1FcnJvcgogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMKIAotCiAjaWYgRU5B
QkxFKDNEX1JFTkRFUklORykKIF9XZWJDb3JlSGFzM0RSZW5kZXJpbmcKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDY3OTU5
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDggQEAKICNkZWZpbmUgT2JqQ0V2ZW50TGlzdGVuZXJfaAogCiAj
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAog
QHByb3RvY29sIERPTUV2ZW50TGlzdGVuZXI7CiAKQEAgLTU2LDcgKzU2LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXZlbnQqKTsKIAotICAgICAgICBpZCA8RE9NRXZlbnRMaXN0ZW5lcj4g
bV9saXN0ZW5lcjsKKyAgICAgICAgdHlwZWRlZiBpZCA8RE9NRXZlbnRMaXN0ZW5lcj4gT2JqQ0xp
c3RlbmVyOworICAgICAgICBSZXRhaW5QdHI8T2JqQ0xpc3RlbmVyPiBtX2xpc3RlbmVyOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9PYmpDRXZlbnRMaXN0ZW5lci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29i
amMvT2JqQ0V2ZW50TGlzdGVuZXIubW0JKHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIEcuIFNwZXRoIChzcGV0
aEBlbmQuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWlu
aWdAZ21haWwuY29tKQogICoKQEAgLTU4LDcgKzU4LDcgQEAgUGFzc1JlZlB0cjxPYmpDRXZlbnRM
aXN0ZW5lcj4gT2JqQ0V2ZW50TAogCiBPYmpDRXZlbnRMaXN0ZW5lcjo6T2JqQ0V2ZW50TGlzdGVu
ZXIoaWQgPERPTUV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKQogICAgIDogRXZlbnRMaXN0ZW5lcihP
YmpDRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBtX2xpc3RlbmVyKFtsaXN0ZW5lciByZXRhaW5d
KQorICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKIHsKICAgICBMaXN0ZW5lck1hcCogbWFwID0g
bGlzdGVuZXJNYXA7CiAgICAgaWYgKCFtYXApIHsKQEAgLTcwLDEzICs3MCwxMyBAQCBPYmpDRXZl
bnRMaXN0ZW5lcjo6T2JqQ0V2ZW50TGlzdGVuZXIoaWQgCiAKIE9iakNFdmVudExpc3RlbmVyOjp+
T2JqQ0V2ZW50TGlzdGVuZXIoKQogewotICAgIGxpc3RlbmVyTWFwLT5yZW1vdmUobV9saXN0ZW5l
cik7Ci0gICAgW21fbGlzdGVuZXIgcmVsZWFzZV07CisgICAgbGlzdGVuZXJNYXAtPnJlbW92ZSht
X2xpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBPYmpDRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKIHsKLSAgICBbbV9saXN0
ZW5lciBoYW5kbGVFdmVudDpraXQoZXZlbnQpXTsKKyAgICBPYmpDTGlzdGVuZXIgbGlzdGVuZXIg
PSBtX2xpc3RlbmVyLmdldCgpOworICAgIFtsaXN0ZW5lciBoYW5kbGVFdmVudDpraXQoZXZlbnQp
XTsKIH0KIAogYm9vbCBPYmpDRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lcikKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0J
KHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW1wb3J0ICJvYmpjX2luc3RhbmNl
LmgiCiAKICNpbXBvcnQgInJ1bnRpbWVfbWV0aG9kLmgiCi0jaW1wb3J0ICJGb3VuZGF0aW9uRXh0
cmFzLmgiCiAjaW1wb3J0ICJPYmpDUnVudGltZU9iamVjdC5oIgogI2ltcG9ydCAiV2ViU2NyaXB0
T2JqZWN0LmgiCiAjaW1wb3J0IDxvYmpjL29iamMtYXV0by5oPgpAQCAtNzAsMTAgKzY5LDcgQEAg
UnVudGltZU9iamVjdCogT2JqY0luc3RhbmNlOjpuZXdSdW50aW1lTwogCiB2b2lkIE9iamNJbnN0
YW5jZTo6c2V0R2xvYmFsRXhjZXB0aW9uKE5TU3RyaW5nKiBleGNlcHRpb24sIEpTR2xvYmFsT2Jq
ZWN0KiBleGNlcHRpb25FbnZpcm9ubWVudCkKIHsKLSAgICBIYXJkUmVsZWFzZShzX2V4Y2VwdGlv
bik7Ci0gICAgSGFyZFJldGFpbihleGNlcHRpb24pOwogICAgIHNfZXhjZXB0aW9uID0gZXhjZXB0
aW9uOwotCiAgICAgc19leGNlcHRpb25FbnZpcm9ubWVudCA9IGV4Y2VwdGlvbkVudmlyb25tZW50
OwogfQogCkBAIC04OSw5ICs4NSw3IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhj
ZXB0aW9uVG8KICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBzX2V4Y2VwdGlvbik7CiAgICAgfQog
Ci0gICAgSGFyZFJlbGVhc2Uoc19leGNlcHRpb24pOwotICAgIHNfZXhjZXB0aW9uID0gMDsKLQor
ICAgIHNfZXhjZXB0aW9uID0gbmlsOwogICAgIHNfZXhjZXB0aW9uRW52aXJvbm1lbnQgPSAwOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCShyZXZpc2lvbiA2Nzk1OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vQ3Vyc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDEyICsyNTMsMTYgQEAgQ3Vy
c29yOjpDdXJzb3IoVHlwZSB0eXBlKQogewogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKKwogUGxh
dGZvcm1DdXJzb3IgQ3Vyc29yOjpwbGF0Zm9ybUN1cnNvcigpIGNvbnN0CiB7CiAgICAgZW5zdXJl
UGxhdGZvcm1DdXJzb3IoKTsKICAgICByZXR1cm4gbV9wbGF0Zm9ybUN1cnNvcjsKIH0KIAorI2Vu
ZGlmCisKIGNvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlBvaW50ZXIpKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vQ3Vyc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAko
cmV2aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw4IEBAIHR5cGVkZWYgc3RydWN0IEhJQ09OX18qIEhJQ09OOwogdHlw
ZWRlZiBISUNPTiBIQ1VSU09SOwogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgogI2VsaWYgUExBVEZPUk0oUVQpCkBAIC04Miw3ICs4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICB9OwogICAgIHR5cGVkZWYgUmVmUHRyPFNoYXJlZEN1cnNvcj4gUGxhdGZvcm1DdXJz
b3I7CiAjZWxpZiBQTEFURk9STShNQUMpCi0gICAgdHlwZWRlZiBOU0N1cnNvciogUGxhdGZvcm1D
dXJzb3I7CisgICAgdHlwZWRlZiBOU0N1cnNvciAqUGxhdGZvcm1DdXJzb3I7CiAjZWxpZiBQTEFU
Rk9STShHVEspCiAgICAgdHlwZWRlZiBQbGF0Zm9ybVJlZlB0cjxHZGtDdXJzb3I+IFBsYXRmb3Jt
Q3Vyc29yOwogI2VsaWYgUExBVEZPUk0oRUZMKQpAQCAtMTgzLDcgKzE4NSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEludFBvaW50IG1faG90U3BvdDsKICNlbmRpZgogCisjaWYg
IVBMQVRGT1JNKE1BQykKICAgICAgICAgbXV0YWJsZSBQbGF0Zm9ybUN1cnNvciBtX3BsYXRmb3Jt
Q3Vyc29yOworI2Vsc2UKKyAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNDdXJzb3I+IG1fcGxh
dGZvcm1DdXJzb3I7CisjZW5kaWYKICAgICB9OwogCiAgICAgSW50UG9pbnQgZGV0ZXJtaW5lSG90
U3BvdChJbWFnZSosIGNvbnN0IEludFBvaW50JiBzcGVjaWZpZWRIb3RTcG90KTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5jcHAJKHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEy
NywxNiArMTI3LDYgQEAgSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaQog
fQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKQotdm9pZCBX
aWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCi17Ci19Ci0KLXZvaWQgV2lkZ2V0OjpyZXRh
aW5QbGF0Zm9ybVdpZGdldCgpCi17Ci19Ci0jZW5kaWYKLQogSW50UmVjdCBXaWRnZXQ6OmNvbnZl
cnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAg
ICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsMjIgQEAKICNpZm5kZWYgV2lkZ2V0X2gK
ICNkZWZpbmUgV2lkZ2V0X2gKIAorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyNpbmNsdWRlICJQbGF0Zm9ybVdpZGdldC5oIgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShNQUMpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1B
QykKICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIE5TVmlldzsKQEAgLTM1LDcgKzUxLDcgQEAKIGNs
YXNzIE5TVmlldzsKIGNsYXNzIE5TV2luZG93OwogI2VuZGlmCi10eXBlZGVmIE5TVmlldyogUGxh
dGZvcm1XaWRnZXQ7Cit0eXBlZGVmIE5TVmlldyAqUGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFdJTikKQEAgLTUxLDcgKzY3LDYgQEAgdHlwZWRlZiBHdGtXaWRnZXQqIFBs
YXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xv
YmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFXaWRnZXQ7CiBRVF9FTkRfTkFNRVNQ
QUNFCkBAIC03MiwxMCArODcsNiBAQCB0eXBlZGVmIEJWaWV3KiBQbGF0Zm9ybVdpZGdldDsKIHR5
cGVkZWYgdm9pZCogUGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQotI2luY2x1ZGUgIlBsYXRmb3JtV2lkZ2V0LmgiCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JN
KEVGTCkKIHR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYg
c3RydWN0IF9FdmFzIEV2YXM7CkBAIC05MCwxMyArMTAxLDYgQEAgdHlwZWRlZiBRV2ViUGFnZUNs
aWVudCogUGxhdGZvcm1QYWdlQ2xpZQogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBh
Z2VDbGllbnQ7CiAjZW5kaWYKIAotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDdXJzb3I7CkBAIC0xMjcsMTUgKzEzMSw5IEBAIHB1YmxpYzoKICAgICBXaWRnZXQoUGxh
dGZvcm1XaWRnZXQgPSAwKTsKICAgICB2aXJ0dWFsIH5XaWRnZXQoKTsKIAotICAgIFBsYXRmb3Jt
V2lkZ2V0IHBsYXRmb3JtV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXQ7IH0KLSAgICB2
b2lkIHNldFBsYXRmb3JtV2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKLSAgICB7Ci0gICAg
ICAgIGlmICh3aWRnZXQgIT0gbV93aWRnZXQpIHsKLSAgICAgICAgICAgIHJlbGVhc2VQbGF0Zm9y
bVdpZGdldCgpOwotICAgICAgICAgICAgbV93aWRnZXQgPSB3aWRnZXQ7Ci0gICAgICAgICAgICBy
ZXRhaW5QbGF0Zm9ybVdpZGdldCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIFBsYXRmb3JtV2lk
Z2V0IHBsYXRmb3JtV2lkZ2V0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRQbGF0Zm9ybVdpZGdldChQ
bGF0Zm9ybVdpZGdldCk7CisKICNpZiBQTEFURk9STShIQUlLVSkKICAgICBQbGF0Zm9ybVdpZGdl
dCB0b3BMZXZlbFBsYXRmb3JtV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90b3BMZXZlbFBsYXRm
b3JtV2lkZ2V0OyB9CiAgICAgdm9pZCBzZXRUb3BMZXZlbFBsYXRmb3JtV2lkZ2V0KFBsYXRmb3Jt
V2lkZ2V0IHdpZGdldCkKQEAgLTI1MSw3ICsyNDksMTEgQEAgcHJpdmF0ZToKIAogcHJpdmF0ZToK
ICAgICBTY3JvbGxWaWV3KiBtX3BhcmVudDsKKyNpZiAhUExBVEZPUk0oTUFDKQogICAgIFBsYXRm
b3JtV2lkZ2V0IG1fd2lkZ2V0OworI2Vsc2UKKyAgICBSZXRhaW5QdHI8TlNWaWV3PiBtX3dpZGdl
dDsKKyNlbmRpZgogICAgIGJvb2wgbV9zZWxmVmlzaWJsZTsKICAgICBib29sIG1fcGFyZW50Vmlz
aWJsZTsKIApAQCAtMjc0LDYgKzI3NiwzNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCisjaWYg
IVBMQVRGT1JNKE1BQykKKworaW5saW5lIFdpZGdldDo6UGxhdGZvcm1XaWRnZXQgV2lkZ2V0Ojpw
bGF0Zm9ybVdpZGdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2lkZ2V0OworfQorCitpbmxp
bmUgdm9pZCBXaWRnZXQ6OnNldFBsYXRmb3JtV2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkK
K3sKKyAgICBpZiAod2lkZ2V0ICE9IG1fd2lkZ2V0KSB7CisgICAgICAgIHJlbGVhc2VQbGF0Zm9y
bVdpZGdldCgpOworICAgICAgICBtX3dpZGdldCA9IHdpZGdldDsKKyAgICAgICAgcmV0YWluUGxh
dGZvcm1XaWRnZXQoKTsKKyAgICB9Cit9CisKKyNlbmRpZgorCisjaWYgIVBMQVRGT1JNKEdUSykK
KworaW5saW5lIHZvaWQgV2lkZ2V0OjpyZWxlYXNlUGxhdGZvcm1XaWRnZXQoKQoreworfQorCitp
bmxpbmUgdm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKK3sKK30KKworI2VuZGlm
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFdpZGdldF9oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkocmV2aXNpb24gNjc5NTkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIKIAogI2ltcG9y
dCAiRmxvYXRSZWN0LmgiCi0jaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW1wb3J0ICJT
aGFyZWRCdWZmZXIuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHJl
dmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICsz
MSw2IEBACiAjaW1wb3J0ICJEcmFnQ29udHJvbGxlci5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIK
ICNpbXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9y
dCAiRmlsZUxpc3QuaCIKICNpbXBvcnQgIkZyYW1lLmgiCiAjaW1wb3J0ICJJbWFnZS5oIgpAQCAt
NzAsNyArNjksNyBAQCBib29sIENsaXBib2FyZE1hYzo6aGFzRGF0YSgpCiAgICAgcmV0dXJuIG1f
cGFzdGVib2FyZCAmJiBbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSAmJiBbW21fcGFzdGVib2Fy
ZC5nZXQoKSB0eXBlc10gY291bnRdID4gMDsKIH0KICAgICAKLXN0YXRpYyBOU1N0cmluZyAqY29j
b2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3N0YXRpYyBS
ZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCiB7CiAgICAgU3RyaW5nIHFUeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2Uo
KTsKIApAQCAtOTMsMTEgKzkyLDExIEBAIHN0YXRpYyBOU1N0cmluZyAqY29jb2FUeXBlRnJvbUhU
TUxDbGlwYm8KICAgICBpZiAodXRpVHlwZSkgewogICAgICAgICBDRlN0cmluZ1JlZiBwYlR5cGUg
PSBVVFR5cGVDb3B5UHJlZmVycmVkVGFnV2l0aENsYXNzKHV0aVR5cGUuZ2V0KCksIGtVVFRhZ0Ns
YXNzTlNQYm9hcmRUeXBlKTsKICAgICAgICAgaWYgKHBiVHlwZSkKLSAgICAgICAgICAgIHJldHVy
biBIYXJkQXV0b3JlbGVhc2UocGJUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiAoTlNTdHJpbmcg
KilwYlR5cGU7CiAgICAgfQogCi0gICAvLyBObyBtYXBwaW5nLCBqdXN0IHBhc3MgdGhlIHdob2xl
IHN0cmluZyB0aG91Z2gKLSAgICByZXR1cm4gcVR5cGU7CisgICAgLy8gTm8gbWFwcGluZywganVz
dCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoCisgICAgcmV0dXJuIChOU1N0cmluZyAqKXFU
eXBlOwogfQogCiBzdGF0aWMgU3RyaW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKE5TU3RyaW5nICp0
eXBlKQpAQCAtMTUxLDkgKzE1MCw4IEBAIHZvaWQgQ2xpcGJvYXJkTWFjOjpjbGVhckRhdGEoY29u
c3QgU3RyaW4KIAogICAgIC8vIG5vdGUgTlNQYXN0ZWJvYXJkIGVuZm9yY2VzIGNoYW5nZUNvdW50
IGl0c2VsZiBvbiB3cml0aW5nIC0gY2FuJ3Qgd3JpdGUgaWYgbm90IHRoZSBvd25lcgogCi0gICAg
TlNTdHJpbmcgKmNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBl
KTsKLSAgICBpZiAoY29jb2FUeXBlKQotICAgICAgICBbbV9wYXN0ZWJvYXJkLmdldCgpIHNldFN0
cmluZzpAIiIgZm9yVHlwZTpjb2NvYVR5cGVdOworICAgIGlmIChSZXRhaW5QdHI8TlNTdHJpbmc+
IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKSkKKyAgICAg
ICAgW21fcGFzdGVib2FyZC5nZXQoKSBzZXRTdHJpbmc6QCIiIGZvclR5cGU6Y29jb2FUeXBlLmdl
dCgpXTsKIH0KIAogdm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyQWxsRGF0YSgpCkBAIC0yMTgsMTkg
KzIxNiwxOSBAQCBTdHJpbmcgQ2xpcGJvYXJkTWFjOjpnZXREYXRhKGNvbnN0IFN0cmluCiAgICAg
aWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICBOU1N0cmluZyAqY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9h
cmRUeXBlKHR5cGUpOworICAgIFJldGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlID0gY29jb2FU
eXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOwogICAgIE5TU3RyaW5nICpjb2NvYVZhbHVl
ID0gbmlsOwogCiAgICAgLy8gR3JhYiB0aGUgdmFsdWUgb2ZmIHRoZSBwYXN0ZWJvYXJkIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGNvY29hVHlwZQotICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0
cmluZzpOU1VSTFBib2FyZFR5cGVdKSB7CisgICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVh
bFRvU3RyaW5nOk5TVVJMUGJvYXJkVHlwZV0pIHsKICAgICAgICAgLy8gIlVSTCIgYW5kICJ0ZXh0
L3VybC1saXN0IiBib3RoIG1hcCB0byBOU1VSTFBib2FyZFR5cGUgaW4gY29jb2FUeXBlRnJvbUhU
TUxDbGlwYm9hcmRUeXBlKCksICJVUkwiIG9ubHkgd2FudHMgdGhlIGZpcnN0IFVSTAogICAgICAg
ICBib29sIG9ubHlGaXJzdFVSTCA9ICh0eXBlID09ICJVUkwiKTsKICAgICAgICAgTlNBcnJheSAq
YWJzb2x1dGVVUkxzID0gYWJzb2x1dGVVUkxzRnJvbVBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkLmdl
dCgpLCBvbmx5Rmlyc3RVUkwpOwogICAgICAgICBjb2NvYVZhbHVlID0gW2Fic29sdXRlVVJMcyBj
b21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdOwotICAgIH0gZWxzZSBpZiAoW2NvY29hVHlw
ZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSkgewotICAgICAgICBjb2NvYVZh
bHVlID0gW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpjb2NvYVR5cGVdIHByZWNv
bXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOworICAgIH0gZWxzZSBpZiAoW2NvY29h
VHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSkgeworICAgICAg
ICBjb2NvYVZhbHVlID0gW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgc3RyaW5nRm9yVHlwZTpjb2NvYVR5
cGUuZ2V0KCldIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwogICAgIH0g
ZWxzZSBpZiAoY29jb2FUeXBlKQotICAgICAgICBjb2NvYVZhbHVlID0gW21fcGFzdGVib2FyZC5n
ZXQoKSBzdHJpbmdGb3JUeXBlOmNvY29hVHlwZV07CisgICAgICAgIGNvY29hVmFsdWUgPSBbbV9w
YXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6Y29jb2FUeXBlLmdldCgpXTsKIAogICAgIC8v
IEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFm
dGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNu
J3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNz
aW5nIHRoZSBkYXRhLgpAQCAtMjQ4LDEwICsyNDYsMTAgQEAgYm9vbCBDbGlwYm9hcmRNYWM6OnNl
dERhdGEoY29uc3QgU3RyaW5nIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gbm90ZSBO
U1Bhc3RlYm9hcmQgZW5mb3JjZXMgY2hhbmdlQ291bnQgaXRzZWxmIG9uIHdyaXRpbmcgLSBjYW4n
dCB3cml0ZSBpZiBub3QgdGhlIG93bmVyCiAKLSAgICBOU1N0cmluZyAqY29jb2FUeXBlID0gY29j
b2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOworICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOwogICAg
IE5TU3RyaW5nICpjb2NvYURhdGEgPSBkYXRhOwogCi0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVh
bFRvU3RyaW5nOk5TVVJMUGJvYXJkVHlwZV0pIHsKKyAgICBpZiAoW2NvY29hVHlwZS5nZXQoKSBp
c0VxdWFsVG9TdHJpbmc6TlNVUkxQYm9hcmRUeXBlXSkgewogICAgICAgICBbbV9wYXN0ZWJvYXJk
LmdldCgpIGFkZFR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU1VSTFBib2FyZFR5cGVd
IG93bmVyOm5pbF07CiAgICAgICAgIE5TVVJMICp1cmwgPSBbW05TVVJMIGFsbG9jXSBpbml0V2l0
aFN0cmluZzpjb2NvYURhdGFdOwogICAgICAgICBbdXJsIHdyaXRlVG9QYXN0ZWJvYXJkOm1fcGFz
dGVib2FyZC5nZXQoKV07CkBAIC0yNjgsOCArMjY2LDggQEAgYm9vbCBDbGlwYm9hcmRNYWM6OnNl
dERhdGEoY29uc3QgU3RyaW5nIAogCiAgICAgaWYgKGNvY29hVHlwZSkgewogICAgICAgICAvLyBl
dmVyeXRoaW5nIGVsc2Ugd2Uga25vdyBvZiBnb2VzIG9uIHRoZSBwYm9hcmQgYXMgYSBzdHJpbmcK
LSAgICAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBlczpbTlNBcnJheSBhcnJheVdpdGhP
YmplY3Q6Y29jb2FUeXBlXSBvd25lcjpuaWxdOwotICAgICAgICByZXR1cm4gW21fcGFzdGVib2Fy
ZC5nZXQoKSBzZXRTdHJpbmc6Y29jb2FEYXRhIGZvclR5cGU6Y29jb2FUeXBlXTsKKyAgICAgICAg
W21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6Y29j
b2FUeXBlLmdldCgpXSBvd25lcjpuaWxdOworICAgICAgICByZXR1cm4gW21fcGFzdGVib2FyZC5n
ZXQoKSBzZXRTdHJpbmc6Y29jb2FEYXRhIGZvclR5cGU6Y29jb2FUeXBlLmdldCgpXTsKICAgICB9
CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9DdXJzb3JN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ3Vyc29yTWFjLm1tCShy
ZXZpc2lvbiA2Nzk1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNiBAQAogI2ltcG9ydCAiQ3Vyc29yLmgi
CiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJh
cy5oIgogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBAaW50ZXJmYWNlIFdlYkNvcmVD
dXJzb3JCdW5kbGUgOiBOU09iamVjdCB7IH0KQEAgLTQxLDE0ICs0MCwxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyBTaW1wbGUgTlNDdXJzb3IgY2FsbHMgc2hvdWxkbid0IG5lZWQgcHJvdGVj
dGlvbiwKIC8vIGJ1dCBjcmVhdGluZyBhIGN1cnNvciB3aXRoIGEgYmFkIGltYWdlIG1pZ2h0IHRo
cm93LgogCi1zdGF0aWMgTlNDdXJzb3IqIGNyZWF0ZUN1c3RvbUN1cnNvcihJbWFnZSogaW1hZ2Us
IGNvbnN0IEludFBvaW50JiBob3RTcG90KQorc3RhdGljIFJldGFpblB0cjxOU0N1cnNvcj4gY3Jl
YXRlQ3VzdG9tQ3Vyc29yKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpCiB7
CiAgICAgLy8gRklYTUU6IFRoZSBjdXJzb3Igd29uJ3QgYW5pbWF0ZS4gIE5vdCBzdXJlIGlmIHRo
YXQncyBhIGJpZyBkZWFsLgotICAgIE5TSW1hZ2UqIGltZyA9IGltYWdlLT5nZXROU0ltYWdlKCk7
Ci0gICAgaWYgKCFpbWcpCisgICAgTlNJbWFnZSogbnNJbWFnZSA9IGltYWdlLT5nZXROU0ltYWdl
KCk7CisgICAgaWYgKCFuc0ltYWdlKQogICAgICAgICByZXR1cm4gMDsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFtbTlNDdXJzb3IgYWxsb2NdIGluaXRXaXRo
SW1hZ2U6aW1nIGhvdFNwb3Q6aG90U3BvdF07CisgICAgcmV0dXJuIFJldGFpblB0cjxOU0N1cnNv
cj4oQWRvcHROUywgW1tOU0N1cnNvciBhbGxvY10gaW5pdFdpdGhJbWFnZTpuc0ltYWdlIGhvdFNw
b3Q6aG90U3BvdF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgcmV0dXJu
IDA7CiB9CkBAIC04MSwxMTggKzgwLDExOCBAQCB2b2lkIEN1cnNvcjo6ZW5zdXJlUGxhdGZvcm1D
dXJzb3IoKSBjb25zCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQ3Vyc29yOjpQ
b2ludGVyOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3Ig
YXJyb3dDdXJzb3JdKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IFtOU0N1cnNvciBhcnJv
d0N1cnNvcl07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpDcm9zczoKLSAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJjcm9zc0hh
aXJDdXJzb3IiLCAxMSwgMTEpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1l
ZEN1cnNvcigiY3Jvc3NIYWlyQ3Vyc29yIiwgMTEsIDExKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBDdXJzb3I6OkhhbmQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWlu
KGxlYWtOYW1lZEN1cnNvcigibGlua0N1cnNvciIsIDYsIDEpKTsKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigibGlua0N1cnNvciIsIDYsIDEpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEN1cnNvcjo6SUJlYW06Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBIYXJkUmV0YWluKFtOU0N1cnNvciBJQmVhbUN1cnNvcl0pOworICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gW05TQ3Vyc29yIElCZWFtQ3Vyc29yXTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDdXJzb3I6OldhaXQ6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxl
YWtOYW1lZEN1cnNvcigid2FpdEN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IGxlYWtOYW1lZEN1cnNvcigid2FpdEN1cnNvciIsIDcsIDcpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEN1cnNvcjo6SGVscDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJoZWxwQ3Vyc29yIiwgOCwgOCkpOworICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJoZWxwQ3Vyc29yIiwgOCwgOCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpNb3ZlOgogICAgIGNhc2UgQ3Vyc29yOjpN
aWRkbGVQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFr
TmFtZWRDdXJzb3IoIm1vdmVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJz
b3IgPSBsZWFrTmFtZWRDdXJzb3IoIm1vdmVDdXJzb3IiLCA3LCA3KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDdXJzb3I6OkVhc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6OkVhc3RQYW5u
aW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJz
b3IoImVhc3RSZXNpemVDdXJzb3IiLCAxNCwgNykpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gbGVha05hbWVkQ3Vyc29yKCJlYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDcpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoUGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05h
bWVkQ3Vyc29yKCJub3J0aFJlc2l6ZUN1cnNvciIsIDcsIDEpKTsKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigibm9ydGhSZXNpemVDdXJzb3IiLCA3LCAxKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoRWFzdFJlc2l6ZToKICAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhFYXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJub3J0aEVhc3RSZXNpemVDdXJzb3IiLCAxNCwgMSkp
OworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJub3J0aEVhc3RS
ZXNpemVDdXJzb3IiLCAxNCwgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpO
b3J0aFdlc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6Ok5vcnRoV2VzdFBhbm5pbmc6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9ydGhX
ZXN0UmVzaXplQ3Vyc29yIiwgMCwgMCkpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVh
a05hbWVkQ3Vyc29yKCJub3J0aFdlc3RSZXNpemVDdXJzb3IiLCAwLCAwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDdXJzb3I6OlNvdXRoUmVzaXplOgogICAgIGNhc2UgQ3Vyc29yOjpTb3V0
aFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1l
ZEN1cnNvcigic291dGhSZXNpemVDdXJzb3IiLCA3LCAxNCkpOworICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJzb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDE0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OlNvdXRoRWFzdFJlc2l6ZToKICAgICBjYXNl
IEN1cnNvcjo6U291dGhFYXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJzb3V0aEVhc3RSZXNpemVDdXJzb3IiLCAxNCwgMTQp
KTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigic291dGhFYXN0
UmVzaXplQ3Vyc29yIiwgMTQsIDE0KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6
OlNvdXRoV2VzdFJlc2l6ZToKICAgICBjYXNlIEN1cnNvcjo6U291dGhXZXN0UGFubmluZzoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJzb3V0
aFdlc3RSZXNpemVDdXJzb3IiLCAxLCAxNCkpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
bGVha05hbWVkQ3Vyc29yKCJzb3V0aFdlc3RSZXNpemVDdXJzb3IiLCAxLCAxNCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpXZXN0UmVzaXplOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIndlc3RSZXNpemVDdXJzb3IiLCAx
LCA3KSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoIndlc3RS
ZXNpemVDdXJzb3IiLCAxLCA3KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6Ok5v
cnRoU291dGhSZXNpemU6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxl
YWtOYW1lZEN1cnNvcigibm9ydGhTb3V0aFJlc2l6ZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigibm9ydGhTb3V0aFJlc2l6ZUN1cnNv
ciIsIDcsIDcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6RWFzdFdlc3RSZXNp
emU6CiAgICAgY2FzZSBDdXJzb3I6Oldlc3RQYW5uaW5nOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoImVhc3RXZXN0UmVzaXplQ3Vyc29yIiwg
NywgNykpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJlYXN0
V2VzdFJlc2l6ZUN1cnNvciIsIDcsIDcpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNv
cjo6Tm9ydGhFYXN0U291dGhXZXN0UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
SGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNv
ciIsIDcsIDcpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigi
bm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yIiwgNywgNyk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RTb3V0aEVhc3RSZXNpemU6Ci0gICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9ydGhXZXN0U291dGhF
YXN0UmVzaXplQ3Vyc29yIiwgNywgNykpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVh
a05hbWVkQ3Vyc29yKCJub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVDdXJzb3IiLCA3LCA3KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OkNvbHVtblJlc2l6ZToKLSAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4oW05TQ3Vyc29yIHJlc2l6ZUxlZnRSaWdodEN1cnNv
cl0pOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gW05TQ3Vyc29yIHJlc2l6ZUxlZnRSaWdo
dEN1cnNvcl07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpSb3dSZXNpemU6Ci0g
ICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKFtOU0N1cnNvciByZXNpemVVcERv
d25DdXJzb3JdKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IFtOU0N1cnNvciByZXNpemVV
cERvd25DdXJzb3JdOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6VmVydGljYWxU
ZXh0OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJz
b3IoInZlcnRpY2FsVGV4dEN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGxlYWtOYW1lZEN1cnNvcigidmVydGljYWxUZXh0Q3Vyc29yIiwgNywgNyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpDZWxsOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29y
ID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoImNlbGxDdXJzb3IiLCA3LCA3KSk7CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoImNlbGxDdXJzb3IiLCA3LCA3
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OkNvbnRleHRNZW51OgotICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoImNvbnRleHRN
ZW51Q3Vyc29yIiwgMywgMikpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVk
Q3Vyc29yKCJjb250ZXh0TWVudUN1cnNvciIsIDMsIDIpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEN1cnNvcjo6QWxpYXM6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWlu
KGxlYWtOYW1lZEN1cnNvcigiYWxpYXNDdXJzb3IiLCAxMSwgMykpOworICAgICAgICBtX3BsYXRm
b3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJhbGlhc0N1cnNvciIsIDExLCAzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OlByb2dyZXNzOgotICAgICAgICBtX3BsYXRmb3Jt
Q3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoInByb2dyZXNzQ3Vyc29yIiwgMywg
MikpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJwcm9ncmVz
c0N1cnNvciIsIDMsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Tm9Ecm9w
OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3Io
Im5vRHJvcEN1cnNvciIsIDMsIDEpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtO
YW1lZEN1cnNvcigibm9Ecm9wQ3Vyc29yIiwgMywgMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ3Vyc29yOjpDb3B5OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihs
ZWFrTmFtZWRDdXJzb3IoImNvcHlDdXJzb3IiLCAzLCAyKSk7CisgICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoImNvcHlDdXJzb3IiLCAzLCAyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDdXJzb3I6Ok5vbmU6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBI
YXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm9uZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAg
bV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigibm9uZUN1cnNvciIsIDcsIDcpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Tm90QWxsb3dlZDoKLSAgICAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJub3RBbGxvd2VkQ3Vy
c29yIiwgMTEsIDExKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJz
b3IoIm5vdEFsbG93ZWRDdXJzb3IiLCAxMSwgMTEpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEN1cnNvcjo6Wm9vbUluOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihs
ZWFrTmFtZWRDdXJzb3IoInpvb21JbkN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigiem9vbUluQ3Vyc29yIiwgNywgNyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpab29tT3V0OgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoInpvb21PdXRDdXJzb3IiLCA3LCA3KSk7
CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoInpvb21PdXRDdXJz
b3IiLCA3LCA3KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OkdyYWI6Ci0gICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKFtOU0N1cnNvciBvcGVuSGFuZEN1cnNv
cl0pOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gW05TQ3Vyc29yIG9wZW5IYW5kQ3Vyc29y
XTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OkdyYWJiaW5nOgotICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3IgY2xvc2VkSGFuZEN1cnNvcl0p
OworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gW05TQ3Vyc29yIGNsb3NlZEhhbmRDdXJzb3Jd
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Q3VzdG9tOgotICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbldpdGhOU1JlbGVhc2UoY3JlYXRlQ3VzdG9tQ3Vyc29y
KG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCkpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
Y3JlYXRlQ3VzdG9tQ3Vyc29yKG1faW1hZ2UuZ2V0KCksIG1faG90U3BvdCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIH0KQEAgLTIwMSw3ICsyMDAsNyBAQCBDdXJzb3I6OkN1cnNvcihjb25zdCBD
dXJzb3ImIG90aGVyKQogICAgIDogbV90eXBlKG90aGVyLm1fdHlwZSkKICAgICAsIG1faW1hZ2Uo
b3RoZXIubV9pbWFnZSkKICAgICAsIG1faG90U3BvdChvdGhlci5tX2hvdFNwb3QpCi0gICAgLCBt
X3BsYXRmb3JtQ3Vyc29yKEhhcmRSZXRhaW4ob3RoZXIubV9wbGF0Zm9ybUN1cnNvcikpCisgICAg
LCBtX3BsYXRmb3JtQ3Vyc29yKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpCiB7CiB9CiAKQEAgLTIx
MCwxNiArMjA5LDE4IEBAIEN1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiAK
ICAgICBtX3R5cGUgPSBvdGhlci5tX3R5cGU7CiAgICAgbV9pbWFnZSA9IG90aGVyLm1faW1hZ2U7
CiAgICAgbV9ob3RTcG90ID0gb3RoZXIubV9ob3RTcG90OwotCi0gICAgSGFyZFJldGFpbihvdGhl
ci5tX3BsYXRmb3JtQ3Vyc29yKTsKLSAgICBIYXJkUmVsZWFzZShtX3BsYXRmb3JtQ3Vyc29yKTsK
ICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gb3RoZXIubV9wbGF0Zm9ybUN1cnNvcjsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKIEN1cnNvcjo6fkN1cnNvcigpCiB7Ci0gICAgSGFyZFJlbGVhc2UobV9w
bGF0Zm9ybUN1cnNvcik7Cit9CisKK05TQ3Vyc29yICpDdXJzb3I6OnBsYXRmb3JtQ3Vyc29yKCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVQbGF0Zm9ybUN1cnNvcigpOworICAgIHJldHVybiBtX3BsYXRm
b3JtQ3Vyc29yLmdldCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL21hYy9Gb3VuZGF0aW9uRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvRm91bmRhdGlvbkV4dHJhcy5oCShyZXZpc2lvbiA2Nzk1OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vbWFjL0ZvdW5kYXRpb25FeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiw1MCArMjYsMTUgQEAKICNpbXBvcnQgPENvcmVGb3VuZGF0aW9uL0NGQmFzZS5oPgogI2lt
cG9ydCA8Rm91bmRhdGlvbi9OU09iamVjdC5oPgogCi0vLyBuaWwtY2hlY2tlZCBDRlJldGFpbi9D
RlJlbGVhc2UgY292ZXJzIGZvciBPYmplY3RpdmUtQyBpZHMKLQotLy8gVXNlIENGUmV0YWluLCBD
RlJlbGVhc2UsIEhhcmRSZXRhaW4sIG9yIEhhcmRSZWxlYXNlIGluc3RlYWQgb2YKLS8vIC1bTlNP
YmplY3QgcmV0YWluXSBhbmQgLVtOU09iamVjdCByZWxlYXNlXSBpZiB5b3Ugd2FudCB0byBzdG9y
ZQotLy8gYSBwb2ludGVyIHRvIGFuIE9iamVjdGl2ZS1DIG9iamVjdCBpbnRvIG1lbW9yeSB0aGF0
IHdvbid0Ci0vLyBiZSBzY2FubmVkIGZvciBHQywgbGlrZSBhIEMrKyBvYmplY3QuCi0KLXN0YXRp
YyBpbmxpbmUgaWQgSGFyZFJldGFpbihpZCBvYmopCi17Ci0gICAgaWYgKG9iaikgQ0ZSZXRhaW4o
b2JqKTsKLSAgICByZXR1cm4gb2JqOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgSGFyZFJlbGVh
c2UoaWQgb2JqKQotewotICAgIGlmIChvYmopIENGUmVsZWFzZShvYmopOwotfQotCi0vLyBBcyBp
ZiBDRiBhbmQgRm91bmRhdGlvbiBoYWQgbG9naWNhbGx5IHNlcGFyYXRlIHJlZmVyZW5jZSBjb3Vu
dHMsCi0vLyB0aGlzIGZ1bmN0aW9uIGZpcnN0IGluY3JlbWVudHMgdGhlIENGIHJldGFpbiBjb3Vu
dCwgYW5kIHRoZW4KLS8vIGRlY3JlbWVudHMgdGhlIE5TIHJldGFpbiBjb3VudC4gVGhpcyBpcyBu
ZWVkZWQgdG8gaGFuZGxlIGNhc2VzIHdoZXJlCi0vLyAtcmV0YWluLy1yZWxlYXNlIGFyZW4ndCBl
cXVpdmFsZW50IHRvIENGUmV0YWluL0hhcmRSZWxlYXNlLCBzdWNoIGFzCi0vLyB3aGVuIEdDIGlz
IHVzZWQuCi0KLS8vIFVzZSBIYXJkUmV0YWluV2l0aE5TUmVsZWFzZSBhZnRlciBhbGxvY2F0aW5n
IGFuZCBpbml0aWFsaXppbmcgYSBOU09iamVjdAotLy8gaWYgeW91IHdhbnQgdG8gc3RvcmUgYSBw
b2ludGVyIHRvIHRoYXQgb2JqZWN0IGludG8gbWVtb3J5IHRoYXQgd29uJ3QKLS8vIGJlIHNjYW5u
ZWQgZm9yIEdDLCBsaWtlIGEgQysrIG9iamVjdC4KLQotc3RhdGljIGlubGluZSBpZCBIYXJkUmV0
YWluV2l0aE5TUmVsZWFzZShpZCBvYmopCi17Ci0gICAgSGFyZFJldGFpbihvYmopOwotICAgIFtv
YmogcmVsZWFzZV07Ci0gICAgcmV0dXJuIG9iajsKLX0KLQogLy8gVXNlIEhhcmRBdXRvcmVsZWFz
ZSB0byByZXR1cm4gYW4gb2JqZWN0IG1hZGUgYnkgYSBDb3JlRm91bmRhdGlvbgogLy8gImNyZWF0
ZSIgb3IgImNvcHkiIGZ1bmN0aW9uIGFzIGFuIGF1dG9yZWxlYXNlZCBhbmQgZ2FyYmFnZSBjb2xs
ZWN0ZWQKIC8vIG9iamVjdC4gQ0Ygb2JqZWN0cyBuZWVkIHRvIGJlICJtYWRlIGNvbGxlY3RhYmxl
IiBmb3IgYXV0b3JlbGVhc2UgdG8gd29yawogLy8gcHJvcGVybHkgdW5kZXIgR0MuCiAKLXN0YXRp
YyBpbmxpbmUgaWQgSGFyZEF1dG9yZWxlYXNlKENGVHlwZVJlZiBvYmopCitzdGF0aWMgaW5saW5l
IGlkIEhhcmRBdXRvcmVsZWFzZShDRlR5cGVSZWYgb2JqZWN0KQogewotICAgIGlmIChvYmopCi0g
ICAgICAgIENGTWFrZUNvbGxlY3RhYmxlKG9iaik7Ci0gICAgWyhpZClvYmogYXV0b3JlbGVhc2Vd
OwotICAgIHJldHVybiAoaWQpb2JqOworICAgIGlmIChvYmplY3QpCisgICAgICAgIENGTWFrZUNv
bGxlY3RhYmxlKG9iamVjdCk7CisgICAgWyhpZClvYmplY3QgYXV0b3JlbGVhc2VdOworICAgIHJl
dHVybiAoaWQpb2JqZWN0OwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHJldmlz
aW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM3NSw3ICszNzUsNyBAQCBzdGF0aWMgY29uc3QgaW50KiBidXR0b25NYXJnaW5z
KE5TQ29udHJvCiAgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOwogfQogCi1zdGF0aWMg
dm9pZCBzZXR1cEJ1dHRvbkNlbGwoTlNCdXR0b25DZWxsIComYnV0dG9uQ2VsbCwgQ29udHJvbFBh
cnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3Qs
IGZsb2F0IHpvb21GYWN0b3IpCitzdGF0aWMgTlNCdXR0b25DZWxsICpzZXRVcEJ1dHRvbkNlbGwo
TlNCdXR0b25DZWxsICpidXR0b25DZWxsLCBDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVz
IHN0YXRlcywgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikKIHsK
ICAgICBpZiAoIWJ1dHRvbkNlbGwpIHsKICAgICAgICAgYnV0dG9uQ2VsbCA9IFtbTlNCdXR0b25D
ZWxsIGFsbG9jXSBpbml0XTsKQEAgLTQwNCwxNCArNDA0LDI1IEBAIHN0YXRpYyB2b2lkIHNldHVw
QnV0dG9uQ2VsbChOU0J1dHRvbkNlbGwKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0
ZXMgd2UgcmVzcG9uZCB0by4KICAgICB1cGRhdGVTdGF0ZXMoYnV0dG9uQ2VsbCwgc3RhdGVzKTsK
KworICAgIHJldHVybiBidXR0b25DZWxsOwogfQogICAgIAorc3RhdGljIE5TQnV0dG9uQ2VsbCAq
bm9uRGVmYXVsdEJ1dHRvbihDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywg
Y29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikKK3sKKyAgICBzdGF0
aWMgTlNCdXR0b25DZWxsICpjZWxsID0gc2V0VXBCdXR0b25DZWxsKGNlbGwsIHBhcnQsIHN0YXRl
cywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7ICAgIAorICAgIHJldHVybiBjZWxsOworfQorCitz
dGF0aWMgTlNCdXR0b25DZWxsICpkZWZhdWx0QnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQsIENvbnRy
b2xTdGF0ZXMgc3RhdGVzLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFj
dG9yKQoreworICAgIHN0YXRpYyBOU0J1dHRvbkNlbGwgKmNlbGwgPSBzZXRVcEJ1dHRvbkNlbGwo
Y2VsbCwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsgICAgCisgICAgcmV0
dXJuIGNlbGw7Cit9CisKIHN0YXRpYyBOU0J1dHRvbkNlbGwgKmJ1dHRvbihDb250cm9sUGFydCBw
YXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxv
YXQgem9vbUZhY3RvcikKIHsKLSAgICBib29sIGlzRGVmYXVsdCA9IHN0YXRlcyAmIERlZmF1bHRT
dGF0ZTsKLSAgICBzdGF0aWMgTlNCdXR0b25DZWxsICpjZWxsc1syXTsKLSAgICBzZXR1cEJ1dHRv
bkNlbGwoY2VsbHNbaXNEZWZhdWx0XSwgcGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFj
dG9yKTsgICAgCi0gICAgcmV0dXJuIGNlbGxzW2lzRGVmYXVsdF07CisgICAgcmV0dXJuICgoc3Rh
dGVzICYgRGVmYXVsdFN0YXRlKSA/IG5vbkRlZmF1bHRCdXR0b24gOiBkZWZhdWx0QnV0dG9uKShw
YXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBw
YWludEJ1dHRvbihDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29t
RmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvV2lkZ2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQkocmV2aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDcgKzM1LDYgQEAKICNpbXBvcnQgIkN1cnNvci5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIK
ICNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQg
IkZyYW1lLmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIk5vdEltcGxl
bWVudGVkLmgiCkBAIC0xMDAsNyArOTksNiBAQCBXaWRnZXQ6OldpZGdldChOU1ZpZXcgKnZpZXcp
CiAKIFdpZGdldDo6fldpZGdldCgpCiB7Ci0gICAgcmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCk7CiAg
ICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtMzU0LDE2ICszNTIsMTggQEAgSW50UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaQogICAgIHJldHVybiBwb2ludDsKIH0KIAotdm9p
ZCBXaWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCitOU1ZpZXcgKldpZGdldDo6cGxhdGZv
cm1XaWRnZXQoKSBjb25zdAogewotICAgIEhhcmRSZWxlYXNlKG1fd2lkZ2V0KTsKLSAgICBtX2Rh
dGEtPnByZXZpb3VzVmlzaWJsZVJlY3QgPSBOU1plcm9SZWN0OworICAgIHJldHVybiBtX3dpZGdl
dC5nZXQoKTsKIH0KIAotdm9pZCBXaWRnZXQ6OnJldGFpblBsYXRmb3JtV2lkZ2V0KCkKK3ZvaWQg
V2lkZ2V0OjpzZXRQbGF0Zm9ybVdpZGdldChOU1ZpZXcgKndpZGdldCkKIHsKLSAgICBIYXJkUmV0
YWluKG1fd2lkZ2V0KTsKKyAgICBpZiAod2lkZ2V0ID09IG1fd2lkZ2V0KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3dpZGdldCA9IHdpZGdldDsKKyAgICBtX2RhdGEtPnByZXZpb3VzVmlzaWJs
ZVJlY3QgPSBOU1plcm9SZWN0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJlc3BvbnNlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2ViQ29yZVVSTFJlc3BvbnNl
Lm1tCShyZXZpc2lvbiA2Nzk1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvV2Vi
Q29yZVVSTFJlc3BvbnNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkNvcmVVUkxSZXNwb25zZS5oIgogCi0jaW1wb3J0
ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW1w
b3J0IDxvYmpjL29iamMtY2xhc3MuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0z
MjcsMTIgKzMyNiwxMiBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpjcmVhdGVFeHRlbnNpb25Ub01J
CiAgICAgXTsKIH0KIAotc3RhdGljIE5TU3RyaW5nICptaW1lVHlwZUZyb21VVElUcmVlKENGU3Ry
aW5nUmVmIHV0aSkKK3N0YXRpYyBSZXRhaW5QdHI8TlNTdHJpbmc+IG1pbWVUeXBlRnJvbVVUSVRy
ZWUoQ0ZTdHJpbmdSZWYgdXRpKQogewogICAgIC8vIENoZWNrIGlmIHRoaXMgVVRJIGhhcyBhIE1J
TUUgdHlwZS4KICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG1pbWVUeXBlKEFkb3B0Q0YsIFVU
VHlwZUNvcHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3ModXRpLCBrVVRUYWdDbGFzc01JTUVUeXBlKSk7
CiAgICAgaWYgKG1pbWVUeXBlKQotICAgICAgICByZXR1cm4gKE5TU3RyaW5nICopSGFyZEF1dG9y
ZWxlYXNlKG1pbWVUeXBlLnJlbGVhc2VSZWYoKSk7CisgICAgICAgIHJldHVybiAoTlNTdHJpbmcg
KiltaW1lVHlwZS5nZXQoKTsKICAgICAKICAgICAvLyBJZiBub3QsIHdhbGsgdGhlIGFuY2VzdG9y
eSBvZiB0aGlzIFVUSSB2aWEgaXRzICJDb25mb3Jtc1RvIiB0YWdzIGFuZCByZXR1cm4gdGhlIGZp
cnN0IE1JTUUgdHlwZSB3ZSBmaW5kLgogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRl
Y2woQWRvcHRDRiwgVVRUeXBlQ29weURlY2xhcmF0aW9uKHV0aSkpOwpAQCAtMzU0LDcgKzM1Myw3
IEBAIHN0YXRpYyBOU1N0cmluZyAqbWltZVR5cGVGcm9tVVRJVHJlZShDRlMKICAgICAgICAgICAg
IGlmIChDRkdldFR5cGVJRChvYmplY3QpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmIChOU1N0cmluZyAqbWltZVR5cGUg
PSBtaW1lVHlwZUZyb21VVElUcmVlKChDRlN0cmluZ1JlZilvYmplY3QpKQorICAgICAgICAgICAg
aWYgKFJldGFpblB0cjxOU1N0cmluZz4gbWltZVR5cGUgPSBtaW1lVHlwZUZyb21VVElUcmVlKChD
RlN0cmluZ1JlZilvYmplY3QpKQogICAgICAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTM2NiwxMyArMzY1LDEzIEBAIHN0YXRpYyBOU1N0cmluZyAqbWlt
ZVR5cGVGcm9tVVRJVHJlZShDRlMKIAogLSh2b2lkKWFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkK
IHsKLSAgICBOU1N0cmluZyAqcmVzdWx0ID0gW3NlbGYgTUlNRVR5cGVdOwotICAgIE5TU3RyaW5n
ICpvcmlnaW5hbFJlc3VsdCA9IHJlc3VsdDsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHJlc3Vs
dCA9IFtzZWxmIE1JTUVUeXBlXTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IG9yaWdpbmFsUmVz
dWx0ID0gcmVzdWx0OwogCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAvLyBXaGVuIGNv
bnRlbnQgc25pZmZpbmcgaXMgZGlzYWJsZWQsIFRpZ2VyJ3MgQ0ZOZXR3b3JrIGF1dG9tYXRpY2Fs
bHkgcmV0dXJucyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0gZm9yIGNlcnRhaW4KICAgICAvLyBl
eHRlbnNpb25zIGV2ZW4gd2hlbiBzY291cmluZyB0aGUgVVRJIG1hcHMgd291bGQgZW5kIHVwIHdp
dGggYSBiZXR0ZXIgcmVzdWx0LCBzbyB3ZSdsbCBnaXZlIGEgY2hhbmNlIGZvciB0aGF0IHRvIGhh
cHBlbi4KLSAgICBpZiAoW1tzZWxmIFVSTF0gaXNGaWxlVVJMXSAmJiBbcmVzdWx0IGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmU6QCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iXSA9PSBOU09yZGVyZWRT
YW1lKQorICAgIGlmIChbW3NlbGYgVVJMXSBpc0ZpbGVVUkxdICYmIFtyZXN1bHQuZ2V0KCkgY2Fz
ZUluc2Vuc2l0aXZlQ29tcGFyZTpAImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdID09IE5TT3Jk
ZXJlZFNhbWUpCiAgICAgICAgIHJlc3VsdCA9IG5pbDsKICNlbmRpZgogCkBAIC00MDMsNyArNDAy
LDcgQEAgLSh2b2lkKWFkanVzdE1JTUVUeXBlSWZOZWNlc3NhcnkKICNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTMyMTk3Mj4gUGxhaW4gdGV4dCBkb2N1
bWVudCBmcm9tIEhUVFAgc2VydmVyIGRldGVjdGVkIGFzIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQogICAgIC8vIE1ha2UgdGhlIGJlc3QgZ3Vlc3Mgd2hlbiBkZWNpZGluZyBiZXR3ZWVuICJnZW5l
cmljIGJpbmFyeSIgYW5kICJnZW5lcmljIHRleHQiIHVzaW5nIGEgdGFibGUgb2Yga25vd24gYmlu
YXJ5IE1JTUUgdHlwZXMuCi0gICAgaWYgKFtyZXN1bHQgaXNFcXVhbFRvU3RyaW5nOkAiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIl0gJiYgW3NlbGYgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihhbGxIZWFkZXJGaWVsZHMpXSAmJiBbW1tzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Io
YWxsSGVhZGVyRmllbGRzKV0gb2JqZWN0Rm9yS2V5OkAiQ29udGVudC1UeXBlIl0gaGFzUHJlZml4
OkAidGV4dC9wbGFpbiJdKSB7CisgICAgaWYgKFtyZXN1bHQuZ2V0KCkgaXNFcXVhbFRvU3RyaW5n
OkAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0gJiYgW3NlbGYgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihhbGxIZWFkZXJGaWVsZHMpXSAmJiBbW1tzZWxmIHBlcmZvcm1TZWxlY3RvcjpA
c2VsZWN0b3IoYWxsSGVhZGVyRmllbGRzKV0gb2JqZWN0Rm9yS2V5OkAiQ29udGVudC1UeXBlIl0g
aGFzUHJlZml4OkAidGV4dC9wbGFpbiJdKSB7CiAgICAgICAgIHN0YXRpYyBOU1NldCAqYmluYXJ5
RXh0ZW5zaW9ucyA9IGNyZWF0ZUJpbmFyeUV4dGVuc2lvbnNTZXQoKTsKICAgICAgICAgaWYgKCFb
YmluYXJ5RXh0ZW5zaW9ucyBjb250YWluc09iamVjdDpbW1tzZWxmIHN1Z2dlc3RlZEZpbGVuYW1l
XSBwYXRoRXh0ZW5zaW9uXSBsb3dlcmNhc2VTdHJpbmddXSkKICAgICAgICAgICAgIHJlc3VsdCA9
IEAidGV4dC9wbGFpbiI7CkBAIC00MTMsMTIgKzQxMiwxMiBAQCAtKHZvaWQpYWRqdXN0TUlNRVR5
cGVJZk5lY2Vzc2FyeQogCiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAogICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81NTM5ODI0PgotICAgIGlmIChbcmVzdWx0IGlzRXF1
YWxUb1N0cmluZzpAInRleHQveG1sIl0pCisgICAgaWYgKFtyZXN1bHQuZ2V0KCkgaXNFcXVhbFRv
U3RyaW5nOkAidGV4dC94bWwiXSkKICAgICAgICAgcmVzdWx0ID0gQCJhcHBsaWNhdGlvbi94bWwi
OwogI2VuZGlmCiAKICAgICBpZiAocmVzdWx0ICE9IG9yaWdpbmFsUmVzdWx0KQotICAgICAgICBb
c2VsZiBfc2V0TUlNRVR5cGU6cmVzdWx0XTsKKyAgICAgICAgW3NlbGYgX3NldE1JTUVUeXBlOnJl
c3VsdC5nZXQoKV07CiB9CiAKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2Nzk4OCkKKysrIFdlYktp
dC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDkt
MjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBzb21lIE9iamVjdGl2ZS1DIEdDIHByb2Js
ZW1zIGFuZCB1c2UgUmV0YWluUHRyIGluc3RlYWQgb2YgSGFyZFJldGFpbi9SZWxlYXNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjIyMAorCisgICAg
ICAgICogTWlzYy9XZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLm06CisgICAgICAgIChzZXRNZXRhRGF0
YSk6IFVzZSBDRlJlbGVhc2UgaW5zdGVhZCBvZiBIYXJkUmVsZWFzZS4KKyAgICAgICAgKC1bTlNG
aWxlTWFuYWdlciBfd2Via2l0X3NldE1ldGFkYXRhVVJMOnJlZmVycmVyOmF0UGF0aDpdKTogVXNl
IENGU3RyaW5nQ3JlYXRlQ29weQorICAgICAgICBpbnN0ZWFkIG9mIC1bTlNPYmplY3QgY29weV0g
Y29tYmluZWQgd2l0aCBIYXJkUmV0YWluV2l0aE5TUmVsZWFzZS4KKwogMjAxMC0wOS0yMSAgQW5k
eSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvTWlzYy9XZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLm0JKHJl
dmlzaW9uIDY3OTU5KQorKysgV2ViS2l0L21hYy9NaXNjL1dlYk5TRmlsZU1hbmFnZXJFeHRyYXMu
bQkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2ltcG9ydCAiV2ViS2l0TlNTdHJp
bmdFeHRyYXMuaCIKICNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMu
aD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8c3lzL3N0YXQu
aD4KIApAQCAtODcsMTkgKzg2LDIyIEBAIC0gKE5TU3RyaW5nICopX3dlYmtpdF9jYXJib25QYXRo
Rm9yUGF0aDoKIAogdHlwZWRlZiBzdHJ1Y3QgTWV0YURhdGFJbmZvCiB7Ci0gICAgTlNTdHJpbmcg
KlVSTFN0cmluZzsKLSAgICBOU1N0cmluZyAqcmVmZXJyZXI7Ci0gICAgTlNTdHJpbmcgKnBhdGg7
CisgICAgQ0ZTdHJpbmdSZWYgVVJMU3RyaW5nOworICAgIENGU3RyaW5nUmVmIHJlZmVycmVyOwor
ICAgIENGU3RyaW5nUmVmIHBhdGg7CiB9IE1ldGFEYXRhSW5mbzsKIAogc3RhdGljIHZvaWQgKnNl
dE1ldGFEYXRhKHZvaWQqIGNvbnRleHQpCiB7CiAgICAgTWV0YURhdGFJbmZvICppbmZvID0gKE1l
dGFEYXRhSW5mbyAqKWNvbnRleHQ7Ci0gICAgV0tTZXRNZXRhZGF0YVVSTChpbmZvLT5VUkxTdHJp
bmcsIGluZm8tPnJlZmVycmVyLCBpbmZvLT5wYXRoKTsKLSAgICAKLSAgICBIYXJkUmVsZWFzZShp
bmZvLT5VUkxTdHJpbmcpOwotICAgIEhhcmRSZWxlYXNlKGluZm8tPnJlZmVycmVyKTsKLSAgICBI
YXJkUmVsZWFzZShpbmZvLT5wYXRoKTsKKyAgICBXS1NldE1ldGFkYXRhVVJMKChOU1N0cmluZyAq
KWluZm8tPlVSTFN0cmluZywgKE5TU3RyaW5nICopaW5mby0+cmVmZXJyZXIsIChOU1N0cmluZyAq
KWluZm8tPnBhdGgpOworCisgICAgaWYgKGluZm8tPlVSTFN0cmluZykKKyAgICAgICAgQ0ZSZWxl
YXNlKGluZm8tPlVSTFN0cmluZyk7CisgICAgaWYgKGluZm8tPnJlZmVycmVyKQorICAgICAgICBD
RlJlbGVhc2UoaW5mby0+cmVmZXJyZXIpOworICAgIGlmIChpbmZvLT5wYXRoKQorICAgICAgICBD
RlJlbGVhc2UoaW5mby0+cGF0aCk7CiAgICAgCiAgICAgZnJlZShpbmZvKTsKICAgICByZXR1cm4g
MDsKQEAgLTEyNCw5ICsxMjYsOSBAQCAtICh2b2lkKV93ZWJraXRfc2V0TWV0YWRhdGFVUkw6KE5T
U3RyaW5nCiAKICAgICBNZXRhRGF0YUluZm8gKmluZm8gPSBtYWxsb2Moc2l6ZW9mKE1ldGFEYXRh
SW5mbykpOwogICAgIAotICAgIGluZm8tPlVSTFN0cmluZyA9IEhhcmRSZXRhaW5XaXRoTlNSZWxl
YXNlKFtVUkxTdHJpbmcgY29weV0pOwotICAgIGluZm8tPnJlZmVycmVyID0gSGFyZFJldGFpbldp
dGhOU1JlbGVhc2UoW3JlZmVycmVyIGNvcHldKTsKLSAgICBpbmZvLT5wYXRoID0gSGFyZFJldGFp
bldpdGhOU1JlbGVhc2UoW3BhdGggY29weV0pOworICAgIGluZm8tPlVSTFN0cmluZyA9IENGU3Ry
aW5nQ3JlYXRlQ29weSgwLCAoQ0ZTdHJpbmdSZWYpVVJMU3RyaW5nKTsKKyAgICBpbmZvLT5yZWZl
cnJlciA9IENGU3RyaW5nQ3JlYXRlQ29weSgwLCAoQ0ZTdHJpbmdSZWYpcmVmZXJyZXIpOworICAg
IGluZm8tPnBhdGggPSBDRlN0cmluZ0NyZWF0ZUNvcHkoMCwgKENGU3RyaW5nUmVmKXBhdGgpOwog
CiAgICAgcHRocmVhZF9jcmVhdGUoJnRpZCwgJmF0dHIsIHNldE1ldGFEYXRhLCBpbmZvKTsKICAg
ICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68312</attachid>
            <date>2010-09-21 17:04:58 -0700</date>
            <delta_ts>2010-09-22 09:43:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46220-20100921170457.patch</filename>
            <type>text/plain</type>
            <size>40151</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzk4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODAgQEAKKzIwMTAtMDktMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBz
b21lIE9iamVjdGl2ZS1DIEdDIHByb2JsZW1zIGFuZCB1c2UgUmV0YWluUHRyIGluc3RlYWQgb2Yg
SGFyZFJldGFpbi9SZWxlYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NjIyMAorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IFVwZGF0ZWQuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmg6IFVzZSBhIFJldGFp
blB0ciBmb3IgbV9saXN0ZW5lciwgc2luY2UgdGhhdAorICAgICAgICB3aWxsIGRvIGEgQ0ZSZXRh
aW4sIHdoaWNoIGlzIHJpZ2h0IGZvciBHQyByYXRoZXIgdGhhbiBhbiAtW05TT2JqZWN0IHJldGFp
bl0sCisgICAgICAgIHdoaWNoIGlzIG5vdC4KKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL09iakNF
dmVudExpc3RlbmVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6T2JqQ0V2ZW50TGlzdGVuZXI6Ok9i
akNFdmVudExpc3RlbmVyKTogUmVtb3ZlZCBleHBsaWNpdCByZXRhaW4uCisgICAgICAgIChXZWJD
b3JlOjpPYmpDRXZlbnRMaXN0ZW5lcjo6fk9iakNFdmVudExpc3RlbmVyKTogUmVtb3ZlZCBleHBs
aWNpdCByZWxlYXNlIGFuZAorICAgICAgICBhZGRlZCBnZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6
Ok9iakNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6IEFkZGVkIGdldCgpOworCisgICAgICAg
ICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAgICAgKE9iamNJbnN0YW5jZTo6
c2V0R2xvYmFsRXhjZXB0aW9uKTogUmVtb3ZlZCB1bm5lZWRlZCBIYXJkUmVsZWFzZSBhbmQgSGFy
ZFJldGFpbgorICAgICAgICBjYWxscyBzaW5jZSB0aGlzIGlzIGEgZ2xvYmFsIGFuZCB0aGUgY29t
cGlsZXIgYWxyZWFkeSBoYW5kbGVzIHRoaXMgY29ycmVjdGx5CisgICAgICAgIGluIE9iamVjdGl2
ZS1DKysgZmlsZXMuIFdlIHJlbHkgb24gdGhhdCBpbiBtYW55IG90aGVyIGNsYXNzZXMuCisgICAg
ICAgIChPYmpjSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZSk6IERpdHRv
LgorCisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmg6IFVzZSBSZXRhaW5QdHIgZm9yIFBsYXRm
b3JtQ3Vyc29yIG9uIE1hYy4KKworICAgICAgICAqIHBsYXRmb3JtL0N1cnNvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJzb3I6OnBsYXRmb3JtQ3Vyc29yKTogTW92ZWQgdGhpcyB0byBDdXJz
b3JNYWMgZm9yIHRoZSBNYWMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuY3BwOiBSZW1v
dmVkIHJldGFpbi9yZWxlYXNlUGxhdGZvcm1XaWRnZXQgYW5kIG1hZGUgdGhlbQorICAgICAgICBi
b3RoIGlubGluZXMgaW4gdGhlIGhlYWRlciBmaWxlLgorCisgICAgICAgICogcGxhdGZvcm0vV2lk
Z2V0Lmg6IEZpeGVkIGluY2x1ZGVzIGFuZCBhZGRlZCBhbiBpbmNsdWRlIG9mIFJldGFpblB0ci4K
KyAgICAgICAgTWFkZSBwbGF0Zm9ybVdpZGdldCBhbmQgc2V0UGxhdGZvcm1XaWRnZXQgbm9uLWlu
bGluZSBvbiB0aGUgTWFjIHBsYXRmb3JtLgorICAgICAgICBNYWRlIHJlbGVhc2VQbGF0Zm9ybVdp
ZGdldCBhbmQgcmV0YWluUGxhdGZvcm1XaWRnZXQgZW1wdHkgaW5saW5lIGZ1bmN0aW9ucworICAg
ICAgICBmb3Igbm9uLUdUSyBwbGF0Zm9ybXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW06IFJlbW92ZWQgdW5uZWVkZWQgRm91bmRhdGlvbkV4dHJhcy5oCisg
ICAgICAgIGluY2x1ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKTogdXNl
IFJldGFpblB0ciBmb3IgdGhlIHJldHVybiB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkTWFjOjpjbGVhckRhdGEpOiBVc2UgUmV0YWluUHRyLgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkTWFjOjpnZXREYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRN
YWM6OnNldERhdGEpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9DdXJzb3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21DdXJzb3IpOiBVc2UgUmV0YWluUHRy
IGZvciB0aGUgcmV0dXJuIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OmVuc3VyZVBs
YXRmb3JtQ3Vyc29yKTogUmVtb3ZlZCBhbGwgdGhlIGNhbGxzIHRvIEhhcmRSZXRhaW4KKyAgICAg
ICAgc2luY2UgbV9wbGF0Zm9ybUN1cnNvciBpcyBub3cgYSBSZXRhaW5QdHIuCisgICAgICAgIChX
ZWJDb3JlOjpDdXJzb3I6OkN1cnNvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29y
OjpvcGVyYXRvcj0pOiBEaXR0by4gQWxzbyBIYXJkUmVsZWFzZS4KKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcjo6fkN1cnNvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpwbGF0
Zm9ybUN1cnNvcik6IFVzZSBnZXQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb3Vu
ZGF0aW9uRXh0cmFzLmg6IFJlbW92ZWQgYWxsIHRoZSBmdW5jdGlvbnMgZXhjZXB0IGZvcgorICAg
ICAgICBIYXJkQXV0b3JlbGVhc2UuIExhdGVyIHdlIGNhbiByZW1vdmUgdGhhdCBvbmUgdG9vLgor
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
c2V0VXBCdXR0b25DZWxsKTogQ2hhbmdlZCB0aGlzIGZ1bmN0aW9uIHRvIGhhdmUgYSByZXR1cm4g
dmFsdWUuCisgICAgICAgIE90aGVyd2lzZSB3ZSBlbmQgdXAgdGFraW5nIGEgcG9pbnRlciAoYWN0
dWFsbHkgYSByZWZlcmVuY2UpIHRvIGEgZ2xvYmFsCisgICAgICAgIHZhcmlhYmxlLCB3aGljaCBk
b2VzIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIEdDLgorICAgICAgICAoV2ViQ29yZTo6bm9u
RGVmYXVsdEJ1dHRvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdEJ1dHRvbik6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6YnV0dG9uKTogQ2hhbmdlZCB0byBjYWxsIHR3byBz
ZXBhcmF0ZSBmdW5jdGlvbnMgd2l0aCB0d28gc2VwYXJhdGUKKyAgICAgICAgZ2xvYmFsIHZhcmlh
YmxlcyB0byBhdm9pZCB0aGUgcHJvYmxlbSB3aXRoIHBvaW50ZXJzIHRvIGdsb2JhbHMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojp+V2lkZ2V0KTogUmVtb3ZlZCB1bm5lZWRlZCBjYWxsIHRvIHJlbGVhc2VQbGF0Zm9ybVdp
ZGdldC4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6cGxhdGZvcm1XaWRnZXQpOiBOb24taW5s
aW5lIHNvIHdlIGNhbiBjb21pcGlsZSB0aGUgaGVhZGVyCisgICAgICAgIHBsYWluIG5vbi1PYmpl
Y3RpdmUtQyBDKysuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldFBsYXRmb3JtV2lkZ2V0
KTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9XZWJDb3JlVVJMUmVz
cG9uc2UubW06CisgICAgICAgIChtaW1lVHlwZUZyb21VVElUcmVlKTogVXNlIFJldGFpblB0ciBm
b3IgdGhlIHJldHVybiB0eXBlLgorICAgICAgICAoLVtOU1VSTFJlc3BvbnNlIGFkanVzdE1JTUVU
eXBlSWZOZWNlc3NhcnldKTogVXNlIFJldGFpblB0ci4KKwogMjAxMC0wOS0yMSAgVG9ueSBDaGFu
ZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIFFUIGJ1aWxkIGZp
eC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC02NTAsOCArNjUwLDcgQEAgX19aTjdXZWJDb3JlNkxvYWRlcjIw
c2VydmVQZW5kaW5nUmVxdWVzdAogX19aTjdXZWJDb3JlNldpZGdldDEyc2V0RnJhbWVSZWN0RVJL
TlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmU2V2lkZ2V0MTZyZW1vdmVGcm9tUGFyZW50RXYKIF9f
Wk43V2ViQ29yZTZXaWRnZXQxN2ZyYW1lUmVjdHNDaGFuZ2VkRXYKLV9fWk43V2ViQ29yZTZXaWRn
ZXQyMHJldGFpblBsYXRmb3JtV2lkZ2V0RXYKLV9fWk43V2ViQ29yZTZXaWRnZXQyMXJlbGVhc2VQ
bGF0Zm9ybVdpZGdldEV2CitfX1pON1dlYkNvcmU2V2lkZ2V0MTdzZXRQbGF0Zm9ybVdpZGdldEVQ
Nk5TVmlldwogX19aTjdXZWJDb3JlNldpZGdldDRoaWRlRXYKIF9fWk43V2ViQ29yZTZXaWRnZXQ0
c2hvd0V2CiBfX1pON1dlYkNvcmU2V2lkZ2V0NXBhaW50RVBOU18xNUdyYXBoaWNzQ29udGV4dEVS
S05TXzdJbnRSZWN0RQpAQCAtMTAzNiw2ICsxMDM1LDcgQEAgX19aTks3V2ViQ29yZTZFZGl0b3I3
Y2FuQ29weUV2CiBfX1pOSzdXZWJDb3JlNkVkaXRvcjdjYW5FZGl0RXYKIF9fWk5LN1dlYkNvcmU2
RWRpdG9yOGNhblBhc3RlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yOWNhbkRlbGV0ZUV2CitfX1pO
SzdXZWJDb3JlNldpZGdldDE0cGxhdGZvcm1XaWRnZXRFdgogX19aTks3V2ViQ29yZTZXaWRnZXQy
M2NvbnZlcnRUb0NvbnRhaW5pbmdWaWV3RVJLTlNfN0ludFJlY3RFCiBfX1pOSzdXZWJDb3JlNldp
ZGdldDIzY29udmVydFRvQ29udGFpbmluZ1ZpZXdFUktOU184SW50UG9pbnRFCiBfX1pOSzdXZWJD
b3JlNldpZGdldDI1Y29udmVydEZyb21Db250YWluaW5nVmlld0VSS05TXzdJbnRSZWN0RQpAQCAt
MTE0NCw3ICsxMTQ0LDYgQEAgX3drU2lnbmFsQ0ZSZWFkU3RyZWFtRW5kCiBfd2tTaWduYWxDRlJl
YWRTdHJlYW1FcnJvcgogX3drU2lnbmFsQ0ZSZWFkU3RyZWFtSGFzQnl0ZXMKIAotCiAjaWYgRU5B
QkxFKDNEX1JFTkRFUklORykKIF9XZWJDb3JlSGFzM0RSZW5kZXJpbmcKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDY3OTU5
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDggQEAKICNkZWZpbmUgT2JqQ0V2ZW50TGlzdGVuZXJfaAogCiAj
aW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAog
QHByb3RvY29sIERPTUV2ZW50TGlzdGVuZXI7CiAKQEAgLTU2LDcgKzU2LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXZlbnQqKTsKIAotICAgICAgICBpZCA8RE9NRXZlbnRMaXN0ZW5lcj4g
bV9saXN0ZW5lcjsKKyAgICAgICAgdHlwZWRlZiBpZCA8RE9NRXZlbnRMaXN0ZW5lcj4gT2JqQ0xp
c3RlbmVyOworICAgICAgICBSZXRhaW5QdHI8T2JqQ0xpc3RlbmVyPiBtX2xpc3RlbmVyOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvb2Jq
Yy9PYmpDRXZlbnRMaXN0ZW5lci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29i
amMvT2JqQ0V2ZW50TGlzdGVuZXIubW0JKHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL09iakNFdmVudExpc3RlbmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEphbWVzIEcuIFNwZXRoIChzcGV0
aEBlbmQuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWlu
aWdAZ21haWwuY29tKQogICoKQEAgLTU4LDcgKzU4LDcgQEAgUGFzc1JlZlB0cjxPYmpDRXZlbnRM
aXN0ZW5lcj4gT2JqQ0V2ZW50TAogCiBPYmpDRXZlbnRMaXN0ZW5lcjo6T2JqQ0V2ZW50TGlzdGVu
ZXIoaWQgPERPTUV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKQogICAgIDogRXZlbnRMaXN0ZW5lcihP
YmpDRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgLCBtX2xpc3RlbmVyKFtsaXN0ZW5lciByZXRhaW5d
KQorICAgICwgbV9saXN0ZW5lcihsaXN0ZW5lcikKIHsKICAgICBMaXN0ZW5lck1hcCogbWFwID0g
bGlzdGVuZXJNYXA7CiAgICAgaWYgKCFtYXApIHsKQEAgLTcwLDEzICs3MCwxMyBAQCBPYmpDRXZl
bnRMaXN0ZW5lcjo6T2JqQ0V2ZW50TGlzdGVuZXIoaWQgCiAKIE9iakNFdmVudExpc3RlbmVyOjp+
T2JqQ0V2ZW50TGlzdGVuZXIoKQogewotICAgIGxpc3RlbmVyTWFwLT5yZW1vdmUobV9saXN0ZW5l
cik7Ci0gICAgW21fbGlzdGVuZXIgcmVsZWFzZV07CisgICAgbGlzdGVuZXJNYXAtPnJlbW92ZSht
X2xpc3RlbmVyLmdldCgpKTsKIH0KIAogdm9pZCBPYmpDRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50KiBldmVudCkKIHsKLSAgICBbbV9saXN0
ZW5lciBoYW5kbGVFdmVudDpraXQoZXZlbnQpXTsKKyAgICBPYmpDTGlzdGVuZXIgbGlzdGVuZXIg
PSBtX2xpc3RlbmVyLmdldCgpOworICAgIFtsaXN0ZW5lciBoYW5kbGVFdmVudDpraXQoZXZlbnQp
XTsKIH0KIAogYm9vbCBPYmpDRXZlbnRMaXN0ZW5lcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lcikKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0J
KHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW1wb3J0ICJvYmpjX2luc3RhbmNl
LmgiCiAKICNpbXBvcnQgInJ1bnRpbWVfbWV0aG9kLmgiCi0jaW1wb3J0ICJGb3VuZGF0aW9uRXh0
cmFzLmgiCiAjaW1wb3J0ICJPYmpDUnVudGltZU9iamVjdC5oIgogI2ltcG9ydCAiV2ViU2NyaXB0
T2JqZWN0LmgiCiAjaW1wb3J0IDxvYmpjL29iamMtYXV0by5oPgpAQCAtNzAsMTAgKzY5LDcgQEAg
UnVudGltZU9iamVjdCogT2JqY0luc3RhbmNlOjpuZXdSdW50aW1lTwogCiB2b2lkIE9iamNJbnN0
YW5jZTo6c2V0R2xvYmFsRXhjZXB0aW9uKE5TU3RyaW5nKiBleGNlcHRpb24sIEpTR2xvYmFsT2Jq
ZWN0KiBleGNlcHRpb25FbnZpcm9ubWVudCkKIHsKLSAgICBIYXJkUmVsZWFzZShzX2V4Y2VwdGlv
bik7Ci0gICAgSGFyZFJldGFpbihleGNlcHRpb24pOwogICAgIHNfZXhjZXB0aW9uID0gZXhjZXB0
aW9uOwotCiAgICAgc19leGNlcHRpb25FbnZpcm9ubWVudCA9IGV4Y2VwdGlvbkVudmlyb25tZW50
OwogfQogCkBAIC04OSw5ICs4NSw3IEBAIHZvaWQgT2JqY0luc3RhbmNlOjptb3ZlR2xvYmFsRXhj
ZXB0aW9uVG8KICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBzX2V4Y2VwdGlvbik7CiAgICAgfQog
Ci0gICAgSGFyZFJlbGVhc2Uoc19leGNlcHRpb24pOwotICAgIHNfZXhjZXB0aW9uID0gMDsKLQor
ICAgIHNfZXhjZXB0aW9uID0gbmlsOwogICAgIHNfZXhjZXB0aW9uRW52aXJvbm1lbnQgPSAwOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJzb3IuY3BwCShyZXZpc2lvbiA2Nzk1OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vQ3Vyc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzLDEyICsyNTMsMTYgQEAgQ3Vy
c29yOjpDdXJzb3IoVHlwZSB0eXBlKQogewogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKKwogUGxh
dGZvcm1DdXJzb3IgQ3Vyc29yOjpwbGF0Zm9ybUN1cnNvcigpIGNvbnN0CiB7CiAgICAgZW5zdXJl
UGxhdGZvcm1DdXJzb3IoKTsKICAgICByZXR1cm4gbV9wbGF0Zm9ybUN1cnNvcjsKIH0KIAorI2Vu
ZGlmCisKIGNvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChDdXJzb3IsIGMsIChDdXJzb3I6OlBvaW50ZXIpKTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vQ3Vyc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9DdXJzb3IuaAko
cmV2aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0N1cnNvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw4IEBAIHR5cGVkZWYgc3RydWN0IEhJQ09OX18qIEhJQ09OOwogdHlw
ZWRlZiBISUNPTiBIQ1VSU09SOwogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgogI2VsaWYgUExBVEZPUk0oUVQpCkBAIC04Miw3ICs4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICB9OwogICAgIHR5cGVkZWYgUmVmUHRyPFNoYXJlZEN1cnNvcj4gUGxhdGZvcm1DdXJz
b3I7CiAjZWxpZiBQTEFURk9STShNQUMpCi0gICAgdHlwZWRlZiBOU0N1cnNvciogUGxhdGZvcm1D
dXJzb3I7CisgICAgdHlwZWRlZiBOU0N1cnNvciAqUGxhdGZvcm1DdXJzb3I7CiAjZWxpZiBQTEFU
Rk9STShHVEspCiAgICAgdHlwZWRlZiBQbGF0Zm9ybVJlZlB0cjxHZGtDdXJzb3I+IFBsYXRmb3Jt
Q3Vyc29yOwogI2VsaWYgUExBVEZPUk0oRUZMKQpAQCAtMTgzLDcgKzE4NSwxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIEludFBvaW50IG1faG90U3BvdDsKICNlbmRpZgogCisjaWYg
IVBMQVRGT1JNKE1BQykKICAgICAgICAgbXV0YWJsZSBQbGF0Zm9ybUN1cnNvciBtX3BsYXRmb3Jt
Q3Vyc29yOworI2Vsc2UKKyAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNDdXJzb3I+IG1fcGxh
dGZvcm1DdXJzb3I7CisjZW5kaWYKICAgICB9OwogCiAgICAgSW50UG9pbnQgZGV0ZXJtaW5lSG90
U3BvdChJbWFnZSosIGNvbnN0IEludFBvaW50JiBzcGVjaWZpZWRIb3RTcG90KTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5jcHAJKHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEy
NywxNiArMTI3LDYgQEAgSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaQog
fQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKQotdm9pZCBX
aWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCi17Ci19Ci0KLXZvaWQgV2lkZ2V0OjpyZXRh
aW5QbGF0Zm9ybVdpZGdldCgpCi17Ci19Ci0jZW5kaWYKLQogSW50UmVjdCBXaWRnZXQ6OmNvbnZl
cnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAg
ICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmgJKHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsMjIgQEAKICNpZm5kZWYgV2lkZ2V0X2gK
ICNkZWZpbmUgV2lkZ2V0X2gKIAorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyNpbmNsdWRlICJQbGF0Zm9ybVdpZGdldC5oIgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShNQUMpCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShRVCkKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1B
QykKICNpZmRlZiBfX09CSkNfXwogQGNsYXNzIE5TVmlldzsKQEAgLTM1LDcgKzUxLDcgQEAKIGNs
YXNzIE5TVmlldzsKIGNsYXNzIE5TV2luZG93OwogI2VuZGlmCi10eXBlZGVmIE5TVmlldyogUGxh
dGZvcm1XaWRnZXQ7Cit0eXBlZGVmIE5TVmlldyAqUGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKFdJTikKQEAgLTUxLDcgKzY3LDYgQEAgdHlwZWRlZiBHdGtXaWRnZXQqIFBs
YXRmb3JtV2lkZ2V0OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKLSNpbmNsdWRlIDxxZ2xv
YmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFXaWRnZXQ7CiBRVF9FTkRfTkFNRVNQ
QUNFCkBAIC03MiwxMCArODcsNiBAQCB0eXBlZGVmIEJWaWV3KiBQbGF0Zm9ybVdpZGdldDsKIHR5
cGVkZWYgdm9pZCogUGxhdGZvcm1XaWRnZXQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQotI2luY2x1ZGUgIlBsYXRmb3JtV2lkZ2V0LmgiCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JN
KEVGTCkKIHR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKIHR5cGVkZWYg
c3RydWN0IF9FdmFzIEV2YXM7CkBAIC05MCwxMyArMTAxLDYgQEAgdHlwZWRlZiBRV2ViUGFnZUNs
aWVudCogUGxhdGZvcm1QYWdlQ2xpZQogdHlwZWRlZiBQbGF0Zm9ybVdpZGdldCBQbGF0Zm9ybVBh
Z2VDbGllbnQ7CiAjZW5kaWYKIAotI2luY2x1ZGUgIkludFBvaW50LmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDdXJzb3I7CkBAIC0xMjcsMTUgKzEzMSw5IEBAIHB1YmxpYzoKICAgICBXaWRnZXQoUGxh
dGZvcm1XaWRnZXQgPSAwKTsKICAgICB2aXJ0dWFsIH5XaWRnZXQoKTsKIAotICAgIFBsYXRmb3Jt
V2lkZ2V0IHBsYXRmb3JtV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXQ7IH0KLSAgICB2
b2lkIHNldFBsYXRmb3JtV2lkZ2V0KFBsYXRmb3JtV2lkZ2V0IHdpZGdldCkKLSAgICB7Ci0gICAg
ICAgIGlmICh3aWRnZXQgIT0gbV93aWRnZXQpIHsKLSAgICAgICAgICAgIHJlbGVhc2VQbGF0Zm9y
bVdpZGdldCgpOwotICAgICAgICAgICAgbV93aWRnZXQgPSB3aWRnZXQ7Ci0gICAgICAgICAgICBy
ZXRhaW5QbGF0Zm9ybVdpZGdldCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIFBsYXRmb3JtV2lk
Z2V0IHBsYXRmb3JtV2lkZ2V0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRQbGF0Zm9ybVdpZGdldChQ
bGF0Zm9ybVdpZGdldCk7CisKICNpZiBQTEFURk9STShIQUlLVSkKICAgICBQbGF0Zm9ybVdpZGdl
dCB0b3BMZXZlbFBsYXRmb3JtV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90b3BMZXZlbFBsYXRm
b3JtV2lkZ2V0OyB9CiAgICAgdm9pZCBzZXRUb3BMZXZlbFBsYXRmb3JtV2lkZ2V0KFBsYXRmb3Jt
V2lkZ2V0IHdpZGdldCkKQEAgLTI1MSw3ICsyNDksMTEgQEAgcHJpdmF0ZToKIAogcHJpdmF0ZToK
ICAgICBTY3JvbGxWaWV3KiBtX3BhcmVudDsKKyNpZiAhUExBVEZPUk0oTUFDKQogICAgIFBsYXRm
b3JtV2lkZ2V0IG1fd2lkZ2V0OworI2Vsc2UKKyAgICBSZXRhaW5QdHI8TlNWaWV3PiBtX3dpZGdl
dDsKKyNlbmRpZgogICAgIGJvb2wgbV9zZWxmVmlzaWJsZTsKICAgICBib29sIG1fcGFyZW50Vmlz
aWJsZTsKIApAQCAtMjc0LDYgKzI3NiwzNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCisjaWYg
IVBMQVRGT1JNKE1BQykKKworaW5saW5lIFBsYXRmb3JtV2lkZ2V0IFdpZGdldDo6cGxhdGZvcm1X
aWRnZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3dpZGdldDsKK30KKworaW5saW5lIHZvaWQg
V2lkZ2V0OjpzZXRQbGF0Zm9ybVdpZGdldChQbGF0Zm9ybVdpZGdldCB3aWRnZXQpCit7CisgICAg
aWYgKHdpZGdldCAhPSBtX3dpZGdldCkgeworICAgICAgICByZWxlYXNlUGxhdGZvcm1XaWRnZXQo
KTsKKyAgICAgICAgbV93aWRnZXQgPSB3aWRnZXQ7CisgICAgICAgIHJldGFpblBsYXRmb3JtV2lk
Z2V0KCk7CisgICAgfQorfQorCisjZW5kaWYKKworI2lmICFQTEFURk9STShHVEspCisKK2lubGlu
ZSB2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkKK3sKK30KKworaW5saW5lIHZv
aWQgV2lkZ2V0OjpyZXRhaW5QbGF0Zm9ybVdpZGdldCgpCit7Cit9CisKKyNlbmRpZgorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBXaWRnZXRfaApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHJldmlzaW9uIDY3OTU5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDYgQEAKICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAKICNpbXBvcnQgIkZsb2F0
UmVjdC5oIgotI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmluZy5oIgogI2ltcG9ydCAiU2hhcmVkQnVm
ZmVyLmgiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiA2
Nzk1OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNiBAQAog
I2ltcG9ydCAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkRyYWdEYXRhLmgiCiAjaW1wb3J0
ICJFZGl0b3IuaCIKLSNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKICNpbXBvcnQgIkZpbGVM
aXN0LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiSW1hZ2UuaCIKQEAgLTcwLDcgKzY5
LDcgQEAgYm9vbCBDbGlwYm9hcmRNYWM6Omhhc0RhdGEoKQogICAgIHJldHVybiBtX3Bhc3RlYm9h
cmQgJiYgW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc10gJiYgW1ttX3Bhc3RlYm9hcmQuZ2V0KCkg
dHlwZXNdIGNvdW50XSA+IDA7CiB9CiAgICAgCi1zdGF0aWMgTlNTdHJpbmcgKmNvY29hVHlwZUZy
b21IVE1MQ2xpcGJvYXJkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCitzdGF0aWMgUmV0YWluUHRy
PE5TU3RyaW5nPiBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoY29uc3QgU3RyaW5nJiB0
eXBlKQogewogICAgIFN0cmluZyBxVHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKQEAg
LTkzLDExICs5MiwxMSBAQCBzdGF0aWMgTlNTdHJpbmcgKmNvY29hVHlwZUZyb21IVE1MQ2xpcGJv
CiAgICAgaWYgKHV0aVR5cGUpIHsKICAgICAgICAgQ0ZTdHJpbmdSZWYgcGJUeXBlID0gVVRUeXBl
Q29weVByZWZlcnJlZFRhZ1dpdGhDbGFzcyh1dGlUeXBlLmdldCgpLCBrVVRUYWdDbGFzc05TUGJv
YXJkVHlwZSk7CiAgICAgICAgIGlmIChwYlR5cGUpCi0gICAgICAgICAgICByZXR1cm4gSGFyZEF1
dG9yZWxlYXNlKHBiVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gKE5TU3RyaW5nICopcGJUeXBl
OwogICAgIH0KIAotICAgLy8gTm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcg
dGhvdWdoCi0gICAgcmV0dXJuIHFUeXBlOworICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0
aGUgd2hvbGUgc3RyaW5nIHRob3VnaAorICAgIHJldHVybiAoTlNTdHJpbmcgKilxVHlwZTsKIH0K
IAogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShOU1N0cmluZyAqdHlwZSkKQEAg
LTE1MSw5ICsxNTAsOCBAQCB2b2lkIENsaXBib2FyZE1hYzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmlu
CiAKICAgICAvLyBub3RlIE5TUGFzdGVib2FyZCBlbmZvcmNlcyBjaGFuZ2VDb3VudCBpdHNlbGYg
b24gd3JpdGluZyAtIGNhbid0IHdyaXRlIGlmIG5vdCB0aGUgb3duZXIKIAotICAgIE5TU3RyaW5n
ICpjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSk7Ci0gICAg
aWYgKGNvY29hVHlwZSkKLSAgICAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBzZXRTdHJpbmc6QCIi
IGZvclR5cGU6Y29jb2FUeXBlXTsKKyAgICBpZiAoUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5
cGUgPSBjb2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUodHlwZSkpCisgICAgICAgIFttX3Bh
c3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOkAiIiBmb3JUeXBlOmNvY29hVHlwZS5nZXQoKV07CiB9
CiAKIHZvaWQgQ2xpcGJvYXJkTWFjOjpjbGVhckFsbERhdGEoKQpAQCAtMjE4LDE5ICsyMTYsMTkg
QEAgU3RyaW5nIENsaXBib2FyZE1hYzo6Z2V0RGF0YShjb25zdCBTdHJpbgogICAgIGlmIChwb2xp
Y3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0g
ICAgTlNTdHJpbmcgKmNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0
eXBlKTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21I
VE1MQ2xpcGJvYXJkVHlwZSh0eXBlKTsKICAgICBOU1N0cmluZyAqY29jb2FWYWx1ZSA9IG5pbDsK
IAogICAgIC8vIEdyYWIgdGhlIHZhbHVlIG9mZiB0aGUgcGFzdGVib2FyZCBjb3JyZXNwb25kaW5n
IHRvIHRoZSBjb2NvYVR5cGUKLSAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNV
UkxQYm9hcmRUeXBlXSkgeworICAgIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1YWxUb1N0cmlu
ZzpOU1VSTFBib2FyZFR5cGVdKSB7CiAgICAgICAgIC8vICJVUkwiIGFuZCAidGV4dC91cmwtbGlz
dCIgYm90aCBtYXAgdG8gTlNVUkxQYm9hcmRUeXBlIGluIGNvY29hVHlwZUZyb21IVE1MQ2xpcGJv
YXJkVHlwZSgpLCAiVVJMIiBvbmx5IHdhbnRzIHRoZSBmaXJzdCBVUkwKICAgICAgICAgYm9vbCBv
bmx5Rmlyc3RVUkwgPSAodHlwZSA9PSAiVVJMIik7CiAgICAgICAgIE5TQXJyYXkgKmFic29sdXRl
VVJMcyA9IGFic29sdXRlVVJMc0Zyb21QYXN0ZWJvYXJkKG1fcGFzdGVib2FyZC5nZXQoKSwgb25s
eUZpcnN0VVJMKTsKICAgICAgICAgY29jb2FWYWx1ZSA9IFthYnNvbHV0ZVVSTHMgY29tcG9uZW50
c0pvaW5lZEJ5U3RyaW5nOkAiXG4iXTsKLSAgICB9IGVsc2UgaWYgKFtjb2NvYVR5cGUgaXNFcXVh
bFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgY29jb2FWYWx1ZSA9IFtb
bV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6Y29jb2FUeXBlXSBwcmVjb21wb3NlZFN0
cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICB9IGVsc2UgaWYgKFtjb2NvYVR5cGUuZ2V0
KCkgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgY29jb2FW
YWx1ZSA9IFtbbV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6Y29jb2FUeXBlLmdldCgp
XSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKICAgICB9IGVsc2UgaWYg
KGNvY29hVHlwZSkKLSAgICAgICAgY29jb2FWYWx1ZSA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgc3Ry
aW5nRm9yVHlwZTpjb2NvYVR5cGVdOworICAgICAgICBjb2NvYVZhbHVlID0gW21fcGFzdGVib2Fy
ZC5nZXQoKSBzdHJpbmdGb3JUeXBlOmNvY29hVHlwZS5nZXQoKV07CiAKICAgICAvLyBFbmZvcmNl
IGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBjaGVjayBhZnRlciByZWFk
aW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5n
ZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUg
ZGF0YS4KQEAgLTI0OCwxMCArMjQ2LDEwIEBAIGJvb2wgQ2xpcGJvYXJkTWFjOjpzZXREYXRhKGNv
bnN0IFN0cmluZyAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIG5vdGUgTlNQYXN0ZWJv
YXJkIGVuZm9yY2VzIGNoYW5nZUNvdW50IGl0c2VsZiBvbiB3cml0aW5nIC0gY2FuJ3Qgd3JpdGUg
aWYgbm90IHRoZSBvd25lcgogCi0gICAgTlNTdHJpbmcgKmNvY29hVHlwZSA9IGNvY29hVHlwZUZy
b21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKTsKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29h
VHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKTsKICAgICBOU1N0cmlu
ZyAqY29jb2FEYXRhID0gZGF0YTsKIAotICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmlu
ZzpOU1VSTFBib2FyZFR5cGVdKSB7CisgICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRv
U3RyaW5nOk5TVVJMUGJvYXJkVHlwZV0pIHsKICAgICAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBh
ZGRUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSBvd25lcjpu
aWxdOwogICAgICAgICBOU1VSTCAqdXJsID0gW1tOU1VSTCBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
Y29jb2FEYXRhXTsKICAgICAgICAgW3VybCB3cml0ZVRvUGFzdGVib2FyZDptX3Bhc3RlYm9hcmQu
Z2V0KCldOwpAQCAtMjY4LDggKzI2Niw4IEBAIGJvb2wgQ2xpcGJvYXJkTWFjOjpzZXREYXRhKGNv
bnN0IFN0cmluZyAKIAogICAgIGlmIChjb2NvYVR5cGUpIHsKICAgICAgICAgLy8gZXZlcnl0aGlu
ZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0aGUgcGJvYXJkIGFzIGEgc3RyaW5nCi0gICAgICAg
IFttX3Bhc3RlYm9hcmQuZ2V0KCkgYWRkVHlwZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmNv
Y29hVHlwZV0gb3duZXI6bmlsXTsKLSAgICAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQuZ2V0KCkg
c2V0U3RyaW5nOmNvY29hRGF0YSBmb3JUeXBlOmNvY29hVHlwZV07CisgICAgICAgIFttX3Bhc3Rl
Ym9hcmQuZ2V0KCkgYWRkVHlwZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmNvY29hVHlwZS5n
ZXQoKV0gb3duZXI6bmlsXTsKKyAgICAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0
U3RyaW5nOmNvY29hRGF0YSBmb3JUeXBlOmNvY29hVHlwZS5nZXQoKV07CiAgICAgfQogCiAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ3Vyc29yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0N1cnNvck1hYy5tbQkocmV2aXNpb24g
Njc5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9DdXJzb3JNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbXBvcnQgIkN1cnNvci5oIgogCiAjaW1w
b3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkZvdW5kYXRpb25FeHRyYXMuaCIKICNp
bXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogQGludGVyZmFjZSBXZWJDb3JlQ3Vyc29yQnVu
ZGxlIDogTlNPYmplY3QgeyB9CkBAIC00MSwxNCArNDAsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogLy8gU2ltcGxlIE5TQ3Vyc29yIGNhbGxzIHNob3VsZG4ndCBuZWVkIHByb3RlY3Rpb24sCiAv
LyBidXQgY3JlYXRpbmcgYSBjdXJzb3Igd2l0aCBhIGJhZCBpbWFnZSBtaWdodCB0aHJvdy4KIAot
c3RhdGljIE5TQ3Vyc29yKiBjcmVhdGVDdXN0b21DdXJzb3IoSW1hZ2UqIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgaG90U3BvdCkKK3N0YXRpYyBSZXRhaW5QdHI8TlNDdXJzb3I+IGNyZWF0ZUN1c3Rv
bUN1cnNvcihJbWFnZSogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBob3RTcG90KQogewogICAgIC8v
IEZJWE1FOiBUaGUgY3Vyc29yIHdvbid0IGFuaW1hdGUuICBOb3Qgc3VyZSBpZiB0aGF0J3MgYSBi
aWcgZGVhbC4KLSAgICBOU0ltYWdlKiBpbWcgPSBpbWFnZS0+Z2V0TlNJbWFnZSgpOwotICAgIGlm
ICghaW1nKQorICAgIE5TSW1hZ2UqIG5zSW1hZ2UgPSBpbWFnZS0+Z2V0TlNJbWFnZSgpOworICAg
IGlmICghbnNJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIHJldHVybiBbW05TQ3Vyc29yIGFsbG9jXSBpbml0V2l0aEltYWdlOmlt
ZyBob3RTcG90OmhvdFNwb3RdOworICAgIHJldHVybiBSZXRhaW5QdHI8TlNDdXJzb3I+KEFkb3B0
TlMsIFtbTlNDdXJzb3IgYWxsb2NdIGluaXRXaXRoSW1hZ2U6bnNJbWFnZSBob3RTcG90OmhvdFNw
b3RdKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIHJldHVybiAwOwogfQpA
QCAtODEsMTE4ICs4MCwxMTggQEAgdm9pZCBDdXJzb3I6OmVuc3VyZVBsYXRmb3JtQ3Vyc29yKCkg
Y29ucwogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEN1cnNvcjo6UG9pbnRlcjoK
LSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4oW05TQ3Vyc29yIGFycm93Q3Vy
c29yXSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBbTlNDdXJzb3IgYXJyb3dDdXJzb3Jd
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Q3Jvc3M6Ci0gICAgICAgIG1fcGxh
dGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigiY3Jvc3NIYWlyQ3Vyc29y
IiwgMTEsIDExKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3Io
ImNyb3NzSGFpckN1cnNvciIsIDExLCAxMSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vy
c29yOjpIYW5kOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFt
ZWRDdXJzb3IoImxpbmtDdXJzb3IiLCA2LCAxKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBsZWFrTmFtZWRDdXJzb3IoImxpbmtDdXJzb3IiLCA2LCAxKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDdXJzb3I6OklCZWFtOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJl
dGFpbihbTlNDdXJzb3IgSUJlYW1DdXJzb3JdKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IFtOU0N1cnNvciBJQmVhbUN1cnNvcl07CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29y
OjpXYWl0OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRD
dXJzb3IoIndhaXRDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBs
ZWFrTmFtZWRDdXJzb3IoIndhaXRDdXJzb3IiLCA3LCA3KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBDdXJzb3I6OkhlbHA6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWlu
KGxlYWtOYW1lZEN1cnNvcigiaGVscEN1cnNvciIsIDgsIDgpKTsKKyAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigiaGVscEN1cnNvciIsIDgsIDgpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEN1cnNvcjo6TW92ZToKICAgICBjYXNlIEN1cnNvcjo6TWlkZGxlUGFu
bmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vy
c29yKCJtb3ZlQ3Vyc29yIiwgNywgNykpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVh
a05hbWVkQ3Vyc29yKCJtb3ZlQ3Vyc29yIiwgNywgNyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ3Vyc29yOjpFYXN0UmVzaXplOgogICAgIGNhc2UgQ3Vyc29yOjpFYXN0UGFubmluZzoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJlYXN0
UmVzaXplQ3Vyc29yIiwgMTQsIDcpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtO
YW1lZEN1cnNvcigiZWFzdFJlc2l6ZUN1cnNvciIsIDE0LCA3KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDdXJzb3I6Ok5vcnRoUmVzaXplOgogICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFBhbm5p
bmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNv
cigibm9ydGhSZXNpemVDdXJzb3IiLCA3LCAxKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBsZWFrTmFtZWRDdXJzb3IoIm5vcnRoUmVzaXplQ3Vyc29yIiwgNywgMSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpOb3J0aEVhc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6
Ok5vcnRoRWFzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWlu
KGxlYWtOYW1lZEN1cnNvcigibm9ydGhFYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDEpKTsKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigibm9ydGhFYXN0UmVzaXplQ3Vy
c29yIiwgMTQsIDEpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Tm9ydGhXZXN0
UmVzaXplOgogICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFdlc3RQYW5uaW5nOgotICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoV2VzdFJlc2l6
ZUN1cnNvciIsIDAsIDApKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1
cnNvcigibm9ydGhXZXN0UmVzaXplQ3Vyc29yIiwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ3Vyc29yOjpTb3V0aFJlc2l6ZToKICAgICBjYXNlIEN1cnNvcjo6U291dGhQYW5uaW5n
OgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3Io
InNvdXRoUmVzaXplQ3Vyc29yIiwgNywgMTQpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IGxlYWtOYW1lZEN1cnNvcigic291dGhSZXNpemVDdXJzb3IiLCA3LCAxNCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpTb3V0aEVhc3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6
OlNvdXRoRWFzdFBhbm5pbmc6Ci0gICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWlu
KGxlYWtOYW1lZEN1cnNvcigic291dGhFYXN0UmVzaXplQ3Vyc29yIiwgMTQsIDE0KSk7CisgICAg
ICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoInNvdXRoRWFzdFJlc2l6ZUN1
cnNvciIsIDE0LCAxNCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpTb3V0aFdl
c3RSZXNpemU6CiAgICAgY2FzZSBDdXJzb3I6OlNvdXRoV2VzdFBhbm5pbmc6Ci0gICAgICAgIG1f
cGxhdGZvcm1DdXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigic291dGhXZXN0UmVz
aXplQ3Vyc29yIiwgMSwgMTQpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1l
ZEN1cnNvcigic291dGhXZXN0UmVzaXplQ3Vyc29yIiwgMSwgMTQpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEN1cnNvcjo6V2VzdFJlc2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ3ZXN0UmVzaXplQ3Vyc29yIiwgMSwgNykpOwor
ICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJ3ZXN0UmVzaXplQ3Vy
c29yIiwgMSwgNyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpOb3J0aFNvdXRo
UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRD
dXJzb3IoIm5vcnRoU291dGhSZXNpemVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoIm5vcnRoU291dGhSZXNpemVDdXJzb3IiLCA3LCA3
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OkVhc3RXZXN0UmVzaXplOgogICAg
IGNhc2UgQ3Vyc29yOjpXZXN0UGFubmluZzoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJlYXN0V2VzdFJlc2l6ZUN1cnNvciIsIDcsIDcpKTsK
KyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigiZWFzdFdlc3RSZXNp
emVDdXJzb3IiLCA3LCA3KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6Ok5vcnRo
RWFzdFNvdXRoV2VzdFJlc2l6ZToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRh
aW4obGVha05hbWVkQ3Vyc29yKCJub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IiLCA3LCA3
KSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoIm5vcnRoRWFz
dFNvdXRoV2VzdFJlc2l6ZUN1cnNvciIsIDcsIDcpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEN1cnNvcjo6Tm9ydGhXZXN0U291dGhFYXN0UmVzaXplOgotICAgICAgICBtX3BsYXRmb3JtQ3Vy
c29yID0gSGFyZFJldGFpbihsZWFrTmFtZWRDdXJzb3IoIm5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6
ZUN1cnNvciIsIDcsIDcpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1
cnNvcigibm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yIiwgNywgNyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpDb2x1bW5SZXNpemU6Ci0gICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBIYXJkUmV0YWluKFtOU0N1cnNvciByZXNpemVMZWZ0UmlnaHRDdXJzb3JdKTsKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IFtOU0N1cnNvciByZXNpemVMZWZ0UmlnaHRDdXJzb3Jd
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNvcjo6Um93UmVzaXplOgotICAgICAgICBt
X3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3IgcmVzaXplVXBEb3duQ3Vyc29y
XSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBbTlNDdXJzb3IgcmVzaXplVXBEb3duQ3Vy
c29yXTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OlZlcnRpY2FsVGV4dDoKLSAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ2ZXJ0
aWNhbFRleHRDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFr
TmFtZWRDdXJzb3IoInZlcnRpY2FsVGV4dEN1cnNvciIsIDcsIDcpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEN1cnNvcjo6Q2VsbDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRS
ZXRhaW4obGVha05hbWVkQ3Vyc29yKCJjZWxsQ3Vyc29yIiwgNywgNykpOworICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJjZWxsQ3Vyc29yIiwgNywgNyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpDb250ZXh0TWVudToKLSAgICAgICAgbV9wbGF0
Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJjb250ZXh0TWVudUN1cnNv
ciIsIDMsIDIpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigi
Y29udGV4dE1lbnVDdXJzb3IiLCAzLCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJz
b3I6OkFsaWFzOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihsZWFrTmFt
ZWRDdXJzb3IoImFsaWFzQ3Vyc29yIiwgMTEsIDMpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNv
ciA9IGxlYWtOYW1lZEN1cnNvcigiYWxpYXNDdXJzb3IiLCAxMSwgMyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ3Vyc29yOjpQcm9ncmVzczoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9
IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJwcm9ncmVzc0N1cnNvciIsIDMsIDIpKTsKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGxlYWtOYW1lZEN1cnNvcigicHJvZ3Jlc3NDdXJzb3Ii
LCAzLCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6Ok5vRHJvcDoKLSAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJub0Ryb3BD
dXJzb3IiLCAzLCAxKSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJz
b3IoIm5vRHJvcEN1cnNvciIsIDMsIDEpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEN1cnNv
cjo6Q29weToKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVk
Q3Vyc29yKCJjb3B5Q3Vyc29yIiwgMywgMikpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0g
bGVha05hbWVkQ3Vyc29yKCJjb3B5Q3Vyc29yIiwgMywgMik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ3Vyc29yOjpOb25lOgotICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gSGFyZFJldGFp
bihsZWFrTmFtZWRDdXJzb3IoIm5vbmVDdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIG1fcGxhdGZv
cm1DdXJzb3IgPSBsZWFrTmFtZWRDdXJzb3IoIm5vbmVDdXJzb3IiLCA3LCA3KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6Ok5vdEFsbG93ZWQ6Ci0gICAgICAgIG1fcGxhdGZvcm1D
dXJzb3IgPSBIYXJkUmV0YWluKGxlYWtOYW1lZEN1cnNvcigibm90QWxsb3dlZEN1cnNvciIsIDEx
LCAxMSkpOworICAgICAgICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJub3RB
bGxvd2VkQ3Vyc29yIiwgMTEsIDExKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6
Olpvb21JbjoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhhcmRSZXRhaW4obGVha05hbWVk
Q3Vyc29yKCJ6b29tSW5DdXJzb3IiLCA3LCA3KSk7CisgICAgICAgIG1fcGxhdGZvcm1DdXJzb3Ig
PSBsZWFrTmFtZWRDdXJzb3IoInpvb21JbkN1cnNvciIsIDcsIDcpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEN1cnNvcjo6Wm9vbU91dDoKLSAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IEhh
cmRSZXRhaW4obGVha05hbWVkQ3Vyc29yKCJ6b29tT3V0Q3Vyc29yIiwgNywgNykpOworICAgICAg
ICBtX3BsYXRmb3JtQ3Vyc29yID0gbGVha05hbWVkQ3Vyc29yKCJ6b29tT3V0Q3Vyc29yIiwgNywg
Nyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpHcmFiOgotICAgICAgICBtX3Bs
YXRmb3JtQ3Vyc29yID0gSGFyZFJldGFpbihbTlNDdXJzb3Igb3BlbkhhbmRDdXJzb3JdKTsKKyAg
ICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IFtOU0N1cnNvciBvcGVuSGFuZEN1cnNvcl07CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ3Vyc29yOjpHcmFiYmluZzoKLSAgICAgICAgbV9wbGF0Zm9y
bUN1cnNvciA9IEhhcmRSZXRhaW4oW05TQ3Vyc29yIGNsb3NlZEhhbmRDdXJzb3JdKTsKKyAgICAg
ICAgbV9wbGF0Zm9ybUN1cnNvciA9IFtOU0N1cnNvciBjbG9zZWRIYW5kQ3Vyc29yXTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDdXJzb3I6OkN1c3RvbToKLSAgICAgICAgbV9wbGF0Zm9ybUN1
cnNvciA9IEhhcmRSZXRhaW5XaXRoTlNSZWxlYXNlKGNyZWF0ZUN1c3RvbUN1cnNvcihtX2ltYWdl
LmdldCgpLCBtX2hvdFNwb3QpKTsKKyAgICAgICAgbV9wbGF0Zm9ybUN1cnNvciA9IGNyZWF0ZUN1
c3RvbUN1cnNvcihtX2ltYWdlLmdldCgpLCBtX2hvdFNwb3QpOwogICAgICAgICBicmVhazsKICAg
ICB9CiB9CkBAIC0yMDEsNyArMjAwLDcgQEAgQ3Vyc29yOjpDdXJzb3IoY29uc3QgQ3Vyc29yJiBv
dGhlcikKICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCiAgICAgLCBtX2ltYWdlKG90aGVyLm1f
aW1hZ2UpCiAgICAgLCBtX2hvdFNwb3Qob3RoZXIubV9ob3RTcG90KQotICAgICwgbV9wbGF0Zm9y
bUN1cnNvcihIYXJkUmV0YWluKG90aGVyLm1fcGxhdGZvcm1DdXJzb3IpKQorICAgICwgbV9wbGF0
Zm9ybUN1cnNvcihvdGhlci5tX3BsYXRmb3JtQ3Vyc29yKQogewogfQogCkBAIC0yMTAsMTYgKzIw
OSwxOCBAQCBDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgCiAgICAgbV90
eXBlID0gb3RoZXIubV90eXBlOwogICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOwogICAgIG1f
aG90U3BvdCA9IG90aGVyLm1faG90U3BvdDsKLQotICAgIEhhcmRSZXRhaW4ob3RoZXIubV9wbGF0
Zm9ybUN1cnNvcik7Ci0gICAgSGFyZFJlbGVhc2UobV9wbGF0Zm9ybUN1cnNvcik7CiAgICAgbV9w
bGF0Zm9ybUN1cnNvciA9IG90aGVyLm1fcGxhdGZvcm1DdXJzb3I7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCiBDdXJzb3I6On5DdXJzb3IoKQogewotICAgIEhhcmRSZWxlYXNlKG1fcGxhdGZvcm1D
dXJzb3IpOworfQorCitOU0N1cnNvciAqQ3Vyc29yOjpwbGF0Zm9ybUN1cnNvcigpIGNvbnN0Cit7
CisgICAgZW5zdXJlUGxhdGZvcm1DdXJzb3IoKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUN1cnNv
ci5nZXQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRm91bmRhdGlvbkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL0ZvdW5kYXRpb25FeHRyYXMuaAkocmV2aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9Gb3VuZGF0aW9uRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNTAg
KzI2LDE1IEBACiAjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRkJhc2UuaD4KICNpbXBvcnQgPEZv
dW5kYXRpb24vTlNPYmplY3QuaD4KIAotLy8gbmlsLWNoZWNrZWQgQ0ZSZXRhaW4vQ0ZSZWxlYXNl
IGNvdmVycyBmb3IgT2JqZWN0aXZlLUMgaWRzCi0KLS8vIFVzZSBDRlJldGFpbiwgQ0ZSZWxlYXNl
LCBIYXJkUmV0YWluLCBvciBIYXJkUmVsZWFzZSBpbnN0ZWFkIG9mCi0vLyAtW05TT2JqZWN0IHJl
dGFpbl0gYW5kIC1bTlNPYmplY3QgcmVsZWFzZV0gaWYgeW91IHdhbnQgdG8gc3RvcmUKLS8vIGEg
cG9pbnRlciB0byBhbiBPYmplY3RpdmUtQyBvYmplY3QgaW50byBtZW1vcnkgdGhhdCB3b24ndAot
Ly8gYmUgc2Nhbm5lZCBmb3IgR0MsIGxpa2UgYSBDKysgb2JqZWN0LgotCi1zdGF0aWMgaW5saW5l
IGlkIEhhcmRSZXRhaW4oaWQgb2JqKQotewotICAgIGlmIChvYmopIENGUmV0YWluKG9iaik7Ci0g
ICAgcmV0dXJuIG9iajsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIEhhcmRSZWxlYXNlKGlkIG9i
aikKLXsKLSAgICBpZiAob2JqKSBDRlJlbGVhc2Uob2JqKTsKLX0KLQotLy8gQXMgaWYgQ0YgYW5k
IEZvdW5kYXRpb24gaGFkIGxvZ2ljYWxseSBzZXBhcmF0ZSByZWZlcmVuY2UgY291bnRzLAotLy8g
dGhpcyBmdW5jdGlvbiBmaXJzdCBpbmNyZW1lbnRzIHRoZSBDRiByZXRhaW4gY291bnQsIGFuZCB0
aGVuCi0vLyBkZWNyZW1lbnRzIHRoZSBOUyByZXRhaW4gY291bnQuIFRoaXMgaXMgbmVlZGVkIHRv
IGhhbmRsZSBjYXNlcyB3aGVyZQotLy8gLXJldGFpbi8tcmVsZWFzZSBhcmVuJ3QgZXF1aXZhbGVu
dCB0byBDRlJldGFpbi9IYXJkUmVsZWFzZSwgc3VjaCBhcwotLy8gd2hlbiBHQyBpcyB1c2VkLgot
Ci0vLyBVc2UgSGFyZFJldGFpbldpdGhOU1JlbGVhc2UgYWZ0ZXIgYWxsb2NhdGluZyBhbmQgaW5p
dGlhbGl6aW5nIGEgTlNPYmplY3QKLS8vIGlmIHlvdSB3YW50IHRvIHN0b3JlIGEgcG9pbnRlciB0
byB0aGF0IG9iamVjdCBpbnRvIG1lbW9yeSB0aGF0IHdvbid0Ci0vLyBiZSBzY2FubmVkIGZvciBH
QywgbGlrZSBhIEMrKyBvYmplY3QuCi0KLXN0YXRpYyBpbmxpbmUgaWQgSGFyZFJldGFpbldpdGhO
U1JlbGVhc2UoaWQgb2JqKQotewotICAgIEhhcmRSZXRhaW4ob2JqKTsKLSAgICBbb2JqIHJlbGVh
c2VdOwotICAgIHJldHVybiBvYmo7Ci19Ci0KIC8vIFVzZSBIYXJkQXV0b3JlbGVhc2UgdG8gcmV0
dXJuIGFuIG9iamVjdCBtYWRlIGJ5IGEgQ29yZUZvdW5kYXRpb24KIC8vICJjcmVhdGUiIG9yICJj
b3B5IiBmdW5jdGlvbiBhcyBhbiBhdXRvcmVsZWFzZWQgYW5kIGdhcmJhZ2UgY29sbGVjdGVkCiAv
LyBvYmplY3QuIENGIG9iamVjdHMgbmVlZCB0byBiZSAibWFkZSBjb2xsZWN0YWJsZSIgZm9yIGF1
dG9yZWxlYXNlIHRvIHdvcmsKIC8vIHByb3Blcmx5IHVuZGVyIEdDLgogCi1zdGF0aWMgaW5saW5l
IGlkIEhhcmRBdXRvcmVsZWFzZShDRlR5cGVSZWYgb2JqKQorc3RhdGljIGlubGluZSBpZCBIYXJk
QXV0b3JlbGVhc2UoQ0ZUeXBlUmVmIG9iamVjdCkKIHsKLSAgICBpZiAob2JqKQotICAgICAgICBD
Rk1ha2VDb2xsZWN0YWJsZShvYmopOwotICAgIFsoaWQpb2JqIGF1dG9yZWxlYXNlXTsKLSAgICBy
ZXR1cm4gKGlkKW9iajsKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBDRk1ha2VDb2xsZWN0YWJs
ZShvYmplY3QpOworICAgIFsoaWQpb2JqZWN0IGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gKGlk
KW9iamVjdDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiA2Nzk1
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzUsNyArMzc1LDcgQEAgc3RhdGljIGNvbnN0IGludCogYnV0dG9uTWFyZ2lucyhOU0NvbnRy
bwogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKIH0KIAotc3RhdGljIHZvaWQgc2V0
dXBCdXR0b25DZWxsKE5TQnV0dG9uQ2VsbCAqJmJ1dHRvbkNlbGwsIENvbnRyb2xQYXJ0IHBhcnQs
IENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6
b29tRmFjdG9yKQorc3RhdGljIE5TQnV0dG9uQ2VsbCAqc2V0VXBCdXR0b25DZWxsKE5TQnV0dG9u
Q2VsbCAqYnV0dG9uQ2VsbCwgQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMs
IGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgaWYg
KCFidXR0b25DZWxsKSB7CiAgICAgICAgIGJ1dHRvbkNlbGwgPSBbW05TQnV0dG9uQ2VsbCBhbGxv
Y10gaW5pdF07CkBAIC00MDQsMTQgKzQwNCwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cEJ1dHRvbkNl
bGwoTlNCdXR0b25DZWxsCiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJl
c3BvbmQgdG8uCiAgICAgdXBkYXRlU3RhdGVzKGJ1dHRvbkNlbGwsIHN0YXRlcyk7CisKKyAgICBy
ZXR1cm4gYnV0dG9uQ2VsbDsKIH0KICAgICAKK3N0YXRpYyBOU0J1dHRvbkNlbGwgKm5vbkRlZmF1
bHRCdXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IElu
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgc3RhdGljIE5TQnV0
dG9uQ2VsbCAqY2VsbCA9IHNldFVwQnV0dG9uQ2VsbChjZWxsLCBwYXJ0LCBzdGF0ZXMsIHpvb21l
ZFJlY3QsIHpvb21GYWN0b3IpOyAgICAKKyAgICByZXR1cm4gY2VsbDsKK30KKworc3RhdGljIE5T
QnV0dG9uQ2VsbCAqZGVmYXVsdEJ1dHRvbihDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVz
IHN0YXRlcywgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikKK3sK
KyAgICBzdGF0aWMgTlNCdXR0b25DZWxsICpjZWxsID0gc2V0VXBCdXR0b25DZWxsKGNlbGwsIHBh
cnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7ICAgIAorICAgIHJldHVybiBjZWxs
OworfQorCiBzdGF0aWMgTlNCdXR0b25DZWxsICpidXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29u
dHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21G
YWN0b3IpCiB7Ci0gICAgYm9vbCBpc0RlZmF1bHQgPSBzdGF0ZXMgJiBEZWZhdWx0U3RhdGU7Ci0g
ICAgc3RhdGljIE5TQnV0dG9uQ2VsbCAqY2VsbHNbMl07Ci0gICAgc2V0dXBCdXR0b25DZWxsKGNl
bGxzW2lzRGVmYXVsdF0sIHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7ICAg
IAotICAgIHJldHVybiBjZWxsc1tpc0RlZmF1bHRdOworICAgIHJldHVybiAoKHN0YXRlcyAmIERl
ZmF1bHRTdGF0ZSkgPyBub25EZWZhdWx0QnV0dG9uIDogZGVmYXVsdEJ1dHRvbikocGFydCwgc3Rh
dGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRCdXR0
b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rvciwg
U2Nyb2xsVmlldyogc2Nyb2xsVmlldykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0J
KHJldmlzaW9uIDY3OTU5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw3ICsz
NSw2IEBACiAjaW1wb3J0ICJDdXJzb3IuaCIKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0
ICJGb250LmgiCi0jaW1wb3J0ICJGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJGcmFtZS5o
IgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5o
IgpAQCAtMTAwLDcgKzk5LDYgQEAgV2lkZ2V0OjpXaWRnZXQoTlNWaWV3ICp2aWV3KQogCiBXaWRn
ZXQ6On5XaWRnZXQoKQogewotICAgIHJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpOwogICAgIGRlbGV0
ZSBtX2RhdGE7CiB9CiAKQEAgLTM1NCwxNiArMzUyLDE4IEBAIEludFBvaW50IFdpZGdldDo6Y29u
dmVydEZyb21Db250YWluaW5nV2kKICAgICByZXR1cm4gcG9pbnQ7CiB9CiAKLXZvaWQgV2lkZ2V0
OjpyZWxlYXNlUGxhdGZvcm1XaWRnZXQoKQorTlNWaWV3ICpXaWRnZXQ6OnBsYXRmb3JtV2lkZ2V0
KCkgY29uc3QKIHsKLSAgICBIYXJkUmVsZWFzZShtX3dpZGdldCk7Ci0gICAgbV9kYXRhLT5wcmV2
aW91c1Zpc2libGVSZWN0ID0gTlNaZXJvUmVjdDsKKyAgICByZXR1cm4gbV93aWRnZXQuZ2V0KCk7
CiB9CiAKLXZvaWQgV2lkZ2V0OjpyZXRhaW5QbGF0Zm9ybVdpZGdldCgpCit2b2lkIFdpZGdldDo6
c2V0UGxhdGZvcm1XaWRnZXQoTlNWaWV3ICp3aWRnZXQpCiB7Ci0gICAgSGFyZFJldGFpbihtX3dp
ZGdldCk7CisgICAgaWYgKHdpZGdldCA9PSBtX3dpZGdldCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV93aWRnZXQgPSB3aWRnZXQ7CisgICAgbV9kYXRhLT5wcmV2aW91c1Zpc2libGVSZWN0ID0g
TlNaZXJvUmVjdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVVUkxSZXNwb25zZS5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVVUkxSZXNwb25zZS5tbQkocmV2
aXNpb24gNjc5NTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1dlYkNvcmVVUkxS
ZXNwb25zZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2ltcG9ydCAiY29u
ZmlnLmgiCiAjaW1wb3J0ICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKIAotI2ltcG9ydCAiRm91bmRh
dGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2ltcG9ydCA8b2Jq
Yy9vYmpjLWNsYXNzLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMzI3LDEyICsz
MjYsMTIgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqY3JlYXRlRXh0ZW5zaW9uVG9NSQogICAgIF07
CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqbWltZVR5cGVGcm9tVVRJVHJlZShDRlN0cmluZ1JlZiB1
dGkpCitzdGF0aWMgUmV0YWluUHRyPE5TU3RyaW5nPiBtaW1lVHlwZUZyb21VVElUcmVlKENGU3Ry
aW5nUmVmIHV0aSkKIHsKICAgICAvLyBDaGVjayBpZiB0aGlzIFVUSSBoYXMgYSBNSU1FIHR5cGUu
CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBtaW1lVHlwZShBZG9wdENGLCBVVFR5cGVDb3B5
UHJlZmVycmVkVGFnV2l0aENsYXNzKHV0aSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOwogICAgIGlm
IChtaW1lVHlwZSkKLSAgICAgICAgcmV0dXJuIChOU1N0cmluZyAqKUhhcmRBdXRvcmVsZWFzZSht
aW1lVHlwZS5yZWxlYXNlUmVmKCkpOworICAgICAgICByZXR1cm4gKE5TU3RyaW5nICopbWltZVR5
cGUuZ2V0KCk7CiAgICAgCiAgICAgLy8gSWYgbm90LCB3YWxrIHRoZSBhbmNlc3Rvcnkgb2YgdGhp
cyBVVEkgdmlhIGl0cyAiQ29uZm9ybXNUbyIgdGFncyBhbmQgcmV0dXJuIHRoZSBmaXJzdCBNSU1F
IHR5cGUgd2UgZmluZC4KICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkZWNsKEFkb3B0
Q0YsIFVUVHlwZUNvcHlEZWNsYXJhdGlvbih1dGkpKTsKQEAgLTM1NCw3ICszNTMsNyBAQCBzdGF0
aWMgTlNTdHJpbmcgKm1pbWVUeXBlRnJvbVVUSVRyZWUoQ0ZTCiAgICAgICAgICAgICBpZiAoQ0ZH
ZXRUeXBlSUQob2JqZWN0KSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICBpZiAoTlNTdHJpbmcgKm1pbWVUeXBlID0gbWltZVR5
cGVGcm9tVVRJVHJlZSgoQ0ZTdHJpbmdSZWYpb2JqZWN0KSkKKyAgICAgICAgICAgIGlmIChSZXRh
aW5QdHI8TlNTdHJpbmc+IG1pbWVUeXBlID0gbWltZVR5cGVGcm9tVVRJVHJlZSgoQ0ZTdHJpbmdS
ZWYpb2JqZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWltZVR5cGU7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0zNjYsMTMgKzM2NSwxMyBAQCBzdGF0aWMgTlNTdHJpbmcgKm1pbWVUeXBlRnJv
bVVUSVRyZWUoQ0ZTCiAKIC0odm9pZClhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5CiB7Ci0gICAg
TlNTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIE1JTUVUeXBlXTsKLSAgICBOU1N0cmluZyAqb3JpZ2lu
YWxSZXN1bHQgPSByZXN1bHQ7CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiByZXN1bHQgPSBbc2Vs
ZiBNSU1FVHlwZV07CisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBvcmlnaW5hbFJlc3VsdCA9IHJl
c3VsdDsKIAogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgLy8gV2hlbiBjb250ZW50IHNu
aWZmaW5nIGlzIGRpc2FibGVkLCBUaWdlcidzIENGTmV0d29yayBhdXRvbWF0aWNhbGx5IHJldHVy
bnMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIGZvciBjZXJ0YWluCiAgICAgLy8gZXh0ZW5zaW9u
cyBldmVuIHdoZW4gc2NvdXJpbmcgdGhlIFVUSSBtYXBzIHdvdWxkIGVuZCB1cCB3aXRoIGEgYmV0
dGVyIHJlc3VsdCwgc28gd2UnbGwgZ2l2ZSBhIGNoYW5jZSBmb3IgdGhhdCB0byBoYXBwZW4uCi0g
ICAgaWYgKFtbc2VsZiBVUkxdIGlzRmlsZVVSTF0gJiYgW3Jlc3VsdCBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlOkAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIl0gPT0gTlNPcmRlcmVkU2FtZSkKKyAg
ICBpZiAoW1tzZWxmIFVSTF0gaXNGaWxlVVJMXSAmJiBbcmVzdWx0LmdldCgpIGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmU6QCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iXSA9PSBOU09yZGVyZWRTYW1l
KQogICAgICAgICByZXN1bHQgPSBuaWw7CiAjZW5kaWYKIApAQCAtNDAzLDcgKzQwMiw3IEBAIC0o
dm9pZClhZGp1c3RNSU1FVHlwZUlmTmVjZXNzYXJ5CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VS
CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzMjE5NzI+IFBsYWluIHRleHQgZG9jdW1lbnQgZnJv
bSBIVFRQIHNlcnZlciBkZXRlY3RlZCBhcyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KICAgICAv
LyBNYWtlIHRoZSBiZXN0IGd1ZXNzIHdoZW4gZGVjaWRpbmcgYmV0d2VlbiAiZ2VuZXJpYyBiaW5h
cnkiIGFuZCAiZ2VuZXJpYyB0ZXh0IiB1c2luZyBhIHRhYmxlIG9mIGtub3duIGJpbmFyeSBNSU1F
IHR5cGVzLgotICAgIGlmIChbcmVzdWx0IGlzRXF1YWxUb1N0cmluZzpAImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSJdICYmIFtzZWxmIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoYWxsSGVh
ZGVyRmllbGRzKV0gJiYgW1tbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKGFsbEhlYWRl
ckZpZWxkcyldIG9iamVjdEZvcktleTpAIkNvbnRlbnQtVHlwZSJdIGhhc1ByZWZpeDpAInRleHQv
cGxhaW4iXSkgeworICAgIGlmIChbcmVzdWx0LmdldCgpIGlzRXF1YWxUb1N0cmluZzpAImFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbSJdICYmIFtzZWxmIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoYWxsSGVhZGVyRmllbGRzKV0gJiYgW1tbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9y
KGFsbEhlYWRlckZpZWxkcyldIG9iamVjdEZvcktleTpAIkNvbnRlbnQtVHlwZSJdIGhhc1ByZWZp
eDpAInRleHQvcGxhaW4iXSkgewogICAgICAgICBzdGF0aWMgTlNTZXQgKmJpbmFyeUV4dGVuc2lv
bnMgPSBjcmVhdGVCaW5hcnlFeHRlbnNpb25zU2V0KCk7CiAgICAgICAgIGlmICghW2JpbmFyeUV4
dGVuc2lvbnMgY29udGFpbnNPYmplY3Q6W1tbc2VsZiBzdWdnZXN0ZWRGaWxlbmFtZV0gcGF0aEV4
dGVuc2lvbl0gbG93ZXJjYXNlU3RyaW5nXV0pCiAgICAgICAgICAgICByZXN1bHQgPSBAInRleHQv
cGxhaW4iOwpAQCAtNDEzLDEyICs0MTIsMTIgQEAgLSh2b2lkKWFkanVzdE1JTUVUeXBlSWZOZWNl
c3NhcnkKIAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKICAgICAvLyBXb3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vNTUzOTgyND4KLSAgICBpZiAoW3Jlc3VsdCBpc0VxdWFsVG9TdHJp
bmc6QCJ0ZXh0L3htbCJdKQorICAgIGlmIChbcmVzdWx0LmdldCgpIGlzRXF1YWxUb1N0cmluZzpA
InRleHQveG1sIl0pCiAgICAgICAgIHJlc3VsdCA9IEAiYXBwbGljYXRpb24veG1sIjsKICNlbmRp
ZgogCiAgICAgaWYgKHJlc3VsdCAhPSBvcmlnaW5hbFJlc3VsdCkKLSAgICAgICAgW3NlbGYgX3Nl
dE1JTUVUeXBlOnJlc3VsdF07CisgICAgICAgIFtzZWxmIF9zZXRNSU1FVHlwZTpyZXN1bHQuZ2V0
KCldOwogfQogCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjc5ODgpCisrKyBXZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTA5LTIxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXggc29tZSBPYmplY3RpdmUtQyBHQyBwcm9ibGVtcyBhbmQg
dXNlIFJldGFpblB0ciBpbnN0ZWFkIG9mIEhhcmRSZXRhaW4vUmVsZWFzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYyMjAKKworICAgICAgICAqIE1p
c2MvV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5tOgorICAgICAgICAoc2V0TWV0YURhdGEpOiBVc2Ug
Q0ZSZWxlYXNlIGluc3RlYWQgb2YgSGFyZFJlbGVhc2UuCisgICAgICAgICgtW05TRmlsZU1hbmFn
ZXIgX3dlYmtpdF9zZXRNZXRhZGF0YVVSTDpyZWZlcnJlcjphdFBhdGg6XSk6IFVzZSBDRlN0cmlu
Z0NyZWF0ZUNvcHkKKyAgICAgICAgaW5zdGVhZCBvZiAtW05TT2JqZWN0IGNvcHldIGNvbWJpbmVk
IHdpdGggSGFyZFJldGFpbldpdGhOU1JlbGVhc2UuCisKIDIwMTAtMDktMjEgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogV2ViS2l0L21hYy9NaXNjL1dlYk5TRmlsZU1hbmFnZXJFeHRyYXMubQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5tCShyZXZpc2lvbiA2
Nzk1OSkKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLm0JKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFz
LmgiCiAjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CiAjaW1w
b3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHN5cy9zdGF0Lmg+CiAKQEAg
LTg3LDE5ICs4NiwyMiBAQCAtIChOU1N0cmluZyAqKV93ZWJraXRfY2FyYm9uUGF0aEZvclBhdGg6
CiAKIHR5cGVkZWYgc3RydWN0IE1ldGFEYXRhSW5mbwogewotICAgIE5TU3RyaW5nICpVUkxTdHJp
bmc7Ci0gICAgTlNTdHJpbmcgKnJlZmVycmVyOwotICAgIE5TU3RyaW5nICpwYXRoOworICAgIENG
U3RyaW5nUmVmIFVSTFN0cmluZzsKKyAgICBDRlN0cmluZ1JlZiByZWZlcnJlcjsKKyAgICBDRlN0
cmluZ1JlZiBwYXRoOwogfSBNZXRhRGF0YUluZm87CiAKIHN0YXRpYyB2b2lkICpzZXRNZXRhRGF0
YSh2b2lkKiBjb250ZXh0KQogewogICAgIE1ldGFEYXRhSW5mbyAqaW5mbyA9IChNZXRhRGF0YUlu
Zm8gKiljb250ZXh0OwotICAgIFdLU2V0TWV0YWRhdGFVUkwoaW5mby0+VVJMU3RyaW5nLCBpbmZv
LT5yZWZlcnJlciwgaW5mby0+cGF0aCk7Ci0gICAgCi0gICAgSGFyZFJlbGVhc2UoaW5mby0+VVJM
U3RyaW5nKTsKLSAgICBIYXJkUmVsZWFzZShpbmZvLT5yZWZlcnJlcik7Ci0gICAgSGFyZFJlbGVh
c2UoaW5mby0+cGF0aCk7CisgICAgV0tTZXRNZXRhZGF0YVVSTCgoTlNTdHJpbmcgKilpbmZvLT5V
UkxTdHJpbmcsIChOU1N0cmluZyAqKWluZm8tPnJlZmVycmVyLCAoTlNTdHJpbmcgKilpbmZvLT5w
YXRoKTsKKworICAgIGlmIChpbmZvLT5VUkxTdHJpbmcpCisgICAgICAgIENGUmVsZWFzZShpbmZv
LT5VUkxTdHJpbmcpOworICAgIGlmIChpbmZvLT5yZWZlcnJlcikKKyAgICAgICAgQ0ZSZWxlYXNl
KGluZm8tPnJlZmVycmVyKTsKKyAgICBpZiAoaW5mby0+cGF0aCkKKyAgICAgICAgQ0ZSZWxlYXNl
KGluZm8tPnBhdGgpOwogICAgIAogICAgIGZyZWUoaW5mbyk7CiAgICAgcmV0dXJuIDA7CkBAIC0x
MjQsOSArMTI2LDkgQEAgLSAodm9pZClfd2Via2l0X3NldE1ldGFkYXRhVVJMOihOU1N0cmluZwog
CiAgICAgTWV0YURhdGFJbmZvICppbmZvID0gbWFsbG9jKHNpemVvZihNZXRhRGF0YUluZm8pKTsK
ICAgICAKLSAgICBpbmZvLT5VUkxTdHJpbmcgPSBIYXJkUmV0YWluV2l0aE5TUmVsZWFzZShbVVJM
U3RyaW5nIGNvcHldKTsKLSAgICBpbmZvLT5yZWZlcnJlciA9IEhhcmRSZXRhaW5XaXRoTlNSZWxl
YXNlKFtyZWZlcnJlciBjb3B5XSk7Ci0gICAgaW5mby0+cGF0aCA9IEhhcmRSZXRhaW5XaXRoTlNS
ZWxlYXNlKFtwYXRoIGNvcHldKTsKKyAgICBpbmZvLT5VUkxTdHJpbmcgPSBDRlN0cmluZ0NyZWF0
ZUNvcHkoMCwgKENGU3RyaW5nUmVmKVVSTFN0cmluZyk7CisgICAgaW5mby0+cmVmZXJyZXIgPSBD
RlN0cmluZ0NyZWF0ZUNvcHkoMCwgKENGU3RyaW5nUmVmKXJlZmVycmVyKTsKKyAgICBpbmZvLT5w
YXRoID0gQ0ZTdHJpbmdDcmVhdGVDb3B5KDAsIChDRlN0cmluZ1JlZilwYXRoKTsKIAogICAgIHB0
aHJlYWRfY3JlYXRlKCZ0aWQsICZhdHRyLCBzZXRNZXRhRGF0YSwgaW5mbyk7CiAgICAgcHRocmVh
ZF9hdHRyX2Rlc3Ryb3koJmF0dHIpOwo=
</data>
<flag name="review"
          id="57820"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>