<?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>114629</bug_id>
          
          <creation_ts>2013-04-15 11:42:20 -0700</creation_ts>
          <short_desc>[Mac] in-band cues sometimes displayed late</short_desc>
          <delta_ts>2013-04-16 13:53:08 -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>Media</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jer.noble</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>875926</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-15 11:42:20 -0700</bug_when>
    <thetext>The duration of an in-band cue in the media file is implicit - it is displayed until the next sample in its track. This means that cues are delivered to WebKit without have an end time and we use the start time of the next cue (which could be empty) as the previous cue&apos;s end time. Because of this cues are not added to a track until the duration is known.

WebKit only gets in-band cues ~2 seconds in advance of their display time, so this does not work well for cues with long durations because we don&apos;t know the duration until well after the cue is supposed to be displayed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876017</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-15 13:11:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/13434762&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876020</commentid>
    <comment_count>2</comment_count>
      <attachid>198175</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-15 13:12:27 -0700</bug_when>
    <thetext>Created attachment 198175
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876022</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-15 13:16:01 -0700</bug_when>
    <thetext>Attachment 198175 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/html/track/InbandTextTrack.cpp&apos;, u&apos;Source/WebCore/html/track/InbandTextTrack.h&apos;, u&apos;Source/WebCore/html/track/TextTrack.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrack.h&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackCue.h&apos;, u&apos;Source/WebCore/html/track/TextTrackCueGeneric.cpp&apos;, u&apos;Source/WebCore/html/track/TextTrackCueGeneric.h&apos;, u&apos;Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h&apos;, u&apos;Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp&apos;]&quot; exit_code: 1
Source/WebCore/html/track/InbandTextTrack.h:48:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.h:48:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.h:50:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.h:51:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.h:53:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.h:54:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/TextTrack.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/html/track/TextTrack.h:113:  The parameter name &quot;match&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:45:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:45:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:51:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:60:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:79:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 14 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876033</commentid>
    <comment_count>4</comment_count>
      <attachid>198178</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-15 13:40:16 -0700</bug_when>
    <thetext>Created attachment 198178
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876617</commentid>
    <comment_count>5</comment_count>
      <attachid>198178</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-04-16 10:59:41 -0700</bug_when>
    <thetext>Comment on attachment 198178
Updated patch.

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

&gt; Source/WebCore/html/track/InbandTextTrack.cpp:240
&gt; +void InbandTextTrack::updateGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt; prpCueData)

This should take a GenericCueData*, as you&apos;re not passing ownership of the cueData parameter.

&gt; Source/WebCore/html/track/InbandTextTrack.cpp:253
&gt; +void InbandTextTrack::removeGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt; prpCueData)

Ditto.

&gt; Source/WebCore/html/track/InbandTextTrack.cpp:263
&gt; +void InbandTextTrack::removeCue(PassRefPtr&lt;TextTrackCue&gt; prpCue, ExceptionCode&amp; ec)

Ditto for TextTrackCue* and cue.

&gt; Source/WebCore/html/track/InbandTextTrack.h:82
&gt; +    virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt;) OVERRIDE;
&gt; +    virtual void updateGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt;) OVERRIDE;
&gt; +    virtual void removeGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt;) OVERRIDE;
&gt; +    virtual void removeCue(PassRefPtr&lt;TextTrackCue&gt;, ExceptionCode&amp;) OVERRIDE;

It makes sense to pass a PassRefPtr to addGenericCue, as you&apos;re passing ownership of the parameter.  But updateGenericCue and removeGenericCue should just take a raw GenericCueData* pointer. Same for removeCue() and TextTrackCue*.

&gt; Source/WebCore/html/track/TextTrackCue.cpp:-313
&gt; -    cueWillChange();
&gt;      m_pauseOnExit = value;
&gt; -    cueDidChange();

Presumably you want to replace these with willChange() and didChange(), not remove them entirely.

&gt; Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h:134
&gt; +    virtual void addGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt;) = 0;
&gt; +    virtual void updateGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt;) = 0;
&gt; +    virtual void removeGenericCue(InbandTextTrackPrivate*, PassRefPtr&lt;GenericCueData&gt;) = 0;

Same here as for TextTrack.

&gt; Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:388
&gt; +        client()-&gt;addGenericCue(this, cueData);

You should pass cueData.release() to addGenericCue() since it takes a PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>876853</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-04-16 13:52:58 -0700</bug_when>
    <thetext>https://trac.webkit.org/r148540</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198175</attachid>
            <date>2013-04-15 13:12:27 -0700</date>
            <delta_ts>2013-04-15 13:40:16 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_6.txt</filename>
            <type>text/plain</type>
            <size>34025</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODQ1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDEzLTA0LTE1ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGluLWJhbmQg
Y3VlcyBzb21ldGltZXMgZGlzcGxheWVkIGxhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBkZWFscyB3aXRoIGEgcGxh
dGZvcm0tc3BlY2lmaWMgaXNzdWUgdGhhdCBpcyBleHRyZW1lbHkgdGltaW5nIGRlcGVuZGVudC4K
KworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZU1hcDo6YWRkKTogTmV3LCB0d28gd2F5IGN1ZSBkYXRhIDwtPiBj
dWUgbWFwLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTWFwOjpmaW5kKTogCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmRUZXh0VHJhY2s6OnVwZGF0ZUN1ZUZyb21DdWVEYXRhKTogTmV3LCB1cGRhdGUgYW4g
ZXhpc3RpbmcgY3VlLiBTZXQgY3VlIGVuZCB0aW1lCisgICAgICAgICAgICB0byB2aWRlbyBkdXJh
dGlvbiBpZiBpdCBpcyB1bmtub3duLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNr
OjphZGRHZW5lcmljQ3VlKTogTG9vayBmb3IgZXhpc3RpbmcgY3VlcyB3aXRob3V0IGNvbnNpZGVy
aW5nIGR1cmF0aW9uCisgICAgICAgICAgICBzbyB3ZSBjYW4gbWF0Y2ggaW5jb21wbGV0ZSBjdWVz
LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjp1cGRhdGVHZW5lcmljQ3VlKTog
TmV3LCB1cGRhdGUgYW4gZXhpc3RpbmcgY3VlLiBUaGlzIGFsbG93cyB1cyB0byAKKyAgICAgICAg
ICAgIGFkZCBpbi1iYW5kIGN1ZXMgYXMgc29vbiBhcyB3ZSBnZXQgdGhlbSBmcm9tIHRoZSBtZWRp
YSBlbmdpbmUgYW5kIHVwZGF0ZSB0aGVtIGFzIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9u
IGJlY29tZXMgYXZhaWxhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjpy
ZW1vdmVHZW5lcmljQ3VlKTogTmV3LCByZW1vdmUgYW4gZXhpc3RpbmcgY3VlLiBUaGlzIGlzIG5l
Y2Vzc2FyeQorICAgICAgICAgICAgYmVjYXVzZSB3ZSBuZXZlciB3YW50IHRvIGtlZXAgYW4gaW5j
b21wbGV0ZSBjdWUgd2hlbiBhIHNlZWsgaGFwcGVucy4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFu
ZFRleHRUcmFjazo6cmVtb3ZlQ3VlKTogTmV3LCBiYXNlIGNsYXNzIG92ZXJyaWRlIHNvIHdlIGNh
biBrZWVwIHRoZSB0d28gd2F5CisgICAgICAgICAgICBtYXAgdXAgdG8gZGF0ZS4KKyAgICAgICAg
KiBodG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oOgorCisgICAgICAgICogaHRtbC90cmFjay9U
ZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjphZGRDdWUpOiBUZXh0
VHJhY2s6OnJlbW92ZUN1ZSB0YWtlcyBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFjazo6cmVtb3ZlQ3VlKTogVGFrZSBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFjazo6aGFzQ3VlKTogQWxsb3cgY2FsbGVyIHRvIHJlcXVlc3QgbWF0Y2ggd2l0aG91dCBjb25z
aWRlcmluZyBlbmQgdGltZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorCisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUpOiBJbml0aWFsaXplIG1fcHJvY2Vzc2luZ0N1ZUNo
YW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OndpbGxDaGFuZ2UpOiBSZW5h
bWVkIGZyb20gY3VlV2lsbENoYW5nZS4gVXNlIG1fcHJvY2Vzc2luZ0N1ZUNoYW5nZXMKKyAgICAg
ICAgICAgIHRvIGF2b2lkIHRocmFzaGluZyB0aGUgdHJhY2sgd2hlbiBtYW55IGN1ZSBwcm9wZXJ0
aWVzIHdpbGwgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaWRDaGFu
Z2UpOiBSZW5hbWVkIGZyb20gY3VlRGlkQ2hhbmdlLiBVc2UgbV9wcm9jZXNzaW5nQ3VlQ2hhbmdl
cworICAgICAgICAgICAgdG8gYXZvaWQgdGhyYXNoaW5nIHRoZSB0cmFjayB3aGVuIG1hbnkgY3Vl
IHByb3BlcnRpZXMgd2lsbCBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6
OnNldElkKTogY3VlV2lsbENoYW5nZSAtPiB3aWxsQ2hhbmdlLiBjdWVEaWRDaGFuZ2UgLT4gZGlk
Q2hhbmdlLiAKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0U3RhcnRUaW1lKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNldEVuZFRpbWUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0UGF1c2VPbkV4aXQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0VmVydGljYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0U25hcFRvTGluZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0TGluZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWU6OnNldEFsaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
VHJhY2tDdWU6OnNldFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZTo6c2V0UmVnaW9uSWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
aXNFcXVhbCk6IFJlbmFtZWQgZnJvbSBvcGVyYXRvcj09LCB0YWtlIG1hdGNoIHJ1bGVzIHBhcmFt
LgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6CisKKyAgICAgICAgKiBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlR2VuZXJpYzo6aXNFcXVhbCk6IFJlbmFtZWQgZnJvbSBvcGVyYXRvcj09LCB0YWtlIG1h
dGNoIHJ1bGVzIHBhcmFtLgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJp
Yy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUNsaWVudC5oOiBNYWtlIEdlbmVyaWNDdWVEYXRhIHJlZmNvdW50ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHZW5lcmljQ3VlRGF0YTo6Y3JlYXRlKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6R2Vu
ZXJpY0N1ZURhdGE6OnN0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY0N1
ZURhdGE6OnNldFN0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY0N1ZURh
dGE6OkdlbmVyaWNDdWVEYXRhKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUpOiBBZGQgY3VlcyBhcyBzb29u
IGFzIHdlIGdldCB0aGVtIGZyb20gdGhlIG1lZGlhCisgICAgICAgICAgICBlbmdpbmUsIHVwZGF0
ZSBkdXJhdGlvbiBvbmNlIHdlIGtub3cgaXQuCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZhbHVlcyk6IFRlbGwgdGhlIGNsaWVudCB0byByZW1v
dmUgYWxsIGluY29tcGxldGUKKyAgICAgICAgICAgIGN1ZXMgd2UgaGF2ZSBkZWxpdmVyZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuaDoKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVkKTogRG8gbm90IGZsdXNo
IGN1ZXMgd2hlbiBzZWVrIGNvbXBsZXRlcywKKyAgICAgICAgICAgIHdlIGRpZCB0aGF0IHdoZW4g
dGhlIHNlZWsgc3RhcnRlZCBhbmQgY3VlcyBjYW4gYmUgZGVsaXZlcmVkIGJlZm9yZSB3ZSBnZXQg
dGhlIHRoZSAKKyAgICAgICAgICAgIHNlZWsgY29tcGxldGVkICBub3RpZmljYXRpb24uCisKIDIw
MTMtMDQtMTUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgSFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrIHNob3VsZCBjbGVhciB0cmFjayBj
bGllbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFj
ay5jcHAJKHJldmlzaW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlRleHRUcmFja0N1ZUdlbmVyaWMuaCIKICNp
bmNsdWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDIsNiAr
NDIsNTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFRleHRUcmFja0N1ZU1hcDo6
YWRkKFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4gY3VlRGF0YSwgUmVmUHRyPFRleHRUcmFja0N1ZUdl
bmVyaWM+IGN1ZSkKK3sKKyAgICBtX2RhdGFUb0N1ZU1hcC5hZGQoY3VlRGF0YSwgY3VlKTsKKyAg
ICBtX2N1ZVRvRGF0YU1hcC5hZGQoY3VlLCBjdWVEYXRhKTsKK30KKworUGFzc1JlZlB0cjxUZXh0
VHJhY2tDdWVHZW5lcmljPiBUZXh0VHJhY2tDdWVNYXA6OmZpbmQoUmVmUHRyPEdlbmVyaWNDdWVE
YXRhPiBwcnBDdWVEYXRhKQoreworICAgIEdlbmVyaWNDdWVEYXRhVG9DdWVNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2RhdGFUb0N1ZU1hcC5maW5kKHBycEN1ZURhdGEpOworICAgIGlmIChpdGVyID09
IG1fZGF0YVRvQ3VlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1
cm4gaXRlci0+dmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IFRleHRUcmFj
a0N1ZU1hcDo6ZmluZChSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gcHJwQ3VlKQoreworICAg
IEdlbmVyaWNDdWVUb0N1ZURhdGFNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1ZVRvRGF0YU1hcC5m
aW5kKHBycEN1ZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9jdWVUb0RhdGFNYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBpdGVyLT52YWx1ZTsKK30KKwordm9pZCBU
ZXh0VHJhY2tDdWVNYXA6OnJlbW92ZShSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IHBycEN1ZURhdGEp
Cit7CisgICAgUmVmUHRyPEdlbmVyaWNDdWVEYXRhPiBjdWVEYXRhID0gcHJwQ3VlRGF0YTsKKyAg
ICBSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gY3VlID0gZmluZChjdWVEYXRhKTsKKworICAg
IGlmIChjdWUpCisgICAgICAgIG1fY3VlVG9EYXRhTWFwLnJlbW92ZShjdWUpOworICAgIG1fZGF0
YVRvQ3VlTWFwLnJlbW92ZShjdWVEYXRhKTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWVNYXA6OnJl
bW92ZShSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gcHJwQ3VlKQoreworICAgIFJlZlB0cjxU
ZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUgPSBwcnBDdWU7CisgICAgUmVmUHRyPEdlbmVyaWNDdWVE
YXRhPiBjdWVEYXRhID0gZmluZChjdWUpOworCisgICAgaWYgKGN1ZURhdGEpCisgICAgICAgIG1f
ZGF0YVRvQ3VlTWFwLnJlbW92ZShjdWVEYXRhKTsKKyAgICBtX2N1ZVRvRGF0YU1hcC5yZW1vdmUo
Y3VlKTsKK30KKworCiBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFjaz4gSW5iYW5kVGV4dFRyYWNr
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGV4dFRyYWNrQ2xpZW50
KiBjbGllbnQsIFBhc3NSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZT4gcGxheWVyUHJpdmF0
ZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluYmFuZFRleHRUcmFjayhjb250ZXh0LCBj
bGllbnQsIHBsYXllclByaXZhdGUpKTsKQEAgLTEzNiwxMyArMTgxLDE2IEBAIHNpemVfdCBJbmJh
bmRUZXh0VHJhY2s6OmluYmFuZFRyYWNrSW5kZXgKICAgICByZXR1cm4gbV9wcml2YXRlLT50ZXh0
VHJhY2tJbmRleCgpOwogfQogCi12b2lkIEluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJpY0N1ZShJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1ByaXZhdGUsIEdlbmVyaWNDdWVEYXRhKiBjdWVE
YXRhKQordm9pZCBJbmJhbmRUZXh0VHJhY2s6OnVwZGF0ZUN1ZUZyb21DdWVEYXRhKFRleHRUcmFj
a0N1ZUdlbmVyaWMqIGN1ZSwgR2VuZXJpY0N1ZURhdGEqIGN1ZURhdGEpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKHRyYWNrUHJpdmF0ZSk7Ci0gICAgQVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZh
dGUpOwotCi0gICAgUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+IGN1ZSA9IFRleHRUcmFja0N1
ZUdlbmVyaWM6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGN1ZURhdGEtPnN0YXJ0
VGltZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCksIGN1ZURhdGEtPmNvbnRlbnQoKSk7CisgICAgY3Vl
LT53aWxsQ2hhbmdlKCk7CiAKKyAgICBjdWUtPnNldFN0YXJ0VGltZShjdWVEYXRhLT5zdGFydFRp
bWUoKSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgZG91YmxlIGVuZFRpbWUgPSBjdWVEYXRhLT5l
bmRUaW1lKCk7CisgICAgaWYgKHN0ZDo6aXNpbmYoZW5kVGltZSkgJiYgbWVkaWFFbGVtZW50KCkp
CisgICAgICAgIGVuZFRpbWUgPSBtZWRpYUVsZW1lbnQoKS0+ZHVyYXRpb24oKTsKKyAgICBjdWUt
PnNldEVuZFRpbWUoZW5kVGltZSwgSUdOT1JFX0VYQ0VQVElPTik7CisgICAgY3VlLT5zZXRUZXh0
KGN1ZURhdGEtPmNvbnRlbnQoKSk7CiAgICAgY3VlLT5zZXRJZChjdWVEYXRhLT5pZCgpKTsKICAg
ICBjdWUtPnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodChjdWVEYXRhLT5iYXNl
Rm9udFNpemUoKSk7CiAgICAgY3VlLT5zZXRGb250U2l6ZU11bHRpcGxpZXIoY3VlRGF0YS0+cmVs
YXRpdmVGb250U2l6ZSgpKTsKQEAgLTE2NywzMCArMjE1LDYxIEBAIHZvaWQgSW5iYW5kVGV4dFRy
YWNrOjphZGRHZW5lcmljQ3VlKEluYmEKICAgICAgICAgY3VlLT5zZXRBbGlnbihBU0NJSUxpdGVy
YWwoImVuZCIpLCBJR05PUkVfRVhDRVBUSU9OKTsKICAgICBjdWUtPnNldFNuYXBUb0xpbmVzKGZh
bHNlKTsKIAotICAgIGlmIChoYXNDdWUoY3VlLmdldCgpKSkgewotICAgICAgICBMT0coTWVkaWEs
ICJJbmJhbmRUZXh0VHJhY2s6OmFkZEdlbmVyaWNDdWUgaWdub3JpbmcgYWxyZWFkeSBhZGRlZCBj
dWU6IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBjb250ZW50PVwiJXNcIlxuIiwKLSAgICAgICAgICAg
IGN1ZURhdGEtPnN0YXJ0VGltZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCksIGN1ZURhdGEtPmNvbnRl
bnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjdWUtPmRpZENoYW5nZSgpOworfQorICAgIAordm9p
ZCBJbmJhbmRUZXh0VHJhY2s6OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSog
dHJhY2tQcml2YXRlLCBQYXNzUmVmUHRyPEdlbmVyaWNDdWVEYXRhPiBwcnBDdWVEYXRhKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0cmFja1ByaXZhdGUpOworICAgIEFTU0VSVCh0cmFja1ByaXZhdGUg
PT0gbV9wcml2YXRlKTsKKworICAgIFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4gY3VlRGF0YSA9IHBy
cEN1ZURhdGE7CisgICAgaWYgKG1fY3VlTWFwLmZpbmQoY3VlRGF0YSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUgPSBUZXh0VHJhY2tDdWVH
ZW5lcmljOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjdWVEYXRhLT5zdGFydFRp
bWUoKSwgY3VlRGF0YS0+ZW5kVGltZSgpLCBjdWVEYXRhLT5jb250ZW50KCkpOworICAgIHVwZGF0
ZUN1ZUZyb21DdWVEYXRhKGN1ZS5nZXQoKSwgY3VlRGF0YS5nZXQoKSk7CisgICAgaWYgKGhhc0N1
ZShjdWUuZ2V0KCksIFRleHRUcmFja0N1ZTo6SWdub3JlRHVyYXRpb24pKSB7CisgICAgICAgIExP
RyhNZWRpYSwgIkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJpY0N1ZSBpZ25vcmluZyBhbHJlYWR5
IGFkZGVkIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIGNvbnRlbnQ9XCIlc1wiXG4iLCBjdWVE
YXRhLT5zdGFydFRpbWUoKSwgY3VlRGF0YS0+ZW5kVGltZSgpLCBjdWVEYXRhLT5jb250ZW50KCku
dXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX2N1ZU1hcC5h
ZGQoY3VlRGF0YSwgY3VlKTsKKwogICAgIGFkZEN1ZShjdWUpOwogfQogCi12b2lkIEluYmFuZFRl
eHRUcmFjazo6YWRkV2ViVlRUQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0
ZSwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCit2b2lkIEluYmFuZFRleHRUcmFj
azo6dXBkYXRlR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgUGFzc1JlZlB0cjxH
ZW5lcmljQ3VlRGF0YT4gcHJwQ3VlRGF0YSkKIHsKLSAgICBVTlVTRURfUEFSQU0odHJhY2tQcml2
YXRlKTsKLSAgICBBU1NFUlQodHJhY2tQcml2YXRlID09IG1fcHJpdmF0ZSk7CisgICAgUmVmUHRy
PEdlbmVyaWNDdWVEYXRhPiBjdWVEYXRhID0gcHJwQ3VlRGF0YTsKKyAgICBSZWZQdHI8VGV4dFRy
YWNrQ3VlR2VuZXJpYz4gY3VlID0gbV9jdWVNYXAuZmluZChjdWVEYXRhKTsKKyAgICBpZiAoIWN1
ZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4
dFRyYWNrQ3VlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzdGFydCwgZW5kLCBj
b250ZW50KTsKLSAgICBjdWUtPnNldElkKGlkKTsKLSAgICBjdWUtPnNldEN1ZVNldHRpbmdzKHNl
dHRpbmdzKTsKKyAgICB1cGRhdGVDdWVGcm9tQ3VlRGF0YShjdWUuZ2V0KCksIGN1ZURhdGEuZ2V0
KCkpOwogICAgIAotICAgIGlmIChoYXNDdWUoY3VlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChjdWVEYXRhLT5zdGF0dXMoKSA9PSBHZW5lcmljQ3VlRGF0YTo6Q29tcGxldGUpCisg
ICAgICAgIG1fY3VlTWFwLnJlbW92ZShjdWVEYXRhKTsKK30KIAotICAgIGFkZEN1ZShjdWUpOwor
dm9pZCBJbmJhbmRUZXh0VHJhY2s6OnJlbW92ZUdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZSosIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IHBycEN1ZURhdGEpCit7CisgICAgUmVm
UHRyPEdlbmVyaWNDdWVEYXRhPiBjdWVEYXRhID0gcHJwQ3VlRGF0YTsKKyAgICBSZWZQdHI8VGV4
dFRyYWNrQ3VlR2VuZXJpYz4gY3VlID0gbV9jdWVNYXAuZmluZChjdWVEYXRhKTsKKyAgICBpZiAo
Y3VlKQorICAgICAgICByZW1vdmVDdWUoY3VlLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY3VlTWFwLnJlbW92ZShjdWVEYXRhKTsKIH0KIAordm9pZCBJbmJhbmRUZXh0
VHJhY2s6OnJlbW92ZUN1ZShQYXNzUmVmUHRyPFRleHRUcmFja0N1ZT4gcHJwQ3VlLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gY3VlID0gc3Rh
dGljX2Nhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYyo+KHBycEN1ZS5nZXQoKSk7CisKKyAgICBtX2N1
ZU1hcC5yZW1vdmUoY3VlKTsKKyAgICBUZXh0VHJhY2s6OnJlbW92ZUN1ZShjdWUsIGVjKTsKK30K
KyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgJKHJldmlzaW9uIDE0ODQ1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDE1ICszMSwzNiBAQAogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUu
aCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCiAjaW5jbHVkZSAi
VGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7Ci1jbGFzcyBNZWRpYVBsYXllcjsKIGNsYXNz
IFRleHRUcmFja0N1ZTsKIAorY2xhc3MgVGV4dFRyYWNrQ3VlTWFwIHsKK3B1YmxpYzoKKyAgICBU
ZXh0VHJhY2tDdWVNYXAoKSB7IH0KKyAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWVNYXAoKSB7IH0K
KworICAgIHZvaWQgYWRkKFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4sIFJlZlB0cjxUZXh0VHJhY2tD
dWVHZW5lcmljPik7CisKKyAgICB2b2lkIHJlbW92ZShSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KTsK
KyAgICB2b2lkIHJlbW92ZShSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4pOworICAgIAorICAg
IFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IGZpbmQoUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVy
aWM+KTsKKyAgICBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+IGZpbmQoUmVmUHRyPEdl
bmVyaWNDdWVEYXRhPik7CisgICAgCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQ
dHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4sIFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4gPiBHZW5lcmlj
Q3VlVG9DdWVEYXRhTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8R2VuZXJpY0N1ZURh
dGE+LCBSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gPiBHZW5lcmljQ3VlRGF0YVRvQ3VlTWFw
OworICAgIAorICAgIEdlbmVyaWNDdWVUb0N1ZURhdGFNYXAgbV9jdWVUb0RhdGFNYXA7CisgICAg
R2VuZXJpY0N1ZURhdGFUb0N1ZU1hcCBtX2RhdGFUb0N1ZU1hcDsKK307CisKIGNsYXNzIEluYmFu
ZFRleHRUcmFjayA6IHB1YmxpYyBUZXh0VHJhY2ssIHB1YmxpYyBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJh
Y2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgUGFz
c1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPik7CkBAIC01NSwxMyArNzYsMTkgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBJbmJhbmRUZXh0VHJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFRleHRUcmFja0NsaWVudCosIFBhc3NSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZT4p
OwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSosIEdlbmVyaWNDdWVEYXRhKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZFdlYlZU
VEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBhZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBQYXNzUmVmUHRyPEdl
bmVyaWNDdWVEYXRhPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlbmVyaWND
dWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlKiwgUGFzc1JlZlB0cjxHZW5lcmljQ3VlRGF0YT4pIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVDdWUoUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+LCBFeGNlcHRpb25D
b2RlJikgT1ZFUlJJREU7CisKKyAgICBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+IGNy
ZWF0ZUN1ZShQYXNzUmVmUHRyPEdlbmVyaWNDdWVEYXRhPik7CisgICAgdm9pZCB1cGRhdGVDdWVG
cm9tQ3VlRGF0YShUZXh0VHJhY2tDdWVHZW5lcmljKiwgR2VuZXJpY0N1ZURhdGEqKTsKIAogI2lm
IFVTRShQTEFURk9STV9URVhUX1RSQUNLX01FTlUpCiAgICAgdmlydHVhbCBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlKiBwcml2YXRlVHJhY2soKSBPVkVSUklERSB7IHJldHVybiBtX3ByaXZhdGUuZ2V0
KCk7IH0KICNlbmRpZgogCisgICAgVGV4dFRyYWNrQ3VlTWFwIG1fY3VlTWFwOwogICAgIFJlZlB0
cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
Myw3ICsyODMsNyBAQCB2b2lkIFRleHRUcmFjazo6YWRkQ3VlKFBhc3NSZWZQdHI8VGV4dFRyCiAg
ICAgLy8gbGlzdCBvZiBjdWVzLgogICAgIFRleHRUcmFjayogY3VlVHJhY2sgPSBjdWUtPnRyYWNr
KCk7CiAgICAgaWYgKGN1ZVRyYWNrICYmIGN1ZVRyYWNrICE9IHRoaXMpCi0gICAgICAgIGN1ZVRy
YWNrLT5yZW1vdmVDdWUoY3VlLmdldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAg
Y3VlVHJhY2stPnJlbW92ZUN1ZShjdWUsIEFTU0VSVF9OT19FWENFUFRJT04pOwogCiAgICAgLy8g
Mi4gQWRkIGN1ZSB0byB0aGUgbWV0aG9kJ3MgVGV4dFRyYWNrIG9iamVjdCdzIHRleHQgdHJhY2sn
cyB0ZXh0IHRyYWNrIGxpc3Qgb2YgY3Vlcy4KICAgICBjdWUtPnNldFRyYWNrKHRoaXMpOwpAQCAt
MjkzLDggKzI5MywxMyBAQCB2b2lkIFRleHRUcmFjazo6YWRkQ3VlKFBhc3NSZWZQdHI8VGV4dFRy
CiAgICAgICAgIG1fY2xpZW50LT50ZXh0VHJhY2tBZGRDdWUodGhpcywgY3VlLmdldCgpKTsKIH0K
IAotdm9pZCBUZXh0VHJhY2s6OnJlbW92ZUN1ZShUZXh0VHJhY2tDdWUqIGN1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIFRleHRUcmFjazo6cmVtb3ZlQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNr
Q3VlPiBwcnBDdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIGlmICghcHJwQ3VlKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gcHJwQ3Vl
OworCiAgICAgaWYgKCFjdWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzEwLDcgKzMxNSw3IEBA
IHZvaWQgVGV4dFRyYWNrOjpyZW1vdmVDdWUoVGV4dFRyYWNrQ3VlKiAKICAgICB9CiAKICAgICAv
LyAyLiBSZW1vdmUgY3VlIGZyb20gdGhlIG1ldGhvZCdzIFRleHRUcmFjayBvYmplY3QncyB0ZXh0
IHRyYWNrJ3MgdGV4dCB0cmFjayBsaXN0IG9mIGN1ZXMuCi0gICAgaWYgKCFtX2N1ZXMgfHwgIW1f
Y3Vlcy0+cmVtb3ZlKGN1ZSkpIHsKKyAgICBpZiAoIW1fY3VlcyB8fCAhbV9jdWVzLT5yZW1vdmUo
Y3VlLmdldCgpKSkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtNDY2LDcgKzQ3MSw3IEBAIGludCBUZXh0VHJhY2s6OnRyYWNrSW5k
ZXhSZWxhdGl2ZVRvUmVuZGUKICAgICByZXR1cm4gbV9yZW5kZXJlZFRyYWNrSW5kZXg7CiB9CiAK
LWJvb2wgVGV4dFRyYWNrOjpoYXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCitib29sIFRleHRUcmFj
azo6aGFzQ3VlKFRleHRUcmFja0N1ZSogY3VlLCBUZXh0VHJhY2tDdWU6OkN1ZU1hdGNoUnVsZXMg
bWF0Y2gpCiB7CiAgICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkgPCAwIHx8IGN1ZS0+ZW5kVGltZSgp
IDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTA1LDcgKzUxMCw3IEBAIGJvb2wgVGV4
dFRyYWNrOjpoYXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUKICAgICAgICAgICAgICAgICBpZiAoIWV4
aXN0aW5nQ3VlIHx8IGN1ZS0+c3RhcnRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGlm
ICgqZXhpc3RpbmdDdWUgIT0gKmN1ZSkKKyAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nQ3Vl
LT5pc0VxdWFsKCpjdWUsIG1hdGNoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MTQsNyAr
NTE5LDcgQEAgYm9vbCBUZXh0VHJhY2s6Omhhc0N1ZShUZXh0VHJhY2tDdWUqIGN1ZQogICAgICAg
ICAKICAgICAgICAgc2l6ZV90IGluZGV4ID0gKHNlYXJjaFN0YXJ0ICsgc2VhcmNoRW5kKSAvIDI7
CiAgICAgICAgIGV4aXN0aW5nQ3VlID0gbV9jdWVzLT5pdGVtKGluZGV4KTsKLSAgICAgICAgaWYg
KGN1ZS0+c3RhcnRUaW1lKCkgPCBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkgfHwgKGN1ZS0+c3Rh
cnRUaW1lKCkgPT0gZXhpc3RpbmdDdWUtPnN0YXJ0VGltZSgpICYmIGN1ZS0+ZW5kVGltZSgpID4g
ZXhpc3RpbmdDdWUtPmVuZFRpbWUoKSkpCisgICAgICAgIGlmIChjdWUtPnN0YXJ0VGltZSgpIDwg
ZXhpc3RpbmdDdWUtPnN0YXJ0VGltZSgpIHx8IChtYXRjaCAhPSBUZXh0VHJhY2tDdWU6Oklnbm9y
ZUR1cmF0aW9uICYmIGN1ZS0+c3RhcnRUaW1lKCkgPT0gZXhpc3RpbmdDdWUtPnN0YXJ0VGltZSgp
ICYmIGN1ZS0+ZW5kVGltZSgpID4gZXhpc3RpbmdDdWUtPmVuZFRpbWUoKSkpCiAgICAgICAgICAg
ICBzZWFyY2hFbmQgPSBpbmRleDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2VhcmNoU3Rh
cnQgPSBpbmRleCArIDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJ
KHJldmlzaW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJUcmFja0Jhc2UuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00Myw3ICs0NCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNz
IFRleHRUcmFjazsKLWNsYXNzIFRleHRUcmFja0N1ZTsKIGNsYXNzIFRleHRUcmFja0N1ZUxpc3Q7
CiAjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQogY2xhc3MgVGV4dFRyYWNrUmVnaW9uOwpAQCAt
MTA4LDggKzEwOCw5IEBAIHB1YmxpYzoKICAgICBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50OyB9CiAKICAgICB2b2lkIGFkZEN1ZShQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZT4pOwotICAgIHZvaWQgcmVtb3ZlQ3VlKFRleHRUcmFja0N1ZSosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBib29sIGhhc0N1ZShUZXh0VHJhY2tDdWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAg
Ym9vbCBoYXNDdWUoVGV4dFRyYWNrQ3VlKiwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzIG1h
dGNoID0gVGV4dFRyYWNrQ3VlOjpNYXRjaEFsbEZpZWxkcyk7CiAKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spICYmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKICAgICBUZXh0VHJhY2tSZWdpb25MaXN0
KiByZWdpb25zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tD
dWUuY3BwCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0N1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRl
ICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJIVE1M
RGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgpAQCAtMTk0LDYgKzE5Myw3IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRyYWNrQ3Vl
KFNjcmlwdEV4ZWN1dGkKICAgICAsIG1fdGV4dFBvc2l0aW9uKDUwKQogICAgICwgbV9jdWVTaXpl
KDEwMCkKICAgICAsIG1fY3VlSW5kZXgoaW52YWxpZEN1ZUluZGV4KQorICAgICwgbV9wcm9jZXNz
aW5nQ3VlQ2hhbmdlcygwKQogICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250YWwpCiAg
ICAgLCBtX2N1ZUFsaWdubWVudChNaWRkbGUpCiAgICAgLCBtX3dlYlZUVE5vZGVUcmVlKDApCkBA
IC0yMzUsMTQgKzIzNSwyMSBAQCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNr
Q3VlCiAgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlOjpj
dWVXaWxsQ2hhbmdlKCkKK3ZvaWQgVGV4dFRyYWNrQ3VlOjp3aWxsQ2hhbmdlKCkKIHsKKyAgICBp
ZiAoKyttX3Byb2Nlc3NpbmdDdWVDaGFuZ2VzID4gMSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
aWYgKG1fdHJhY2spCiAgICAgICAgIG1fdHJhY2stPmN1ZVdpbGxDaGFuZ2UodGhpcyk7CiB9CiAK
LXZvaWQgVGV4dFRyYWNrQ3VlOjpjdWVEaWRDaGFuZ2UoKQordm9pZCBUZXh0VHJhY2tDdWU6OmRp
ZENoYW5nZSgpCiB7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ0N1ZUNoYW5nZXMpOworICAgIGlm
ICgtLW1fcHJvY2Vzc2luZ0N1ZUNoYW5nZXMpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICht
X3RyYWNrKQogICAgICAgICBtX3RyYWNrLT5jdWVEaWRDaGFuZ2UodGhpcyk7CiAKQEAgLTI2NCw5
ICsyNzEsOSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SWQoY29uc3QgU3RyaW5nJiBpCiAgICAg
aWYgKG1faWQgPT0gaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGN1ZVdpbGxDaGFuZ2UoKTsK
KyAgICB3aWxsQ2hhbmdlKCk7CiAgICAgbV9pZCA9IGlkOwotICAgIGN1ZURpZENoYW5nZSgpOwor
ICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6c2V0U3RhcnRUaW1lKGRv
dWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yODAsMTAgKzI4NywxMCBAQCB2b2lk
IFRleHRUcmFja0N1ZTo6c2V0U3RhcnRUaW1lKGRvdWJsZSB2CiAgICAgLy8gVE9ETyg5MzE0Myk6
IEFkZCBzcGVjLWNvbXBsaWFudCBiZWhhdmlvciBmb3IgbmVnYXRpdmUgdGltZSB2YWx1ZXMuCiAg
ICAgaWYgKG1fc3RhcnRUaW1lID09IHZhbHVlIHx8IHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGN1ZVdpbGxDaGFuZ2UoKTsKKworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBt
X3N0YXJ0VGltZSA9IHZhbHVlOwotICAgIGN1ZURpZENoYW5nZSgpOworICAgIGRpZENoYW5nZSgp
OwogfQogICAgIAogdm9pZCBUZXh0VHJhY2tDdWU6OnNldEVuZFRpbWUoZG91YmxlIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTI5NywxMCArMzA0LDEwIEBAIHZvaWQgVGV4dFRyYWNrQ3Vl
OjpzZXRFbmRUaW1lKGRvdWJsZSB2YWwKICAgICAvLyBUT0RPKDkzMTQzKTogQWRkIHNwZWMtY29t
cGxpYW50IGJlaGF2aW9yIGZvciBuZWdhdGl2ZSB0aW1lIHZhbHVlcy4KICAgICBpZiAobV9lbmRU
aW1lID09IHZhbHVlIHx8IHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGN1
ZVdpbGxDaGFuZ2UoKTsKKworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBtX2VuZFRpbWUgPSB2YWx1
ZTsKLSAgICBjdWVEaWRDaGFuZ2UoKTsKKyAgICBkaWRDaGFuZ2UoKTsKIH0KICAgICAKIHZvaWQg
VGV4dFRyYWNrQ3VlOjpzZXRQYXVzZU9uRXhpdChib29sIHZhbHVlKQpAQCAtMzA4LDkgKzMxNSw3
IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRQYXVzZU9uRXhpdChib29sIHYKICAgICBpZiAobV9w
YXVzZU9uRXhpdCA9PSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGN1ZVdpbGxD
aGFuZ2UoKTsKICAgICBtX3BhdXNlT25FeGl0ID0gdmFsdWU7Ci0gICAgY3VlRGlkQ2hhbmdlKCk7
CiB9CiAKIGNvbnN0IFN0cmluZyYgVGV4dFRyYWNrQ3VlOjp2ZXJ0aWNhbCgpIGNvbnN0CkBAIC0z
NDksOSArMzU0LDkgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldFZlcnRpY2FsKGNvbnN0IFN0cgog
ICAgIGlmIChkaXJlY3Rpb24gPT0gbV93cml0aW5nRGlyZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7CisgICAgd2lsbENoYW5nZSgpOwogICAgIG1fd3JpdGlu
Z0RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKLSAgICBjdWVEaWRDaGFuZ2UoKTsKKyAgICBkaWRDaGFu
Z2UoKTsKIH0KIAogdm9pZCBUZXh0VHJhY2tDdWU6OnNldFNuYXBUb0xpbmVzKGJvb2wgdmFsdWUp
CkBAIC0zNTksOSArMzY0LDkgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldFNuYXBUb0xpbmVzKGJv
b2wgdgogICAgIGlmIChtX3NuYXBUb0xpbmVzID09IHZhbHVlKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgY3VlV2lsbENoYW5nZSgpOworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBtX3NuYXBU
b0xpbmVzID0gdmFsdWU7Ci0gICAgY3VlRGlkQ2hhbmdlKCk7CisgICAgZGlkQ2hhbmdlKCk7CiB9
CiAKIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRMaW5lKGludCBwb3NpdGlvbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCkBAIC0zNzgsMTAgKzM4MywxMCBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0TGluZShp
bnQgcG9zaXRpb24sCiAgICAgaWYgKG1fbGluZVBvc2l0aW9uID09IHBvc2l0aW9uKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7CisgICAgd2lsbENoYW5nZSgpOwogICAg
IG1fbGluZVBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgbV9jb21wdXRlZExpbmVQb3NpdGlvbiA9
IGNhbGN1bGF0ZUNvbXB1dGVkTGluZVBvc2l0aW9uKCk7Ci0gICAgY3VlRGlkQ2hhbmdlKCk7Cisg
ICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRQb3NpdGlvbihpbnQg
cG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzk4LDkgKzQwMyw5IEBAIHZvaWQgVGV4
dFRyYWNrQ3VlOjpzZXRQb3NpdGlvbihpbnQgcG9zaXQKICAgICBpZiAobV90ZXh0UG9zaXRpb24g
PT0gcG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7
CisgICAgd2lsbENoYW5nZSgpOwogICAgIG1fdGV4dFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAg
Y3VlRGlkQ2hhbmdlKCk7CisgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVGV4dFRyYWNrQ3Vl
OjpzZXRTaXplKGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTQxNyw5ICs0MjIsOSBA
QCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0U2l6ZShpbnQgc2l6ZSwgRXhjCiAgICAgaWYgKG1fY3Vl
U2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgY3VlV2lsbENoYW5nZSgp
OworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBtX2N1ZVNpemUgPSBzaXplOwotICAgIGN1ZURpZENo
YW5nZSgpOworICAgIGRpZENoYW5nZSgpOwogfQogCiBjb25zdCBTdHJpbmcmIFRleHRUcmFja0N1
ZTo6YWxpZ24oKSBjb25zdApAQCAtNDU4LDkgKzQ2Myw5IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpz
ZXRBbGlnbihjb25zdCBTdHJpbmcKICAgICBpZiAoYWxpZ25tZW50ID09IG1fY3VlQWxpZ25tZW50
KQogICAgICAgICByZXR1cm47CiAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7CisgICAgd2lsbENoYW5n
ZSgpOwogICAgIG1fY3VlQWxpZ25tZW50ID0gYWxpZ25tZW50OwotICAgIGN1ZURpZENoYW5nZSgp
OworICAgIGRpZENoYW5nZSgpOwogfQogICAgIAogdm9pZCBUZXh0VHJhY2tDdWU6OnNldFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNDY4LDEyICs0NzMsMTIgQEAgdm9pZCBUZXh0VHJhY2tD
dWU6OnNldFRleHQoY29uc3QgU3RyaW5nJgogICAgIGlmIChtX2NvbnRlbnQgPT0gdGV4dCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGN1ZVdpbGxDaGFuZ2UoKTsKKyAgICB3aWxsQ2hhbmdl
KCk7CiAgICAgLy8gQ2xlYXIgdGhlIGRvY3VtZW50IGZyYWdtZW50IGJ1dCBkb24ndCBib3RoZXIg
dG8gY3JlYXRlIGl0IGFnYWluIGp1c3QgeWV0IGFzIHdlIGNhbiBkbyB0aGF0CiAgICAgLy8gd2hl
biBpdCBpcyByZXF1ZXN0ZWQuCiAgICAgbV93ZWJWVFROb2RlVHJlZSA9IDA7CiAgICAgbV9jb250
ZW50ID0gdGV4dDsKLSAgICBjdWVEaWRDaGFuZ2UoKTsKKyAgICBkaWRDaGFuZ2UoKTsKIH0KIAog
aW50IFRleHRUcmFja0N1ZTo6Y3VlSW5kZXgoKQpAQCAtNTQxLDkgKzU0Niw5IEBAIHZvaWQgVGV4
dFRyYWNrQ3VlOjpzZXRSZWdpb25JZChjb25zdCBTdHIKICAgICBpZiAobV9yZWdpb25JZCA9PSBy
ZWdpb25JZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY3VlV2lsbENoYW5nZSgpOworICAgIHdp
bGxDaGFuZ2UoKTsKICAgICBtX3JlZ2lvbklkID0gcmVnaW9uSWQ7Ci0gICAgY3VlRGlkQ2hhbmdl
KCk7CisgICAgZGlkQ2hhbmdlKCk7CiB9CiAjZW5kaWYKIApAQCAtMTE1MywxMiArMTE1OCwxMiBA
QCBFdmVudFRhcmdldERhdGEqIFRleHRUcmFja0N1ZTo6ZW5zdXJlRXZlCiAgICAgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAotYm9vbCBUZXh0VHJhY2tDdWU6Om9wZXJhdG9yPT0oY29u
c3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Citib29sIFRleHRUcmFja0N1ZTo6aXNFcXVhbChj
b25zdCBUZXh0VHJhY2tDdWUmIGN1ZSwgQ3VlTWF0Y2hSdWxlcyBtYXRjaCkgY29uc3QKIHsKICAg
ICBpZiAoY3VlVHlwZSgpICE9IGN1ZS5jdWVUeXBlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChtX2VuZFRpbWUgIT0gY3VlLmVuZFRpbWUoKSkKKyAgICAKKyAgICBpZiAobWF0
Y2ggIT0gSWdub3JlRHVyYXRpb24gJiYgbV9lbmRUaW1lICE9IGN1ZS5lbmRUaW1lKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9zdGFydFRpbWUgIT0gY3VlLnN0YXJ0VGltZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTc5LDcgKzExODQsNiBAQCBib29sIFRleHRU
cmFja0N1ZTo6b3BlcmF0b3I9PShjb25zdCBUZXh0CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9
Ci0KIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRGb250U2l6ZShpbnQgZm9udFNpemUsIGNvbnN0IElu
dFNpemUmLCBib29sIGltcG9ydGFudCkKIHsKICAgICBpZiAoIWhhc0Rpc3BsYXlUcmVlKCkgfHwg
IWZvbnRTaXplKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5o
CShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiRXZlbnRU
YXJnZXQuaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0xNzksMTggKzE3OCwyMSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9udFNpemUoaW50LCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBpbXBvcnRhbnQpOwogCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VGV4dFRyYWNrQ3VlJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBjdWUpOwotICAgIH0KLSAgICAKKyAgICBlbnVtIEN1ZU1hdGNoUnVsZXMgeworICAgICAgICBN
YXRjaEFsbEZpZWxkcywKKyAgICAgICAgSWdub3JlRHVyYXRpb24sCisgICAgfTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNFcXVhbChjb25zdCBUZXh0VHJhY2tDdWUmLCBDdWVNYXRjaFJ1bGVzKSBjb25z
dDsKKwogICAgIGVudW0gQ3VlVHlwZSB7CiAgICAgICAgIEdlbmVyaWMsCiAgICAgICAgIFdlYlZU
VAogICAgIH07CiAgICAgdmlydHVhbCBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBX
ZWJWVFQ7IH0KIAorICAgIHZvaWQgd2lsbENoYW5nZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlKCk7
CisgICAgCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlbnRlcik7CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihleGl0KTsKIApAQCAtMjE4LDkgKzIyMCw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXRlcm1pbmVUZXh0RGlyZWN0aW9uKCk7CiAgICAgdm9p
ZCBjYWxjdWxhdGVEaXNwbGF5UGFyYW1ldGVycygpOwogCi0gICAgdm9pZCBjdWVXaWxsQ2hhbmdl
KCk7Ci0gICAgdm9pZCBjdWVEaWRDaGFuZ2UoKTsKLQogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVu
dFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IHsgZGVyZWYoKTsgfQogCkBAIC0yNDcsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV90
ZXh0UG9zaXRpb247CiAgICAgaW50IG1fY3VlU2l6ZTsKICAgICBpbnQgbV9jdWVJbmRleDsKKyAg
ICBpbnQgbV9wcm9jZXNzaW5nQ3VlQ2hhbmdlczsKIAogICAgIFdyaXRpbmdEaXJlY3Rpb24gbV93
cml0aW5nRGlyZWN0aW9uOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZUdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHJldmlzaW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFRleHRUcmFja0N1ZUdlbmVyaWM6OnNldEZvbnRTaXpl
KGluCiAgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNpemUgLSBz
ZXR0aW5nIGN1ZSBmb250IHNpemUgdG8gJWxpIiwgbHJvdW5kKHNpemUpKTsKIH0KICAgICAKLWJv
b2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6b3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmIGN1
ZSkgY29uc3QKK2Jvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6aXNFcXVhbChjb25zdCBUZXh0VHJh
Y2tDdWUmIGN1ZSwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzIG1hdGNoKSBjb25zdAogewog
ICAgIGlmIChjdWUuY3VlVHlwZSgpICE9IFRleHRUcmFja0N1ZTo6R2VuZXJpYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgVGV4dFRyYWNrQ3VlR2VuZXJp
Yzo6b3BlcmF0b3I9PShjb24KICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3IgIT0gb3RoZXItPmJh
Y2tncm91bmRDb2xvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gVGV4
dFRyYWNrQ3VlOjpvcGVyYXRvcj09KGN1ZSk7CisgICAgcmV0dXJuIFRleHRUcmFja0N1ZTo6aXNF
cXVhbChjdWUsIG1hdGNoKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCShy
ZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1
ZUdlbmVyaWMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHNldEZvbnRTaXplKGludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgaW1w
b3J0YW50KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRl
eHRUcmFja0N1ZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdCBPVkVSUklERQotICAgIHsKLSAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gY3VlKTsKLSAgICB9CisgICAgdmlydHVhbCBib29sIGlzRXF1YWwo
Y29uc3QgVGV4dFRyYWNrQ3VlJiwgQ3VlTWF0Y2hSdWxlcykgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIFRleHRUcmFja0N1ZTo6Q3VlVHlwZSBjdWVUeXBlKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gVGV4dFRyYWNrQ3VlOjpHZW5lcmljOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQ2xpZW50LmgJKHJldmlzaW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50
X2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKQEAgLTM2LDIwICszNiwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CiAKLWNsYXNzIEdl
bmVyaWNDdWVEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZW5lcmljQ3VlRGF0YSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgR2VuZXJpY0N1ZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxHZW5lcmljQ3VlRGF0YT4gewogcHVibGljOgotICAgIEdlbmVyaWNDdWVEYXRh
KCkKLSAgICAgICAgOiBtX3N0YXJ0VGltZSgwKQotICAgICAgICAsIG1fZW5kVGltZSgwKQotICAg
ICAgICAsIG1fbGluZSgtMSkKLSAgICAgICAgLCBtX3Bvc2l0aW9uKC0xKQotICAgICAgICAsIG1f
c2l6ZSgtMSkKLSAgICAgICAgLCBtX2FsaWduKE5vbmUpCi0gICAgICAgICwgbV9iYXNlRm9udFNp
emUoMCkKLSAgICAgICAgLCBtX3JlbGF0aXZlRm9udFNpemUoMCkKLSAgICB7Ci0gICAgfQorCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBHZW5lcmljQ3VlRGF0YSgpKTsgfQogICAgIHZpcnR1YWwgfkdlbmVyaWNDdWVE
YXRhKCkgeyB9CiAKICAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdGFy
dFRpbWU7IH0KQEAgLTk3LDcgKzg3LDI4IEBAIHB1YmxpYzoKICAgICBDb2xvciBiYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogICAgIHZvaWQgc2V0
QmFja2dyb3VuZENvbG9yKFJHQkEzMiBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvci5zZXRSR0Io
Y29sb3IpOyB9CiAKKyAgICBlbnVtIFN0YXR1cyB7CisgICAgICAgIFVuaW5pdGlhbGl6ZWQsCisg
ICAgICAgIFBhcnRpYWwsCisgICAgICAgIENvbXBsZXRlLAorICAgIH07CisgICAgU3RhdHVzIHN0
YXR1cygpIHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzIHN0
YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAgIAogcHJpdmF0ZToKKyAgICBHZW5lcmlj
Q3VlRGF0YSgpCisgICAgICAgIDogbV9zdGFydFRpbWUoMCkKKyAgICAgICAgLCBtX2VuZFRpbWUo
MCkKKyAgICAgICAgLCBtX2xpbmUoLTEpCisgICAgICAgICwgbV9wb3NpdGlvbigtMSkKKyAgICAg
ICAgLCBtX3NpemUoLTEpCisgICAgICAgICwgbV9hbGlnbihOb25lKQorICAgICAgICAsIG1fYmFz
ZUZvbnRTaXplKDApCisgICAgICAgICwgbV9yZWxhdGl2ZUZvbnRTaXplKDApCisgICAgICAgICwg
bV9zdGF0dXMoVW5pbml0aWFsaXplZCkKKyAgICB7CisgICAgfQorCiAgICAgZG91YmxlIG1fc3Rh
cnRUaW1lOwogICAgIGRvdWJsZSBtX2VuZFRpbWU7CiAgICAgU3RyaW5nIG1faWQ7CkBAIC0xMTEs
MTQgKzEyMiwxNiBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3JlbGF0aXZlRm9udFNpemU7CiAg
ICAgQ29sb3IgbV9mb3JlZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7
CisgICAgU3RhdHVzIG1fc3RhdHVzOwogfTsKIAogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNs
aWVudCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRXZWJWVFRDdWUoSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJsZSAvKmVuZCovLCBjb25zdCBT
dHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQqLywgY29uc3QgU3RyaW5nJiAv
KnNldHRpbmdzKi8pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkR2VuZXJpY0N1ZShJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIFBhc3NSZWZQdHI8R2VuZXJp
Y0N1ZURhdGE+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlbmVyaWNDdWUoSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZSosIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIFBh
c3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVB
VkYuY3BwCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzOSwyNSArMzM5LDEzIEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Rjo6cHJvY2Vzc0MKIAogICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+PSBtX2N1cnJl
bnRDdWVTdGFydFRpbWUpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
dWVzLnNpemUoKTsgaSsrKSB7Ci0KICAgICAgICAgICAgICAgICBHZW5lcmljQ3VlRGF0YSogY3Vl
RGF0YSA9IG1fY3Vlc1tpXS5nZXQoKTsKIAotICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0l
LjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAotICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEtPmNvbnRl
bnQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoIWN1ZURhdGEtPmNvbnRlbnQoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0U3Rh
cnRUaW1lKG1fY3VycmVudEN1ZVN0YXJ0VGltZSk7CiAgICAgICAgICAgICAgICAgY3VlRGF0YS0+
c2V0RW5kVGltZShtX2N1cnJlbnRDdWVFbmRUaW1lKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyBBVkZvdW5kYXRpb24gY3VlICJwb3NpdGlvbiIgaXMgdG8gdGhlIGNlbnRl
ciBvZiB0aGUgdGV4dCBzbyBhZGp1c3QgcmVsYXRpdmUgdG8gdGhlIGVkZ2UgYmVjYXVzZSB3ZSB3
aWxsIHVzZSBpdCB0bwotICAgICAgICAgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgotICAgICAg
ICAgICAgICAgIGlmIChjdWVEYXRhLT5wb3NpdGlvbigpID49IDAgJiYgY3VlRGF0YS0+c2l6ZSgp
ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24oY3VlRGF0YS0+
cG9zaXRpb24oKSAtIGN1ZURhdGEtPnNpemUoKSAvIDIpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nl
c3NDdWUoJXApIC0gYWRkaW5nIGN1ZSBmb3IgdGltZSA9ICUuMmYsIHBvc2l0aW9uID0gICUuMmYs
IGxpbmUgPSAgJS4yZiIsIHRoaXMsIGN1ZURhdGEtPnN0YXJ0VGltZSgpLCBjdWVEYXRhLT5wb3Np
dGlvbigpLCBjdWVEYXRhLT5saW5lKCkpOwotICAgICAgICAgICAgICAgIGNsaWVudCgpLT5hZGRH
ZW5lcmljQ3VlKHRoaXMsIGN1ZURhdGEpOworICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldFN0
YXR1cyhHZW5lcmljQ3VlRGF0YTo6Q29tcGxldGUpOworCisgICAgICAgICAgICAgICAgTE9HKE1l
ZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZSglcCkgLSAgdXBkYXRp
bmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIiLCB0aGlzLCBjdWVE
YXRhLT5zdGFydFRpbWUoKSwgbV9jdXJyZW50Q3VlRW5kVGltZSwgY3VlRGF0YS0+Y29udGVudCgp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNsaWVudCgpLT51cGRhdGVHZW5lcmlj
Q3VlKHRoaXMsIGN1ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUg
bmVnYXRpdmUgbGVuZ3RoIGN1ZShzKSBpZ25vcmVkOiBzdGFydD0lLjJmLCBlbmQ9JS4yZlxuIiwg
bV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBtX2N1cnJlbnRDdWVFbmRUaW1lKTsKQEAgLTM3OCw5ICsz
NjYsMjcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAg
ICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcgfHwgIUNGQXR0cmlidXRlZFN0cmluZ0dldExlbmd0aChh
dHRyaWJ1dGVkU3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG1fY3Vl
cy5hcHBlbmQoYWRvcHRQdHIobmV3IEdlbmVyaWNDdWVEYXRhKSk7Ci0gICAgICAgIHByb2Nlc3ND
dWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJpbmcsIG1fY3Vlc1tpXS5nZXQoKSk7CisgICAgICAg
IFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4gY3VlRGF0YSA9IEdlbmVyaWNDdWVEYXRhOjpjcmVhdGUo
KTsKKyAgICAgICAgcHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoYXR0cmlidXRlZFN0cmluZywgY3VlRGF0
YS5nZXQoKSk7CisgICAgICAgIGlmICghY3VlRGF0YS0+Y29udGVudCgpLmxlbmd0aCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9jdWVzLmFwcGVuZChjdWVEYXRhKTsKKwog
ICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUgPSB0aW1lOworICAgICAgICBjdWVEYXRhLT5z
ZXRTdGFydFRpbWUobV9jdXJyZW50Q3VlU3RhcnRUaW1lKTsKKyAgICAgICAgY3VlRGF0YS0+c2V0
RW5kVGltZShudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsgLy8gZHVyYXRpb24K
KyAgICAgICAgCisgICAgICAgIC8vIEFWRm91bmRhdGlvbiBjdWUgInBvc2l0aW9uIiBpcyB0byB0
aGUgY2VudGVyIG9mIHRoZSB0ZXh0IHNvIGFkanVzdCByZWxhdGl2ZSB0byB0aGUgZWRnZSBiZWNh
dXNlIHdlIHdpbGwgdXNlIGl0IHRvCisgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgorICAgICAg
ICBpZiAoY3VlRGF0YS0+cG9zaXRpb24oKSA+PSAwICYmIGN1ZURhdGEtPnNpemUoKSA+IDApCisg
ICAgICAgICAgICBjdWVEYXRhLT5zZXRQb3NpdGlvbihjdWVEYXRhLT5wb3NpdGlvbigpIC0gY3Vl
RGF0YS0+c2l6ZSgpIC8gMik7CisgICAgICAgIAorICAgICAgICBMT0coTWVkaWEsICJJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlKCVwKSAtIGFkZGluZyBjdWUgZm9yIHRpbWUg
PSAlLjJmLCBwb3NpdGlvbiA9ICAlLjJmLCBsaW5lID0gICUuMmYiLCB0aGlzLCBjdWVEYXRhLT5z
dGFydFRpbWUoKSwgY3VlRGF0YS0+cG9zaXRpb24oKSwgY3VlRGF0YS0+bGluZSgpKTsKKworICAg
ICAgICBjdWVEYXRhLT5zZXRTdGF0dXMoR2VuZXJpY0N1ZURhdGE6OlBhcnRpYWwpOworICAgICAg
ICBjbGllbnQoKS0+YWRkR2VuZXJpY0N1ZSh0aGlzLCBjdWVEYXRhKTsKKwogICAgICAgICBtX2hh
dmVQYXJ0aWFsQ3VlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0zOTYsNiArNDAyLDExIEBAIHZvaWQg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWUKICAgICBpZiAobV9oYXZlUGFydGlh
bEN1ZSAmJiAhbV9jdXJyZW50Q3VlRW5kVGltZSkKICAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVWYWx1ZXMgZmx1c2hpbmcgZGF0YSBmb3IgY3Vl
czogc3RhcnQ9JS4yZlxuIiwgbV9jdXJyZW50Q3VlU3RhcnRUaW1lKTsKIAorICAgIGlmIChjbGll
bnQoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3Vlcy5zaXplKCk7IGkr
KykKKyAgICAgICAgICAgIGNsaWVudCgpLT5yZW1vdmVHZW5lcmljQ3VlKHRoaXMsIG1fY3Vlc1tp
XSk7CisgICAgfQorCiAgICAgbV9jdWVzLnJlc2l6ZSgwKTsKICAgICBtX2hhdmVQYXJ0aWFsQ3Vl
ID0gZmFsc2U7CiAgICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAkocmV2aXNpb24gMTQ4NDU0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDExIEBA
CiAjaWYgRU5BQkxFKFZJREVPKSAmJiAoKFVTRShBVkZPVU5EQVRJT04pICYmIEhBVkUoQVZGT1VO
REFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkpIHx8IFBMQVRGT1JNKElPUykpCiAKICNpbmNsdWRl
ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHZW5lcmljQ3VlRGF0YTsKLQogY2xhc3MgQVZGSW5i
YW5kVHJhY2tQYXJlbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFWRkluYmFuZFRyYWNrUGFy
ZW50KCk7CkBAIC02OCw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBkb3VibGUgbV9jdXJyZW50
Q3VlU3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVFbmRUaW1lOwogCi0gICAgVmVj
dG9yPE93blB0cjxHZW5lcmljQ3VlRGF0YT4gPiBtX2N1ZXM7CisgICAgVmVjdG9yPFJlZlB0cjxH
ZW5lcmljQ3VlRGF0YT4gPiBtX2N1ZXM7CiAKICAgICBBVkZJbmJhbmRUcmFja1BhcmVudCogbV9v
d25lcjsKICAgICBpbnQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxNDg0NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk3LDExICs1OTcs
NiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVkKCVwKSAt
IGZpbmlzaGVkID0gJWQiLCB0aGlzLCBmaW5pc2hlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGZpbmlz
aGVkKTsKIAotI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkKLSAgICBp
ZiAoY3VycmVudFRyYWNrKCkpCi0gICAgICAgIGN1cnJlbnRUcmFjaygpLT5yZXNldEN1ZVZhbHVl
cygpOwotI2VuZGlmCi0KICAgICBtX3NlZWtUbyA9IE1lZGlhUGxheWVyOjppbnZhbGlkVGltZSgp
OwogICAgIHVwZGF0ZVN0YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198178</attachid>
            <date>2013-04-15 13:40:16 -0700</date>
            <delta_ts>2013-04-16 13:53:08 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch_7.txt</filename>
            <type>text/plain</type>
            <size>33860</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODQ1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDEzLTA0LTE1ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIGluLWJhbmQg
Y3VlcyBzb21ldGltZXMgZGlzcGxheWVkIGxhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBkZWFscyB3aXRoIGEgcGxh
dGZvcm0tc3BlY2lmaWMgaXNzdWUgdGhhdCBpcyBleHRyZW1lbHkgdGltaW5nIGRlcGVuZGVudC4K
KworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZU1hcDo6YWRkKTogTmV3LCB0d28gd2F5IGN1ZSBkYXRhIDwtPiBj
dWUgbWFwLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlTWFwOjpmaW5kKTogCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVNYXA6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmJhbmRUZXh0VHJhY2s6OnVwZGF0ZUN1ZUZyb21DdWVEYXRhKTogTmV3LCB1cGRhdGUgYW4g
ZXhpc3RpbmcgY3VlLiBTZXQgY3VlIGVuZCB0aW1lCisgICAgICAgICAgICB0byB2aWRlbyBkdXJh
dGlvbiBpZiBpdCBpcyB1bmtub3duLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNr
OjphZGRHZW5lcmljQ3VlKTogTG9vayBmb3IgZXhpc3RpbmcgY3VlcyB3aXRob3V0IGNvbnNpZGVy
aW5nIGR1cmF0aW9uCisgICAgICAgICAgICBzbyB3ZSBjYW4gbWF0Y2ggaW5jb21wbGV0ZSBjdWVz
LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjp1cGRhdGVHZW5lcmljQ3VlKTog
TmV3LCB1cGRhdGUgYW4gZXhpc3RpbmcgY3VlLiBUaGlzIGFsbG93cyB1cyB0byAKKyAgICAgICAg
ICAgIGFkZCBpbi1iYW5kIGN1ZXMgYXMgc29vbiBhcyB3ZSBnZXQgdGhlbSBmcm9tIHRoZSBtZWRp
YSBlbmdpbmUgYW5kIHVwZGF0ZSB0aGVtIGFzIG1vcmUKKyAgICAgICAgICAgIGluZm9ybWF0aW9u
IGJlY29tZXMgYXZhaWxhYmxlLgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjpy
ZW1vdmVHZW5lcmljQ3VlKTogTmV3LCByZW1vdmUgYW4gZXhpc3RpbmcgY3VlLiBUaGlzIGlzIG5l
Y2Vzc2FyeQorICAgICAgICAgICAgYmVjYXVzZSB3ZSBuZXZlciB3YW50IHRvIGtlZXAgYW4gaW5j
b21wbGV0ZSBjdWUgd2hlbiBhIHNlZWsgaGFwcGVucy4KKyAgICAgICAgKFdlYkNvcmU6OkluYmFu
ZFRleHRUcmFjazo6cmVtb3ZlQ3VlKTogTmV3LCBiYXNlIGNsYXNzIG92ZXJyaWRlIHNvIHdlIGNh
biBrZWVwIHRoZSB0d28gd2F5CisgICAgICAgICAgICBtYXAgdXAgdG8gZGF0ZS4KKyAgICAgICAg
KiBodG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oOgorCisgICAgICAgICogaHRtbC90cmFjay9U
ZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjphZGRDdWUpOiBUZXh0
VHJhY2s6OnJlbW92ZUN1ZSB0YWtlcyBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFjazo6cmVtb3ZlQ3VlKTogVGFrZSBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFjazo6aGFzQ3VlKTogQWxsb3cgY2FsbGVyIHRvIHJlcXVlc3QgbWF0Y2ggd2l0aG91dCBjb25z
aWRlcmluZyBlbmQgdGltZS4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorCisg
ICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUpOiBJbml0aWFsaXplIG1fcHJvY2Vzc2luZ0N1ZUNo
YW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OndpbGxDaGFuZ2UpOiBSZW5h
bWVkIGZyb20gY3VlV2lsbENoYW5nZS4gVXNlIG1fcHJvY2Vzc2luZ0N1ZUNoYW5nZXMKKyAgICAg
ICAgICAgIHRvIGF2b2lkIHRocmFzaGluZyB0aGUgdHJhY2sgd2hlbiBtYW55IGN1ZSBwcm9wZXJ0
aWVzIHdpbGwgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaWRDaGFu
Z2UpOiBSZW5hbWVkIGZyb20gY3VlRGlkQ2hhbmdlLiBVc2UgbV9wcm9jZXNzaW5nQ3VlQ2hhbmdl
cworICAgICAgICAgICAgdG8gYXZvaWQgdGhyYXNoaW5nIHRoZSB0cmFjayB3aGVuIG1hbnkgY3Vl
IHByb3BlcnRpZXMgd2lsbCBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6
OnNldElkKTogY3VlV2lsbENoYW5nZSAtPiB3aWxsQ2hhbmdlLiBjdWVEaWRDaGFuZ2UgLT4gZGlk
Q2hhbmdlLiAKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0U3RhcnRUaW1lKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNldEVuZFRpbWUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0UGF1c2VPbkV4aXQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0VmVydGljYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0U25hcFRvTGluZXMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0TGluZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWU6OnNldEFsaWduKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0
VHJhY2tDdWU6OnNldFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZTo6c2V0UmVnaW9uSWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
aXNFcXVhbCk6IFJlbmFtZWQgZnJvbSBvcGVyYXRvcj09LCB0YWtlIG1hdGNoIHJ1bGVzIHBhcmFt
LgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6CisKKyAgICAgICAgKiBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlR2VuZXJpYzo6aXNFcXVhbCk6IFJlbmFtZWQgZnJvbSBvcGVyYXRvcj09LCB0YWtlIG1h
dGNoIHJ1bGVzIHBhcmFtLgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJp
Yy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUNsaWVudC5oOiBNYWtlIEdlbmVyaWNDdWVEYXRhIHJlZmNvdW50ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHZW5lcmljQ3VlRGF0YTo6Y3JlYXRlKTogTmV3LgorICAgICAgICAoV2ViQ29yZTo6R2Vu
ZXJpY0N1ZURhdGE6OnN0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY0N1
ZURhdGE6OnNldFN0YXR1cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJpY0N1ZURh
dGE6OkdlbmVyaWNDdWVEYXRhKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUpOiBBZGQgY3VlcyBhcyBzb29u
IGFzIHdlIGdldCB0aGVtIGZyb20gdGhlIG1lZGlhCisgICAgICAgICAgICBlbmdpbmUsIHVwZGF0
ZSBkdXJhdGlvbiBvbmNlIHdlIGtub3cgaXQuCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZhbHVlcyk6IFRlbGwgdGhlIGNsaWVudCB0byByZW1v
dmUgYWxsIGluY29tcGxldGUKKyAgICAgICAgICAgIGN1ZXMgd2UgaGF2ZSBkZWxpdmVyZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuaDoKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVkKTogRG8gbm90IGZsdXNo
IGN1ZXMgd2hlbiBzZWVrIGNvbXBsZXRlcywKKyAgICAgICAgICAgIHdlIGRpZCB0aGF0IHdoZW4g
dGhlIHNlZWsgc3RhcnRlZCBhbmQgY3VlcyBjYW4gYmUgZGVsaXZlcmVkIGJlZm9yZSB3ZSBnZXQg
dGhlIHRoZSAKKyAgICAgICAgICAgIHNlZWsgY29tcGxldGVkICBub3RpZmljYXRpb24uCisKIDIw
MTMtMDQtMTUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgSFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlVGV4dFRyYWNrIHNob3VsZCBjbGVhciB0cmFjayBj
bGllbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFj
ay5jcHAJKHJldmlzaW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIlRleHRUcmFja0N1ZUdlbmVyaWMuaCIKICNp
bmNsdWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDIsNiAr
NDIsNDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFRleHRUcmFja0N1ZU1hcDo6
YWRkKEdlbmVyaWNDdWVEYXRhKiBjdWVEYXRhLCBUZXh0VHJhY2tDdWVHZW5lcmljKiBjdWUpCit7
CisgICAgbV9kYXRhVG9DdWVNYXAuYWRkKGN1ZURhdGEsIGN1ZSk7CisgICAgbV9jdWVUb0RhdGFN
YXAuYWRkKGN1ZSwgY3VlRGF0YSk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJp
Yz4gVGV4dFRyYWNrQ3VlTWFwOjpmaW5kKEdlbmVyaWNDdWVEYXRhKiBjdWVEYXRhKQoreworICAg
IEdlbmVyaWNDdWVEYXRhVG9DdWVNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2RhdGFUb0N1ZU1hcC5m
aW5kKGN1ZURhdGEpOworICAgIGlmIChpdGVyID09IG1fZGF0YVRvQ3VlTWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gaXRlci0+dmFsdWU7Cit9CisKK1Bhc3NS
ZWZQdHI8R2VuZXJpY0N1ZURhdGE+IFRleHRUcmFja0N1ZU1hcDo6ZmluZChUZXh0VHJhY2tDdWVH
ZW5lcmljKiBjdWUpCit7CisgICAgR2VuZXJpY0N1ZVRvQ3VlRGF0YU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fY3VlVG9EYXRhTWFwLmZpbmQoY3VlKTsKKyAgICBpZiAoaXRlciA9PSBtX2N1ZVRvRGF0
YU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGl0ZXItPnZh
bHVlOworfQorCit2b2lkIFRleHRUcmFja0N1ZU1hcDo6cmVtb3ZlKEdlbmVyaWNDdWVEYXRhKiBj
dWVEYXRhKQoreworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUgPSBmaW5kKGN1
ZURhdGEpOworCisgICAgaWYgKGN1ZSkKKyAgICAgICAgbV9jdWVUb0RhdGFNYXAucmVtb3ZlKGN1
ZSk7CisgICAgbV9kYXRhVG9DdWVNYXAucmVtb3ZlKGN1ZURhdGEpOworfQorCit2b2lkIFRleHRU
cmFja0N1ZU1hcDo6cmVtb3ZlKFRleHRUcmFja0N1ZUdlbmVyaWMqIGN1ZSkKK3sKKyAgICBSZWZQ
dHI8R2VuZXJpY0N1ZURhdGE+IGN1ZURhdGEgPSBmaW5kKGN1ZSk7CisKKyAgICBpZiAoY3VlRGF0
YSkKKyAgICAgICAgbV9kYXRhVG9DdWVNYXAucmVtb3ZlKGN1ZURhdGEpOworICAgIG1fY3VlVG9E
YXRhTWFwLnJlbW92ZShjdWUpOworfQorCisKIFBhc3NSZWZQdHI8SW5iYW5kVGV4dFRyYWNrPiBJ
bmJhbmRUZXh0VHJhY2s6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBU
ZXh0VHJhY2tDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
PiBwbGF5ZXJQcml2YXRlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5iYW5kVGV4dFRy
YWNrKGNvbnRleHQsIGNsaWVudCwgcGxheWVyUHJpdmF0ZSkpOwpAQCAtMTM2LDEzICsxNzksMTYg
QEAgc2l6ZV90IEluYmFuZFRleHRUcmFjazo6aW5iYW5kVHJhY2tJbmRleAogICAgIHJldHVybiBt
X3ByaXZhdGUtPnRleHRUcmFja0luZGV4KCk7CiB9CiAKLXZvaWQgSW5iYW5kVGV4dFRyYWNrOjph
ZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgR2VuZXJp
Y0N1ZURhdGEqIGN1ZURhdGEpCit2b2lkIEluYmFuZFRleHRUcmFjazo6dXBkYXRlQ3VlRnJvbUN1
ZURhdGEoVGV4dFRyYWNrQ3VlR2VuZXJpYyogY3VlLCBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSkK
IHsKLSAgICBVTlVTRURfUEFSQU0odHJhY2tQcml2YXRlKTsKLSAgICBBU1NFUlQodHJhY2tQcml2
YXRlID09IG1fcHJpdmF0ZSk7Ci0KLSAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gY3Vl
ID0gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
Y3VlRGF0YS0+c3RhcnRUaW1lKCksIGN1ZURhdGEtPmVuZFRpbWUoKSwgY3VlRGF0YS0+Y29udGVu
dCgpKTsKKyAgICBjdWUtPndpbGxDaGFuZ2UoKTsKIAorICAgIGN1ZS0+c2V0U3RhcnRUaW1lKGN1
ZURhdGEtPnN0YXJ0VGltZSgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICBkb3VibGUgZW5kVGlt
ZSA9IGN1ZURhdGEtPmVuZFRpbWUoKTsKKyAgICBpZiAoc3RkOjppc2luZihlbmRUaW1lKSAmJiBt
ZWRpYUVsZW1lbnQoKSkKKyAgICAgICAgZW5kVGltZSA9IG1lZGlhRWxlbWVudCgpLT5kdXJhdGlv
bigpOworICAgIGN1ZS0+c2V0RW5kVGltZShlbmRUaW1lLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAg
ICBjdWUtPnNldFRleHQoY3VlRGF0YS0+Y29udGVudCgpKTsKICAgICBjdWUtPnNldElkKGN1ZURh
dGEtPmlkKCkpOwogICAgIGN1ZS0+c2V0QmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0
KGN1ZURhdGEtPmJhc2VGb250U2l6ZSgpKTsKICAgICBjdWUtPnNldEZvbnRTaXplTXVsdGlwbGll
cihjdWVEYXRhLT5yZWxhdGl2ZUZvbnRTaXplKCkpOwpAQCAtMTY3LDMwICsyMTMsNjEgQEAgdm9p
ZCBJbmJhbmRUZXh0VHJhY2s6OmFkZEdlbmVyaWNDdWUoSW5iYQogICAgICAgICBjdWUtPnNldEFs
aWduKEFTQ0lJTGl0ZXJhbCgiZW5kIiksIElHTk9SRV9FWENFUFRJT04pOwogICAgIGN1ZS0+c2V0
U25hcFRvTGluZXMoZmFsc2UpOwogCi0gICAgaWYgKGhhc0N1ZShjdWUuZ2V0KCkpKSB7Ci0gICAg
ICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJpY0N1ZSBpZ25vcmluZyBh
bHJlYWR5IGFkZGVkIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIGNvbnRlbnQ9XCIlc1wiXG4i
LAotICAgICAgICAgICAgY3VlRGF0YS0+c3RhcnRUaW1lKCksIGN1ZURhdGEtPmVuZFRpbWUoKSwg
Y3VlRGF0YS0+Y29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGN1ZS0+ZGlkQ2hhbmdlKCk7
Cit9CisgICAgCit2b2lkIEluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJpY0N1ZShJbmJhbmRUZXh0
VHJhY2tQcml2YXRlKiB0cmFja1ByaXZhdGUsIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IHBy
cEN1ZURhdGEpCit7CisgICAgVU5VU0VEX1BBUkFNKHRyYWNrUHJpdmF0ZSk7CisgICAgQVNTRVJU
KHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZhdGUpOworCisgICAgUmVmUHRyPEdlbmVyaWNDdWVEYXRh
PiBjdWVEYXRhID0gcHJwQ3VlRGF0YTsKKyAgICBpZiAobV9jdWVNYXAuZmluZChjdWVEYXRhLmdl
dCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+
IGN1ZSA9IFRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCksIGN1ZURhdGEtPnN0YXJ0VGltZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCksIGN1ZURhdGEtPmNv
bnRlbnQoKSk7CisgICAgdXBkYXRlQ3VlRnJvbUN1ZURhdGEoY3VlLmdldCgpLCBjdWVEYXRhLmdl
dCgpKTsKKyAgICBpZiAoaGFzQ3VlKGN1ZS5nZXQoKSwgVGV4dFRyYWNrQ3VlOjpJZ25vcmVEdXJh
dGlvbikpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmlj
Q3VlIGlnbm9yaW5nIGFscmVhZHkgYWRkZWQgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgY29u
dGVudD1cIiVzXCJcbiIsIGN1ZURhdGEtPnN0YXJ0VGltZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCks
IGN1ZURhdGEtPmNvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIG1fY3VlTWFwLmFkZChjdWVEYXRhLmdldCgpLCBjdWUuZ2V0KCkpOworCiAgICAg
YWRkQ3VlKGN1ZSk7CiB9CiAKLXZvaWQgSW5iYW5kVGV4dFRyYWNrOjphZGRXZWJWVFRDdWUoSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSogdHJhY2tQcml2YXRlLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBl
bmQsIGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5n
JiBzZXR0aW5ncykKK3ZvaWQgSW5iYW5kVGV4dFRyYWNrOjp1cGRhdGVHZW5lcmljQ3VlKEluYmFu
ZFRleHRUcmFja1ByaXZhdGUqLCBQYXNzUmVmUHRyPEdlbmVyaWNDdWVEYXRhPiBwcnBDdWVEYXRh
KQogewotICAgIFVOVVNFRF9QQVJBTSh0cmFja1ByaXZhdGUpOwotICAgIEFTU0VSVCh0cmFja1By
aXZhdGUgPT0gbV9wcml2YXRlKTsKKyAgICBSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IGN1ZURhdGEg
PSBwcnBDdWVEYXRhOworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUgPSBtX2N1
ZU1hcC5maW5kKGN1ZURhdGEuZ2V0KCkpOworICAgIGlmICghY3VlKQorICAgICAgICByZXR1cm47
CiAKLSAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIGNvbnRlbnQpOwotICAgIGN1ZS0+
c2V0SWQoaWQpOwotICAgIGN1ZS0+c2V0Q3VlU2V0dGluZ3Moc2V0dGluZ3MpOworICAgIHVwZGF0
ZUN1ZUZyb21DdWVEYXRhKGN1ZS5nZXQoKSwgY3VlRGF0YS5nZXQoKSk7CiAgICAgCi0gICAgaWYg
KGhhc0N1ZShjdWUuZ2V0KCkpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGN1ZURhdGEtPnN0
YXR1cygpID09IEdlbmVyaWNDdWVEYXRhOjpDb21wbGV0ZSkKKyAgICAgICAgbV9jdWVNYXAucmVt
b3ZlKGN1ZURhdGEuZ2V0KCkpOworfQogCi0gICAgYWRkQ3VlKGN1ZSk7Cit2b2lkIEluYmFuZFRl
eHRUcmFjazo6cmVtb3ZlR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgUGFzc1Jl
ZlB0cjxHZW5lcmljQ3VlRGF0YT4gcHJwQ3VlRGF0YSkKK3sKKyAgICBSZWZQdHI8R2VuZXJpY0N1
ZURhdGE+IGN1ZURhdGEgPSBwcnBDdWVEYXRhOworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5l
cmljPiBjdWUgPSBtX2N1ZU1hcC5maW5kKGN1ZURhdGEuZ2V0KCkpOworICAgIGlmIChjdWUpCisg
ICAgICAgIHJlbW92ZUN1ZShjdWUsIElHTk9SRV9FWENFUFRJT04pOworICAgIGVsc2UKKyAgICAg
ICAgbV9jdWVNYXAucmVtb3ZlKGN1ZURhdGEuZ2V0KCkpOwogfQogCit2b2lkIEluYmFuZFRleHRU
cmFjazo6cmVtb3ZlQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiBwcnBDdWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUgPSBzdGF0
aWNfY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljKj4ocHJwQ3VlLmdldCgpKTsKKworICAgIG1fY3Vl
TWFwLnJlbW92ZShjdWUuZ2V0KCkpOworICAgIFRleHRUcmFjazo6cmVtb3ZlQ3VlKGN1ZSwgZWMp
OworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAkocmV2aXNpb24gMTQ4NDU0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDM2IEBACiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaCIKICNpbmNs
dWRlICJUZXh0VHJhY2suaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3Vt
ZW50OwogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKLWNsYXNzIE1lZGlhUGxheWVyOwog
Y2xhc3MgVGV4dFRyYWNrQ3VlOwogCitjbGFzcyBUZXh0VHJhY2tDdWVNYXAgeworcHVibGljOgor
ICAgIFRleHRUcmFja0N1ZU1hcCgpIHsgfQorICAgIHZpcnR1YWwgflRleHRUcmFja0N1ZU1hcCgp
IHsgfQorCisgICAgdm9pZCBhZGQoR2VuZXJpY0N1ZURhdGEqLCBUZXh0VHJhY2tDdWVHZW5lcmlj
Kik7CisKKyAgICB2b2lkIHJlbW92ZShHZW5lcmljQ3VlRGF0YSopOworICAgIHZvaWQgcmVtb3Zl
KFRleHRUcmFja0N1ZUdlbmVyaWMqKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPEdlbmVyaWNDdWVE
YXRhPiBmaW5kKFRleHRUcmFja0N1ZUdlbmVyaWMqKTsKKyAgICBQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZUdlbmVyaWM+IGZpbmQoR2VuZXJpY0N1ZURhdGEqKTsKKyAgICAKK3ByaXZhdGU6CisgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiwgUmVmUHRyPEdlbmVy
aWNDdWVEYXRhPiA+IEdlbmVyaWNDdWVUb0N1ZURhdGFNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4sIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiA+IEdl
bmVyaWNDdWVEYXRhVG9DdWVNYXA7CisgICAgCisgICAgR2VuZXJpY0N1ZVRvQ3VlRGF0YU1hcCBt
X2N1ZVRvRGF0YU1hcDsKKyAgICBHZW5lcmljQ3VlRGF0YVRvQ3VlTWFwIG1fZGF0YVRvQ3VlTWFw
OworfTsKKwogY2xhc3MgSW5iYW5kVGV4dFRyYWNrIDogcHVibGljIFRleHRUcmFjaywgcHVibGlj
IEluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluYmFuZFRleHRUcmFjaz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBU
ZXh0VHJhY2tDbGllbnQqLCBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+KTsKQEAg
LTU1LDEzICs3NiwxOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluYmFuZFRleHRUcmFjayhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgUGFzc1JlZlB0cjxJbmJh
bmRUZXh0VHJhY2tQcml2YXRlPik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkR2VuZXJpY0N1ZShJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkV2ViVlRUQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUs
IGRvdWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZSosIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgUGFzc1JlZlB0
cjxHZW5lcmljQ3VlRGF0YT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVHZW5l
cmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBQYXNzUmVmUHRyPEdlbmVyaWNDdWVEYXRh
PikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUN1ZShQYXNzUmVmUHRyPFRleHRU
cmFja0N1ZT4sIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKworICAgIFBhc3NSZWZQdHI8VGV4
dFRyYWNrQ3VlR2VuZXJpYz4gY3JlYXRlQ3VlKFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KTsK
KyAgICB2b2lkIHVwZGF0ZUN1ZUZyb21DdWVEYXRhKFRleHRUcmFja0N1ZUdlbmVyaWMqLCBHZW5l
cmljQ3VlRGF0YSopOwogCiAjaWYgVVNFKFBMQVRGT1JNX1RFWFRfVFJBQ0tfTUVOVSkKICAgICB2
aXJ0dWFsIEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHByaXZhdGVUcmFjaygpIE9WRVJSSURFIHsg
cmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsgfQogI2VuZGlmCiAKKyAgICBUZXh0VHJhY2tDdWVNYXAg
bV9jdWVNYXA7CiAgICAgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+IG1fcHJpdmF0ZTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHJldmlz
aW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgzLDcgKzI4Myw3IEBAIHZvaWQgVGV4dFRyYWNrOjphZGRDdWUo
UGFzc1JlZlB0cjxUZXh0VHIKICAgICAvLyBsaXN0IG9mIGN1ZXMuCiAgICAgVGV4dFRyYWNrKiBj
dWVUcmFjayA9IGN1ZS0+dHJhY2soKTsKICAgICBpZiAoY3VlVHJhY2sgJiYgY3VlVHJhY2sgIT0g
dGhpcykKLSAgICAgICAgY3VlVHJhY2stPnJlbW92ZUN1ZShjdWUuZ2V0KCksIEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgICAgICBjdWVUcmFjay0+cmVtb3ZlQ3VlKGN1ZSwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CiAKICAgICAvLyAyLiBBZGQgY3VlIHRvIHRoZSBtZXRob2QncyBUZXh0VHJhY2sg
b2JqZWN0J3MgdGV4dCB0cmFjaydzIHRleHQgdHJhY2sgbGlzdCBvZiBjdWVzLgogICAgIGN1ZS0+
c2V0VHJhY2sodGhpcyk7CkBAIC0yOTMsOCArMjkzLDEzIEBAIHZvaWQgVGV4dFRyYWNrOjphZGRD
dWUoUGFzc1JlZlB0cjxUZXh0VHIKICAgICAgICAgbV9jbGllbnQtPnRleHRUcmFja0FkZEN1ZSh0
aGlzLCBjdWUuZ2V0KCkpOwogfQogCi12b2lkIFRleHRUcmFjazo6cmVtb3ZlQ3VlKFRleHRUcmFj
a0N1ZSogY3VlLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgVGV4dFRyYWNrOjpyZW1vdmVDdWUo
UGFzc1JlZlB0cjxUZXh0VHJhY2tDdWU+IHBycEN1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Cisg
ICAgaWYgKCFwcnBDdWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8VGV4dFRy
YWNrQ3VlPiBjdWUgPSBwcnBDdWU7CisKICAgICBpZiAoIWN1ZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0zMTAsNyArMzE1LDcgQEAgdm9pZCBUZXh0VHJhY2s6OnJlbW92ZUN1ZShUZXh0VHJhY2tD
dWUqIAogICAgIH0KIAogICAgIC8vIDIuIFJlbW92ZSBjdWUgZnJvbSB0aGUgbWV0aG9kJ3MgVGV4
dFRyYWNrIG9iamVjdCdzIHRleHQgdHJhY2sncyB0ZXh0IHRyYWNrIGxpc3Qgb2YgY3Vlcy4KLSAg
ICBpZiAoIW1fY3VlcyB8fCAhbV9jdWVzLT5yZW1vdmUoY3VlKSkgeworICAgIGlmICghbV9jdWVz
IHx8ICFtX2N1ZXMtPnJlbW92ZShjdWUuZ2V0KCkpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NjYsNyArNDcxLDcgQEAgaW50
IFRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9SZW5kZQogICAgIHJldHVybiBtX3JlbmRl
cmVkVHJhY2tJbmRleDsKIH0KIAotYm9vbCBUZXh0VHJhY2s6Omhhc0N1ZShUZXh0VHJhY2tDdWUq
IGN1ZSkKK2Jvb2wgVGV4dFRyYWNrOjpoYXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUsIFRleHRUcmFj
a0N1ZTo6Q3VlTWF0Y2hSdWxlcyBtYXRjaCkKIHsKICAgICBpZiAoY3VlLT5zdGFydFRpbWUoKSA8
IDAgfHwgY3VlLT5lbmRUaW1lKCkgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MDUs
NyArNTEwLDcgQEAgYm9vbCBUZXh0VHJhY2s6Omhhc0N1ZShUZXh0VHJhY2tDdWUqIGN1ZQogICAg
ICAgICAgICAgICAgIGlmICghZXhpc3RpbmdDdWUgfHwgY3VlLT5zdGFydFRpbWUoKSA+IGV4aXN0
aW5nQ3VlLT5zdGFydFRpbWUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICAgICAgaWYgKCpleGlzdGluZ0N1ZSAhPSAqY3VlKQorICAgICAgICAgICAg
ICAgIGlmICghZXhpc3RpbmdDdWUtPmlzRXF1YWwoKmN1ZSwgbWF0Y2gpKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTUxNCw3ICs1MTksNyBAQCBib29sIFRleHRUcmFjazo6aGFzQ3VlKFRleHRU
cmFja0N1ZSogY3VlCiAgICAgICAgIAogICAgICAgICBzaXplX3QgaW5kZXggPSAoc2VhcmNoU3Rh
cnQgKyBzZWFyY2hFbmQpIC8gMjsKICAgICAgICAgZXhpc3RpbmdDdWUgPSBtX2N1ZXMtPml0ZW0o
aW5kZXgpOwotICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUoKSA8IGV4aXN0aW5nQ3VlLT5zdGFy
dFRpbWUoKSB8fCAoY3VlLT5zdGFydFRpbWUoKSA9PSBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkg
JiYgY3VlLT5lbmRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+ZW5kVGltZSgpKSkKKyAgICAgICAgaWYg
KGN1ZS0+c3RhcnRUaW1lKCkgPCBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkgfHwgKG1hdGNoICE9
IFRleHRUcmFja0N1ZTo6SWdub3JlRHVyYXRpb24gJiYgY3VlLT5zdGFydFRpbWUoKSA9PSBleGlz
dGluZ0N1ZS0+c3RhcnRUaW1lKCkgJiYgY3VlLT5lbmRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+ZW5k
VGltZSgpKSkKICAgICAgICAgICAgIHNlYXJjaEVuZCA9IGluZGV4OwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBzZWFyY2hTdGFydCA9IGluZGV4ICsgMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2suaAkocmV2aXNpb24gMTQ4NDU0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKICNpbmNsdWRlICJUcmFja0Jhc2UuaCIKICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00Myw3
ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKIGNsYXNzIFRleHRUcmFjazsKLWNsYXNzIFRleHRUcmFja0N1ZTsKIGNsYXNzIFRleHRU
cmFja0N1ZUxpc3Q7CiAjaWYgRU5BQkxFKFdFQlZUVF9SRUdJT05TKQogY2xhc3MgVGV4dFRyYWNr
UmVnaW9uOwpAQCAtMTA4LDggKzEwOCw5IEBAIHB1YmxpYzoKICAgICBUZXh0VHJhY2tDbGllbnQq
IGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKICAgICB2b2lkIGFkZEN1ZShQYXNzUmVm
UHRyPFRleHRUcmFja0N1ZT4pOwotICAgIHZvaWQgcmVtb3ZlQ3VlKFRleHRUcmFja0N1ZSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIGhhc0N1ZShUZXh0VHJhY2tDdWUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiwgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgYm9vbCBoYXNDdWUoVGV4dFRyYWNrQ3VlKiwgVGV4dFRyYWNrQ3VlOjpDdWVN
YXRjaFJ1bGVzID0gVGV4dFRyYWNrQ3VlOjpNYXRjaEFsbEZpZWxkcyk7CiAKICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spICYmIEVOQUJMRShXRUJWVFRfUkVHSU9OUykKICAgICBUZXh0VHJhY2tSZWdp
b25MaXN0KiByZWdpb25zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuY3BwCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Ry
YWNrL1RleHRUcmFja0N1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNp
bmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRl
ICJIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MU3BhbkVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
Tm9kZVRyYXZlcnNhbC5oIgpAQCAtMTk0LDYgKzE5Myw3IEBAIFRleHRUcmFja0N1ZTo6VGV4dFRy
YWNrQ3VlKFNjcmlwdEV4ZWN1dGkKICAgICAsIG1fdGV4dFBvc2l0aW9uKDUwKQogICAgICwgbV9j
dWVTaXplKDEwMCkKICAgICAsIG1fY3VlSW5kZXgoaW52YWxpZEN1ZUluZGV4KQorICAgICwgbV9w
cm9jZXNzaW5nQ3VlQ2hhbmdlcygwKQogICAgICwgbV93cml0aW5nRGlyZWN0aW9uKEhvcml6b250
YWwpCiAgICAgLCBtX2N1ZUFsaWdubWVudChNaWRkbGUpCiAgICAgLCBtX3dlYlZUVE5vZGVUcmVl
KDApCkBAIC0yMzUsMTQgKzIzNSwyMSBAQCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4
dFRyYWNrQ3VlCiAgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CiB9CiAKLXZvaWQgVGV4dFRyYWNr
Q3VlOjpjdWVXaWxsQ2hhbmdlKCkKK3ZvaWQgVGV4dFRyYWNrQ3VlOjp3aWxsQ2hhbmdlKCkKIHsK
KyAgICBpZiAoKyttX3Byb2Nlc3NpbmdDdWVDaGFuZ2VzID4gMSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKG1fdHJhY2spCiAgICAgICAgIG1fdHJhY2stPmN1ZVdpbGxDaGFuZ2UodGhpcyk7
CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlOjpjdWVEaWRDaGFuZ2UoKQordm9pZCBUZXh0VHJhY2tD
dWU6OmRpZENoYW5nZSgpCiB7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2luZ0N1ZUNoYW5nZXMpOwor
ICAgIGlmICgtLW1fcHJvY2Vzc2luZ0N1ZUNoYW5nZXMpCisgICAgICAgIHJldHVybjsKKwogICAg
IGlmIChtX3RyYWNrKQogICAgICAgICBtX3RyYWNrLT5jdWVEaWRDaGFuZ2UodGhpcyk7CiAKQEAg
LTI2NCw5ICsyNzEsOSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0SWQoY29uc3QgU3RyaW5nJiBp
CiAgICAgaWYgKG1faWQgPT0gaWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGN1ZVdpbGxDaGFu
Z2UoKTsKKyAgICB3aWxsQ2hhbmdlKCk7CiAgICAgbV9pZCA9IGlkOwotICAgIGN1ZURpZENoYW5n
ZSgpOworICAgIGRpZENoYW5nZSgpOwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6c2V0U3RhcnRU
aW1lKGRvdWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yODAsMTAgKzI4NywxMCBA
QCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0U3RhcnRUaW1lKGRvdWJsZSB2CiAgICAgLy8gVE9ETyg5
MzE0Myk6IEFkZCBzcGVjLWNvbXBsaWFudCBiZWhhdmlvciBmb3IgbmVnYXRpdmUgdGltZSB2YWx1
ZXMuCiAgICAgaWYgKG1fc3RhcnRUaW1lID09IHZhbHVlIHx8IHZhbHVlIDwgMCkKICAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGN1ZVdpbGxDaGFuZ2UoKTsKKworICAgIHdpbGxDaGFuZ2UoKTsK
ICAgICBtX3N0YXJ0VGltZSA9IHZhbHVlOwotICAgIGN1ZURpZENoYW5nZSgpOworICAgIGRpZENo
YW5nZSgpOwogfQogICAgIAogdm9pZCBUZXh0VHJhY2tDdWU6OnNldEVuZFRpbWUoZG91YmxlIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTI5NywxMCArMzA0LDEwIEBAIHZvaWQgVGV4dFRy
YWNrQ3VlOjpzZXRFbmRUaW1lKGRvdWJsZSB2YWwKICAgICAvLyBUT0RPKDkzMTQzKTogQWRkIHNw
ZWMtY29tcGxpYW50IGJlaGF2aW9yIGZvciBuZWdhdGl2ZSB0aW1lIHZhbHVlcy4KICAgICBpZiAo
bV9lbmRUaW1lID09IHZhbHVlIHx8IHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGN1ZVdpbGxDaGFuZ2UoKTsKKworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBtX2VuZFRpbWUg
PSB2YWx1ZTsKLSAgICBjdWVEaWRDaGFuZ2UoKTsKKyAgICBkaWRDaGFuZ2UoKTsKIH0KICAgICAK
IHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRQYXVzZU9uRXhpdChib29sIHZhbHVlKQpAQCAtMzA4LDkg
KzMxNSw3IEBAIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRQYXVzZU9uRXhpdChib29sIHYKICAgICBp
ZiAobV9wYXVzZU9uRXhpdCA9PSB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGN1
ZVdpbGxDaGFuZ2UoKTsKICAgICBtX3BhdXNlT25FeGl0ID0gdmFsdWU7Ci0gICAgY3VlRGlkQ2hh
bmdlKCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgVGV4dFRyYWNrQ3VlOjp2ZXJ0aWNhbCgpIGNvbnN0
CkBAIC0zNDksOSArMzU0LDkgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldFZlcnRpY2FsKGNvbnN0
IFN0cgogICAgIGlmIChkaXJlY3Rpb24gPT0gbV93cml0aW5nRGlyZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7CisgICAgd2lsbENoYW5nZSgpOwogICAgIG1f
d3JpdGluZ0RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKLSAgICBjdWVEaWRDaGFuZ2UoKTsKKyAgICBk
aWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBUZXh0VHJhY2tDdWU6OnNldFNuYXBUb0xpbmVzKGJvb2wg
dmFsdWUpCkBAIC0zNTksOSArMzY0LDkgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldFNuYXBUb0xp
bmVzKGJvb2wgdgogICAgIGlmIChtX3NuYXBUb0xpbmVzID09IHZhbHVlKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgY3VlV2lsbENoYW5nZSgpOworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBt
X3NuYXBUb0xpbmVzID0gdmFsdWU7Ci0gICAgY3VlRGlkQ2hhbmdlKCk7CisgICAgZGlkQ2hhbmdl
KCk7CiB9CiAKIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRMaW5lKGludCBwb3NpdGlvbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCkBAIC0zNzgsMTAgKzM4MywxMCBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0
TGluZShpbnQgcG9zaXRpb24sCiAgICAgaWYgKG1fbGluZVBvc2l0aW9uID09IHBvc2l0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7CisgICAgd2lsbENoYW5nZSgp
OwogICAgIG1fbGluZVBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgbV9jb21wdXRlZExpbmVQb3Np
dGlvbiA9IGNhbGN1bGF0ZUNvbXB1dGVkTGluZVBvc2l0aW9uKCk7Ci0gICAgY3VlRGlkQ2hhbmdl
KCk7CisgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRQb3NpdGlv
bihpbnQgcG9zaXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzk4LDkgKzQwMyw5IEBAIHZv
aWQgVGV4dFRyYWNrQ3VlOjpzZXRQb3NpdGlvbihpbnQgcG9zaXQKICAgICBpZiAobV90ZXh0UG9z
aXRpb24gPT0gcG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBjdWVXaWxsQ2hh
bmdlKCk7CisgICAgd2lsbENoYW5nZSgpOwogICAgIG1fdGV4dFBvc2l0aW9uID0gcG9zaXRpb247
Ci0gICAgY3VlRGlkQ2hhbmdlKCk7CisgICAgZGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgVGV4dFRy
YWNrQ3VlOjpzZXRTaXplKGludCBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTQxNyw5ICs0
MjIsOSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0U2l6ZShpbnQgc2l6ZSwgRXhjCiAgICAgaWYg
KG1fY3VlU2l6ZSA9PSBzaXplKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgY3VlV2lsbENo
YW5nZSgpOworICAgIHdpbGxDaGFuZ2UoKTsKICAgICBtX2N1ZVNpemUgPSBzaXplOwotICAgIGN1
ZURpZENoYW5nZSgpOworICAgIGRpZENoYW5nZSgpOwogfQogCiBjb25zdCBTdHJpbmcmIFRleHRU
cmFja0N1ZTo6YWxpZ24oKSBjb25zdApAQCAtNDU4LDkgKzQ2Myw5IEBAIHZvaWQgVGV4dFRyYWNr
Q3VlOjpzZXRBbGlnbihjb25zdCBTdHJpbmcKICAgICBpZiAoYWxpZ25tZW50ID09IG1fY3VlQWxp
Z25tZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBjdWVXaWxsQ2hhbmdlKCk7CisgICAgd2ls
bENoYW5nZSgpOwogICAgIG1fY3VlQWxpZ25tZW50ID0gYWxpZ25tZW50OwotICAgIGN1ZURpZENo
YW5nZSgpOworICAgIGRpZENoYW5nZSgpOwogfQogICAgIAogdm9pZCBUZXh0VHJhY2tDdWU6OnNl
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtNDY4LDEyICs0NzMsMTIgQEAgdm9pZCBUZXh0
VHJhY2tDdWU6OnNldFRleHQoY29uc3QgU3RyaW5nJgogICAgIGlmIChtX2NvbnRlbnQgPT0gdGV4
dCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGN1ZVdpbGxDaGFuZ2UoKTsKKyAgICB3aWxs
Q2hhbmdlKCk7CiAgICAgLy8gQ2xlYXIgdGhlIGRvY3VtZW50IGZyYWdtZW50IGJ1dCBkb24ndCBi
b3RoZXIgdG8gY3JlYXRlIGl0IGFnYWluIGp1c3QgeWV0IGFzIHdlIGNhbiBkbyB0aGF0CiAgICAg
Ly8gd2hlbiBpdCBpcyByZXF1ZXN0ZWQuCiAgICAgbV93ZWJWVFROb2RlVHJlZSA9IDA7CiAgICAg
bV9jb250ZW50ID0gdGV4dDsKLSAgICBjdWVEaWRDaGFuZ2UoKTsKKyAgICBkaWRDaGFuZ2UoKTsK
IH0KIAogaW50IFRleHRUcmFja0N1ZTo6Y3VlSW5kZXgoKQpAQCAtNTQxLDkgKzU0Niw5IEBAIHZv
aWQgVGV4dFRyYWNrQ3VlOjpzZXRSZWdpb25JZChjb25zdCBTdHIKICAgICBpZiAobV9yZWdpb25J
ZCA9PSByZWdpb25JZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY3VlV2lsbENoYW5nZSgpOwor
ICAgIHdpbGxDaGFuZ2UoKTsKICAgICBtX3JlZ2lvbklkID0gcmVnaW9uSWQ7Ci0gICAgY3VlRGlk
Q2hhbmdlKCk7CisgICAgZGlkQ2hhbmdlKCk7CiB9CiAjZW5kaWYKIApAQCAtMTE1MywxMiArMTE1
OCwxMiBAQCBFdmVudFRhcmdldERhdGEqIFRleHRUcmFja0N1ZTo6ZW5zdXJlRXZlCiAgICAgcmV0
dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAotYm9vbCBUZXh0VHJhY2tDdWU6Om9wZXJhdG9y
PT0oY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Citib29sIFRleHRUcmFja0N1ZTo6aXNF
cXVhbChjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSwgQ3VlTWF0Y2hSdWxlcyBtYXRjaCkgY29uc3QK
IHsKICAgICBpZiAoY3VlVHlwZSgpICE9IGN1ZS5jdWVUeXBlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChtX2VuZFRpbWUgIT0gY3VlLmVuZFRpbWUoKSkKKyAgICAKKyAgICBp
ZiAobWF0Y2ggIT0gSWdub3JlRHVyYXRpb24gJiYgbV9lbmRUaW1lICE9IGN1ZS5lbmRUaW1lKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9zdGFydFRpbWUgIT0gY3VlLnN0YXJ0
VGltZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTc5LDcgKzExODQsNiBAQCBib29s
IFRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjb25zdCBUZXh0CiAgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9Ci0KIHZvaWQgVGV4dFRyYWNrQ3VlOjpzZXRGb250U2l6ZShpbnQgZm9udFNpemUsIGNv
bnN0IEludFNpemUmLCBib29sIGltcG9ydGFudCkKIHsKICAgICBpZiAoIWhhc0Rpc3BsYXlUcmVl
KCkgfHwgIWZvbnRTaXplKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZS5oCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiVGV4dFRyYWNrLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0xNzksMTggKzE3OCwy
MSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9udFNpemUoaW50LCBjb25zdCBJ
bnRTaXplJiwgYm9vbCBpbXBvcnRhbnQpOwogCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBjdWUpOwotICAgIH0KLSAgICAKKyAgICBlbnVtIEN1ZU1hdGNoUnVsZXMgeworICAg
ICAgICBNYXRjaEFsbEZpZWxkcywKKyAgICAgICAgSWdub3JlRHVyYXRpb24sCisgICAgfTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNFcXVhbChjb25zdCBUZXh0VHJhY2tDdWUmLCBDdWVNYXRjaFJ1bGVz
KSBjb25zdDsKKwogICAgIGVudW0gQ3VlVHlwZSB7CiAgICAgICAgIEdlbmVyaWMsCiAgICAgICAg
IFdlYlZUVAogICAgIH07CiAgICAgdmlydHVhbCBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBXZWJWVFQ7IH0KIAorICAgIHZvaWQgd2lsbENoYW5nZSgpOworICAgIHZvaWQgZGlkQ2hh
bmdlKCk7CisgICAgCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlbnRlcik7
CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihleGl0KTsKIApAQCAtMjE4LDkg
KzIyMCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXRlcm1pbmVUZXh0RGlyZWN0aW9uKCk7CiAg
ICAgdm9pZCBjYWxjdWxhdGVEaXNwbGF5UGFyYW1ldGVycygpOwogCi0gICAgdm9pZCBjdWVXaWxs
Q2hhbmdlKCk7Ci0gICAgdm9pZCBjdWVEaWRDaGFuZ2UoKTsKLQogICAgIHZpcnR1YWwgdm9pZCBy
ZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQogCkBAIC0yNDcsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICBp
bnQgbV90ZXh0UG9zaXRpb247CiAgICAgaW50IG1fY3VlU2l6ZTsKICAgICBpbnQgbV9jdWVJbmRl
eDsKKyAgICBpbnQgbV9wcm9jZXNzaW5nQ3VlQ2hhbmdlczsKIAogICAgIFdyaXRpbmdEaXJlY3Rp
b24gbV93cml0aW5nRGlyZWN0aW9uOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHJldmlzaW9uIDE0ODQ1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFRleHRUcmFja0N1ZUdlbmVyaWM6OnNldEZv
bnRTaXplKGluCiAgICAgTE9HKE1lZGlhLCAiVGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNp
emUgLSBzZXR0aW5nIGN1ZSBmb250IHNpemUgdG8gJWxpIiwgbHJvdW5kKHNpemUpKTsKIH0KICAg
ICAKLWJvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6b3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tD
dWUmIGN1ZSkgY29uc3QKK2Jvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6aXNFcXVhbChjb25zdCBU
ZXh0VHJhY2tDdWUmIGN1ZSwgVGV4dFRyYWNrQ3VlOjpDdWVNYXRjaFJ1bGVzIG1hdGNoKSBjb25z
dAogewogICAgIGlmIChjdWUuY3VlVHlwZSgpICE9IFRleHRUcmFja0N1ZTo6R2VuZXJpYykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY5LDcgKzE2OSw3IEBAIGJvb2wgVGV4dFRyYWNrQ3Vl
R2VuZXJpYzo6b3BlcmF0b3I9PShjb24KICAgICBpZiAobV9iYWNrZ3JvdW5kQ29sb3IgIT0gb3Ro
ZXItPmJhY2tncm91bmRDb2xvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gVGV4dFRyYWNrQ3VlOjpvcGVyYXRvcj09KGN1ZSk7CisgICAgcmV0dXJuIFRleHRUcmFja0N1
ZTo6aXNFcXVhbChjdWUsIG1hdGNoKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJp
Yy5oCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFja0N1ZUdlbmVyaWMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldEZvbnRTaXplKGludCwgY29uc3QgSW50U2l6ZSYsIGJv
b2wgaW1wb3J0YW50KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdCBPVkVSUklERQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gY3VlKTsKLSAgICB9CisgICAgdmlydHVhbCBib29sIGlz
RXF1YWwoY29uc3QgVGV4dFRyYWNrQ3VlJiwgQ3VlTWF0Y2hSdWxlcykgY29uc3QgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIFRleHRUcmFja0N1ZTo6Q3VlVHlwZSBjdWVUeXBlKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gVGV4dFRyYWNrQ3VlOjpHZW5lcmljOyB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQ2xpZW50LmgJKHJldmlzaW9uIDE0ODQ1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
Q2xpZW50X2gKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKQEAgLTM2LDIwICszNiwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CiAKLWNs
YXNzIEdlbmVyaWNDdWVEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZW5lcmljQ3Vl
RGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgR2VuZXJpY0N1ZURhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxHZW5lcmljQ3VlRGF0YT4gewogcHVibGljOgotICAgIEdlbmVyaWND
dWVEYXRhKCkKLSAgICAgICAgOiBtX3N0YXJ0VGltZSgwKQotICAgICAgICAsIG1fZW5kVGltZSgw
KQotICAgICAgICAsIG1fbGluZSgtMSkKLSAgICAgICAgLCBtX3Bvc2l0aW9uKC0xKQotICAgICAg
ICAsIG1fc2l6ZSgtMSkKLSAgICAgICAgLCBtX2FsaWduKE5vbmUpCi0gICAgICAgICwgbV9iYXNl
Rm9udFNpemUoMCkKLSAgICAgICAgLCBtX3JlbGF0aXZlRm9udFNpemUoMCkKLSAgICB7Ci0gICAg
fQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBHZW5lcmljQ3VlRGF0YSgpKTsgfQogICAgIHZpcnR1YWwgfkdlbmVy
aWNDdWVEYXRhKCkgeyB9CiAKICAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydFRpbWU7IH0KQEAgLTk3LDcgKzg3LDI4IEBAIHB1YmxpYzoKICAgICBDb2xvciBiYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogICAgIHZv
aWQgc2V0QmFja2dyb3VuZENvbG9yKFJHQkEzMiBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvci5z
ZXRSR0IoY29sb3IpOyB9CiAKKyAgICBlbnVtIFN0YXR1cyB7CisgICAgICAgIFVuaW5pdGlhbGl6
ZWQsCisgICAgICAgIFBhcnRpYWwsCisgICAgICAgIENvbXBsZXRlLAorICAgIH07CisgICAgU3Rh
dHVzIHN0YXR1cygpIHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgdm9pZCBzZXRTdGF0dXMoU3Rh
dHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAgIAogcHJpdmF0ZToKKyAgICBH
ZW5lcmljQ3VlRGF0YSgpCisgICAgICAgIDogbV9zdGFydFRpbWUoMCkKKyAgICAgICAgLCBtX2Vu
ZFRpbWUoMCkKKyAgICAgICAgLCBtX2xpbmUoLTEpCisgICAgICAgICwgbV9wb3NpdGlvbigtMSkK
KyAgICAgICAgLCBtX3NpemUoLTEpCisgICAgICAgICwgbV9hbGlnbihOb25lKQorICAgICAgICAs
IG1fYmFzZUZvbnRTaXplKDApCisgICAgICAgICwgbV9yZWxhdGl2ZUZvbnRTaXplKDApCisgICAg
ICAgICwgbV9zdGF0dXMoVW5pbml0aWFsaXplZCkKKyAgICB7CisgICAgfQorCiAgICAgZG91Ymxl
IG1fc3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2VuZFRpbWU7CiAgICAgU3RyaW5nIG1faWQ7CkBA
IC0xMTEsMTQgKzEyMiwxNiBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3JlbGF0aXZlRm9udFNp
emU7CiAgICAgQ29sb3IgbV9mb3JlZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5k
Q29sb3I7CisgICAgU3RhdHVzIG1fc3RhdHVzOwogfTsKIAogY2xhc3MgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUNsaWVudCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRXZWJWVFRDdWUoSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJsZSAvKmVuZCovLCBj
b25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQqLywgY29uc3QgU3Ry
aW5nJiAvKnNldHRpbmdzKi8pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkR2VuZXJpY0N1ZShJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIFBhc3NSZWZQdHI8
R2VuZXJpY0N1ZURhdGE+KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlbmVyaWNDdWUo
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSosIFBhc3NSZWZQdHI8R2VuZXJpY0N1ZURhdGE+KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuY3BwCShyZXZpc2lvbiAxNDg0NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzOSwyNSArMzM5LDEzIEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRjo6cHJvY2Vzc0MKIAogICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+PSBt
X2N1cnJlbnRDdWVTdGFydFRpbWUpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jdWVzLnNpemUoKTsgaSsrKSB7Ci0KICAgICAgICAgICAgICAgICBHZW5lcmljQ3VlRGF0
YSogY3VlRGF0YSA9IG1fY3Vlc1tpXS5nZXQoKTsKIAotICAgICAgICAgICAgICAgIExPRyhNZWRp
YSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBz
dGFydD0lLjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAotICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEt
PmNvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoIWN1ZURhdGEtPmNvbnRlbnQoKS5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY3VlRGF0YS0+
c2V0U3RhcnRUaW1lKG1fY3VycmVudEN1ZVN0YXJ0VGltZSk7CiAgICAgICAgICAgICAgICAgY3Vl
RGF0YS0+c2V0RW5kVGltZShtX2N1cnJlbnRDdWVFbmRUaW1lKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBBVkZvdW5kYXRpb24gY3VlICJwb3NpdGlvbiIgaXMgdG8gdGhl
IGNlbnRlciBvZiB0aGUgdGV4dCBzbyBhZGp1c3QgcmVsYXRpdmUgdG8gdGhlIGVkZ2UgYmVjYXVz
ZSB3ZSB3aWxsIHVzZSBpdCB0bwotICAgICAgICAgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgot
ICAgICAgICAgICAgICAgIGlmIChjdWVEYXRhLT5wb3NpdGlvbigpID49IDAgJiYgY3VlRGF0YS0+
c2l6ZSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24oY3Vl
RGF0YS0+cG9zaXRpb24oKSAtIGN1ZURhdGEtPnNpemUoKSAvIDIpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6
OnByb2Nlc3NDdWUoJXApIC0gYWRkaW5nIGN1ZSBmb3IgdGltZSA9ICUuMmYsIHBvc2l0aW9uID0g
ICUuMmYsIGxpbmUgPSAgJS4yZiIsIHRoaXMsIGN1ZURhdGEtPnN0YXJ0VGltZSgpLCBjdWVEYXRh
LT5wb3NpdGlvbigpLCBjdWVEYXRhLT5saW5lKCkpOwotICAgICAgICAgICAgICAgIGNsaWVudCgp
LT5hZGRHZW5lcmljQ3VlKHRoaXMsIGN1ZURhdGEpOworICAgICAgICAgICAgICAgIGN1ZURhdGEt
PnNldFN0YXR1cyhHZW5lcmljQ3VlRGF0YTo6Q29tcGxldGUpOworCisgICAgICAgICAgICAgICAg
TE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZSglcCkgLSAg
dXBkYXRpbmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIiLCB0aGlz
LCBjdWVEYXRhLT5zdGFydFRpbWUoKSwgbV9jdXJyZW50Q3VlRW5kVGltZSwgY3VlRGF0YS0+Y29u
dGVudCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNsaWVudCgpLT51cGRhdGVH
ZW5lcmljQ3VlKHRoaXMsIGN1ZURhdGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nl
c3NDdWUgbmVnYXRpdmUgbGVuZ3RoIGN1ZShzKSBpZ25vcmVkOiBzdGFydD0lLjJmLCBlbmQ9JS4y
ZlxuIiwgbV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBtX2N1cnJlbnRDdWVFbmRUaW1lKTsKQEAgLTM3
OCw5ICszNjYsMjcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwog
ICAgICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcgfHwgIUNGQXR0cmlidXRlZFN0cmluZ0dldExl
bmd0aChhdHRyaWJ1dGVkU3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IG1fY3Vlcy5hcHBlbmQoYWRvcHRQdHIobmV3IEdlbmVyaWNDdWVEYXRhKSk7Ci0gICAgICAgIHBy
b2Nlc3NDdWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJpbmcsIG1fY3Vlc1tpXS5nZXQoKSk7Cisg
ICAgICAgIFJlZlB0cjxHZW5lcmljQ3VlRGF0YT4gY3VlRGF0YSA9IEdlbmVyaWNDdWVEYXRhOjpj
cmVhdGUoKTsKKyAgICAgICAgcHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoYXR0cmlidXRlZFN0cmluZywg
Y3VlRGF0YS5nZXQoKSk7CisgICAgICAgIGlmICghY3VlRGF0YS0+Y29udGVudCgpLmxlbmd0aCgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9jdWVzLmFwcGVuZChjdWVEYXRh
KTsKKwogICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUgPSB0aW1lOworICAgICAgICBjdWVE
YXRhLT5zZXRTdGFydFRpbWUobV9jdXJyZW50Q3VlU3RhcnRUaW1lKTsKKyAgICAgICAgY3VlRGF0
YS0+c2V0RW5kVGltZShudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKTsgLy8gZHVy
YXRpb24KKyAgICAgICAgCisgICAgICAgIC8vIEFWRm91bmRhdGlvbiBjdWUgInBvc2l0aW9uIiBp
cyB0byB0aGUgY2VudGVyIG9mIHRoZSB0ZXh0IHNvIGFkanVzdCByZWxhdGl2ZSB0byB0aGUgZWRn
ZSBiZWNhdXNlIHdlIHdpbGwgdXNlIGl0IHRvCisgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgor
ICAgICAgICBpZiAoY3VlRGF0YS0+cG9zaXRpb24oKSA+PSAwICYmIGN1ZURhdGEtPnNpemUoKSA+
IDApCisgICAgICAgICAgICBjdWVEYXRhLT5zZXRQb3NpdGlvbihjdWVEYXRhLT5wb3NpdGlvbigp
IC0gY3VlRGF0YS0+c2l6ZSgpIC8gMik7CisgICAgICAgIAorICAgICAgICBMT0coTWVkaWEsICJJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlKCVwKSAtIGFkZGluZyBjdWUgZm9y
IHRpbWUgPSAlLjJmLCBwb3NpdGlvbiA9ICAlLjJmLCBsaW5lID0gICUuMmYiLCB0aGlzLCBjdWVE
YXRhLT5zdGFydFRpbWUoKSwgY3VlRGF0YS0+cG9zaXRpb24oKSwgY3VlRGF0YS0+bGluZSgpKTsK
KworICAgICAgICBjdWVEYXRhLT5zZXRTdGF0dXMoR2VuZXJpY0N1ZURhdGE6OlBhcnRpYWwpOwor
ICAgICAgICBjbGllbnQoKS0+YWRkR2VuZXJpY0N1ZSh0aGlzLCBjdWVEYXRhKTsKKwogICAgICAg
ICBtX2hhdmVQYXJ0aWFsQ3VlID0gdHJ1ZTsKICAgICB9CiB9CkBAIC0zOTYsNiArNDAyLDExIEBA
IHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWUKICAgICBpZiAobV9oYXZl
UGFydGlhbEN1ZSAmJiAhbV9jdXJyZW50Q3VlRW5kVGltZSkKICAgICAgICAgTE9HKE1lZGlhLCAi
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVWYWx1ZXMgZmx1c2hpbmcgZGF0YSBm
b3IgY3Vlczogc3RhcnQ9JS4yZlxuIiwgbV9jdXJyZW50Q3VlU3RhcnRUaW1lKTsKIAorICAgIGlm
IChjbGllbnQoKSkgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3Vlcy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgIGNsaWVudCgpLT5yZW1vdmVHZW5lcmljQ3VlKHRoaXMsIG1f
Y3Vlc1tpXSk7CisgICAgfQorCiAgICAgbV9jdWVzLnJlc2l6ZSgwKTsKICAgICBtX2hhdmVQYXJ0
aWFsQ3VlID0gZmFsc2U7CiAgICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAkocmV2aXNpb24g
MTQ4NDU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5
LDExIEBACiAjaWYgRU5BQkxFKFZJREVPKSAmJiAoKFVTRShBVkZPVU5EQVRJT04pICYmIEhBVkUo
QVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkpIHx8IFBMQVRGT1JNKElPUykpCiAKICNp
bmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHZW5lcmljQ3VlRGF0YTsKLQogY2xhc3Mg
QVZGSW5iYW5kVHJhY2tQYXJlbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFWRkluYmFuZFRy
YWNrUGFyZW50KCk7CkBAIC02OCw3ICs2Nyw3IEBAIHByb3RlY3RlZDoKICAgICBkb3VibGUgbV9j
dXJyZW50Q3VlU3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVFbmRUaW1lOwogCi0g
ICAgVmVjdG9yPE93blB0cjxHZW5lcmljQ3VlRGF0YT4gPiBtX2N1ZXM7CisgICAgVmVjdG9yPFJl
ZlB0cjxHZW5lcmljQ3VlRGF0YT4gPiBtX2N1ZXM7CiAKICAgICBBVkZJbmJhbmRUcmFja1BhcmVu
dCogbV9vd25lcjsKICAgICBpbnQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxNDg0
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk3LDEx
ICs1OTcsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVk
KCVwKSAtIGZpbmlzaGVkID0gJWQiLCB0aGlzLCBmaW5pc2hlZCk7CiAgICAgVU5VU0VEX1BBUkFN
KGZpbmlzaGVkKTsKIAotI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkK
LSAgICBpZiAoY3VycmVudFRyYWNrKCkpCi0gICAgICAgIGN1cnJlbnRUcmFjaygpLT5yZXNldEN1
ZVZhbHVlcygpOwotI2VuZGlmCi0KICAgICBtX3NlZWtUbyA9IE1lZGlhUGxheWVyOjppbnZhbGlk
VGltZSgpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>