<?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>111802</bug_id>
          
          <creation_ts>2013-03-07 18:00:27 -0800</creation_ts>
          <short_desc>Make all v8 weak callbacks type safe</short_desc>
          <delta_ts>2013-04-01 23:22:21 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Elliott Sprehn">esprehn</reporter>
          <assigned_to name="Elliott Sprehn">esprehn</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>850715</commentid>
    <comment_count>0</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-07 18:00:27 -0800</bug_when>
    <thetext>Make all v8 weak callbacks type safe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850717</commentid>
    <comment_count>1</comment_count>
      <attachid>192120</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-07 18:02:09 -0800</bug_when>
    <thetext>Created attachment 192120
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850719</commentid>
    <comment_count>2</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-07 18:03:53 -0800</bug_when>
    <thetext>Note that I&apos;m not suggesting we actually do this, but I worked through the motions of how we might do this so I figured I&apos;d post the patch.

It&apos;d be much nicer if we could just fix the v8 API to take a functor object with an operator() overload and then deal with the typesafe ourselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850728</commentid>
    <comment_count>3</comment_count>
      <attachid>192120</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-03-07 18:26:53 -0800</bug_when>
    <thetext>Comment on attachment 192120
WIP

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

&gt; Source/WebCore/ChangeLog:48
&gt; +        * bindings/v8/V8Utilities.h:
&gt; +        (WeakHandle):
&gt; +        (WebCore::WeakHandle::makeWeak):
&gt; +        (WebCore::WeakHandle::WeakHandle):
&gt; +        (WebCore::WeakHandle::invokeWeakCallback):
&gt; +        (WebCore::WeakHandle::weakHandleCallback):
&gt; +        (WebCore::makeWeak):

Actually V8Utilities.h is a collection of methods that should be moved to somewhere. Could you add the template to DOMWrapperMap.h ?

&gt; Source/WebCore/bindings/v8/DOMWrapperMap.h:111
&gt; -    v8::NearDeathCallback m_callback;
&gt; +    WeakCallbackType m_callback;

Sorry, I don&apos;t fully understand the magic. After this patch, &quot;v8::NearDeathCallback&quot; is completely gone away from V8 binding. Then how does it work as v8::NearDeathCallback ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850740</commentid>
    <comment_count>4</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-07 18:41:39 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 192120 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192120&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:48
&gt; &gt; +        * bindings/v8/V8Utilities.h:
&gt; &gt; +        (WeakHandle):
&gt; &gt; +        (WebCore::WeakHandle::makeWeak):
&gt; &gt; +        (WebCore::WeakHandle::WeakHandle):
&gt; &gt; +        (WebCore::WeakHandle::invokeWeakCallback):
&gt; &gt; +        (WebCore::WeakHandle::weakHandleCallback):
&gt; &gt; +        (WebCore::makeWeak):
&gt; 
&gt; Actually V8Utilities.h is a collection of methods that should be moved to somewhere. Could you add the template to DOMWrapperMap.h ?

Hmm, that would mean anyone using a v8::Persistent and calling makeWeak() would need to include DOMWrapperMap even if they don&apos;t use the wrapper map which is weird, but maybe it&apos;s okay.

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/DOMWrapperMap.h:111
&gt; &gt; -    v8::NearDeathCallback m_callback;
&gt; &gt; +    WeakCallbackType m_callback;
&gt; 
&gt; Sorry, I don&apos;t fully understand the magic. After this patch, &quot;v8::NearDeathCallback&quot; is completely gone away from V8 binding. Then how does it work as v8::NearDeathCallback ?

WeakHandle&lt;T, H&gt;::invokeWeakCallback is a v8::NearDeathCallback. Each call to makeWeak for each type creates a template instantiation with an invokeWeakCallback that calls the type safe version.

A major downside of this patch is that you couldn&apos;t have a class that has two different weakCallbacks. Right now we never do that so it&apos;s not an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850742</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-03-07 18:45:43 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Actually V8Utilities.h is a collection of methods that should be moved to somewhere. Could you add the template to DOMWrapperMap.h ?
&gt; 
&gt; Hmm, that would mean anyone using a v8::Persistent and calling makeWeak() would need to include DOMWrapperMap even if they don&apos;t use the wrapper map which is weird, but maybe it&apos;s okay.

Maybe it would be better to create a new header file.

&gt; &gt; Sorry, I don&apos;t fully understand the magic. After this patch, &quot;v8::NearDeathCallback&quot; is completely gone away from V8 binding. Then how does it work as v8::NearDeathCallback ?
&gt; 
&gt; WeakHandle&lt;T, H&gt;::invokeWeakCallback is a v8::NearDeathCallback. Each call to makeWeak for each type creates a template instantiation with an invokeWeakCallback that calls the type safe version.

Thanks, makes sense!
 
&gt; A major downside of this patch is that you couldn&apos;t have a class that has two different weakCallbacks. Right now we never do that so it&apos;s not an issue.

This wouldn&apos;t be an issue in practice. But we should have abarth look at the patch, as I don&apos;t understand the template magic well enough to review it:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851364</commentid>
    <comment_count>6</comment_count>
      <attachid>192120</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-08 11:37:41 -0800</bug_when>
    <thetext>Comment on attachment 192120
WIP

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

The type safety part of this patch is nice, but the static dependency in WeakHandle is really nasty.  I can see how having a real callback object in V8 would make this much nicer.

&gt; Source/WebCore/bindings/v8/DOMWrapperWorld.cpp:92
&gt; -    static_cast&lt;DOMWrapperWorld*&gt;(parameter)-&gt;deref();
&gt; +    world-&gt;deref();

That&apos;s nice!

&gt; Source/WebCore/bindings/v8/V8Utilities.h:89
&gt; +            static CallbackType s_callback = 0;

static!  Oh my.  This seems like a bad idea...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853077</commentid>
    <comment_count>7</comment_count>
      <attachid>192642</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-11 22:38:08 -0700</bug_when>
    <thetext>Created attachment 192642
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853078</commentid>
    <comment_count>8</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-11 22:42:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=192642) [details]
&gt; Patch

Here&apos;s a way that doesn&apos;t use the weird static locals. If anyone has ideas for better naming I&apos;m happy to change things.

Now we can add type safe weak listeners with:

WeakHandleListener&lt;Foo&gt;::makeWeak(isolate, handle, fooPtr);

or if the argument is something different than the thing creating the type we can use:

WeakHandleListener&lt;Bar, Foo&gt;::makeWeak(isolate, handle, fooPtr); // Foo handling specific to Bar.

This lets things like StringCache create a listener for StringImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853658</commentid>
    <comment_count>9</comment_count>
      <attachid>192642</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-12 11:28:42 -0700</bug_when>
    <thetext>Comment on attachment 192642
Patch

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

This is way better!

&gt; Source/WebCore/bindings/v8/V8Utilities.h:67
&gt; +    template&lt;class OwnerType, typename ArgumentType = OwnerType&gt;

Any reason why one of these arguments is &quot;class&quot; and the other &quot;typename&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853723</commentid>
    <comment_count>10</comment_count>
      <attachid>192642</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2013-03-12 13:03:34 -0700</bug_when>
    <thetext>Comment on attachment 192642
Patch

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

Super minor nits, happy to see the lack of a static.

&gt; Source/WebCore/bindings/v8/V8Utilities.h:66
&gt; +    // FIXME: We might move this to it&apos;s own file.

Tiny nit: s/it&apos;s/its/

&gt; Source/WebCore/bindings/v8/V8Utilities.h:79
&gt; +        explicit WeakHandleListener() { }

&quot;explicit&quot; doesn&apos;t have meaning here. Also, can you leave out the implementation of the constructor altogether?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853782</commentid>
    <comment_count>11</comment_count>
      <attachid>192642</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-03-12 14:37:14 -0700</bug_when>
    <thetext>Comment on attachment 192642
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/V8Utilities.h:67
&gt;&gt; +    template&lt;class OwnerType, typename ArgumentType = OwnerType&gt;
&gt; 
&gt; Any reason why one of these arguments is &quot;class&quot; and the other &quot;typename&quot;?

OwnerType is the class which is creating the weak handles, ArgumentType is just the thing that&apos;s passed into the callback. It could be class but it would prevent you from passing an int* or some such to the callback. Probably not a useful feature so I&apos;ll switch to class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867464</commentid>
    <comment_count>12</comment_count>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-04-01 18:21:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 192642 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192642&amp;action=review
&gt; 
&gt; Super minor nits, happy to see the lack of a static.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Utilities.h:66
&gt; &gt; +    // FIXME: We might move this to it&apos;s own file.
&gt; 
&gt; Tiny nit: s/it&apos;s/its/

Fixed.

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Utilities.h:79
&gt; &gt; +        explicit WeakHandleListener() { }
&gt; 
&gt; &quot;explicit&quot; doesn&apos;t have meaning here. Also, can you leave out the implementation of the constructor altogether?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867467</commentid>
    <comment_count>13</comment_count>
      <attachid>196049</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2013-04-01 18:23:33 -0700</bug_when>
    <thetext>Created attachment 196049
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867585</commentid>
    <comment_count>14</comment_count>
      <attachid>196049</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-01 23:22:17 -0700</bug_when>
    <thetext>Comment on attachment 196049
Patch for landing

Clearing flags on attachment: 196049

Committed r147391: &lt;http://trac.webkit.org/changeset/147391&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867586</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-01 23:22:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192120</attachid>
            <date>2013-03-07 18:02:09 -0800</date>
            <delta_ts>2013-03-11 22:38:05 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-111802-20130307175813.patch</filename>
            <type>text/plain</type>
            <size>21256</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDNkZDc0MTk2YjU4MzAy
OWZiMzNjNWRlZjVhOGMwZjI5NTI2MjE3Zi4uMTlmOTE1YTZjZGY0MDBmYjU0YTc4OTUwYTRmODdl
NzQ5YWFjYjZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEzLTAzLTA3ICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgYWxsIHY4
IHdlYWsgY2FsbGJhY2tzIHR5cGUgc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExODAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2l0aCBzb21lIGNyYXp5IHRlbXBsYXRlIGhhY2tlcnkgd2UgY2Fu
IG1ha2UgYWxsIHdlYWsgY2FsbGJhY2tzIHR5cGUgc2FmZQorICAgICAgICBzdWNoIHRoYXQgZ2V0
dGluZyB0aGUgd3JvbmcgYXJndW1lbnRzIHdvdWxkIGZhaWwgY29tcGlsYXRpb24uCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9ET01XcmFwcGVyTWFwLmg6CisgICAgICAgIChET01XcmFwcGVyTWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJNYXA6OkRPTVdyYXBwZXJNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NV3JhcHBlck1hcDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJN
YXA6OmRlZmF1bHRXZWFrQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTVdyYXBw
ZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc29sYXRlZFdvcmxkV2Vha0NhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6bWFrZUNvbnRleHRXZWFrKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRTdGF0ZTo6U2NyaXB0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3Rh
dGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
U3RhdGUuaDoKKyAgICAgICAgKFNjcmlwdFN0YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRXcmFwcGFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFdyYXBwYWJsZTo6c2V0
V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OndlYWtDYWxsYmFj
ayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OndlYWtFdmVudExpc3Rl
bmVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6
OnNldExpc3RlbmVyT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZl
bnRMaXN0ZW5lci5oOgorICAgICAgICAoVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOE11dGF0aW9uQ2FsbGJhY2s6OlY4TXV0YXRpb25DYWxsYmFjayk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpWOE11dGF0
aW9uQ2FsbGJhY2s6OndlYWtDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhOUE9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVNYXA6OnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOE5QVGVtcGxhdGVNYXA6OndlYWtDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjp3ZWFrTlBPYmplY3RDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhV
dGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYWtIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vh
a0hhbmRsZTo6bWFrZVdlYWspOgorICAgICAgICAoV2ViQ29yZTo6V2Vha0hhbmRsZTo6V2Vha0hh
bmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWFrSGFuZGxlOjppbnZva2VXZWFrQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6V2Vha0hhbmRsZTo6d2Vha0hhbmRsZUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VXZWFrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFZhbHVl
Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkU3RyaW5nQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6d2Vha1JlZmVyZW5jZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUluamVjdGVkU2NyaXB0SG9zdFY4V3JhcHBlcik6CisKIDIwMTMtMDMtMDcgIFNoZXJp
ZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIxNDUwOTcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01XcmFwcGVyTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01X
cmFwcGVyTWFwLmgKaW5kZXggZjk4Y2QzNmU1Y2ZhZjViNWIxYTY3YWEzMGQ5NWNkNTBjZDVjZjUx
Mi4uYzNjNjE2OTk4MzVhZWExMzlkYzA5MWI0ZGJiODFjMDNiMDcxNTc4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAuaApAQCAtMzEsNiArMzEsNyBAQAogI2lm
bmRlZiBET01XcmFwcGVyTWFwX2gKICNkZWZpbmUgRE9NV3JhcHBlck1hcF9oCiAKKyNpbmNsdWRl
ICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKICNpbmNsdWRlIDx2OC5oPgpAQCAtNDMs
OCArNDQsOSBAQCB0ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlPgogY2xhc3MgRE9NV3JhcHBlck1hcCB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNoTWFwPEtleVR5cGUqLCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiA+IE1hcFR5cGU7CisgICAgdHlwZWRlZiB2b2lkICgqV2Vha0NhbGxiYWNrVHlw
ZSkodjg6Oklzb2xhdGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCBET01XcmFwcGVyTWFw
PEtleVR5cGU+Kik7CiAKLSAgICBleHBsaWNpdCBET01XcmFwcGVyTWFwKHY4OjpJc29sYXRlKiBp
c29sYXRlLCB2ODo6TmVhckRlYXRoQ2FsbGJhY2sgY2FsbGJhY2sgPSAmZGVmYXVsdFdlYWtDYWxs
YmFjaykKKyAgICBleHBsaWNpdCBET01XcmFwcGVyTWFwKHY4OjpJc29sYXRlKiBpc29sYXRlLCBX
ZWFrQ2FsbGJhY2tUeXBlIGNhbGxiYWNrID0gJmRlZmF1bHRXZWFrQ2FsbGJhY2spCiAgICAgICAg
IDogbV9jYWxsYmFjayhjYWxsYmFjaykKICAgICAgICAgLCBtX2lzb2xhdGUoaXNvbGF0ZSkKICAg
ICB7CkBAIC02MSw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PEtleVR5cGUqPih0b05hdGl2ZSh3cmFwcGVyKSkgPT0ga2V5KTsKICAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gcGVyc2lzdGVudCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcobV9pc29sYXRlLCB3cmFwcGVyKTsKICAgICAgICAgY29uZmlndXJhdGlvbi5jb25maWd1
cmVXcmFwcGVyKHBlcnNpc3RlbnQsIG1faXNvbGF0ZSk7Ci0gICAgICAgIHBlcnNpc3RlbnQuTWFr
ZVdlYWsobV9pc29sYXRlLCB0aGlzLCBtX2NhbGxiYWNrKTsKKyAgICAgICAgbWFrZVdlYWsobV9p
c29sYXRlLCBwZXJzaXN0ZW50LCB0aGlzLCBtX2NhbGxiYWNrKTsKICAgICAgICAgbV9tYXAuc2V0
KGtleSwgcGVyc2lzdGVudCk7CiAgICAgfQogCkBAIC05NSw5ICs5Nyw4IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgZGVmYXVsdFdlYWtDYWxsYmFjayh2ODo6
SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCog
Y29udGV4dCkKKyAgICBzdGF0aWMgdm9pZCBkZWZhdWx0V2Vha0NhbGxiYWNrKHY4OjpJc29sYXRl
KiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCBET01XcmFwcGVyTWFw
PEtleVR5cGU+KiBtYXApCiAgICAgewotICAgICAgICBET01XcmFwcGVyTWFwPEtleVR5cGU+KiBt
YXAgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyTWFwPEtleVR5cGU+Kj4oY29udGV4dCk7CiAgICAg
ICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1
ZSk7CiAgICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IHRvV3JhcHBlclR5cGVJbmZvKHdy
YXBwZXIpOwpAQCAtMTA3LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHR5cGUtPmRlcmVm
T2JqZWN0KGtleSk7CiAgICAgfQogCi0gICAgdjg6Ok5lYXJEZWF0aENhbGxiYWNrIG1fY2FsbGJh
Y2s7CisgICAgV2Vha0NhbGxiYWNrVHlwZSBtX2NhbGxiYWNrOwogICAgIHY4OjpJc29sYXRlKiBt
X2lzb2xhdGU7CiAgICAgTWFwVHlwZSBtX21hcDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcAppbmRleCA1YjVlM2EwMzkwYzU2NmZmZjMzMDQw
MjhhN2E3MWY0NWVkYzE0NDYwLi5mODFjM2EzMjIwYzM4YTA1NDY3OGNkYWZjM2IzYWM4N2M0NDJm
ZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29y
bGQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5j
cHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJWOERPTUFjdGl2aXR5TG9nZ2VyLmgiCiAj
aW5jbHVkZSAiVjhET01XaW5kb3cuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNs
dWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTg0
LDExICs4NSwxMSBAQCBib29sIERPTVdyYXBwZXJXb3JsZDo6Y29udGV4dEhhc0NvcnJlY3RQcm90
b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dAogICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmlzV3JhcHBlck9mVHlwZSh0b0lubmVyR2xvYmFsT2JqZWN0KGNvbnRleHQpLCAmVjhE
T01XaW5kb3c6OmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBpc29sYXRlZFdvcmxkV2Vha0NhbGxi
YWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVj
dCwgdm9pZCogcGFyYW1ldGVyKQorc3RhdGljIHZvaWQgaXNvbGF0ZWRXb3JsZFdlYWtDYWxsYmFj
ayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3Qs
IERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgb2JqZWN0LkRpc3Bvc2UoaXNvbGF0ZSk7
CiAgICAgb2JqZWN0LkNsZWFyKCk7Ci0gICAgc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4o
cGFyYW1ldGVyKS0+ZGVyZWYoKTsKKyAgICB3b3JsZC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBET01X
cmFwcGVyV29ybGQ6Om1ha2VDb250ZXh0V2Vhayh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0KQpAQCAtOTYsNyArOTcsOCBAQCB2b2lkIERPTVdyYXBwZXJXb3JsZDo6bWFrZUNvbnRleHRX
ZWFrKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCiAgICAgQVNTRVJUKGlzSXNvbGF0
ZWRXb3JsZCgpKTsKICAgICBBU1NFUlQoaXNvbGF0ZWRXb3JsZChjb250ZXh0KSA9PSB0aGlzKTsK
ICAgICB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGNvbnRleHQtPkdldElzb2xhdGUoKTsKLSAgICB2
ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlLCBjb250ZXh0KS5NYWtlV2Vh
ayhpc29sYXRlLCB0aGlzLCBpc29sYXRlZFdvcmxkV2Vha0NhbGxiYWNrKTsKKyAgICB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gcGVyc2lzdGVudCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpDb250
ZXh0Pjo6TmV3KGlzb2xhdGUsIGNvbnRleHQpOworICAgIG1ha2VXZWFrKGlzb2xhdGUsIHBlcnNp
c3RlbnQsIHRoaXMsIGlzb2xhdGVkV29ybGRXZWFrQ2FsbGJhY2spOwogICAgIC8vIE1hdGNoaW5n
IGRlcmVmIGlzIGluIHdlYWsgY2FsbGJhY2suCiAgICAgdGhpcy0+cmVmKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAKaW5kZXggZWExZTA4Yzk4NGYzZTIz
Yzg5YzJkODRlMWU4YjdjODZjNGVjMjgwZi4uY2E2NWMwNzQyZDRiZTQ1ZDFlNzNjYmNlZWU4ZGM3
YmY5MTA0MGViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNw
cApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCisj
aW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHQuaCIKICNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oIgpAQCAtNDgsNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTY3JpcHRTdGF0ZTo6
U2NyaXB0U3RhdGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKICAgICA6IG1fY29u
dGV4dChjb250ZXh0KQogewotICAgIG1fY29udGV4dC5nZXQoKS5NYWtlV2Vhayhjb250ZXh0LT5H
ZXRJc29sYXRlKCksIHRoaXMsICZTY3JpcHRTdGF0ZTo6d2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsK
KyAgICBtYWtlV2Vhayhjb250ZXh0LT5HZXRJc29sYXRlKCksIG1fY29udGV4dC5nZXQoKSwgdGhp
cywgJlNjcmlwdFN0YXRlOjp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2spOwogfQogCiBTY3JpcHRTdGF0
ZTo6flNjcmlwdFN0YXRlKCkKQEAgLTkwLDkgKzkxLDggQEAgU2NyaXB0U3RhdGUqIFNjcmlwdFN0
YXRlOjpjdXJyZW50KCkKICAgICByZXR1cm4gU2NyaXB0U3RhdGU6OmZvckNvbnRleHQoY29udGV4
dCk7CiB9CiAKLXZvaWQgU2NyaXB0U3RhdGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6SXNv
bGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBh
cmFtZXRlcikKK3ZvaWQgU2NyaXB0U3RhdGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6SXNv
bGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSkKIHsKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBzdGF0
aWNfY2FzdDxTY3JpcHRTdGF0ZSo+KHBhcmFtZXRlcik7CiAgICAgZGVsZXRlIHNjcmlwdFN0YXRl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAppbmRleCA3Zjhm
NzhjOGI2ODQ2N2JkZTUxZGM1MjA3MDlkNTdlODI4M2ZkNzkxLi44MDBmOWRjMzgyYzhmMDk2NDRl
YWYxMThkMGUxOTBiMTEyMWM1YzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFN0YXRlLmgKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgU2NyaXB0U3Rh
dGUqIG1haW5Xb3JsZFNjcmlwdFN0YXRlKEZyYW1lKik7CiAgICAgZXhwbGljaXQgU2NyaXB0U3Rh
dGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogCi0gICAgc3RhdGljIHZvaWQgd2Vha1JlZmVy
ZW5jZUNhbGxiYWNrKHY4OjpJc29sYXRlKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9p
ZCogcGFyYW1ldGVyKTsKKyAgICBzdGF0aWMgdm9pZCB3ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6
Oklzb2xhdGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCBTY3JpcHRTdGF0ZSopOwogCiAg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbV9leGNlcHRpb247CiAgICAgU2NvcGVkUGVyc2lzdGVu
dDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0V3JhcHBhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRXcmFwcGFibGUuaAppbmRleCAxZTdkNDYwZDRkOGI1MWIzNzljZDBiZGMxNjhkODFkNzZm
YjE3YTFhLi4zYWRjNzY2ODE4ZTQ1MjdjNDE5M2FkY2JjYTljYWIwMmIyNDJlY2E3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRXcmFwcGFibGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRXcmFwcGFibGUuaApAQCAtMzEsNiArMzEs
NyBAQAogI2lmbmRlZiBTY3JpcHRXcmFwcGFibGVfaAogI2RlZmluZSBTY3JpcHRXcmFwcGFibGVf
aAogCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5z
dHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8
djguaD4KQEAgLTUxLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9tYXNrZWRX
cmFwcGVyLklzRW1wdHkoKSk7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHBl
cnNpc3RlbnQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGlzb2xhdGUsIHdyYXBw
ZXIpOwogICAgICAgICBjb25maWd1cmF0aW9uLmNvbmZpZ3VyZVdyYXBwZXIocGVyc2lzdGVudCwg
aXNvbGF0ZSk7Ci0gICAgICAgIHBlcnNpc3RlbnQuTWFrZVdlYWsoaXNvbGF0ZSwgdGhpcywgd2Vh
a0NhbGxiYWNrKTsKKyAgICAgICAgbWFrZVdlYWsoaXNvbGF0ZSwgcGVyc2lzdGVudCwgdGhpcywg
JndlYWtDYWxsYmFjayk7CiAgICAgICAgIG1fbWFza2VkV3JhcHBlciA9IG1hc2tPclVubWFza1Bv
aW50ZXIoKnBlcnNpc3RlbnQpOwogICAgIH0KIApAQCAtODEsOSArODIsOCBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2ODo6T2JqZWN0Kj4oKG9iamVjdFBvaW50
ZXIgXiByYW5kb21NYXNrKSAmICghb2JqZWN0UG9pbnRlciAtIDEpKTsgLy8gUHJlc2VydmUgbnVs
bCB3aXRob3V0IGJyYW5jaGluZy4KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB3ZWFrQ2FsbGJh
Y2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFsdWUs
IHZvaWQqIGNvbnRleHQpCisgICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpJc29sYXRl
KiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRXcmFwcGFi
bGUqIGtleSkKICAgICB7Ci0gICAgICAgIFNjcmlwdFdyYXBwYWJsZSoga2V5ID0gc3RhdGljX2Nh
c3Q8U2NyaXB0V3JhcHBhYmxlKj4oY29udGV4dCk7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNP
YmplY3QoKSk7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSk7CiAgICAgICAgIEFTU0VSVChr
ZXktPndyYXBwZXIoKSA9PSB3cmFwcGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAppbmRleCAwOTBmMDlkMWI1MWQ2
ZjFjOTcxNTFjYTc5NWU1ZGIzNThkMzZlMzZjLi5hNGRhM2JhN2MzYjE2MjFjNTg5OGMyOWMwMWJj
ZjIyNjQ1OTkzMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC00Nyw5ICs0Nyw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6d2Vha0V2ZW50TGlz
dGVuZXJDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiwgdm9pZCogcGFyYW1ldGVyKQordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6d2Vh
a0V2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiwgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQogewotICAg
IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4QWJzdHJh
Y3RFdmVudExpc3RlbmVyKj4ocGFyYW1ldGVyKTsKICAgICBsaXN0ZW5lci0+bV9saXN0ZW5lci5j
bGVhcigpOwogfQogCkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQK
IHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OnNldExpc3RlbmVyT2JqZWN0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gbGlzdGVuZXIpCiB7CiAgICAgbV9saXN0ZW5lci5zZXQobGlzdGVuZXIp
OwotICAgIG1fbGlzdGVuZXIuZ2V0KCkuTWFrZVdlYWsobV9pc29sYXRlLCB0aGlzLCAmVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXI6OndlYWtFdmVudExpc3RlbmVyQ2FsbGJhY2spOworICAgIG1ha2VX
ZWFrKG1faXNvbGF0ZSwgbV9saXN0ZW5lci5nZXQoKSwgdGhpcywgJlY4QWJzdHJhY3RFdmVudExp
c3RlbmVyOjp3ZWFrRXZlbnRMaXN0ZW5lckNhbGxiYWNrKTsKIH0KIAogdm9pZCBWOEFic3RyYWN0
RXZlbnRMaXN0ZW5lcjo6aW52b2tlRXZlbnRIYW5kbGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEV2ZW50KiBldmVudCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaAppbmRleCAxMjAxYjE4ODc3NGIyN2E5YmZiOGE2OThhYjgwM2E1Njk2ODUxZjA3Li4wYWUy
OGZmYzU0OTI3MWQ4YWY3ZDRmYjA5ZWFlM2JmNzBiNDc4MDdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKQEAgLTExOCw3
ICsxMTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBnZXRSZWNlaXZlck9iamVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKTsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyB2b2lkIHdlYWtFdmVudExpc3RlbmVyQ2Fs
bGJhY2sodjg6Oklzb2xhdGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBwYXJh
bWV0ZXIpOworICAgICAgICBzdGF0aWMgdm9pZCB3ZWFrRXZlbnRMaXN0ZW5lckNhbGxiYWNrKHY4
OjpJc29sYXRlKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIqKTsKIAogICAgICAgICAvLyBJbXBsZW1lbnRhdGlvbiBvZiBFdmVudExpc3RlbmVyIGZ1
bmN0aW9uLgogICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbGlzQXR0cmlidXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0F0dHJpYnV0ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5jcHAKaW5kZXggZGIyY2IwMWYyMzc5YmJmZjg4NTE4ZWFk
NmZlOWY3NjgxNTI3YjU5OS4uNDkwOGJhZmNiMjlkMTVlMmJhMzk1MjgwNzk4ZjZmYTM4ZTEwNGRi
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxi
YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE11dGF0aW9uQ2FsbGJh
Y2suY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiVjhDYWxsYmFjay5oIgogI2luY2x1
ZGUgIlY4TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUgIlY4TXV0YXRpb25SZWNvcmQuaCIK
KyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQyLDcgQEAgVjhNdXRhdGlvbkNhbGxiYWNr
OjpWOE11dGF0aW9uQ2FsbGJhY2sodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjYWxsYmFjaywgU2Ny
aXB0RXgKICAgICAsIG1fd29ybGQoRE9NV3JhcHBlcldvcmxkOjppc29sYXRlZFdvcmxkKHY4OjpD
b250ZXh0OjpHZXRDdXJyZW50KCkpKQogewogICAgIG93bmVyLT5TZXRIaWRkZW5WYWx1ZShWOEhp
ZGRlblByb3BlcnR5TmFtZTo6Y2FsbGJhY2soKSwgY2FsbGJhY2spOwotICAgIG1fY2FsbGJhY2su
Z2V0KCkuTWFrZVdlYWsoaXNvbGF0ZSwgdGhpcywgJlY4TXV0YXRpb25DYWxsYmFjazo6d2Vha0Nh
bGxiYWNrKTsKKyAgICBtYWtlV2Vhayhpc29sYXRlLCBtX2NhbGxiYWNrLmdldCgpLCB0aGlzLCAm
VjhNdXRhdGlvbkNhbGxiYWNrOjp3ZWFrQ2FsbGJhY2spOwogfQogCiBib29sIFY4TXV0YXRpb25D
YWxsYmFjazo6aGFuZGxlRXZlbnQoTXV0YXRpb25SZWNvcmRBcnJheSogbXV0YXRpb25zLCBNdXRh
dGlvbk9ic2VydmVyKiBvYnNlcnZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhNdXRhdGlvbkNhbGxiYWNrLmgKaW5kZXggYzRmOThmZWFiY2UzNDM0ZmUzMWFmM2IwYzA3OTgy
ZTQzYTUyNjBkYS4uNjM1ZWIwYWQ5MzM2MDUyYTA3YmE1ZmYxNGI5M2ZhN2NjNGM0ZDg2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmgKQEAg
LTUyLDkgKzUyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBWOE11dGF0aW9uQ2FsbGJhY2so
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4sIHY4OjpJc29sYXRlKik7CiAKLSAgICBzdGF0aWMgdm9pZCB3ZWFrQ2Fs
bGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3Jh
cHBlciwgdm9pZCogcGFyYW1ldGVyKQorICAgIHN0YXRpYyB2b2lkIHdlYWtDYWxsYmFjayh2ODo6
SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyLCBWOE11
dGF0aW9uQ2FsbGJhY2sqIG9iamVjdCkKICAgICB7Ci0gICAgICAgIFY4TXV0YXRpb25DYWxsYmFj
ayogb2JqZWN0ID0gc3RhdGljX2Nhc3Q8VjhNdXRhdGlvbkNhbGxiYWNrKj4ocGFyYW1ldGVyKTsK
ICAgICAgICAgb2JqZWN0LT5tX2NhbGxiYWNrLmNsZWFyKCk7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCmluZGV4IDJiZmJiZDgxZWRhNGZmOTU5Y2Fj
NjU0YjBkZTg2Y2Q0NWUzMTI2ZDYuLmM0YTRkZWJiODcxNzk0ODA3ZmMwOGE5OTM5YWZkNDU5NmNh
NWZjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiVjhIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUg
IlY4TlBVdGlscy5oIgogI2luY2x1ZGUgIlY4T2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCiAjaW5jbHVkZSAi
bnBydW50aW1lX3ByaXYuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KQEAgLTE3NSw3
ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIW1fbWFwLmNvbnRhaW5z
KGtleSkpOwogICAgICAgICBtX21hcC5zZXQoa2V5LCB3cmFwcGVyKTsKLSAgICAgICAgd3JhcHBl
ci5NYWtlV2VhayhtX2lzb2xhdGUsIGtleSwgd2Vha0NhbGxiYWNrKTsKKyAgICAgICAgbWFrZVdl
YWsobV9pc29sYXRlLCB3cmFwcGVyLCBrZXksIHdlYWtDYWxsYmFjayk7CiAgICAgfQogCiAgICAg
c3RhdGljIFY4TlBUZW1wbGF0ZU1hcCYgc2hhcmVkSW5zdGFuY2Uodjg6Oklzb2xhdGUqIGlzb2xh
dGUpCkBAIC0xOTEsOSArMTkyLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogY29udGV4dCkKKyAgICBzdGF0aWMgdm9pZCB3ZWFr
Q2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4g
b2JqZWN0LCBQcml2YXRlSWRlbnRpZmllciogY29udGV4dCkKICAgICB7Ci0gICAgICAgIHNoYXJl
ZEluc3RhbmNlKGlzb2xhdGUpLmRpc3Bvc2Uoc3RhdGljX2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIq
Pihjb250ZXh0KSk7CisgICAgICAgIHNoYXJlZEluc3RhbmNlKGlzb2xhdGUpLmRpc3Bvc2UoY29u
dGV4dCk7CiAgICAgfQogCiAgICAgdm9pZCBkaXNwb3NlKFByaXZhdGVJZGVudGlmaWVyKiBrZXkp
CkBAIC0zODMsNyArMzg0LDcgQEAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IG5wT2JqZWN0SW5kZXhl
ZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJgogICAgIHJldHVybiBu
cE9iamVjdFByb3BlcnR5RW51bWVyYXRvcihpbmZvLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyB2b2lk
IHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpJc29sYXRlKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZh
bHVlPiwgdm9pZCopOworc3RhdGljIHZvaWQgd2Vha05QT2JqZWN0Q2FsbGJhY2sodjg6Oklzb2xh
dGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCBET01XcmFwcGVyTWFwPE5QT2JqZWN0Piop
OwogCiBzdGF0aWMgRE9NV3JhcHBlck1hcDxOUE9iamVjdD4mIHN0YXRpY05QT2JqZWN0TWFwKCkK
IHsKQEAgLTM5MSw3ICszOTIsNyBAQCBzdGF0aWMgRE9NV3JhcHBlck1hcDxOUE9iamVjdD4mIHN0
YXRpY05QT2JqZWN0TWFwKCkKICAgICByZXR1cm4gbnBPYmplY3RNYXA7CiB9CiAKLXN0YXRpYyB2
b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2b2lkKikKK3N0YXRpYyB2b2lkIHdlYWtOUE9iamVjdENh
bGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZh
bHVlLCBET01XcmFwcGVyTWFwPE5QT2JqZWN0PiopCiB7CiAgICAgQVNTRVJUKHZhbHVlLT5Jc09i
amVjdCgpKTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4VXRpbGl0aWVzLmgKaW5kZXggMjRiMjNjZmUzZGUxYTYyODJhNjJlMmRhNWNmZWYzNjBi
OWJjZTM0NC4uZmIyMzYxOGMwZTUwODc0ODJlMTU4YWNiMmQ1OTRmZWU5MGNhN2YwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oCkBAIC02Myw2ICs2Myw0NSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgYm9vbCBleHRyYWN0VHJhbnNmZXJhYmxlcyh2ODo6TG9j
YWw8djg6OlZhbHVlPiwgTWVzc2FnZVBvcnRBcnJheSYsIEFycmF5QnVmZmVyQXJyYXkmLCB2ODo6
SXNvbGF0ZSopOyAKICAgICBib29sIGdldE1lc3NhZ2VQb3J0QXJyYXkodjg6OkxvY2FsPHY4OjpW
YWx1ZT4sIE1lc3NhZ2VQb3J0QXJyYXkmLCB2ODo6SXNvbGF0ZSopOwogCisgICAgLy8gRklYTUU6
IFRoaXMgaXMgbmFzdHksIGlmIHY4IGFjY2VwdGVkIGEgc3RkOjpmdW5jdGlvbiBvciBzb21lIGtp
bmQgb2YgQ2FsbGJhY2sKKyAgICAvLyBvYmplY3Qgd2Ugd291bGRuJ3QgbmVlZCB0aGlzLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNsYXNzIEg+CisgICAgY2xhc3MgV2Vha0hhbmRsZSB7Cisg
ICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIHZvaWQgKCpDYWxsYmFja1R5cGUpKHY4OjpJc29s
YXRlKiwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgVCopOworCisgICAgICAgIHN0YXRpYyB2
b2lkIG1ha2VXZWFrKHY4OjpJc29sYXRlKiBpc29sYXRlLCBIIGhhbmRsZSwgVCogcGFyYW1ldGVy
LCBDYWxsYmFja1R5cGUgY2FsbGJhY2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHdlYWtIYW5k
bGVDYWxsYmFjayhjYWxsYmFjayk7CisgICAgICAgICAgICBoYW5kbGUuTWFrZVdlYWsoaXNvbGF0
ZSwgcGFyYW1ldGVyLCAmaW52b2tlV2Vha0NhbGxiYWNrKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgZXhwbGljaXQgV2Vha0hhbmRsZSgpIHsgfQorCisgICAgICAgIHN0YXRp
YyB2b2lkIGludm9rZVdlYWtDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiBoYW5kbGUsIHZvaWQqIHBhcmFtZXRlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgKHdlYWtIYW5kbGVDYWxsYmFjaygpKShpc29sYXRlLCBoYW5kbGUsIHN0YXRpY19j
YXN0PFQqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBDYWxsYmFj
a1R5cGUgd2Vha0hhbmRsZUNhbGxiYWNrKENhbGxiYWNrVHlwZSBjYWxsYmFjayA9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBDYWxsYmFja1R5cGUgc19jYWxsYmFjayA9IDA7Cisg
ICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXNfY2Fs
bGJhY2sgfHwgc19jYWxsYmFjayA9PSBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgc19jYWxs
YmFjayA9IGNhbGxiYWNrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKHNfY2Fs
bGJhY2spOworICAgICAgICAgICAgcmV0dXJuIHNfY2FsbGJhY2s7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgY2xhc3MgSD4KKyAgICBzdGF0aWMgdm9pZCBt
YWtlV2Vhayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgSCBoYW5kbGUsIFQqIHBhcmFtZXRlciwgdm9p
ZCAoKmNhbGxiYWNrKSh2ODo6SXNvbGF0ZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIFQq
KSkKKyAgICB7CisgICAgICAgIFdlYWtIYW5kbGU8VCwgSD46Om1ha2VXZWFrKGlzb2xhdGUsIGhh
bmRsZSwgcGFyYW1ldGVyLCBjYWxsYmFjayk7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBWOFV0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhWYWx1ZUNhY2hlLmNwcAppbmRleCAxOTVlNTIzYThjZDIwODQwZjhkM2EyZGZmNGE5YTU0
ZjBiZjlkZjJlLi5kNzQ3OGE2NjYyZTk3MTAzNzI2ODU5YWEyNWVmZjE2MWUyNDBiOGZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJWOFZhbHVlQ2FjaGUuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoTWFw
Lmg+CiAKQEAgLTU3LDkgKzU4LDggQEAgc3RhdGljIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBtYWtl
RXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuIG5ld1N0cmlu
ZzsKIH0KIAotc3RhdGljIHZvaWQgY2FjaGVkU3RyaW5nQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlz
b2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciwgdm9pZCogcGFyYW1ldGVy
KQorc3RhdGljIHZvaWQgY2FjaGVkU3RyaW5nQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUs
IHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciwgU3RyaW5nSW1wbCogc3RyaW5nSW1w
bCkKIHsKLSAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1w
bCo+KHBhcmFtZXRlcik7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpLT5zdHJpbmdD
YWNoZSgpLT5yZW1vdmUoc3RyaW5nSW1wbCk7CiAgICAgd3JhcHBlci5EaXNwb3NlKGlzb2xhdGUp
OwogICAgIHdyYXBwZXIuQ2xlYXIoKTsKQEAgLTk5LDcgKzk5LDcgQEAgdjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiBTdHJpbmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZ1Nsb3coU3RyaW5nSW1wbCogc3Ry
aW5nSW1wbCwKIAogICAgIHN0cmluZ0ltcGwtPnJlZigpOwogICAgIHdyYXBwZXIuTWFya0luZGVw
ZW5kZW50KGlzb2xhdGUpOwotICAgIHdyYXBwZXIuTWFrZVdlYWsoaXNvbGF0ZSwgc3RyaW5nSW1w
bCwgY2FjaGVkU3RyaW5nQ2FsbGJhY2spOworICAgIG1ha2VXZWFrKGlzb2xhdGUsIHdyYXBwZXIs
IHN0cmluZ0ltcGwsIGNhY2hlZFN0cmluZ0NhbGxiYWNrKTsKICAgICBtX3N0cmluZ0NhY2hlLnNl
dChzdHJpbmdJbXBsLCB3cmFwcGVyKTsKIAogICAgIG1fbGFzdFN0cmluZ0ltcGwgPSBzdHJpbmdJ
bXBsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKaW5kZXggNzMzOTEzOTVjY2NlNmFkOTQxYjFj
ZmRjODNmMDZiNzJiYjBhYWQzNS4uMTJkN2MyZmJiMTUyMWY2ZWZlMzIxN2UyYjM0ZjRiNGVmY2Zi
YWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC00MSwxNCArNDEsMTQgQEAKICNp
bmNsdWRlICJWOERPTVdpbmRvdy5oIgogI2luY2x1ZGUgIlY4SW5qZWN0ZWRTY3JpcHRIb3N0Lmgi
CiAjaW5jbHVkZSAiVjhSZWN1cnNpb25TY29wZS5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyB2b2lkIFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3N0YXRpYyB2b2lk
IHdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiBvYmplY3QsIEluamVjdGVkU2NyaXB0SG9zdCogaG9zdCkKIHsKLSAgICBJ
bmplY3RlZFNjcmlwdEhvc3QqIG5hdGl2ZU9iamVjdCA9IHN0YXRpY19jYXN0PEluamVjdGVkU2Ny
aXB0SG9zdCo+KHBhcmFtZXRlcik7Ci0gICAgbmF0aXZlT2JqZWN0LT5kZXJlZigpOworICAgIGhv
c3QtPmRlcmVmKCk7CiAgICAgb2JqZWN0LkRpc3Bvc2UoaXNvbGF0ZSk7CiAgICAgb2JqZWN0LkNs
ZWFyKCk7CiB9CkBAIC02OSw4ICs2OSw4IEBAIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
Y3JlYXRlSW5qZWN0ZWRTY3JpcHRIb3N0VjhXcmFwcGVyKEluamVjdGVkU2NyaXB0SG9zCiAgICAg
Ly8gQ3JlYXRlIGEgd2VhayByZWZlcmVuY2UgdG8gdGhlIHY4IHdyYXBwZXIgb2YgSW5zcGVjdG9y
QmFja2VuZCB0byBkZXJlZgogICAgIC8vIEluc3BlY3RvckJhY2tlbmQgd2hlbiB0aGUgd3JhcHBl
ciBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KICAgICBob3N0LT5yZWYoKTsKLSAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3ZWFrSGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46
Ok5ldyhpc29sYXRlLCBpbnN0YW5jZSk7Ci0gICAgd2Vha0hhbmRsZS5NYWtlV2Vhayhpc29sYXRl
LCBob3N0LCAmV2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0PiBwZXJzaXN0ZW50ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhpc29s
YXRlLCBpbnN0YW5jZSk7CisgICAgbWFrZVdlYWsoaXNvbGF0ZSwgcGVyc2lzdGVudCwgaG9zdCwg
JndlYWtSZWZlcmVuY2VDYWxsYmFjayk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192642</attachid>
            <date>2013-03-11 22:38:08 -0700</date>
            <delta_ts>2013-04-01 18:23:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111802-20130311223407.patch</filename>
            <type>text/plain</type>
            <size>24546</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NDMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMjFkMzUzYmNjNzI4
ZWNmM2EyMDA4OTBkODVhMzA0YjFkYzgxNy4uMGY3MDMzOTE0NGJhNDViZDU5NTdkZGUzOTcyMTVj
ZjBiMmFkYTE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAzLTExICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgYWxsIHY4
IHdlYWsgY2FsbGJhY2tzIHR5cGUgc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExODAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBhbGwgdjggaGFuZGxlIHdlYWsgY2FsbGJhY2tzIHR5cGVz
YWZlIGJ5IGFkZGluZyBhIG5ldyBjbGFzcyBXZWFrSGFuZGxlTGlzdG5lcgorICAgICAgICB0aGF0
IHVzZXMgdGVtcGxhdGVzIHRvIGdlbmVyYXRlIHRoZSBjYWxsYmFjayBwcm94aWVzIHRoYXQgaGF2
ZSB0aGUgY29ycmVjdCB0eXBlCisgICAgICAgIGFyZ3VtZW50cy4gTm93IGdldHRpbmcgdGhlIGFy
Z3VtZW50cyB3cm9uZyB3aWxsIGZhaWwgY29tcGlsYXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01E
YXRhU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2spOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJN
YXA6OkRPTVdyYXBwZXJNYXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlck1hcDo6c2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdyYXBwZXJNYXA6OnJlcG9ydE1lbW9yeVVzYWdlKToK
KyAgICAgICAgKERPTVdyYXBwZXJNYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTVdyYXBw
ZXJXb3JsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdyYXBwZXJXb3JsZDo6bWFrZUNvbnRleHRXZWFrKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaDoKKyAgICAgICAgKFNjcmlwdFN0YXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9TY3JpcHRXcmFwcGFibGUuaDoKKyAgICAgICAgKFNjcmlwdFdyYXBw
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRXcmFwcGFibGU6OnNldFdyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6OjpjYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6OjpjYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6c2V0TGlzdGVuZXJP
YmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6
CisgICAgICAgIChWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhNdXRhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6VjhNdXRhdGlvbkNhbGxiYWNrOjpWOE11dGF0aW9uQ2FsbGJh
Y2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5oOgorICAgICAg
ICAoVjhNdXRhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0
LmNwcDoKKyAgICAgICAgKFY4TlBUZW1wbGF0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpWOE5Q
VGVtcGxhdGVNYXA6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjo6OmNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OnN0YXRpY05QT2JqZWN0TWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFV0aWxpdGllcy5oOgorICAgICAgICAoV2Vha0hhbmRsZUxpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYWtIYW5kbGVMaXN0ZW5lcjo6bWFrZVdlYWspOgorICAgICAgICAoV2ViQ29yZTo6
V2Vha0hhbmRsZUxpc3RlbmVyOjpXZWFrSGFuZGxlTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2Vha0hhbmRsZUxpc3RlbmVyOjppbnZva2VXZWFrQ2FsbGJhY2spOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nU2xvdyk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlSW5qZWN0ZWRTY3JpcHRIb3N0VjhXcmFwcGVyKToKKwogMjAxMy0wMy0xMSAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBQREZQbHVnaW46IE1ha2Ug
c2Nyb2xsaW5nIGJldHdlZW4gcGFnZXMgaW4gbm9uLWNvbnRpbnVvdXMgbW9kZXMgd29yawpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAppbmRleCBjMDUwMzNmMGI2Y2E1
YzM2OThhYTc2NDU4Mzk2ZmFhM2MxMmYwZWE2Li5lZTQyNDcwYWMzNmFhYzVmYWM3YWRmZjIwNmQx
YTBlNDI1ZmVhNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01E
YXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUu
aApAQCAtMTYyLDYgKzE2MiwxOCBAQCBwcml2YXRlOgogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4g
bV93cmFwcGVyTWFwOwogfTsKIAordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgV2Vha0hhbmRsZUxp
c3RlbmVyPERPTVdyYXBwZXJNYXA8dm9pZD4gPjo6Y2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xh
dGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFsdWUsIERPTVdyYXBwZXJNYXA8dm9pZD4q
IG1hcCkKK3sKKyAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2Fz
dCh2YWx1ZSk7CisgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gdG9XcmFwcGVyVHlwZUluZm8o
d3JhcHBlcik7CisgICAgQVNTRVJUKHR5cGUtPmRlcmVmT2JqZWN0RnVuY3Rpb24pOworICAgIHZv
aWQqIGtleSA9IHN0YXRpY19jYXN0PHZvaWQqPih0b05hdGl2ZSh3cmFwcGVyKSk7CisgICAgbWFw
LT5yZW1vdmVBbmREaXNwb3NlKGtleSwgd3JhcHBlciwgaXNvbGF0ZSk7CisgICAgdHlwZS0+ZGVy
ZWZPYmplY3Qoa2V5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RE9NRGF0YVN0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVdyYXBwZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAu
aAppbmRleCBmOThjZDM2ZTVjZmFmNWI1YjFhNjdhYTMwZDk1Y2Q1MGNkNWNmNTEyLi40YTY4YTFi
NzM2OGMyMTY5MTEzMjc4MTM0MmU4OWExM2FiNzRmNmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlck1hcC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIERPTVdy
YXBwZXJNYXBfaAogI2RlZmluZSBET01XcmFwcGVyTWFwX2gKIAorI2luY2x1ZGUgIlY4VXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgIldyYXBwZXJUeXBlSW5mby5oIgogI2luY2x1ZGUgPHY4Lmg+CkBAIC00NCw5ICs0NSw4IEBA
IGNsYXNzIERPTVdyYXBwZXJNYXAgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlU
eXBlKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gPiBNYXBUeXBlOwogCi0gICAgZXhwbGlj
aXQgRE9NV3JhcHBlck1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6Ok5lYXJEZWF0aENhbGxi
YWNrIGNhbGxiYWNrID0gJmRlZmF1bHRXZWFrQ2FsbGJhY2spCi0gICAgICAgIDogbV9jYWxsYmFj
ayhjYWxsYmFjaykKLSAgICAgICAgLCBtX2lzb2xhdGUoaXNvbGF0ZSkKKyAgICBleHBsaWNpdCBE
T01XcmFwcGVyTWFwKHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAgICAgICA6IG1faXNvbGF0ZShp
c29sYXRlKQogICAgIHsKICAgICB9CiAKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8S2V5VHlwZSo+KHRvTmF0aXZlKHdyYXBwZXIpKSA9PSBrZXkp
OwogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBwZXJzaXN0ZW50ID0gdjg6OlBl
cnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhtX2lzb2xhdGUsIHdyYXBwZXIpOwogICAgICAgICBj
b25maWd1cmF0aW9uLmNvbmZpZ3VyZVdyYXBwZXIocGVyc2lzdGVudCwgbV9pc29sYXRlKTsKLSAg
ICAgICAgcGVyc2lzdGVudC5NYWtlV2VhayhtX2lzb2xhdGUsIHRoaXMsIG1fY2FsbGJhY2spOwor
ICAgICAgICBXZWFrSGFuZGxlTGlzdGVuZXI8RE9NV3JhcHBlck1hcDxLZXlUeXBlPiA+OjptYWtl
V2VhayhtX2lzb2xhdGUsIHBlcnNpc3RlbnQsIHRoaXMpOwogICAgICAgICBtX21hcC5zZXQoa2V5
LCBwZXJzaXN0ZW50KTsKICAgICB9CiAKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2Vi
Q29yZU1lbW9yeVR5cGVzOjpCaW5kaW5nKTsKICAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXAs
ICJtYXAiKTsKLSAgICAgICAgaW5mby5pZ25vcmVNZW1iZXIobV9jYWxsYmFjayk7CiAgICAgfQog
CiAgICAgdm9pZCByZW1vdmVBbmREaXNwb3NlKEtleVR5cGUqIGtleSwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCkBAIC05NSwxOSArOTQsNiBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRXZWFrQ2Fs
bGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFs
dWUsIHZvaWQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBET01XcmFwcGVyTWFwPEtleVR5cGU+
KiBtYXAgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyTWFwPEtleVR5cGU+Kj4oY29udGV4dCk7Ci0g
ICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2
YWx1ZSk7Ci0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IHRvV3JhcHBlclR5cGVJbmZv
KHdyYXBwZXIpOwotICAgICAgICBBU1NFUlQodHlwZS0+ZGVyZWZPYmplY3RGdW5jdGlvbik7Ci0g
ICAgICAgIEtleVR5cGUqIGtleSA9IHN0YXRpY19jYXN0PEtleVR5cGUqPih0b05hdGl2ZSh3cmFw
cGVyKSk7Ci0gICAgICAgIG1hcC0+cmVtb3ZlQW5kRGlzcG9zZShrZXksIHdyYXBwZXIsIGlzb2xh
dGUpOwotICAgICAgICB0eXBlLT5kZXJlZk9iamVjdChrZXkpOwotICAgIH0KLQotICAgIHY4OjpO
ZWFyRGVhdGhDYWxsYmFjayBtX2NhbGxiYWNrOwogICAgIHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7
CiAgICAgTWFwVHlwZSBtX21hcDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NV3JhcHBlcldvcmxkLmNwcAppbmRleCA1YjVlM2EwMzkwYzU2NmZmZjMzMDQwMjhhN2E3MWY0
NWVkYzE0NDYwLi4yN2RhYjFhN2YzZThjMzAwMmQwMTA5MjY1M2NiODdlNTQwNDEzMmFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTg0
LDExICs4NCwxMiBAQCBib29sIERPTVdyYXBwZXJXb3JsZDo6Y29udGV4dEhhc0NvcnJlY3RQcm90
b3R5cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dAogICAgIHJldHVybiBWOERPTVdy
YXBwZXI6OmlzV3JhcHBlck9mVHlwZSh0b0lubmVyR2xvYmFsT2JqZWN0KGNvbnRleHQpLCAmVjhE
T01XaW5kb3c6OmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBpc29sYXRlZFdvcmxkV2Vha0NhbGxi
YWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVj
dCwgdm9pZCogcGFyYW1ldGVyKQordGVtcGxhdGU8Pgordm9pZCBXZWFrSGFuZGxlTGlzdGVuZXI8
RE9NV3JhcHBlcldvcmxkPjo6Y2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJz
aXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCBET01XcmFwcGVyV29ybGQqIHdvcmxkKQogewogICAg
IG9iamVjdC5EaXNwb3NlKGlzb2xhdGUpOwogICAgIG9iamVjdC5DbGVhcigpOwotICAgIHN0YXRp
Y19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KHBhcmFtZXRlciktPmRlcmVmKCk7CisgICAgd29ybGQt
PmRlcmVmKCk7CiB9CiAKIHZvaWQgRE9NV3JhcHBlcldvcmxkOjptYWtlQ29udGV4dFdlYWsodjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKQEAgLTk2LDcgKzk3LDggQEAgdm9pZCBET01X
cmFwcGVyV29ybGQ6Om1ha2VDb250ZXh0V2Vhayh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0KQogICAgIEFTU0VSVChpc0lzb2xhdGVkV29ybGQoKSk7CiAgICAgQVNTRVJUKGlzb2xhdGVk
V29ybGQoY29udGV4dCkgPT0gdGhpcyk7CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBjb250
ZXh0LT5HZXRJc29sYXRlKCk7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpOZXco
aXNvbGF0ZSwgY29udGV4dCkuTWFrZVdlYWsoaXNvbGF0ZSwgdGhpcywgaXNvbGF0ZWRXb3JsZFdl
YWtDYWxsYmFjayk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHBlcnNpc3RlbnQg
PSB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlLCBjb250ZXh0KTsKKyAg
ICBXZWFrSGFuZGxlTGlzdGVuZXI8RE9NV3JhcHBlcldvcmxkPjo6bWFrZVdlYWsoaXNvbGF0ZSwg
cGVyc2lzdGVudCwgdGhpcyk7CiAgICAgLy8gTWF0Y2hpbmcgZGVyZWYgaXMgaW4gd2VhayBjYWxs
YmFjay4KICAgICB0aGlzLT5yZWYoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFN0YXRlLmNwcAppbmRleCBlYTFlMDhjOTg0ZjNlMjNjODljMmQ4NGUxZThiN2M4NmM0ZWMy
ODBmLi4yYTk3ZjViYmIxMWQ3NDk3NWIxOTkxMTgzZDY3MTU3ZWNjNmVhNTIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuY3BwCkBAIC00NSwxMCArNDUsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTw+Cit2b2lkIFdlYWtIYW5kbGVMaXN0
ZW5lcjxTY3JpcHRTdGF0ZT46OmNhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVy
c2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQorewor
ICAgIGRlbGV0ZSBzY3JpcHRTdGF0ZTsKK30KKwogU2NyaXB0U3RhdGU6OlNjcmlwdFN0YXRlKHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkK
IHsKLSAgICBtX2NvbnRleHQuZ2V0KCkuTWFrZVdlYWsoY29udGV4dC0+R2V0SXNvbGF0ZSgpLCB0
aGlzLCAmU2NyaXB0U3RhdGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk7CisgICAgV2Vha0hhbmRs
ZUxpc3RlbmVyPFNjcmlwdFN0YXRlPjo6bWFrZVdlYWsoY29udGV4dC0+R2V0SXNvbGF0ZSgpLCBt
X2NvbnRleHQuZ2V0KCksIHRoaXMpOwogfQogCiBTY3JpcHRTdGF0ZTo6flNjcmlwdFN0YXRlKCkK
QEAgLTkwLDEyICs5Niw2IEBAIFNjcmlwdFN0YXRlKiBTY3JpcHRTdGF0ZTo6Y3VycmVudCgpCiAg
ICAgcmV0dXJuIFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KGNvbnRleHQpOwogfQogCi12b2lkIFNj
cmlwdFN0YXRlOjp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAg
U2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gc3RhdGljX2Nhc3Q8U2NyaXB0U3RhdGUqPihwYXJh
bWV0ZXIpOwotICAgIGRlbGV0ZSBzY3JpcHRTdGF0ZTsKLX0KLQogRE9NV2luZG93KiBkb21XaW5k
b3dGcm9tU2NyaXB0U3RhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIHJldHVy
biBzY3JpcHRTdGF0ZS0+ZG9tV2luZG93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0U3RhdGUuaAppbmRleCA3ZjhmNzhjOGI2ODQ2N2JkZTUxZGM1MjA3MDlkNTdlODI4M2ZkNzkx
Li4zMDYwN2VhYjY0YmU1MjA0ODNlODdiMmI1Y2Q2YWVmODM2ZTIwOTk5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1
ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKKyNp
bmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTgwLDYgKzgxLDcg
QEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBTY3JpcHRTdGF0ZSogbWFpbldv
cmxkU2NyaXB0U3RhdGUoRnJhbWUqKTsKKyAgICBmcmllbmQgY2xhc3MgV2Vha0hhbmRsZUxpc3Rl
bmVyPFNjcmlwdFN0YXRlPjsKICAgICBleHBsaWNpdCBTY3JpcHRTdGF0ZSh2ODo6SGFuZGxlPHY4
OjpDb250ZXh0Pik7CiAKICAgICBzdGF0aWMgdm9pZCB3ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6
Oklzb2xhdGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBwYXJhbWV0ZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0V3JhcHBhYmxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRXcmFwcGFibGUuaAppbmRleCAxZTdk
NDYwZDRkOGI1MWIzNzljZDBiZGMxNjhkODFkNzZmYjE3YTFhLi5kNDc2Yjk0NjNjYjc3MjUzOGFi
NTUzZGM3YmVlMzZjMjEwODY0NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRXcmFwcGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRXcmFwcGFibGUuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRXcmFwcGFi
bGVfaAogI2RlZmluZSBTY3JpcHRXcmFwcGFibGVfaAogCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
V3JhcHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8djguaD4KQEAgLTM4LDYgKzM5LDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0V3JhcHBhYmxlIHsKKyAgICBmcmllbmQg
Y2xhc3MgV2Vha0hhbmRsZUxpc3RlbmVyPFNjcmlwdFdyYXBwYWJsZT47CiBwdWJsaWM6CiAgICAg
U2NyaXB0V3JhcHBhYmxlKCkgeyB9CiAKQEAgLTUxLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAg
ICBBU1NFUlQobV9tYXNrZWRXcmFwcGVyLklzRW1wdHkoKSk7CiAgICAgICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHBlcnNpc3RlbnQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
TmV3KGlzb2xhdGUsIHdyYXBwZXIpOwogICAgICAgICBjb25maWd1cmF0aW9uLmNvbmZpZ3VyZVdy
YXBwZXIocGVyc2lzdGVudCwgaXNvbGF0ZSk7Ci0gICAgICAgIHBlcnNpc3RlbnQuTWFrZVdlYWso
aXNvbGF0ZSwgdGhpcywgd2Vha0NhbGxiYWNrKTsKKyAgICAgICAgV2Vha0hhbmRsZUxpc3RlbmVy
PFNjcmlwdFdyYXBwYWJsZT46Om1ha2VXZWFrKGlzb2xhdGUsIHBlcnNpc3RlbnQsIHRoaXMpOwog
ICAgICAgICBtX21hc2tlZFdyYXBwZXIgPSBtYXNrT3JVbm1hc2tQb2ludGVyKCpwZXJzaXN0ZW50
KTsKICAgICB9CiAKQEAgLTgwLDI2ICs4MiwyNiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCB1
aW50cHRyX3QgcmFuZG9tTWFzayA9IH4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZXZWJD
b3JlTWVtb3J5VHlwZXM6OkRPTSkgPj4gMTMpOyAvLyBFbnRyb3B5IHZpYSBBU0xSLgogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2ODo6T2JqZWN0Kj4oKG9iamVjdFBvaW50ZXIgXiBy
YW5kb21NYXNrKSAmICghb2JqZWN0UG9pbnRlciAtIDEpKTsgLy8gUHJlc2VydmUgbnVsbCB3aXRo
b3V0IGJyYW5jaGluZy4KICAgICB9Cit9OwogCi0gICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNr
KHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2
b2lkKiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgU2NyaXB0V3JhcHBhYmxlKiBrZXkgPSBzdGF0
aWNfY2FzdDxTY3JpcHRXcmFwcGFibGUqPihjb250ZXh0KTsKLSAgICAgICAgQVNTRVJUKHZhbHVl
LT5Jc09iamVjdCgpKTsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKLSAgICAgICAgQVNT
RVJUKGtleS0+d3JhcHBlcigpID09IHdyYXBwZXIpOwordGVtcGxhdGU8PgoraW5saW5lIHZvaWQg
V2Vha0hhbmRsZUxpc3RlbmVyPFNjcmlwdFdyYXBwYWJsZT46OmNhbGxiYWNrKHY4OjpJc29sYXRl
KiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRXcmFwcGFi
bGUqIGtleSkKK3sKKyAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
Q2FzdCh2YWx1ZSk7CisgICAgQVNTRVJUKGtleS0+d3JhcHBlcigpID09IHdyYXBwZXIpOwogCi0g
ICAgICAgIC8vIE5vdGU6IHxvYmplY3R8IG1pZ2h0IG5vdCBiZSBlcXVhbCB0byB8a2V5fCwgZS5n
LiwgaWYgU2NyaXB0V3JhcHBhYmxlIGlzbid0IGEgbGVmdC1tb3N0IGJhc2UgY2xhc3MuCi0gICAg
ICAgIHZvaWQqIG9iamVjdCA9IHRvTmF0aXZlKHdyYXBwZXIpOwotICAgICAgICBXcmFwcGVyVHlw
ZUluZm8qIGluZm8gPSB0b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKTsKLSAgICAgICAgQVNTRVJU
KGluZm8tPmRlcmVmT2JqZWN0RnVuY3Rpb24pOworICAgIC8vIE5vdGU6IHxvYmplY3R8IG1pZ2h0
IG5vdCBiZSBlcXVhbCB0byB8a2V5fCwgZS5nLiwgaWYgU2NyaXB0V3JhcHBhYmxlIGlzbid0IGEg
bGVmdC1tb3N0IGJhc2UgY2xhc3MuCisgICAgdm9pZCogb2JqZWN0ID0gdG9OYXRpdmUod3JhcHBl
cik7CisgICAgV3JhcHBlclR5cGVJbmZvKiBpbmZvID0gdG9XcmFwcGVyVHlwZUluZm8od3JhcHBl
cik7CisgICAgQVNTRVJUKGluZm8tPmRlcmVmT2JqZWN0RnVuY3Rpb24pOwogCi0gICAgICAgIGtl
eS0+ZGlzcG9zZVdyYXBwZXIodmFsdWUsIGlzb2xhdGUpOwotICAgICAgICAvLyBGSVhNRTogSSBu
b3RpY2VkIHRoYXQgNTAlfiBvZiBtaW5vciBHQyBjeWNsZSB0aW1lcyBjYW4gYmUgY29uc3VtZWQK
LSAgICAgICAgLy8gaW5zaWRlIGtleS0+ZGVyZWYoKSwgd2hpY2ggY2F1c2VzIE5vZGUgZGVzdHJ1
Y3Rpb25zLiBXZSBzaG91bGQKLSAgICAgICAgLy8gbWFrZSBOb2RlIGRlc3RydWN0aW9ucyBpbmNy
ZW1lbnRhbC4KLSAgICAgICAgaW5mby0+ZGVyZWZPYmplY3Qob2JqZWN0KTsKLSAgICB9Ci19Owor
ICAgIGtleS0+ZGlzcG9zZVdyYXBwZXIodmFsdWUsIGlzb2xhdGUpOworICAgIC8vIEZJWE1FOiBJ
IG5vdGljZWQgdGhhdCA1MCV+IG9mIG1pbm9yIEdDIGN5Y2xlIHRpbWVzIGNhbiBiZSBjb25zdW1l
ZAorICAgIC8vIGluc2lkZSBrZXktPmRlcmVmKCksIHdoaWNoIGNhdXNlcyBOb2RlIGRlc3RydWN0
aW9ucy4gV2Ugc2hvdWxkCisgICAgLy8gbWFrZSBOb2RlIGRlc3RydWN0aW9ucyBpbmNyZW1lbnRh
bC4KKyAgICBpbmZvLT5kZXJlZk9iamVjdChvYmplY3QpOworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJh
Y3RFdmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJh
Y3RFdmVudExpc3RlbmVyLmNwcAppbmRleCAwOTBmMDlkMWI1MWQ2ZjFjOTcxNTFjYTc5NWU1ZGIz
NThkMzZlMzZjLi5lZDRjMjk3NDE0MzlhNmFmNjM4ZWY3ZjNhYTg5NTZiNmNjYjg0YTZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIuY3BwCkBAIC00MiwxNCArNDIsMTMgQEAKICNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJM
aXN0LmgiCiAjaW5jbHVkZSAiVjhFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJv
cGVydHlOYW1lLmgiCi0jaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lcjo6d2Vha0V2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwg
djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKQordGVtcGxhdGU8Pgor
dm9pZCBXZWFrSGFuZGxlTGlzdGVuZXI8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI+OjpjYWxsYmFj
ayh2ODo6SXNvbGF0ZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKLSAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KHBhcmFtZXRlcik7
CiAgICAgbGlzdGVuZXItPm1fbGlzdGVuZXIuY2xlYXIoKTsKIH0KIApAQCAtMTA2LDcgKzEwNSw3
IEBAIHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2ZW50CiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVy
OjpzZXRMaXN0ZW5lck9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGxpc3RlbmVyKQogewog
ICAgIG1fbGlzdGVuZXIuc2V0KGxpc3RlbmVyKTsKLSAgICBtX2xpc3RlbmVyLmdldCgpLk1ha2VX
ZWFrKG1faXNvbGF0ZSwgdGhpcywgJlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjp3ZWFrRXZlbnRM
aXN0ZW5lckNhbGxiYWNrKTsKKyAgICBXZWFrSGFuZGxlTGlzdGVuZXI8VjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXI+OjptYWtlV2VhayhtX2lzb2xhdGUsIG1fbGlzdGVuZXIuZ2V0KCksIHRoaXMpOwog
fQogCiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50LCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4ganNFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oCmluZGV4IDEyMDFiMTg4Nzc0YjI3YTliZmI4YTY5OGFi
ODAzYTU2OTY4NTFmMDcuLmUxMzU2NWQ2ZTFlNGY4MGZhMWJlZDhkZDA5NDRlZmMwZGVkN2VkZTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExp
c3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXIuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKKyNpbmNsdWRlICJWOFV0aWxpdGllcy5o
IgogI2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRsZS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTUxLDYgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIC8vIFdlYktpdCBkb2VzIG5vdCBhbGxvdyBkdXBsaWNhdGVkIEhUTUwgZXZlbnQg
aGFuZGxlcnMgb2YgdGhlIHNhbWUgdHlwZSwKICAgICAvLyBidXQgQUxMT1dzIGR1cGxpY2F0ZWQg
bm9uLUhUTUwgZXZlbnQgaGFuZGxlcnMuCiAgICAgY2xhc3MgVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBXZWFrSGFu
ZGxlTGlzdGVuZXI8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI+OwogICAgIHB1YmxpYzoKICAgICAg
ICAgdmlydHVhbCB+VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5jcHAKaW5kZXggNGMwZWE1NGFi
NzEzOTk4OWUwZTE3NDhhNDczNDhlMDU0ZmRhODBhYi4uNzVjMTkzNzkxMGMwZTBlZWM4ZjE1ZGZh
ZDRlOGQ2YTk4MTZhNzc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhNdXRhdGlvbkNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OE11dGF0aW9uQ2FsbGJhY2suY3BwCkBAIC0zNSwxMyArMzUsMTkgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCit0ZW1wbGF0ZTw+Cit2b2lkIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE11dGF0aW9u
Q2FsbGJhY2s+OjpjYWxsYmFjayh2ODo6SXNvbGF0ZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4sIFY4TXV0YXRpb25DYWxsYmFjayogY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2stPm1fY2Fs
bGJhY2suY2xlYXIoKTsKK30KKwogVjhNdXRhdGlvbkNhbGxiYWNrOjpWOE11dGF0aW9uQ2FsbGJh
Y2sodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG93bmVyLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKICAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGNvbnRleHQpCiAgICAgLCBtX2NhbGxi
YWNrKGNhbGxiYWNrKQogICAgICwgbV93b3JsZChET01XcmFwcGVyV29ybGQ6Omlzb2xhdGVkV29y
bGQodjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkpCiB7CiAgICAgb3duZXItPlNldEhpZGRlblZh
bHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpjYWxsYmFjaygpLCBjYWxsYmFjayk7Ci0gICAgbV9j
YWxsYmFjay5nZXQoKS5NYWtlV2Vhayhpc29sYXRlLCB0aGlzLCAmVjhNdXRhdGlvbkNhbGxiYWNr
Ojp3ZWFrQ2FsbGJhY2spOworICAgIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE11dGF0aW9uQ2FsbGJh
Y2s+OjptYWtlV2Vhayhpc29sYXRlLCBtX2NhbGxiYWNrLmdldCgpLCB0aGlzKTsKIH0KIAogdm9p
ZCBWOE11dGF0aW9uQ2FsbGJhY2s6OmNhbGwoY29uc3QgVmVjdG9yPFJlZlB0cjxNdXRhdGlvblJl
Y29yZD4gPiYgbXV0YXRpb25zLCBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmgKaW5kZXggYjA3N2Nk
MWRlNDcwMGQ5M2QwZWY2OTBlMmNmNGJlNjc1ZWFlMWRiNS4uNGM3OTY0NzY4NTlhOGQzNjc0MzNm
ZTBiYmM3YzExY2JjNzU1NjA0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhNdXRhdGlvbkNhbGxiYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhNdXRhdGlvbkNhbGxiYWNrLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJET01XcmFw
cGVyV29ybGQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2Nv
cGVkUGVyc2lzdGVudC5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8djgu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgVjhNdXRh
dGlvbkNhbGxiYWNrIDogcHVibGljIE11dGF0aW9uQ2FsbGJhY2ssIHB1YmxpYyBBY3RpdmVET01D
YWxsYmFjayB7CisgICAgZnJpZW5kIGNsYXNzIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE11dGF0aW9u
Q2FsbGJhY2s+OwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TXV0YXRpb25DYWxs
YmFjaz4gY3JlYXRlKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBjYWxsYmFjaywgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAgewpAQCAtNTEsMTIgKzUzLDYgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBWOE11dGF0aW9uQ2FsbGJhY2sodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Oklzb2xh
dGUqKTsKIAotICAgIHN0YXRpYyB2b2lkIHdlYWtDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0
ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyLCB2b2lkKiBwYXJhbWV0ZXIpCi0g
ICAgewotICAgICAgICBWOE11dGF0aW9uQ2FsbGJhY2sqIG9iamVjdCA9IHN0YXRpY19jYXN0PFY4
TXV0YXRpb25DYWxsYmFjayo+KHBhcmFtZXRlcik7Ci0gICAgICAgIG9iamVjdC0+bV9jYWxsYmFj
ay5jbGVhcigpOwotICAgIH0KLQogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiBt
X2NhbGxiYWNrOwogICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAppbmRleCAyYmZiYmQ4MWVkYTRm
Zjk1OWNhYzY1NGIwZGU4NmNkNDVlMzEyNmQ2Li41M2RjMzc3NzQxMDg5ZDI3Y2E1ZWJhOGI0MmM4
MWY3MjNhNmM2ZjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5Q
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNw
cApAQCAtMTU5LDkgKzE1OSw4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEludm9r
ZURlZmF1bHRIYW5kbGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIG5w
T2JqZWN0SW52b2tlSW1wbChhcmdzLCBJbnZva2VEZWZhdWx0KTsKIH0KIAotCi1jbGFzcyBWOE5Q
VGVtcGxhdGVNYXAKLXsKK2NsYXNzIFY4TlBUZW1wbGF0ZU1hcCB7CisgICAgZnJpZW5kIGNsYXNz
IFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE5QVGVtcGxhdGVNYXAsIFByaXZhdGVJZGVudGlmaWVyPjsK
IHB1YmxpYzoKICAgICAvLyBOUElkZW50aWZpZXIgaXMgUHJpdmF0ZUlkZW50aWZpZXIqLgogICAg
IHR5cGVkZWYgSGFzaE1hcDxQcml2YXRlSWRlbnRpZmllciosIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiA+IE1hcFR5cGU7CkBAIC0xNzUsNyArMTc0LDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhrZXkpKTsKICAgICAgICAgbV9t
YXAuc2V0KGtleSwgd3JhcHBlcik7Ci0gICAgICAgIHdyYXBwZXIuTWFrZVdlYWsobV9pc29sYXRl
LCBrZXksIHdlYWtDYWxsYmFjayk7CisgICAgICAgIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE5QVGVt
cGxhdGVNYXAsIFByaXZhdGVJZGVudGlmaWVyPjo6bWFrZVdlYWsobV9pc29sYXRlLCB3cmFwcGVy
LCBrZXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBWOE5QVGVtcGxhdGVNYXAmIHNoYXJlZEluc3Rh
bmNlKHY4OjpJc29sYXRlKiBpc29sYXRlKQpAQCAtMTkxLDExICsxOTAsNiBAQCBwcml2YXRlOgog
ICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB3ZWFrQ2FsbGJhY2sodjg6Oklzb2xhdGUq
IGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBjb250ZXh0
KQotICAgIHsKLSAgICAgICAgc2hhcmVkSW5zdGFuY2UoaXNvbGF0ZSkuZGlzcG9zZShzdGF0aWNf
Y2FzdDxQcml2YXRlSWRlbnRpZmllcio+KGNvbnRleHQpKTsKLSAgICB9Ci0KICAgICB2b2lkIGRp
c3Bvc2UoUHJpdmF0ZUlkZW50aWZpZXIqIGtleSkKICAgICB7CiAgICAgICAgIE1hcFR5cGU6Oml0
ZXJhdG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwpAQCAtMjA5LDYgKzIwMywxMiBAQCBwcml2YXRl
OgogICAgIHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7CiB9OwogCit0ZW1wbGF0ZTw+Cit2b2lkIFdl
YWtIYW5kbGVMaXN0ZW5lcjxWOE5QVGVtcGxhdGVNYXAsIFByaXZhdGVJZGVudGlmaWVyPjo6Y2Fs
bGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIFBy
aXZhdGVJZGVudGlmaWVyKiBrZXkpCit7CisgICAgVjhOUFRlbXBsYXRlTWFwOjpzaGFyZWRJbnN0
YW5jZShpc29sYXRlKS5kaXNwb3NlKGtleSk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbnBPYmplY3RHZXRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgTlBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGtleSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gdjhPYmplY3RUb05QT2Jq
ZWN0KHNlbGYpOwpAQCAtMzgzLDE1ICszODMsMTQgQEAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IG5w
T2JqZWN0SW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJgog
ICAgIHJldHVybiBucE9iamVjdFByb3BlcnR5RW51bWVyYXRvcihpbmZvLCBmYWxzZSk7CiB9CiAK
LXN0YXRpYyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpJc29sYXRlKiwgdjg6OlBlcnNp
c3RlbnQ8djg6OlZhbHVlPiwgdm9pZCopOwotCiBzdGF0aWMgRE9NV3JhcHBlck1hcDxOUE9iamVj
dD4mIHN0YXRpY05QT2JqZWN0TWFwKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERPTVdy
YXBwZXJNYXA8TlBPYmplY3Q+LCBucE9iamVjdE1hcCwgKHY4OjpJc29sYXRlOjpHZXRDdXJyZW50
KCksICZ3ZWFrTlBPYmplY3RDYWxsYmFjaykpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9N
V3JhcHBlck1hcDxOUE9iamVjdD4sIG5wT2JqZWN0TWFwLCAodjg6Oklzb2xhdGU6OkdldEN1cnJl
bnQoKSkpOwogICAgIHJldHVybiBucE9iamVjdE1hcDsKIH0KIAotc3RhdGljIHZvaWQgd2Vha05Q
T2JqZWN0Q2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4gdmFsdWUsIHZvaWQqKQordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgV2Vha0hhbmRsZUxp
c3RlbmVyPERPTVdyYXBwZXJNYXA8TlBPYmplY3Q+ID46OmNhbGxiYWNrKHY4OjpJc29sYXRlKiBp
c29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCBET01XcmFwcGVyTWFwPE5Q
T2JqZWN0PiopCiB7CiAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKICAgICB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46
OkNhc3QodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhV
dGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgKaW5k
ZXggMjRiMjNjZmUzZGUxYTYyODJhNjJlMmRhNWNmZWYzNjBiOWJjZTM0NC4uYzVkMTQ5MjRjMzNk
YTIzYmJhZDNmOWM5ZDg1NzBiMzlhYmI0OWY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFV0aWxpdGllcy5oCkBAIC02Myw2ICs2MywyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgYm9vbCBleHRyYWN0VHJhbnNmZXJhYmxlcyh2ODo6TG9jYWw8djg6OlZhbHVlPiwgTWVzc2Fn
ZVBvcnRBcnJheSYsIEFycmF5QnVmZmVyQXJyYXkmLCB2ODo6SXNvbGF0ZSopOyAKICAgICBib29s
IGdldE1lc3NhZ2VQb3J0QXJyYXkodjg6OkxvY2FsPHY4OjpWYWx1ZT4sIE1lc3NhZ2VQb3J0QXJy
YXkmLCB2ODo6SXNvbGF0ZSopOwogCisgICAgLy8gRklYTUU6IFdlIG1pZ2h0IG1vdmUgdGhpcyB0
byBpdCdzIG93biBmaWxlLgorICAgIHRlbXBsYXRlPGNsYXNzIE93bmVyVHlwZSwgdHlwZW5hbWUg
QXJndW1lbnRUeXBlID0gT3duZXJUeXBlPgorICAgIGNsYXNzIFdlYWtIYW5kbGVMaXN0ZW5lciB7
CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVHlwZT4KKyAgICAg
ICAgc3RhdGljIHZvaWQgbWFrZVdlYWsodjg6Oklzb2xhdGUqIGlzb2xhdGUsIEhhbmRsZVR5cGUg
aGFuZGxlLCBBcmd1bWVudFR5cGUqIHBhcmFtZXRlcikKKyAgICAgICAgeworICAgICAgICAgICAg
aGFuZGxlLk1ha2VXZWFrKGlzb2xhdGUsIHBhcmFtZXRlciwgJmludm9rZVdlYWtDYWxsYmFjayk7
CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBjYWxsYmFjayh2ODo6SXNvbGF0ZSos
IHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIEFyZ3VtZW50VHlwZSopOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgZXhwbGljaXQgV2Vha0hhbmRsZUxpc3RlbmVyKCkgeyB9CisKKyAgICAgICAg
c3RhdGljIHZvaWQgaW52b2tlV2Vha0NhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+IGhhbmRsZSwgdm9pZCogcGFyYW1ldGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBXZWFrSGFuZGxlTGlzdGVuZXI8T3duZXJUeXBlLCBBcmd1bWVudFR5cGU+
OjpjYWxsYmFjayhpc29sYXRlLCBoYW5kbGUsIHN0YXRpY19jYXN0PEFyZ3VtZW50VHlwZSo+KHBh
cmFtZXRlcikpOworICAgICAgICB9CisgICAgfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gVjhVdGlsaXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
VmFsdWVDYWNoZS5jcHAKaW5kZXggMTk1ZTUyM2E4Y2QyMDg0MGY4ZDNhMmRmZjRhOWE1NGYwYmY5
ZGYyZS4uYmNjZDIwMzc0NDU3ZWQ3NmJjODk4ODEzYjJmZjYzNjg4ZDBjNzVmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCkBAIC01Nyw5ICs1Nyw5IEBA
IHN0YXRpYyB2ODo6TG9jYWw8djg6OlN0cmluZz4gbWFrZUV4dGVybmFsU3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogICAgIHJldHVybiBuZXdTdHJpbmc7CiB9CiAKLXN0YXRpYyB2b2lkIGNh
Y2hlZFN0cmluZ0NhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IHdyYXBwZXIsIHZvaWQqIHBhcmFtZXRlcikKK3RlbXBsYXRlPD4KK3ZvaWQgV2Vh
a0hhbmRsZUxpc3RlbmVyPFN0cmluZ0NhY2hlLCBTdHJpbmdJbXBsPjo6Y2FsbGJhY2sodjg6Oklz
b2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciwgU3RyaW5n
SW1wbCogc3RyaW5nSW1wbCkKIHsKLSAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGlj
X2Nhc3Q8U3RyaW5nSW1wbCo+KHBhcmFtZXRlcik7CiAgICAgVjhQZXJJc29sYXRlRGF0YTo6Y3Vy
cmVudCgpLT5zdHJpbmdDYWNoZSgpLT5yZW1vdmUoc3RyaW5nSW1wbCk7CiAgICAgd3JhcHBlci5E
aXNwb3NlKGlzb2xhdGUpOwogICAgIHdyYXBwZXIuQ2xlYXIoKTsKQEAgLTk5LDcgKzk5LDcgQEAg
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBTdHJpbmdDYWNoZTo6djhFeHRlcm5hbFN0cmluZ1Nsb3co
U3RyaW5nSW1wbCogc3RyaW5nSW1wbCwKIAogICAgIHN0cmluZ0ltcGwtPnJlZigpOwogICAgIHdy
YXBwZXIuTWFya0luZGVwZW5kZW50KGlzb2xhdGUpOwotICAgIHdyYXBwZXIuTWFrZVdlYWsoaXNv
bGF0ZSwgc3RyaW5nSW1wbCwgY2FjaGVkU3RyaW5nQ2FsbGJhY2spOworICAgIFdlYWtIYW5kbGVM
aXN0ZW5lcjxTdHJpbmdDYWNoZSwgU3RyaW5nSW1wbD46Om1ha2VXZWFrKGlzb2xhdGUsIHdyYXBw
ZXIsIHN0cmluZ0ltcGwpOwogICAgIG1fc3RyaW5nQ2FjaGUuc2V0KHN0cmluZ0ltcGwsIHdyYXBw
ZXIpOwogCiAgICAgbV9sYXN0U3RyaW5nSW1wbCA9IHN0cmluZ0ltcGw7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAppbmRleCAyOWIyM2Q5ZjA5ZTBmYjA5MDAwOTc2Nzc0YzM1ODJjMjc1ODQwZGIw
Li5hZTU0ZmRlOGM2NTc2N2FhOTI3MTAzMWMxNTNjM2U5OTAzNzkyMmJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHAKQEAgLTQ1LDEwICs0NSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyB2b2lkIFdlYWtSZWZlcmVuY2VDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0
ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3Rl
bXBsYXRlPD4KK3ZvaWQgV2Vha0hhbmRsZUxpc3RlbmVyPEluamVjdGVkU2NyaXB0TWFuYWdlciwg
SW5qZWN0ZWRTY3JpcHRIb3N0Pjo6Y2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3QqIGhvc3QpCiB7
Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBuYXRpdmVPYmplY3QgPSBzdGF0aWNfY2FzdDxJbmpl
Y3RlZFNjcmlwdEhvc3QqPihwYXJhbWV0ZXIpOwotICAgIG5hdGl2ZU9iamVjdC0+ZGVyZWYoKTsK
KyAgICBob3N0LT5kZXJlZigpOwogICAgIG9iamVjdC5EaXNwb3NlKGlzb2xhdGUpOwogICAgIG9i
amVjdC5DbGVhcigpOwogfQpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGNyZWF0ZUluamVjdGVkU2NyaXB0SG9zdFY4V3JhcHBlcihJbmplY3RlZFNjcmlwdEhv
cwogICAgIC8vIEluc3BlY3RvckJhY2tlbmQgd2hlbiB0aGUgd3JhcHBlciBpcyBnYXJiYWdlIGNv
bGxlY3RlZC4KICAgICBob3N0LT5yZWYoKTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3ZWFrSGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhpc29sYXRlLCBp
bnN0YW5jZSk7Ci0gICAgd2Vha0hhbmRsZS5NYWtlV2Vhayhpc29sYXRlLCBob3N0LCAmV2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrKTsKKyAgICBXZWFrSGFuZGxlTGlzdGVuZXI8SW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLCBJbmplY3RlZFNjcmlwdEhvc3Q+OjptYWtlV2Vhayhpc29sYXRlLCB3ZWFrSGFuZGxl
LCBob3N0KTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196049</attachid>
            <date>2013-04-01 18:23:33 -0700</date>
            <delta_ts>2013-04-01 23:22:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-111802-20130401182325.patch</filename>
            <type>text/plain</type>
            <size>24494</size>
            <attacher name="Elliott Sprehn">esprehn</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDhmOTIxOWM4MzM4MTky
MzkyNjUwN2Y0OTM3MTM0YzVkOGJlYjhmZS4uZDNhOGViNDk3YjM4YzgwMzNkNzFiY2VmNDRiNmRj
YzY2ZmMxOTU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTA0LTAxICBFbGxp
b3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIE1ha2UgYWxsIHY4
IHdlYWsgY2FsbGJhY2tzIHR5cGUgc2FmZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExODAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KKworICAgICAgICBNYWtlIGFsbCB2OCBoYW5kbGUgd2VhayBjYWxsYmFja3MgdHlwZXNhZmUg
YnkgYWRkaW5nIGEgbmV3IGNsYXNzIFdlYWtIYW5kbGVMaXN0bmVyCisgICAgICAgIHRoYXQgdXNl
cyB0ZW1wbGF0ZXMgdG8gZ2VuZXJhdGUgdGhlIGNhbGxiYWNrIHByb3hpZXMgdGhhdCBoYXZlIHRo
ZSBjb3JyZWN0IHR5cGUKKyAgICAgICAgYXJndW1lbnRzLiBOb3cgZ2V0dGluZyB0aGUgYXJndW1l
bnRzIHdyb25nIHdpbGwgZmFpbCBjb21waWxhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFT
dG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6OjpjYWxsYmFjayk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvRE9NV3JhcHBlck1hcC5oOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlck1hcDo6
RE9NV3JhcHBlck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyTWFwOjpzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlck1hcDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAg
ICAgICAoRE9NV3JhcHBlck1hcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlcldv
cmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV3JhcHBlcldvcmxkOjptYWtlQ29udGV4dFdlYWspOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1NjcmlwdFN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RhdGU6OlNjcmlwdFN0YXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRTdGF0ZS5oOgorICAgICAgICAoU2NyaXB0U3RhdGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1NjcmlwdFdyYXBwYWJsZS5oOgorICAgICAgICAoU2NyaXB0V3JhcHBhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFdyYXBwYWJsZTo6c2V0V3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjo6OmNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpzZXRMaXN0ZW5lck9iamVj
dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaDoKKyAg
ICAgICAgKFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OE11dGF0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6OjpjYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOE11dGF0aW9uQ2FsbGJhY2s6OlY4TXV0YXRpb25DYWxsYmFjayk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmg6CisgICAgICAgIChW
OE11dGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3Bw
OgorICAgICAgICAoVjhOUFRlbXBsYXRlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TlBUZW1w
bGF0ZU1hcDo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6c3RhdGljTlBPYmplY3RNYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRp
bGl0aWVzLmg6CisgICAgICAgIChXZWFrSGFuZGxlTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2Vha0hhbmRsZUxpc3RlbmVyOjptYWtlV2Vhayk6CisgICAgICAgIChXZWJDb3JlOjpXZWFr
SGFuZGxlTGlzdGVuZXI6OldlYWtIYW5kbGVMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWFrSGFuZGxlTGlzdGVuZXI6Omludm9rZVdlYWtDYWxsYmFjayk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhWYWx1ZUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmdTbG93KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6OjpjYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdEhvc3RWOFdyYXBwZXIpOgorCiAyMDEzLTA0LTAxICBUaW1vdGh5IEhhdGNo
ZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlICd0aGlzJyBldmFsdWF0ZSB0
byB0aGUgY29ycmVjdCBvYmplY3Qgd2hlbiBwYXVzZWQgaW4gdGhlIERlYnVnZ2VyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaAppbmRleCA0ZmRiNTZlMzk0N2Y0Y2Rj
OTAzMGZlOGJiMmZkYWVhNTNmOTRlZTg1Li4zOWQ5OWE2YjNhMjZmN2U1NThiYzJkNDlkODE3MjYz
ODdmNGQ3Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaApA
QCAtMTcwLDYgKzE3MCwxOCBAQCBwcml2YXRlOgogICAgIERPTVdyYXBwZXJNYXA8dm9pZD4gbV93
cmFwcGVyTWFwOwogfTsKIAordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgV2Vha0hhbmRsZUxpc3Rl
bmVyPERPTVdyYXBwZXJNYXA8dm9pZD4gPjo6Y2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUs
IHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFsdWUsIERPTVdyYXBwZXJNYXA8dm9pZD4qIG1h
cCkKK3sKKyAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2
YWx1ZSk7CisgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBlID0gdG9XcmFwcGVyVHlwZUluZm8od3Jh
cHBlcik7CisgICAgQVNTRVJUKHR5cGUtPmRlcmVmT2JqZWN0RnVuY3Rpb24pOworICAgIHZvaWQq
IGtleSA9IHN0YXRpY19jYXN0PHZvaWQqPih0b05hdGl2ZSh3cmFwcGVyKSk7CisgICAgbWFwLT5y
ZW1vdmVBbmREaXNwb3NlKGtleSwgd3JhcHBlciwgaXNvbGF0ZSk7CisgICAgdHlwZS0+ZGVyZWZP
YmplY3Qoa2V5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRE9N
RGF0YVN0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdy
YXBwZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJNYXAuaApp
bmRleCBmOThjZDM2ZTVjZmFmNWI1YjFhNjdhYTMwZDk1Y2Q1MGNkNWNmNTEyLi40YTY4YTFiNzM2
OGMyMTY5MTEzMjc4MTM0MmU4OWExM2FiNzRmNmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRE9NV3JhcHBlck1hcC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIERPTVdyYXBw
ZXJNYXBfaAogI2RlZmluZSBET01XcmFwcGVyTWFwX2gKIAorI2luY2x1ZGUgIlY4VXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUg
IldyYXBwZXJUeXBlSW5mby5oIgogI2luY2x1ZGUgPHY4Lmg+CkBAIC00NCw5ICs0NSw4IEBAIGNs
YXNzIERPTVdyYXBwZXJNYXAgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlUeXBl
Kiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gPiBNYXBUeXBlOwogCi0gICAgZXhwbGljaXQg
RE9NV3JhcHBlck1hcCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6Ok5lYXJEZWF0aENhbGxiYWNr
IGNhbGxiYWNrID0gJmRlZmF1bHRXZWFrQ2FsbGJhY2spCi0gICAgICAgIDogbV9jYWxsYmFjayhj
YWxsYmFjaykKLSAgICAgICAgLCBtX2lzb2xhdGUoaXNvbGF0ZSkKKyAgICBleHBsaWNpdCBET01X
cmFwcGVyTWFwKHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAgICAgICA6IG1faXNvbGF0ZShpc29s
YXRlKQogICAgIHsKICAgICB9CiAKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8S2V5VHlwZSo+KHRvTmF0aXZlKHdyYXBwZXIpKSA9PSBrZXkpOwog
ICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBwZXJzaXN0ZW50ID0gdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhtX2lzb2xhdGUsIHdyYXBwZXIpOwogICAgICAgICBjb25m
aWd1cmF0aW9uLmNvbmZpZ3VyZVdyYXBwZXIocGVyc2lzdGVudCwgbV9pc29sYXRlKTsKLSAgICAg
ICAgcGVyc2lzdGVudC5NYWtlV2VhayhtX2lzb2xhdGUsIHRoaXMsIG1fY2FsbGJhY2spOworICAg
ICAgICBXZWFrSGFuZGxlTGlzdGVuZXI8RE9NV3JhcHBlck1hcDxLZXlUeXBlPiA+OjptYWtlV2Vh
ayhtX2lzb2xhdGUsIHBlcnNpc3RlbnQsIHRoaXMpOwogICAgICAgICBtX21hcC5zZXQoa2V5LCBw
ZXJzaXN0ZW50KTsKICAgICB9CiAKQEAgLTgwLDcgKzgwLDYgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpCaW5kaW5nKTsKICAgICAgICAgaW5mby5hZGRNZW1iZXIobV9tYXAsICJt
YXAiKTsKLSAgICAgICAgaW5mby5pZ25vcmVNZW1iZXIobV9jYWxsYmFjayk7CiAgICAgfQogCiAg
ICAgdm9pZCByZW1vdmVBbmREaXNwb3NlKEtleVR5cGUqIGtleSwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCkBAIC05NSwxOSArOTQsNiBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIGRlZmF1bHRXZWFrQ2FsbGJh
Y2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gdmFsdWUs
IHZvaWQqIGNvbnRleHQpCi0gICAgewotICAgICAgICBET01XcmFwcGVyTWFwPEtleVR5cGU+KiBt
YXAgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyTWFwPEtleVR5cGU+Kj4oY29udGV4dCk7Ci0gICAg
ICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1
ZSk7Ci0gICAgICAgIFdyYXBwZXJUeXBlSW5mbyogdHlwZSA9IHRvV3JhcHBlclR5cGVJbmZvKHdy
YXBwZXIpOwotICAgICAgICBBU1NFUlQodHlwZS0+ZGVyZWZPYmplY3RGdW5jdGlvbik7Ci0gICAg
ICAgIEtleVR5cGUqIGtleSA9IHN0YXRpY19jYXN0PEtleVR5cGUqPih0b05hdGl2ZSh3cmFwcGVy
KSk7Ci0gICAgICAgIG1hcC0+cmVtb3ZlQW5kRGlzcG9zZShrZXksIHdyYXBwZXIsIGlzb2xhdGUp
OwotICAgICAgICB0eXBlLT5kZXJlZk9iamVjdChrZXkpOwotICAgIH0KLQotICAgIHY4OjpOZWFy
RGVhdGhDYWxsYmFjayBtX2NhbGxiYWNrOwogICAgIHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7CiAg
ICAgTWFwVHlwZSBtX21hcDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
V3JhcHBlcldvcmxkLmNwcAppbmRleCA1YjVlM2EwMzkwYzU2NmZmZjMzMDQwMjhhN2E3MWY0NWVk
YzE0NDYwLi4yN2RhYjFhN2YzZThjMzAwMmQwMTA5MjY1M2NiODdlNTQwNDEzMmFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTg0LDEx
ICs4NCwxMiBAQCBib29sIERPTVdyYXBwZXJXb3JsZDo6Y29udGV4dEhhc0NvcnJlY3RQcm90b3R5
cGUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dAogICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmlzV3JhcHBlck9mVHlwZSh0b0lubmVyR2xvYmFsT2JqZWN0KGNvbnRleHQpLCAmVjhET01X
aW5kb3c6OmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBpc29sYXRlZFdvcmxkV2Vha0NhbGxiYWNr
KHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwg
dm9pZCogcGFyYW1ldGVyKQordGVtcGxhdGU8Pgordm9pZCBXZWFrSGFuZGxlTGlzdGVuZXI8RE9N
V3JhcHBlcldvcmxkPjo6Y2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCBET01XcmFwcGVyV29ybGQqIHdvcmxkKQogewogICAgIG9i
amVjdC5EaXNwb3NlKGlzb2xhdGUpOwogICAgIG9iamVjdC5DbGVhcigpOwotICAgIHN0YXRpY19j
YXN0PERPTVdyYXBwZXJXb3JsZCo+KHBhcmFtZXRlciktPmRlcmVmKCk7CisgICAgd29ybGQtPmRl
cmVmKCk7CiB9CiAKIHZvaWQgRE9NV3JhcHBlcldvcmxkOjptYWtlQ29udGV4dFdlYWsodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKQEAgLTk2LDcgKzk3LDggQEAgdm9pZCBET01XcmFw
cGVyV29ybGQ6Om1ha2VDb250ZXh0V2Vhayh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0
KQogICAgIEFTU0VSVChpc0lzb2xhdGVkV29ybGQoKSk7CiAgICAgQVNTRVJUKGlzb2xhdGVkV29y
bGQoY29udGV4dCkgPT0gdGhpcyk7CiAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBjb250ZXh0
LT5HZXRJc29sYXRlKCk7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpOZXcoaXNv
bGF0ZSwgY29udGV4dCkuTWFrZVdlYWsoaXNvbGF0ZSwgdGhpcywgaXNvbGF0ZWRXb3JsZFdlYWtD
YWxsYmFjayk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHBlcnNpc3RlbnQgPSB2
ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlLCBjb250ZXh0KTsKKyAgICBX
ZWFrSGFuZGxlTGlzdGVuZXI8RE9NV3JhcHBlcldvcmxkPjo6bWFrZVdlYWsoaXNvbGF0ZSwgcGVy
c2lzdGVudCwgdGhpcyk7CiAgICAgLy8gTWF0Y2hpbmcgZGVyZWYgaXMgaW4gd2VhayBjYWxsYmFj
ay4KICAgICB0aGlzLT5yZWYoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdFN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFN0YXRlLmNwcAppbmRleCBlYTFlMDhjOTg0ZjNlMjNjODljMmQ4NGUxZThiN2M4NmM0ZWMyODBm
Li4yYTk3ZjViYmIxMWQ3NDk3NWIxOTkxMTgzZDY3MTU3ZWNjNmVhNTIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuY3BwCkBAIC00NSwxMCArNDUsMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTw+Cit2b2lkIFdlYWtIYW5kbGVMaXN0ZW5l
cjxTY3JpcHRTdGF0ZT46OmNhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lz
dGVudDx2ODo6VmFsdWU+IG9iamVjdCwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQoreworICAg
IGRlbGV0ZSBzY3JpcHRTdGF0ZTsKK30KKwogU2NyaXB0U3RhdGU6OlNjcmlwdFN0YXRlKHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsK
LSAgICBtX2NvbnRleHQuZ2V0KCkuTWFrZVdlYWsoY29udGV4dC0+R2V0SXNvbGF0ZSgpLCB0aGlz
LCAmU2NyaXB0U3RhdGU6OndlYWtSZWZlcmVuY2VDYWxsYmFjayk7CisgICAgV2Vha0hhbmRsZUxp
c3RlbmVyPFNjcmlwdFN0YXRlPjo6bWFrZVdlYWsoY29udGV4dC0+R2V0SXNvbGF0ZSgpLCBtX2Nv
bnRleHQuZ2V0KCksIHRoaXMpOwogfQogCiBTY3JpcHRTdGF0ZTo6flNjcmlwdFN0YXRlKCkKQEAg
LTkwLDEyICs5Niw2IEBAIFNjcmlwdFN0YXRlKiBTY3JpcHRTdGF0ZTo6Y3VycmVudCgpCiAgICAg
cmV0dXJuIFNjcmlwdFN0YXRlOjpmb3JDb250ZXh0KGNvbnRleHQpOwogfQogCi12b2lkIFNjcmlw
dFN0YXRlOjp3ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAgU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gc3RhdGljX2Nhc3Q8U2NyaXB0U3RhdGUqPihwYXJhbWV0
ZXIpOwotICAgIGRlbGV0ZSBzY3JpcHRTdGF0ZTsKLX0KLQogRE9NV2luZG93KiBkb21XaW5kb3dG
cm9tU2NyaXB0U3RhdGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogewogICAgIHJldHVybiBz
Y3JpcHRTdGF0ZS0+ZG9tV2luZG93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
U3RhdGUuaAppbmRleCA3ZjhmNzhjOGI2ODQ2N2JkZTUxZGM1MjA3MDlkNTdlODI4M2ZkNzkxLi4z
MDYwN2VhYjY0YmU1MjA0ODNlODdiMmI1Y2Q2YWVmODM2ZTIwOTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUg
IkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKKyNpbmNs
dWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTgwLDYgKzgxLDcgQEAg
cHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBTY3JpcHRTdGF0ZSogbWFpbldvcmxk
U2NyaXB0U3RhdGUoRnJhbWUqKTsKKyAgICBmcmllbmQgY2xhc3MgV2Vha0hhbmRsZUxpc3RlbmVy
PFNjcmlwdFN0YXRlPjsKICAgICBleHBsaWNpdCBTY3JpcHRTdGF0ZSh2ODo6SGFuZGxlPHY4OjpD
b250ZXh0Pik7CiAKICAgICBzdGF0aWMgdm9pZCB3ZWFrUmVmZXJlbmNlQ2FsbGJhY2sodjg6Oklz
b2xhdGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBwYXJhbWV0ZXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0V3JhcHBhYmxlLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRXcmFwcGFibGUuaAppbmRleCAxZTdkNDYw
ZDRkOGI1MWIzNzljZDBiZGMxNjhkODFkNzZmYjE3YTFhLi5kNDc2Yjk0NjNjYjc3MjUzOGFiNTUz
ZGM3YmVlMzZjMjEwODY0NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRXcmFwcGFibGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRXcmFwcGFibGUuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRXcmFwcGFibGVf
aAogI2RlZmluZSBTY3JpcHRXcmFwcGFibGVfaAogCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiV3Jh
cHBlclR5cGVJbmZvLmgiCiAjaW5jbHVkZSA8djguaD4KQEAgLTM4LDYgKzM5LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0V3JhcHBhYmxlIHsKKyAgICBmcmllbmQgY2xh
c3MgV2Vha0hhbmRsZUxpc3RlbmVyPFNjcmlwdFdyYXBwYWJsZT47CiBwdWJsaWM6CiAgICAgU2Ny
aXB0V3JhcHBhYmxlKCkgeyB9CiAKQEAgLTUxLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQobV9tYXNrZWRXcmFwcGVyLklzRW1wdHkoKSk7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+IHBlcnNpc3RlbnQgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3
KGlzb2xhdGUsIHdyYXBwZXIpOwogICAgICAgICBjb25maWd1cmF0aW9uLmNvbmZpZ3VyZVdyYXBw
ZXIocGVyc2lzdGVudCwgaXNvbGF0ZSk7Ci0gICAgICAgIHBlcnNpc3RlbnQuTWFrZVdlYWsoaXNv
bGF0ZSwgdGhpcywgd2Vha0NhbGxiYWNrKTsKKyAgICAgICAgV2Vha0hhbmRsZUxpc3RlbmVyPFNj
cmlwdFdyYXBwYWJsZT46Om1ha2VXZWFrKGlzb2xhdGUsIHBlcnNpc3RlbnQsIHRoaXMpOwogICAg
ICAgICBtX21hc2tlZFdyYXBwZXIgPSBtYXNrT3JVbm1hc2tQb2ludGVyKCpwZXJzaXN0ZW50KTsK
ICAgICB9CiAKQEAgLTgwLDI2ICs4MiwyNiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCB1aW50
cHRyX3QgcmFuZG9tTWFzayA9IH4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KCZXZWJDb3Jl
TWVtb3J5VHlwZXM6OkRPTSkgPj4gMTMpOyAvLyBFbnRyb3B5IHZpYSBBU0xSLgogICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2ODo6T2JqZWN0Kj4oKG9iamVjdFBvaW50ZXIgXiByYW5k
b21NYXNrKSAmICghb2JqZWN0UG9pbnRlciAtIDEpKTsgLy8gUHJlc2VydmUgbnVsbCB3aXRob3V0
IGJyYW5jaGluZy4KICAgICB9Cit9OwogCi0gICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4
OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCB2b2lk
KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgU2NyaXB0V3JhcHBhYmxlKiBrZXkgPSBzdGF0aWNf
Y2FzdDxTY3JpcHRXcmFwcGFibGUqPihjb250ZXh0KTsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT5J
c09iamVjdCgpKTsKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciA9
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKLSAgICAgICAgQVNTRVJU
KGtleS0+d3JhcHBlcigpID09IHdyYXBwZXIpOwordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgV2Vh
a0hhbmRsZUxpc3RlbmVyPFNjcmlwdFdyYXBwYWJsZT46OmNhbGxiYWNrKHY4OjpJc29sYXRlKiBp
c29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRXcmFwcGFibGUq
IGtleSkKK3sKKyAgICBBU1NFUlQodmFsdWUtPklzT2JqZWN0KCkpOworICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6Q2Fz
dCh2YWx1ZSk7CisgICAgQVNTRVJUKGtleS0+d3JhcHBlcigpID09IHdyYXBwZXIpOwogCi0gICAg
ICAgIC8vIE5vdGU6IHxvYmplY3R8IG1pZ2h0IG5vdCBiZSBlcXVhbCB0byB8a2V5fCwgZS5nLiwg
aWYgU2NyaXB0V3JhcHBhYmxlIGlzbid0IGEgbGVmdC1tb3N0IGJhc2UgY2xhc3MuCi0gICAgICAg
IHZvaWQqIG9iamVjdCA9IHRvTmF0aXZlKHdyYXBwZXIpOwotICAgICAgICBXcmFwcGVyVHlwZUlu
Zm8qIGluZm8gPSB0b1dyYXBwZXJUeXBlSW5mbyh3cmFwcGVyKTsKLSAgICAgICAgQVNTRVJUKGlu
Zm8tPmRlcmVmT2JqZWN0RnVuY3Rpb24pOworICAgIC8vIE5vdGU6IHxvYmplY3R8IG1pZ2h0IG5v
dCBiZSBlcXVhbCB0byB8a2V5fCwgZS5nLiwgaWYgU2NyaXB0V3JhcHBhYmxlIGlzbid0IGEgbGVm
dC1tb3N0IGJhc2UgY2xhc3MuCisgICAgdm9pZCogb2JqZWN0ID0gdG9OYXRpdmUod3JhcHBlcik7
CisgICAgV3JhcHBlclR5cGVJbmZvKiBpbmZvID0gdG9XcmFwcGVyVHlwZUluZm8od3JhcHBlcik7
CisgICAgQVNTRVJUKGluZm8tPmRlcmVmT2JqZWN0RnVuY3Rpb24pOwogCi0gICAgICAgIGtleS0+
ZGlzcG9zZVdyYXBwZXIodmFsdWUsIGlzb2xhdGUpOwotICAgICAgICAvLyBGSVhNRTogSSBub3Rp
Y2VkIHRoYXQgNTAlfiBvZiBtaW5vciBHQyBjeWNsZSB0aW1lcyBjYW4gYmUgY29uc3VtZWQKLSAg
ICAgICAgLy8gaW5zaWRlIGtleS0+ZGVyZWYoKSwgd2hpY2ggY2F1c2VzIE5vZGUgZGVzdHJ1Y3Rp
b25zLiBXZSBzaG91bGQKLSAgICAgICAgLy8gbWFrZSBOb2RlIGRlc3RydWN0aW9ucyBpbmNyZW1l
bnRhbC4KLSAgICAgICAgaW5mby0+ZGVyZWZPYmplY3Qob2JqZWN0KTsKLSAgICB9Ci19OworICAg
IGtleS0+ZGlzcG9zZVdyYXBwZXIodmFsdWUsIGlzb2xhdGUpOworICAgIC8vIEZJWE1FOiBJIG5v
dGljZWQgdGhhdCA1MCV+IG9mIG1pbm9yIEdDIGN5Y2xlIHRpbWVzIGNhbiBiZSBjb25zdW1lZAor
ICAgIC8vIGluc2lkZSBrZXktPmRlcmVmKCksIHdoaWNoIGNhdXNlcyBOb2RlIGRlc3RydWN0aW9u
cy4gV2Ugc2hvdWxkCisgICAgLy8gbWFrZSBOb2RlIGRlc3RydWN0aW9ucyBpbmNyZW1lbnRhbC4K
KyAgICBpbmZvLT5kZXJlZk9iamVjdChvYmplY3QpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmNwcAppbmRleCAwOTBmMDlkMWI1MWQ2ZjFjOTcxNTFjYTc5NWU1ZGIzNThk
MzZlMzZjLi5lZDRjMjk3NDE0MzlhNmFmNjM4ZWY3ZjNhYTg5NTZiNmNjYjg0YTZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuY3BwCkBAIC00MiwxNCArNDIsMTMgQEAKICNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0
LmgiCiAjaW5jbHVkZSAiVjhFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIlY4SGlkZGVuUHJvcGVy
dHlOYW1lLmgiCi0jaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcjo6d2Vha0V2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6
OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKQordGVtcGxhdGU8Pgordm9p
ZCBXZWFrSGFuZGxlTGlzdGVuZXI8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI+OjpjYWxsYmFjayh2
ODo6SXNvbGF0ZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIFY4QWJzdHJhY3RFdmVudExp
c3RlbmVyKiBsaXN0ZW5lcikKIHsKLSAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIgPSBzdGF0aWNfY2FzdDxWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcio+KHBhcmFtZXRlcik7CiAg
ICAgbGlzdGVuZXItPm1fbGlzdGVuZXIuY2xlYXIoKTsKIH0KIApAQCAtMTA2LDcgKzEwNSw3IEBA
IHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV2ZW50CiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpz
ZXRMaXN0ZW5lck9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGxpc3RlbmVyKQogewogICAg
IG1fbGlzdGVuZXIuc2V0KGxpc3RlbmVyKTsKLSAgICBtX2xpc3RlbmVyLmdldCgpLk1ha2VXZWFr
KG1faXNvbGF0ZSwgdGhpcywgJlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjp3ZWFrRXZlbnRMaXN0
ZW5lckNhbGxiYWNrKTsKKyAgICBXZWFrSGFuZGxlTGlzdGVuZXI8VjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXI+OjptYWtlV2VhayhtX2lzb2xhdGUsIG1fbGlzdGVuZXIuZ2V0KCksIHRoaXMpOwogfQog
CiB2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjppbnZva2VFdmVudEhhbmRsZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50LCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFi
c3RyYWN0RXZlbnRMaXN0ZW5lci5oCmluZGV4IDEyMDFiMTg4Nzc0YjI3YTliZmI4YTY5OGFiODAz
YTU2OTY4NTFmMDcuLmUxMzU2NWQ2ZTFlNGY4MGZhMWJlZDhkZDA5NDRlZmMwZGVkN2VkZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3Rl
bmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlz
dGVuZXIuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIlNjb3BlZFBlcnNpc3RlbnQuaCIKKyNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIldvcmxkQ29udGV4dEhhbmRsZS5oIgogI2luY2x1ZGUgPHY4Lmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTUxLDYgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIC8vIFdlYktpdCBkb2VzIG5vdCBhbGxvdyBkdXBsaWNhdGVkIEhUTUwgZXZlbnQgaGFu
ZGxlcnMgb2YgdGhlIHNhbWUgdHlwZSwKICAgICAvLyBidXQgQUxMT1dzIGR1cGxpY2F0ZWQgbm9u
LUhUTUwgZXZlbnQgaGFuZGxlcnMuCiAgICAgY2xhc3MgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIg
OiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBXZWFrSGFuZGxl
TGlzdGVuZXI8VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI+OwogICAgIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCB+VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5jcHAKaW5kZXggNGMwZWE1NGFiNzEz
OTk4OWUwZTE3NDhhNDczNDhlMDU0ZmRhODBhYi4uNzVjMTkzNzkxMGMwZTBlZWM4ZjE1ZGZhZDRl
OGQ2YTk4MTZhNzc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhN
dXRhdGlvbkNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE11
dGF0aW9uQ2FsbGJhY2suY3BwCkBAIC0zNSwxMyArMzUsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCit0ZW1wbGF0ZTw+Cit2b2lkIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE11dGF0aW9uQ2Fs
bGJhY2s+OjpjYWxsYmFjayh2ODo6SXNvbGF0ZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4s
IFY4TXV0YXRpb25DYWxsYmFjayogY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2stPm1fY2FsbGJh
Y2suY2xlYXIoKTsKK30KKwogVjhNdXRhdGlvbkNhbGxiYWNrOjpWOE11dGF0aW9uQ2FsbGJhY2so
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG93bmVyLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKICAgICA6IEFjdGl2ZURPTUNhbGxiYWNrKGNvbnRleHQpCiAgICAgLCBtX2NhbGxiYWNr
KGNhbGxiYWNrKQogICAgICwgbV93b3JsZChET01XcmFwcGVyV29ybGQ6Omlzb2xhdGVkV29ybGQo
djg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKSkpCiB7CiAgICAgb3duZXItPlNldEhpZGRlblZhbHVl
KFY4SGlkZGVuUHJvcGVydHlOYW1lOjpjYWxsYmFjaygpLCBjYWxsYmFjayk7Ci0gICAgbV9jYWxs
YmFjay5nZXQoKS5NYWtlV2Vhayhpc29sYXRlLCB0aGlzLCAmVjhNdXRhdGlvbkNhbGxiYWNrOjp3
ZWFrQ2FsbGJhY2spOworICAgIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE11dGF0aW9uQ2FsbGJhY2s+
OjptYWtlV2Vhayhpc29sYXRlLCBtX2NhbGxiYWNrLmdldCgpLCB0aGlzKTsKIH0KIAogdm9pZCBW
OE11dGF0aW9uQ2FsbGJhY2s6OmNhbGwoY29uc3QgVmVjdG9yPFJlZlB0cjxNdXRhdGlvblJlY29y
ZD4gPiYgbXV0YXRpb25zLCBNdXRhdGlvbk9ic2VydmVyKiBvYnNlcnZlcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TXV0YXRpb25DYWxsYmFjay5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhNdXRhdGlvbkNhbGxiYWNrLmgKaW5kZXggYjA3N2NkMWRl
NDcwMGQ5M2QwZWY2OTBlMmNmNGJlNjc1ZWFlMWRiNS4uNGM3OTY0NzY4NTlhOGQzNjc0MzNmZTBi
YmM3YzExY2JjNzU1NjA0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhNdXRhdGlvbkNhbGxiYWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhN
dXRhdGlvbkNhbGxiYWNrLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJET01XcmFwcGVy
V29ybGQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU2NvcGVk
UGVyc2lzdGVudC5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8djguaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTM4LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgVjhNdXRhdGlv
bkNhbGxiYWNrIDogcHVibGljIE11dGF0aW9uQ2FsbGJhY2ssIHB1YmxpYyBBY3RpdmVET01DYWxs
YmFjayB7CisgICAgZnJpZW5kIGNsYXNzIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE11dGF0aW9uQ2Fs
bGJhY2s+OwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TXV0YXRpb25DYWxsYmFj
az4gY3JlYXRlKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvd25lciwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCiAgICAgewpAQCAtNTEsMTIgKzUzLDYgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBWOE11dGF0aW9uQ2FsbGJhY2sodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+LCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Piwgdjg6Oklzb2xhdGUq
KTsKIAotICAgIHN0YXRpYyB2b2lkIHdlYWtDYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwg
djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyLCB2b2lkKiBwYXJhbWV0ZXIpCi0gICAg
ewotICAgICAgICBWOE11dGF0aW9uQ2FsbGJhY2sqIG9iamVjdCA9IHN0YXRpY19jYXN0PFY4TXV0
YXRpb25DYWxsYmFjayo+KHBhcmFtZXRlcik7Ci0gICAgICAgIG9iamVjdC0+bV9jYWxsYmFjay5j
bGVhcigpOwotICAgIH0KLQogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uPiBtX2Nh
bGxiYWNrOwogICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IG1fd29ybGQ7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcAppbmRleCAwYWY1ZWI0NGQyNDdmMTE3
YzZiZTU0NDgxNjE0NmUzMTI2M2VkYzY4Li4wODMzYmUxMzIwN2JjZDE1YjY4ZTVlMWMwYmM1NmM5
OTc0YWRlZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcApA
QCAtMTYwLDkgKzE2MCw4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBucE9iamVjdEludm9rZURl
ZmF1bHRIYW5kbGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIG5wT2Jq
ZWN0SW52b2tlSW1wbChhcmdzLCBJbnZva2VEZWZhdWx0KTsKIH0KIAotCi1jbGFzcyBWOE5QVGVt
cGxhdGVNYXAKLXsKK2NsYXNzIFY4TlBUZW1wbGF0ZU1hcCB7CisgICAgZnJpZW5kIGNsYXNzIFdl
YWtIYW5kbGVMaXN0ZW5lcjxWOE5QVGVtcGxhdGVNYXAsIFByaXZhdGVJZGVudGlmaWVyPjsKIHB1
YmxpYzoKICAgICAvLyBOUElkZW50aWZpZXIgaXMgUHJpdmF0ZUlkZW50aWZpZXIqLgogICAgIHR5
cGVkZWYgSGFzaE1hcDxQcml2YXRlSWRlbnRpZmllciosIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiA+IE1hcFR5cGU7CkBAIC0xNzYsNyArMTc1LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgQVNTRVJUKCFtX21hcC5jb250YWlucyhrZXkpKTsKICAgICAgICAgbV9tYXAu
c2V0KGtleSwgd3JhcHBlcik7Ci0gICAgICAgIHdyYXBwZXIuTWFrZVdlYWsobV9pc29sYXRlLCBr
ZXksIHdlYWtDYWxsYmFjayk7CisgICAgICAgIFdlYWtIYW5kbGVMaXN0ZW5lcjxWOE5QVGVtcGxh
dGVNYXAsIFByaXZhdGVJZGVudGlmaWVyPjo6bWFrZVdlYWsobV9pc29sYXRlLCB3cmFwcGVyLCBr
ZXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBWOE5QVGVtcGxhdGVNYXAmIHNoYXJlZEluc3RhbmNl
KHY4OjpJc29sYXRlKiBpc29sYXRlKQpAQCAtMTkyLDExICsxOTEsNiBAQCBwcml2YXRlOgogICAg
IHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB3ZWFrQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlz
b2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gb2JqZWN0LCB2b2lkKiBjb250ZXh0KQot
ICAgIHsKLSAgICAgICAgc2hhcmVkSW5zdGFuY2UoaXNvbGF0ZSkuZGlzcG9zZShzdGF0aWNfY2Fz
dDxQcml2YXRlSWRlbnRpZmllcio+KGNvbnRleHQpKTsKLSAgICB9Ci0KICAgICB2b2lkIGRpc3Bv
c2UoUHJpdmF0ZUlkZW50aWZpZXIqIGtleSkKICAgICB7CiAgICAgICAgIE1hcFR5cGU6Oml0ZXJh
dG9yIGl0ID0gbV9tYXAuZmluZChrZXkpOwpAQCAtMjEwLDYgKzIwNCwxMiBAQCBwcml2YXRlOgog
ICAgIHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7CiB9OwogCit0ZW1wbGF0ZTw+Cit2b2lkIFdlYWtI
YW5kbGVMaXN0ZW5lcjxWOE5QVGVtcGxhdGVNYXAsIFByaXZhdGVJZGVudGlmaWVyPjo6Y2FsbGJh
Y2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4sIFByaXZh
dGVJZGVudGlmaWVyKiBrZXkpCit7CisgICAgVjhOUFRlbXBsYXRlTWFwOjpzaGFyZWRJbnN0YW5j
ZShpc29sYXRlKS5kaXNwb3NlKGtleSk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gbnBPYmplY3RHZXRQcm9wZXJ0eSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gc2VsZiwgTlBJZGVu
dGlmaWVyIGlkZW50aWZpZXIsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGtleSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCiB7CiAgICAgTlBPYmplY3QqIG5wT2JqZWN0ID0gdjhPYmplY3RUb05QT2JqZWN0
KHNlbGYpOwpAQCAtMzg0LDE1ICszODQsMTQgQEAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IG5wT2Jq
ZWN0SW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJgogICAg
IHJldHVybiBucE9iamVjdFByb3BlcnR5RW51bWVyYXRvcihpbmZvLCBmYWxzZSk7CiB9CiAKLXN0
YXRpYyB2b2lkIHdlYWtOUE9iamVjdENhbGxiYWNrKHY4OjpJc29sYXRlKiwgdjg6OlBlcnNpc3Rl
bnQ8djg6OlZhbHVlPiwgdm9pZCopOwotCiBzdGF0aWMgRE9NV3JhcHBlck1hcDxOUE9iamVjdD4m
IHN0YXRpY05QT2JqZWN0TWFwKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERPTVdyYXBw
ZXJNYXA8TlBPYmplY3Q+LCBucE9iamVjdE1hcCwgKHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCks
ICZ3ZWFrTlBPYmplY3RDYWxsYmFjaykpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9NV3Jh
cHBlck1hcDxOUE9iamVjdD4sIG5wT2JqZWN0TWFwLCAodjg6Oklzb2xhdGU6OkdldEN1cnJlbnQo
KSkpOwogICAgIHJldHVybiBucE9iamVjdE1hcDsKIH0KIAotc3RhdGljIHZvaWQgd2Vha05QT2Jq
ZWN0Q2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gdmFsdWUsIHZvaWQqKQordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgV2Vha0hhbmRsZUxpc3Rl
bmVyPERPTVdyYXBwZXJNYXA8TlBPYmplY3Q+ID46OmNhbGxiYWNrKHY4OjpJc29sYXRlKiBpc29s
YXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHZhbHVlLCBET01XcmFwcGVyTWFwPE5QT2Jq
ZWN0PiopCiB7CiAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKICAgICB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46OkNh
c3QodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGls
aXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgKaW5kZXgg
MjRiMjNjZmUzZGUxYTYyODJhNjJlMmRhNWNmZWYzNjBiOWJjZTM0NC4uMWI3OTI5NDVjZmIzNWFm
YWVkMzJhMWU1MDU1ZDMzMTFkMjQzNWE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFV0aWxpdGllcy5oCkBAIC02Myw2ICs2MywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ym9vbCBleHRyYWN0VHJhbnNmZXJhYmxlcyh2ODo6TG9jYWw8djg6OlZhbHVlPiwgTWVzc2FnZVBv
cnRBcnJheSYsIEFycmF5QnVmZmVyQXJyYXkmLCB2ODo6SXNvbGF0ZSopOyAKICAgICBib29sIGdl
dE1lc3NhZ2VQb3J0QXJyYXkodjg6OkxvY2FsPHY4OjpWYWx1ZT4sIE1lc3NhZ2VQb3J0QXJyYXkm
LCB2ODo6SXNvbGF0ZSopOwogCisgICAgLy8gRklYTUU6IFdlIG1pZ2h0IG1vdmUgdGhpcyB0byBp
dHMgb3duIGZpbGUuCisgICAgdGVtcGxhdGU8Y2xhc3MgT3duZXJUeXBlLCBjbGFzcyBBcmd1bWVu
dFR5cGUgPSBPd25lclR5cGU+CisgICAgY2xhc3MgV2Vha0hhbmRsZUxpc3RlbmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBIYW5kbGVUeXBlPgorICAgICAgICBzdGF0
aWMgdm9pZCBtYWtlV2Vhayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgSGFuZGxlVHlwZSBoYW5kbGUs
IEFyZ3VtZW50VHlwZSogcGFyYW1ldGVyKQorICAgICAgICB7CisgICAgICAgICAgICBoYW5kbGUu
TWFrZVdlYWsoaXNvbGF0ZSwgcGFyYW1ldGVyLCAmaW52b2tlV2Vha0NhbGxiYWNrKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIGNhbGxiYWNrKHY4OjpJc29sYXRlKiwgdjg6OlBl
cnNpc3RlbnQ8djg6OlZhbHVlPiwgQXJndW1lbnRUeXBlKik7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBzdGF0aWMgdm9pZCBpbnZva2VXZWFrQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUs
IHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gaGFuZGxlLCB2b2lkKiBwYXJhbWV0ZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFdlYWtIYW5kbGVMaXN0ZW5lcjxPd25lclR5cGUsIEFyZ3VtZW50
VHlwZT46OmNhbGxiYWNrKGlzb2xhdGUsIGhhbmRsZSwgc3RhdGljX2Nhc3Q8QXJndW1lbnRUeXBl
Kj4ocGFyYW1ldGVyKSk7CisgICAgICAgIH0KKyAgICB9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBWOFV0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhWYWx1ZUNhY2hlLmNwcAppbmRleCAxOTVlNTIzYThjZDIwODQwZjhkM2EyZGZmNGE5YTU0
ZjBiZjlkZjJlLi5iY2NkMjAzNzQ0NTdlZDc2YmM4OTg4MTNiMmZmNjM2ODhkMGM3NWY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAKQEAgLTU3LDkgKzU3
LDkgQEAgc3RhdGljIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBtYWtlRXh0ZXJuYWxTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuIG5ld1N0cmluZzsKIH0KIAotc3RhdGljIHZv
aWQgY2FjaGVkU3RyaW5nQ2FsbGJhY2sodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpQZXJzaXN0
ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciwgdm9pZCogcGFyYW1ldGVyKQordGVtcGxhdGU8Pgordm9p
ZCBXZWFrSGFuZGxlTGlzdGVuZXI8U3RyaW5nQ2FjaGUsIFN0cmluZ0ltcGw+OjpjYWxsYmFjayh2
ODo6SXNvbGF0ZSogaXNvbGF0ZSwgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiB3cmFwcGVyLCBT
dHJpbmdJbXBsKiBzdHJpbmdJbXBsKQogewotICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBz
dGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4ocGFyYW1ldGVyKTsKICAgICBWOFBlcklzb2xhdGVEYXRh
OjpjdXJyZW50KCktPnN0cmluZ0NhY2hlKCktPnJlbW92ZShzdHJpbmdJbXBsKTsKICAgICB3cmFw
cGVyLkRpc3Bvc2UoaXNvbGF0ZSk7CiAgICAgd3JhcHBlci5DbGVhcigpOwpAQCAtOTksNyArOTks
NyBAQCB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5n
U2xvdyhTdHJpbmdJbXBsKiBzdHJpbmdJbXBsLAogCiAgICAgc3RyaW5nSW1wbC0+cmVmKCk7CiAg
ICAgd3JhcHBlci5NYXJrSW5kZXBlbmRlbnQoaXNvbGF0ZSk7Ci0gICAgd3JhcHBlci5NYWtlV2Vh
ayhpc29sYXRlLCBzdHJpbmdJbXBsLCBjYWNoZWRTdHJpbmdDYWxsYmFjayk7CisgICAgV2Vha0hh
bmRsZUxpc3RlbmVyPFN0cmluZ0NhY2hlLCBTdHJpbmdJbXBsPjo6bWFrZVdlYWsoaXNvbGF0ZSwg
d3JhcHBlciwgc3RyaW5nSW1wbCk7CiAgICAgbV9zdHJpbmdDYWNoZS5zZXQoc3RyaW5nSW1wbCwg
d3JhcHBlcik7CiAKICAgICBtX2xhc3RTdHJpbmdJbXBsID0gc3RyaW5nSW1wbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0TWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwCmluZGV4IDI5YjIzZDlmMDllMGZiMDkwMDA5NzY3NzRjMzU4MmMyNzU4
NDBkYjAuLmFlNTRmZGU4YzY1NzY3YWE5MjcxMDMxYzE1M2MzZTk5MDM3OTIyYmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0TWFu
YWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtNDUsMTAgKzQ1LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIHZvaWQgV2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpJc29sYXRlKiBp
c29sYXRlLCB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IG9iamVjdCwgdm9pZCogcGFyYW1ldGVy
KQordGVtcGxhdGU8Pgordm9pZCBXZWFrSGFuZGxlTGlzdGVuZXI8SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLCBJbmplY3RlZFNjcmlwdEhvc3Q+OjpjYWxsYmFjayh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwg
djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIEluamVjdGVkU2NyaXB0SG9zdCogaG9z
dCkKIHsKLSAgICBJbmplY3RlZFNjcmlwdEhvc3QqIG5hdGl2ZU9iamVjdCA9IHN0YXRpY19jYXN0
PEluamVjdGVkU2NyaXB0SG9zdCo+KHBhcmFtZXRlcik7Ci0gICAgbmF0aXZlT2JqZWN0LT5kZXJl
ZigpOworICAgIGhvc3QtPmRlcmVmKCk7CiAgICAgb2JqZWN0LkRpc3Bvc2UoaXNvbGF0ZSk7CiAg
ICAgb2JqZWN0LkNsZWFyKCk7CiB9CkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyB2ODo6TG9jYWw8
djg6Ok9iamVjdD4gY3JlYXRlSW5qZWN0ZWRTY3JpcHRIb3N0VjhXcmFwcGVyKEluamVjdGVkU2Ny
aXB0SG9zCiAgICAgLy8gSW5zcGVjdG9yQmFja2VuZCB3aGVuIHRoZSB3cmFwcGVyIGlzIGdhcmJh
Z2UgY29sbGVjdGVkLgogICAgIGhvc3QtPnJlZigpOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IHdlYWtIYW5kbGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGlzb2xh
dGUsIGluc3RhbmNlKTsKLSAgICB3ZWFrSGFuZGxlLk1ha2VXZWFrKGlzb2xhdGUsIGhvc3QsICZX
ZWFrUmVmZXJlbmNlQ2FsbGJhY2spOworICAgIFdlYWtIYW5kbGVMaXN0ZW5lcjxJbmplY3RlZFNj
cmlwdE1hbmFnZXIsIEluamVjdGVkU2NyaXB0SG9zdD46Om1ha2VXZWFrKGlzb2xhdGUsIHdlYWtI
YW5kbGUsIGhvc3QpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>