<?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>128125</bug_id>
          
          <creation_ts>2014-02-03 14:11:11 -0800</creation_ts>
          <short_desc>Refine MediaSession interruptions</short_desc>
          <delta_ts>2014-02-12 12:25:44 -0800</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>128184</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>976011</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-03 14:11:11 -0800</bug_when>
    <thetext>Don&apos;t assume a media session &quot;begin interruption&quot; will always be paired with an &quot;end interruption&quot;. Move code for handling interruptions from HTMLMediaElement to HTMLMediaSession.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976033</commentid>
    <comment_count>1</comment_count>
      <attachid>223024</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-03 14:49:04 -0800</bug_when>
    <thetext>Created attachment 223024
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976036</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-03 14:51:23 -0800</bug_when>
    <thetext>Attachment 223024 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/MediaSession.h:57:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/audio/MediaSession.cpp:39:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/html/HTMLMediaSession.cpp:50:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 22 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>976055</commentid>
    <comment_count>3</comment_count>
      <attachid>223024</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-02-03 15:23:58 -0800</bug_when>
    <thetext>Comment on attachment 223024
Proposed patch

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

Nice stuff! r=me with just a couple of nits:

&gt; Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:124
&gt; +    [center addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
&gt; +    [center addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil];
&gt; +

Nit: this isn&apos;t going to work in WK2 mode.  We&apos;ll need to pipe a notification down through the process boundary in that case.  We should probably add a FIXME to come up with an alternate mechanism.

&gt; Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:140
&gt; +- (void)interruption:(NSNotification *)notification
&gt; +{

Did you mean to get rid of the &quot;if (!_callback)&quot; check here? The prettydiff is a bit confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976324</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-04 06:55:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 223024 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223024&amp;action=review
&gt; 
&gt; Nice stuff! r=me with just a couple of nits:
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:124
&gt; &gt; +    [center addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
&gt; &gt; +    [center addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil];
&gt; &gt; +
&gt; 
&gt; Nit: this isn&apos;t going to work in WK2 mode.  We&apos;ll need to pipe a notification down through the process boundary in that case.  We should probably add a FIXME to come up with an alternate mechanism.
&gt; 

Good point, done.

&gt; &gt; Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:140
&gt; &gt; +- (void)interruption:(NSNotification *)notification
&gt; &gt; +{
&gt; 
&gt; Did you mean to get rid of the &quot;if (!_callback)&quot; check here? The prettydiff is a bit confusing.
&gt; 

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976325</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-04 06:55:38 -0800</bug_when>
    <thetext>https://trac.webkit.org/r163376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976345</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-04 07:45:24 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 128184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976443</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-04 11:05:34 -0800</bug_when>
    <thetext>Recommitted in r163390: https://trac.webkit.org/r163390</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>976450</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-04 11:18:12 -0800</bug_when>
    <thetext>Plus https://trac.webkit.org/r163393 to fix Release builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978373</commentid>
    <comment_count>9</comment_count>
      <attachid>223024</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-08 08:31:38 -0800</bug_when>
    <thetext>Comment on attachment 223024
Proposed patch

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

&gt; Source/WebCore/html/HTMLMediaSession.cpp:48
&gt; +#define CASE(_restriction) case HTMLMediaSession::_restriction: return #_restriction; break;

No need for break after return. No need for underline prefix in macro argument name.

&gt; Source/WebCore/html/HTMLMediaSession.cpp:50
&gt; +    switch (restriction)
&gt; +    {

WebKit coding style puts the { on the same line as the switch.

&gt; Source/WebCore/html/HTMLMediaSession.cpp:59
&gt; +    CASE(NoRestrictions);
&gt; +    CASE(RequireUserGestureForLoad);
&gt; +    CASE(RequireUserGestureForRateChange);
&gt; +    CASE(RequireUserGestureForFullscreen);
&gt; +    CASE(RequirePageConsentToLoadMedia);
&gt; +    CASE(RequirePageConsentToResumeMedia);
&gt; +#if ENABLE(IOS_AIRPLAY)
&gt; +    CASE(RequireUserGestureToShowPlaybackTargetPicker);
&gt; +#endif

Extra semicolons on all these lines. No reason to include the semicolon in both the macro and outside the macro.

&gt; Source/WebCore/platform/audio/MediaSession.cpp:44
&gt; +#define CASE(_state) case MediaSession::_state: return #_state; break;
&gt; +    switch (state)
&gt; +    {
&gt; +    CASE(Idle);
&gt; +    CASE(Playing);
&gt; +    CASE(Paused);
&gt; +    CASE(Interrupted);
&gt; +    }

ll the same comments apply here as above.

&gt; Source/WebCore/platform/audio/MediaSession.h:57
&gt; +    void setState(State state);

Should remove the argument name here.

&gt; Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:69
&gt;  - (void)interruption:(NSNotification*)notification;
&gt; +- (void)applicationWillEnterForeground:(NSNotification*)notification;
&gt; +- (void)applicationWillResignActive:(NSNotification*)notification;

WebKit formatting puts a space before the &quot;*&quot; for Objective-C classes (although I personally don’t like that style rule).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978878</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-10 07:52:35 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 223024 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=223024&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaSession.cpp:48
&gt; &gt; +#define CASE(_restriction) case HTMLMediaSession::_restriction: return #_restriction; break;
&gt; 
&gt; No need for break after return. No need for underline prefix in macro argument name.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaSession.cpp:50
&gt; &gt; +    switch (restriction)
&gt; &gt; +    {
&gt; 
&gt; WebKit coding style puts the { on the same line as the switch.
&gt; 

I fixed before I committed the changes.

&gt; &gt; Source/WebCore/html/HTMLMediaSession.cpp:59
&gt; &gt; +    CASE(NoRestrictions);
&gt; &gt; +    CASE(RequireUserGestureForLoad);
&gt; &gt; +    CASE(RequireUserGestureForRateChange);
&gt; &gt; +    CASE(RequireUserGestureForFullscreen);
&gt; &gt; +    CASE(RequirePageConsentToLoadMedia);
&gt; &gt; +    CASE(RequirePageConsentToResumeMedia);
&gt; &gt; +#if ENABLE(IOS_AIRPLAY)
&gt; &gt; +    CASE(RequireUserGestureToShowPlaybackTargetPicker);
&gt; &gt; +#endif
&gt; 
&gt; Extra semicolons on all these lines. No reason to include the semicolon in both the macro and outside the macro.
&gt; 

Good point, I will fix this.

&gt; &gt; Source/WebCore/platform/audio/MediaSession.cpp:44
&gt; &gt; +#define CASE(_state) case MediaSession::_state: return #_state; break;
&gt; &gt; +    switch (state)
&gt; &gt; +    {
&gt; &gt; +    CASE(Idle);
&gt; &gt; +    CASE(Playing);
&gt; &gt; +    CASE(Paused);
&gt; &gt; +    CASE(Interrupted);
&gt; &gt; +    }
&gt; 
&gt; ll the same comments apply here as above.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/platform/audio/MediaSession.h:57
&gt; &gt; +    void setState(State state);
&gt; 
&gt; Should remove the argument name here.
&gt; 

Fixed before I committed the changes.

&gt; &gt; Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm:69
&gt; &gt;  - (void)interruption:(NSNotification*)notification;
&gt; &gt; +- (void)applicationWillEnterForeground:(NSNotification*)notification;
&gt; &gt; +- (void)applicationWillResignActive:(NSNotification*)notification;
&gt; 
&gt; WebKit formatting puts a space before the &quot;*&quot; for Objective-C classes (although I personally don’t like that style rule).

Oops, I will fix this as well (although I also don&apos;t care for this seemingly arbitrary style difference).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979962</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-02-12 12:25:44 -0800</bug_when>
    <thetext>Made the suggested cleanups in https://trac.webkit.org/r163971.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223024</attachid>
            <date>2014-02-03 14:49:04 -0800</date>
            <delta_ts>2014-02-08 08:31:38 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>refactor_patch_6.txt</filename>
            <type>text/plain</type>
            <size>42693</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzMyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE0LTAyLTAzICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmluZSBNZWRpYVNl
c3Npb24gaW50ZXJydXB0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI4MTI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdDogbWVkaWEvdmlkZW8tYmFja2dyb3VuZC1wbGF5YmFjay5odG1sCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogRXhwb3J0IGFwcGxpY2F0aW9uV2lsbEVudGVyRm9y
ZWdyb3VuZCBhbmQgYXBwbGljYXRpb25XaWxsRW50ZXJCYWNrZ3JvdW5kIGZvcgorICAgICAgICAg
ICAgSW50ZXJuYWxzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXkpOiBBc2sgdGhlIG1lZGlhIHNl
c3Npb24gaWYgcGxheWJhY2sgaXMgYWxsb3dlZCBpbnN0ZWFkIG9mIGNoZWNrCisgICAgICAgICAg
ICB0byBzZWUgaWYgaXQgaXMgaW50ZXJydXB0ZWQgZGlyZWN0bHkuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZSk6IEFzayB0aGUgbWVkaWEgc2Vzc2lvbiBpZiBwYXVz
aW5nIGlzIGFsbG93ZWQgaW5zdGVhZCBvZiBjaGVjaworICAgICAgICAgICAgdG8gc2VlIGlmIGl0
IGlzIGludGVycnVwdGVkIGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6bWVkaWFUeXBlKTogUmV0dXJuIG1lZGlhIHR5cGUgYmFzZWQgb24gbWVkaWEgY2hhcmFj
dGVyaXN0aWNzIG9uY2UKKyAgICAgICAgICAgIHRoZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWVQbGF5YmFjayk6IE5l
dy4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKworICAgICAgICAqIGh0bWwv
SFRNTE1lZGlhU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXN0cmljdGlvbk5hbWUp
OiBOZXcsIHVzZSBmb3IgbG9nZ2luZyBvbmx5LgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
U2Vzc2lvbjo6YWRkQmVoYXZpb3JSZXN0cmljdGlvbik6IExvZyAgcmVzdHJpY3Rpb24gY2hhbmdl
cy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246OnJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNlc3Npb24uaDoKKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzdGF0ZU5hbWUpOiBOZXcsIHVzZWQgZm9yIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVNlc3Npb246Ok1lZGlhU2Vzc2lvbik6IERvbid0IGNhY2hlIGNsaWVudCBtZWRpYSB0
eXBlIGJlY2F1c2UgaXQgY2FuIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2Vzc2lv
bjo6c2V0U3RhdGUpOiBMb2cgc3RhdGUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U2Vzc2lvbjo6YmVnaW5JbnRlcnJ1cHRpb24pOiBSZW1lbWJlciB0aGUgY3VycmVudCBzdGF0ZSBp
biBjYXNlIHdlIHdhbnQgdG8gdXNlIGl0CisgICAgICAgICAgICB0byByZXN0b3JlIHN0YXRlIHdo
ZW4gdGhlIGludGVycnVwdGlvbiBlbmRzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9u
OjplbmRJbnRlcnJ1cHRpb24pOiBSZXN1bWUgcGxheWJhY2sgaWYgYXBwcm9wcmlhdGUuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb246OmNsaWVudFdpbGxCZWdpblBsYXliYWNrKTogVHJh
Y2sgdGhlIGNsaWVudCdzIHBsYXliYWNrIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
ZXNzaW9uOjpjbGllbnRXaWxsUGF1c2VQbGF5YmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTZXNzaW9uOjptZWRpYVR5cGUpOiBBc2sgY2xpZW50IGZvciBzdGF0ZS4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaDoKKworICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
ZXNzaW9uTWFuYWdlcjo6TWVkaWFTZXNzaW9uTWFuYWdlcik6IG1faW50ZXJydXB0aW9ucyAtPiBt
X2ludGVycnVwdGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6YmVn
aW5JbnRlcnJ1cHRpb24pOiBEb24ndCBhc3N1bWUgaW50ZXJydXB0aW9ucyBhcmUgYWx3YXlzIGJh
bGFuY2VkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6ZW5kSW50ZXJy
dXB0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjph
ZGRTZXNzaW9uKTogCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNlc3Npb25NYW5hZ2VyOjphcHBs
aWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQpOiBJbnRlcnJ1cHQgY2xpZW50IGlmIGl0IGlzIG5v
dAorICAgICAgICAgICAgYWxsb3dlZCB0byBwbGF5IGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcjo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3Jl
Z3JvdW5kKTogRW5kIGNsaWVudCBpbnRlcnJ1cHRpb24gaWYgaXQKKyAgICAgICAgICAgIHdhcyBz
dG9wcGVkIGJ5IGFuIGludGVycnVwdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9NZWRp
YVNlc3Npb25NYW5hZ2VyLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFT
ZXNzaW9uTWFuYWdlcklPUy5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNl
c3Npb25NYW5hZ2VySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdl
cmlPUzo6fk1lZGlhU2Vzc2lvbk1hbmFnZXJpT1MpOiBDbGVhciB0aGUgaGVscGVyIGNhbGxiYWNr
LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTZXNzaW9uTWFuYWdlcmlPUzo6cmVzZXRSZXN0cmlj
dGlvbnMpOiBNYXJrIHZpZGVvIGFzIG5vdCBhbGxvd2VkIHRvIHBsYXkKKyAgICAgICAgICAgIHdo
aWxlIHRoZSBhcHBsaWNhdGlvbiBpcyBpbiB0aGUgYmFja2dyb3VuZC4gUmVnaXN0ZXIgZm9yIGFw
cGxpY2F0aW9uIHN1c3BlbmQvcmVzdW1lCisgICAgICAgICAgICBub3RpZmljYXRpb25zLgorICAg
ICAgICAoLVtXZWJNZWRpYVNlc3Npb25IZWxwZXIgY2xlYXJDYWxsYmFja10pOiBTZXQgX2NhbGxi
YWNrIHRvIG5pbC4KKyAgICAgICAgKC1bV2ViTWVkaWFTZXNzaW9uSGVscGVyIGFwcGxpY2F0aW9u
V2lsbEVudGVyRm9yZWdyb3VuZDpdKTogTmV3LCBub3RpZnkgY2xpZW50IG9mIGFwcGxpY2F0aW9u
IAorICAgICAgICAgICAgc3RhdGUgY2hhbmdlLgorICAgICAgICAoLVtXZWJNZWRpYVNlc3Npb25I
ZWxwZXIgYXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlOl0pOiBEaXR0by4KKworICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmg6IEFkZCByZXN1bWVQbGF5
YmFjay4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKTogTmV3LCBzaW11
bGF0ZSBhcHBsaWNhdGlvbiBjb250ZXh0IHN3aXRjaC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6YXBwbGljYXRpb25XaWxsRW50ZXJCYWNrZ3JvdW5kKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6OnNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyk6IEFkZCAiQmFj
a2dyb3VuZFBsYXliYWNrTm90UGVybWl0dGVkIiByZXN0cmljdGlvbi4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAx
NC0wMi0wMyAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAg
IEFYOiBXZWJLaXQgc2hvdWxkIHN1cHBvcnQgQGhlYWRlcnMvQGlkIGZvciBjb21wbGV4IGFjY2Vz
c2libGUgd2ViIHRhYmxlcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE2MzMw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC03
NjAsNiArNzYwLDggQEAgX19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25NYW5hZ2VyMTRhZGRSZQog
X19aTjdXZWJDb3JlMTlNZWRpYVNlc3Npb25NYW5hZ2VyMTVlbmRJbnRlcnJ1cHRpb25FTlNfMTJN
ZWRpYVNlc3Npb24yMEVuZEludGVycnVwdGlvbkZsYWdzRQogX19aTjdXZWJDb3JlMTlNZWRpYVNl
c3Npb25NYW5hZ2VyMTdiZWdpbkludGVycnVwdGlvbkV2CiBfX1pON1dlYkNvcmUxOU1lZGlhU2Vz
c2lvbk1hbmFnZXIxN3JlbW92ZVJlc3RyaWN0aW9uRU5TXzEyTWVkaWFTZXNzaW9uOU1lZGlhVHlw
ZUVqCitfX1pOSzdXZWJDb3JlMTlNZWRpYVNlc3Npb25NYW5hZ2VyMzBhcHBsaWNhdGlvbldpbGxF
bnRlckJhY2tncm91bmRFdgorX19aTks3V2ViQ29yZTE5TWVkaWFTZXNzaW9uTWFuYWdlcjMwYXBw
bGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kRXYKIF9fWk43V2ViQ29yZTE5UmVzb3VyY2VSZXF1
ZXN0QmFzZTExc2V0SFRUUEJvZHlFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOEZvcm1EYXRhRUVFCiBf
X1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UxM3NldEhUVFBNZXRob2RFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxOVJlc291cmNlUmVxdWVzdEJhc2UxOHNldEhUVFBIZWFkZXJG
aWVsZEVQS2NSS04zV1RGNlN0cmluZ0UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzMzA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0OCw4ICsyNjQ4LDggQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwbGF5KCkKICAgICBpZiAoU2NyaXB0Q29udHJvbGxlcjo6
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCiAgICAgICAgIHJlbW92ZUJlaGF2aW9yc1Jlc3RyaWN0
aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZSgpOwogCi0gICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5z
dGF0ZSgpID09IE1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAgbV9yZXN1bWVQ
bGF5YmFja0FmdGVySW50ZXJydXB0aW9uID0gdHJ1ZTsKKyAgICBpZiAoIW1fbWVkaWFTZXNzaW9u
LT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIiAgcmV0
dXJuaW5nIGJlY2F1c2Ugb2YgaW50ZXJydXB0aW9uIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCkBAIC0yNjk1LDExICsyNjk1LDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2UoKQogICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrUGVybWl0dGVkKCp0aGlzKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09IE1l
ZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAgbV9yZXN1bWVQbGF5YmFja0FmdGVy
SW50ZXJydXB0aW9uID0gZmFsc2U7CisgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2ls
bFBhdXNlUGxheWJhY2soKSkgeworICAgICAgICBMT0coTWVkaWEsICIgIHJldHVybmluZyBiZWNh
dXNlIG9mIGludGVycnVwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAg
ICAgcGF1c2VJbnRlcm5hbCgpOwogfQogCkBAIC00MjY4LDggKzQyNjgsNiBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgIGludmFsaWRhdGVDYWNoZWRU
aW1lKCk7CiAKICAgICAgICAgaWYgKHBsYXllclBhdXNlZCkgewotICAgICAgICAgICAgbV9tZWRp
YVNlc3Npb24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7Ci0KICAgICAgICAgICAgIGlmICht
X21lZGlhU2Vzc2lvbi0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygqdGhpcykp
CiAgICAgICAgICAgICAgICAgZW50ZXJGdWxsc2NyZWVuKCk7CiAKQEAgLTQyODksNyArNDI4Nyw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKICAgICAgICAgc3Rh
cnRQbGF5YmFja1Byb2dyZXNzVGltZXIoKTsKICAgICAgICAgbV9wbGF5aW5nID0gdHJ1ZTsKIAot
ICAgIH0gZWxzZSB7IC8vIFNob3VsZCBub3QgYmUgcGxheWluZyByaWdodCBub3cKKyAgICB9IGVs
c2UgewogICAgICAgICBpZiAoIXBsYXllclBhdXNlZCkKICAgICAgICAgICAgIG1fcGxheWVyLT5w
YXVzZSgpOwogICAgICAgICByZWZyZXNoQ2FjaGVkVGltZSgpOwpAQCAtNTc2MiwzOSArNTc2MCwy
NyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgSFRNTE1lZGlhRWxlbWVudDo6ZmlsCiAKIE1lZGlhU2Vz
c2lvbjo6TWVkaWFUeXBlIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhVHlwZSgpIGNvbnN0CiB7Cisg
ICAgaWYgKG1fcGxheWVyICYmIG1fcmVhZHlTdGF0ZSA+PSBIQVZFX01FVEFEQVRBKQorICAgICAg
ICByZXR1cm4gaGFzVmlkZW8oKSA/IE1lZGlhU2Vzc2lvbjo6VmlkZW8gOiBNZWRpYVNlc3Npb246
OkF1ZGlvOworCiAgICAgaWYgKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpCiAgICAg
ICAgIHJldHVybiBNZWRpYVNlc3Npb246OlZpZGVvOwogCiAgICAgcmV0dXJuIE1lZGlhU2Vzc2lv
bjo6QXVkaW87CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YmVnaW5JbnRlcnJ1cHRpb24o
KQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZVBsYXliYWNrKCkKIHsKLSAgICBMT0coTWVk
aWEsICJIVE1MTWVkaWFFbGVtZW50OjpiZWdpbkludGVycnVwdGlvbiIpOwotICAgIAotICAgIG1f
cmVzdW1lUGxheWJhY2tBZnRlckludGVycnVwdGlvbiA9ICFwYXVzZWQoKTsKLSAgICBpZiAobV9y
ZXN1bWVQbGF5YmFja0FmdGVySW50ZXJydXB0aW9uKQorICAgIGlmICghcGF1c2VkKCkpCiAgICAg
ICAgIHBhdXNlKCk7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5kSW50ZXJydXB0aW9u
KE1lZGlhU2Vzc2lvbjo6RW5kSW50ZXJydXB0aW9uRmxhZ3MgZmxhZ3MpCit2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnJlc3VtZVBsYXliYWNrKCkKIHsKLSAgICBib29sIHNob3VsZFJlc3VtZVBsYXli
YWNrID0gbV9yZXN1bWVQbGF5YmFja0FmdGVySW50ZXJydXB0aW9uOwotICAgIG1fcmVzdW1lUGxh
eWJhY2tBZnRlckludGVycnVwdGlvbiA9IGZhbHNlOwotCi0gICAgaWYgKCFmbGFncyAmIE1lZGlh
U2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNo
b3VsZFJlc3VtZVBsYXliYWNrKQorICAgIGlmIChwYXVzZWQoKSkKICAgICAgICAgcGxheSgpOwog
fQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlUGxheWJhY2soKQotewotICAgIGlmICgh
cGF1c2VkKCkpCi0gICAgICAgIHBhdXNlKCk7Ci19Ci0KIH0KIAogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMTYzMzA4KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
OSwxMCArNjY5LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgdmlydHVhbCBNZWRpYVNlc3Np
b246Ok1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkludGVycnVwdGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRJ
bnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpFbmRJbnRlcnJ1cHRpb25GbGFncykgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUGxheWJhY2soKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lUGxheWJhY2soKSBvdmVycmlkZTsKIAogICAgIFRpbWVyPEhUTUxNZWRpYUVs
ZW1lbnQ+IG1fbG9hZFRpbWVyOwogICAgIFRpbWVyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fcHJvZ3Jl
c3NFdmVudFRpbWVyOwpAQCAtNzgwLDggKzc3OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Bs
YXRmb3JtTGF5ZXJCb3Jyb3dlZCA6IDE7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9yZXN1bWVQbGF5
YmFja0FmdGVySW50ZXJydXB0aW9uIDogMTsKLQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAg
ICBib29sIG1fdHJhY2tzQXJlUmVhZHkgOiAxOwogICAgIGJvb2wgbV9oYXZlVmlzaWJsZVRleHRU
cmFjayA6IDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5jcHAJ
KHJldmlzaW9uIDE2MzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDI4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiByZXN0cmljdGlv
bk5hbWUoSFRNTE1lZGlhU2Vzc2lvbjo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb24p
Cit7CisjZGVmaW5lIENBU0UoX3Jlc3RyaWN0aW9uKSBjYXNlIEhUTUxNZWRpYVNlc3Npb246Ol9y
ZXN0cmljdGlvbjogcmV0dXJuICNfcmVzdHJpY3Rpb247IGJyZWFrOworICAgIHN3aXRjaCAocmVz
dHJpY3Rpb24pCisgICAgeworICAgIENBU0UoTm9SZXN0cmljdGlvbnMpOworICAgIENBU0UoUmVx
dWlyZVVzZXJHZXN0dXJlRm9yTG9hZCk7CisgICAgQ0FTRShSZXF1aXJlVXNlckdlc3R1cmVGb3JS
YXRlQ2hhbmdlKTsKKyAgICBDQVNFKFJlcXVpcmVVc2VyR2VzdHVyZUZvckZ1bGxzY3JlZW4pOwor
ICAgIENBU0UoUmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOworICAgIENBU0UoUmVxdWly
ZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSk7CisjaWYgRU5BQkxFKElPU19BSVJQTEFZKQorICAg
IENBU0UoUmVxdWlyZVVzZXJHZXN0dXJlVG9TaG93UGxheWJhY2tUYXJnZXRQaWNrZXIpOworI2Vu
ZGlmCisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOwor
fQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBdWRpb1Nlc3Npb24oKQogewogI2lm
IFBMQVRGT1JNKElPUykKQEAgLTcxLDExICs5MywxMyBAQCBIVE1MTWVkaWFTZXNzaW9uOjpIVE1M
TWVkaWFTZXNzaW9uKE1lZGlhCiAKIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6YWRkQmVoYXZpb3JS
ZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikKIHsKKyAgICBMT0co
TWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjphZGRCZWhhdmlvclJlc3RyaWN0aW9uIC0gYWRkaW5n
ICVzIiwgcmVzdHJpY3Rpb25OYW1lKHJlc3RyaWN0aW9uKSk7CiAgICAgbV9yZXN0cmljdGlvbnMg
fD0gcmVzdHJpY3Rpb247CiB9CiAKIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6cmVtb3ZlQmVoYXZp
b3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikKIHsKKyAgICBM
T0coTWVkaWEsICJIVE1MTWVkaWFTZXNzaW9uOjpyZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uIC0g
cmVtb3ZpbmcgJXMiLCByZXN0cmljdGlvbk5hbWUocmVzdHJpY3Rpb24pKTsKICAgICBtX3Jlc3Ry
aWN0aW9ucyAmPSB+cmVzdHJpY3Rpb247CiB9CiAKQEAgLTE1OSwxMSArMTgzLDYgQEAgTWVkaWFQ
bGF5ZXI6OlByZWxvYWQgSFRNTE1lZGlhU2Vzc2lvbjo6ZQogICAgIHJldHVybiBwcmVsb2FkOwog
fQogCi12b2lkIEhUTUxNZWRpYVNlc3Npb246OmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCkgY29u
c3QKLXsKLSAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkuc2Vzc2lvbldp
bGxCZWdpblBsYXliYWNrKCp0aGlzKTsKLX0KLQogYm9vbCBIVE1MTWVkaWFTZXNzaW9uOjpyZXF1
aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVs
ZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5h
Z2VyKCkuc2Vzc2lvblJlc3RyaWN0c0lubGluZVZpZGVvUGxheWJhY2soKnRoaXMpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE2MzMwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw4ICs0Miw2IEBAIHB1YmxpYzoKICAgICBIVE1MTWVkaWFTZXNzaW9uKE1lZGlhU2Vzc2lv
bkNsaWVudCYpOwogICAgIHZpcnR1YWwgfkhUTUxNZWRpYVNlc3Npb24oKSB7IH0KIAotICAgIHZv
aWQgY2xpZW50V2lsbEJlZ2luUGxheWJhY2soKSBjb25zdDsKLQogICAgIGJvb2wgcGxheWJhY2tQ
ZXJtaXR0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIGJvb2wgZGF0YUxv
YWRpbmdQZXJtaXR0ZWQoY29uc3QgSFRNTE1lZGlhRWxlbWVudCYpIGNvbnN0OwogICAgIGJvb2wg
ZnVsbHNjcmVlblBlcm1pdHRlZChjb25zdCBIVE1MTWVkaWFFbGVtZW50JikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbi5jcHAJKHJl
dmlzaW9uIDE2MzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vz
c2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDIxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGNoYXIqIHN0YXRlTmFtZShNZWRpYVNlc3Npb246OlN0
YXRlIHN0YXRlKQoreworI2RlZmluZSBDQVNFKF9zdGF0ZSkgY2FzZSBNZWRpYVNlc3Npb246Ol9z
dGF0ZTogcmV0dXJuICNfc3RhdGU7IGJyZWFrOworICAgIHN3aXRjaCAoc3RhdGUpCisgICAgewor
ICAgIENBU0UoSWRsZSk7CisgICAgQ0FTRShQbGF5aW5nKTsKKyAgICBDQVNFKFBhdXNlZCk7Cisg
ICAgQ0FTRShJbnRlcnJ1cHRlZCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuICIiOworfQorICAgIAogc3RkOjp1bmlxdWVfcHRyPE1lZGlhU2Vzc2lvbj4g
TWVkaWFTZXNzaW9uOjpjcmVhdGUoTWVkaWFTZXNzaW9uQ2xpZW50JiBjbGllbnQpCiB7CiAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFTZXNzaW9uPihjbGllbnQpOwpAQCAtMzksMTAg
KzU0LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVNlc3Npb24+IE1lZGlhU2Vzc2kKIAogTWVk
aWFTZXNzaW9uOjpNZWRpYVNlc3Npb24oTWVkaWFTZXNzaW9uQ2xpZW50JiBjbGllbnQpCiAgICAg
OiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3N0YXRlKFJ1bm5pbmcpCisgICAgLCBtX3N0YXRl
KElkbGUpCisgICAgLCBtX3N0YXRlVG9SZXN0b3JlKElkbGUpCisgICAgLCBtX25vdGlmeWluZ0Ns
aWVudChmYWxzZSkKIHsKLSAgICBtX3R5cGUgPSBtX2NsaWVudC5tZWRpYVR5cGUoKTsKLSAgICBB
U1NFUlQobV90eXBlID49IE5vbmUgJiYgbV90eXBlIDw9IFdlYkF1ZGlvKTsKKyAgICBNZWRpYVR5
cGUgdHlwZSA9IG1fY2xpZW50Lm1lZGlhVHlwZSgpOworICAgIEFTU0VSVCh0eXBlID49IE5vbmUg
JiYgdHlwZSA8PSBXZWJBdWRpbyk7CiAgICAgTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFu
YWdlcigpLmFkZFNlc3Npb24oKnRoaXMpOwogfQogCkBAIC01MSwxOCArNjgsNTIgQEAgTWVkaWFT
ZXNzaW9uOjp+TWVkaWFTZXNzaW9uKCkKICAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRN
YW5hZ2VyKCkucmVtb3ZlU2Vzc2lvbigqdGhpcyk7CiB9CiAKK3ZvaWQgTWVkaWFTZXNzaW9uOjpz
ZXRTdGF0ZShTdGF0ZSBzdGF0ZSkKK3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVNlc3Npb246OnNl
dFN0YXRlIC0gJXMiLCBzdGF0ZU5hbWUoc3RhdGUpKTsKKyAgICBtX3N0YXRlID0gc3RhdGU7Cit9
CisKIHZvaWQgTWVkaWFTZXNzaW9uOjpiZWdpbkludGVycnVwdGlvbigpCiB7CiAgICAgTE9HKE1l
ZGlhLCAiTWVkaWFTZXNzaW9uOjpiZWdpbkludGVycnVwdGlvbiIpOwotICAgIG1fc3RhdGUgPSBJ
bnRlcnJ1cHRlZDsKLSAgICBtX2NsaWVudC5iZWdpbkludGVycnVwdGlvbigpOworCisgICAgbV9z
dGF0ZVRvUmVzdG9yZSA9IHN0YXRlKCk7CisgICAgbV9ub3RpZnlpbmdDbGllbnQgPSB0cnVlOwor
ICAgIGNsaWVudCgpLnBhdXNlUGxheWJhY2soKTsKKyAgICBzZXRTdGF0ZShJbnRlcnJ1cHRlZCk7
CisgICAgbV9ub3RpZnlpbmdDbGllbnQgPSBmYWxzZTsKIH0KIAogdm9pZCBNZWRpYVNlc3Npb246
OmVuZEludGVycnVwdGlvbihFbmRJbnRlcnJ1cHRpb25GbGFncyBmbGFncykKIHsKLSAgICBMT0co
TWVkaWEsICJNZWRpYVNlc3Npb246OmVuZEludGVycnVwdGlvbiIpOwotICAgIG1fc3RhdGUgPSBS
dW5uaW5nOwotICAgIG1fY2xpZW50LmVuZEludGVycnVwdGlvbihmbGFncyk7CisgICAgTE9HKE1l
ZGlhLCAiTWVkaWFTZXNzaW9uOjplbmRJbnRlcnJ1cHRpb24gLSBmbGFncyA9ICVpIiwgKGludClm
bGFncyk7CisKKyAgICBzZXRTdGF0ZShQYXVzZWQpOworICAgIG1fc3RhdGVUb1Jlc3RvcmUgPSBJ
ZGxlOworICAgIGlmIChmbGFncyAmIE1heVJlc3VtZVBsYXlpbmcgJiYgbV9zdGF0ZVRvUmVzdG9y
ZSA9PSBQbGF5aW5nKSB7CisgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhU2Vzc2lvbjo6ZW5kSW50
ZXJydXB0aW9uIC0gcmVzdW1pbmcgcGxheWJhY2siKTsKKyAgICAgICAgY2xpZW50KCkucmVzdW1l
UGxheWJhY2soKTsKKyAgICB9Cit9CisKK2Jvb2wgTWVkaWFTZXNzaW9uOjpjbGllbnRXaWxsQmVn
aW5QbGF5YmFjaygpCit7CisgICAgc2V0U3RhdGUoUGxheWluZyk7CisgICAgTWVkaWFTZXNzaW9u
TWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnNlc3Npb25XaWxsQmVnaW5QbGF5YmFjaygqdGhpcyk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWVkaWFTZXNzaW9uOjpjbGllbnRXaWxsUGF1
c2VQbGF5YmFjaygpCit7CisgICAgaWYgKHN0YXRlKCkgPT0gSW50ZXJydXB0ZWQpIHsKKyAgICAg
ICAgaWYgKCFtX25vdGlmeWluZ0NsaWVudCkKKyAgICAgICAgICAgIG1fc3RhdGVUb1Jlc3RvcmUg
PSBQYXVzZWQ7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2V0U3Rh
dGUoUGF1c2VkKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBNZWRpYVNlc3Npb246OnBh
dXNlU2Vzc2lvbigpCkBAIC03MSw0ICsxMjIsOSBAQCB2b2lkIE1lZGlhU2Vzc2lvbjo6cGF1c2VT
ZXNzaW9uKCkKICAgICBtX2NsaWVudC5wYXVzZVBsYXliYWNrKCk7CiB9CiAKK01lZGlhU2Vzc2lv
bjo6TWVkaWFUeXBlIE1lZGlhU2Vzc2lvbjo6bWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9jbGllbnQubWVkaWFUeXBlKCk7Cit9CisgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNlc3Npb24uaAkocmV2aXNpb24gMTYzMzA4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDE1ICs0NSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIEF1ZGlvLAogICAgICAgICBX
ZWJBdWRpbywKICAgICB9OwotICAgIAotICAgIE1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKyAgICBNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3Q7CiAKICAg
ICBlbnVtIFN0YXRlIHsKLSAgICAgICAgUnVubmluZywKKyAgICAgICAgSWRsZSwKKyAgICAgICAg
UGxheWluZywKKyAgICAgICAgUGF1c2VkLAogICAgICAgICBJbnRlcnJ1cHRlZCwKICAgICB9Owog
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIHZvaWQgc2V0
U3RhdGUoU3RhdGUgc3RhdGUpIHsgbV9zdGF0ZSA9IHN0YXRlOyB9CisgICAgdm9pZCBzZXRTdGF0
ZShTdGF0ZSBzdGF0ZSk7CiAKICAgICBlbnVtIEVuZEludGVycnVwdGlvbkZsYWdzIHsKICAgICAg
ICAgTm9GbGFncyA9IDAsCkBAIC02Miw2ICs2MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBiZWdp
bkludGVycnVwdGlvbigpOwogICAgIHZvaWQgZW5kSW50ZXJydXB0aW9uKEVuZEludGVycnVwdGlv
bkZsYWdzKTsKIAorICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgY29u
c3Q7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQoKSBjb25zdDsKKwor
ICAgIGJvb2wgY2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKKyAgICBib29sIGNsaWVudFdpbGxQ
YXVzZVBsYXliYWNrKCk7CisKICAgICB2b2lkIHBhdXNlU2Vzc2lvbigpOwogCiBwcm90ZWN0ZWQ6
CkBAIC02OSw4ICs3Niw5IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBNZWRpYVNlc3Np
b25DbGllbnQmIG1fY2xpZW50OwotICAgIE1lZGlhVHlwZSBtX3R5cGU7CiAgICAgU3RhdGUgbV9z
dGF0ZTsKKyAgICBTdGF0ZSBtX3N0YXRlVG9SZXN0b3JlOworICAgIGJvb2wgbV9ub3RpZnlpbmdD
bGllbnQ7CiB9OwogCiBjbGFzcyBNZWRpYVNlc3Npb25DbGllbnQgewpAQCAtNzksMTAgKzg3LDcg
QEAgcHVibGljOgogICAgIE1lZGlhU2Vzc2lvbkNsaWVudCgpIHsgfQogICAgIAogICAgIHZpcnR1
YWwgTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3QgPSAwOwotICAgIAot
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkludGVycnVwdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBlbmRJbnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpFbmRJbnRlcnJ1cHRpb25GbGFncykgeyB9
Ci0KKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGxheWJhY2soKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlUGxheWJhY2soKSA9IDA7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL01lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwCShy
ZXZpc2lvbiAxNjMzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9NZWRpYVNl
c3Npb25NYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKIAorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVNlc3Npb24uaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtMzksNyArNDAsNyBAQCBNZWRpYVNlc3Npb25NYW5hZ2VyJiBNZWRpYVNlc3Np
b25NYW5hZ2VyCiAjZW5kaWYKIAogTWVkaWFTZXNzaW9uTWFuYWdlcjo6TWVkaWFTZXNzaW9uTWFu
YWdlcigpCi0gICAgOiBtX2ludGVycnVwdGlvbnMoMCkKKyAgICA6IG1faW50ZXJydXB0ZWQoZmFs
c2UpCiB7CiAgICAgcmVzZXRSZXN0cmljdGlvbnMoKTsKIH0KQEAgLTc4LDE5ICs3OSwxOCBAQCBp
bnQgTWVkaWFTZXNzaW9uTWFuYWdlcjo6Y291bnQoTWVkaWFTZXNzCiAKIHZvaWQgTWVkaWFTZXNz
aW9uTWFuYWdlcjo6YmVnaW5JbnRlcnJ1cHRpb24oKQogewotICAgIGlmICgrK21faW50ZXJydXB0
aW9ucyA+IDEpCi0gICAgICAgIHJldHVybjsKKyAgICBMT0coTWVkaWEsICJNZWRpYVNlc3Npb25N
YW5hZ2VyOjpiZWdpbkludGVycnVwdGlvbiIpOwogCisgICAgbV9pbnRlcnJ1cHRlZCA9IHRydWU7
CiAgICAgZm9yIChhdXRvKiBzZXNzaW9uIDogbV9zZXNzaW9ucykKICAgICAgICAgc2Vzc2lvbi0+
YmVnaW5JbnRlcnJ1cHRpb24oKTsKIH0KIAogdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyOjplbmRJ
bnRlcnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpFbmRJbnRlcnJ1cHRpb25GbGFncyBmbGFncykKIHsK
LSAgICBBU1NFUlQobV9pbnRlcnJ1cHRpb25zID4gMCk7Ci0gICAgaWYgKC0tbV9pbnRlcnJ1cHRp
b25zKQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgTE9HKE1lZGlhLCAiTWVkaWFTZXNzaW9u
TWFuYWdlcjo6ZW5kSW50ZXJydXB0aW9uIik7CisKKyAgICBtX2ludGVycnVwdGVkID0gZmFsc2U7
CiAgICAgZm9yIChhdXRvKiBzZXNzaW9uIDogbV9zZXNzaW9ucykKICAgICAgICAgc2Vzc2lvbi0+
ZW5kSW50ZXJydXB0aW9uKGZsYWdzKTsKIH0KQEAgLTk4LDcgKzk4LDggQEAgdm9pZCBNZWRpYVNl
c3Npb25NYW5hZ2VyOjplbmRJbnRlcnJ1cHRpbwogdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyOjph
ZGRTZXNzaW9uKE1lZGlhU2Vzc2lvbiYgc2Vzc2lvbikKIHsKICAgICBtX3Nlc3Npb25zLmFwcGVu
ZCgmc2Vzc2lvbik7Ci0gICAgc2Vzc2lvbi5zZXRTdGF0ZShtX2ludGVycnVwdGlvbnMgPyBNZWRp
YVNlc3Npb246OkludGVycnVwdGVkIDogTWVkaWFTZXNzaW9uOjpSdW5uaW5nKTsKKyAgICBpZiAo
bV9pbnRlcnJ1cHRlZCkKKyAgICAgICAgc2Vzc2lvbi5zZXRTdGF0ZShNZWRpYVNlc3Npb246Oklu
dGVycnVwdGVkKTsKICAgICB1cGRhdGVTZXNzaW9uU3RhdGUoKTsKIH0KIApAQCAtMTU3LDYgKzE1
OCwyNCBAQCBib29sIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNlc3Npb25SZXN0cmljCiAgICAgcmV0
dXJuIG1fcmVzdHJpY3Rpb25zW3Nlc3Npb25UeXBlXSAmIElubGluZVZpZGVvUGxheWJhY2tSZXN0
cmljdGVkOwogfQogCit2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OmFwcGxpY2F0aW9uV2lsbEVu
dGVyQmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFTZXNzaW9uTWFu
YWdlcjo6YXBwbGljYXRpb25XaWxsRW50ZXJCYWNrZ3JvdW5kIik7CisgICAgZm9yIChhdXRvKiBz
ZXNzaW9uIDogbV9zZXNzaW9ucykgeworICAgICAgICBpZiAobV9yZXN0cmljdGlvbnNbc2Vzc2lv
bi0+bWVkaWFUeXBlKCldICYgQmFja2dyb3VuZFBsYXliYWNrTm90UGVybWl0dGVkKQorICAgICAg
ICAgICAgc2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVk
aWFTZXNzaW9uTWFuYWdlcjo6YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgY29uc3QK
K3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVNlc3Npb25NYW5hZ2VyOjphcHBsaWNhdGlvbldpbGxF
bnRlckZvcmVncm91bmQiKTsKKyAgICBmb3IgKGF1dG8qIHNlc3Npb24gOiBtX3Nlc3Npb25zKSB7
CisgICAgICAgIGlmIChtX3Jlc3RyaWN0aW9uc1tzZXNzaW9uLT5tZWRpYVR5cGUoKV0gJiBCYWNr
Z3JvdW5kUGxheWJhY2tOb3RQZXJtaXR0ZWQpCisgICAgICAgICAgICBzZXNzaW9uLT5lbmRJbnRl
cnJ1cHRpb24oTWVkaWFTZXNzaW9uOjpNYXlSZXN1bWVQbGF5aW5nKTsKKyAgICB9Cit9CisKICNp
ZiAhUExBVEZPUk0oTUFDKQogdm9pZCBNZWRpYVNlc3Npb25NYW5hZ2VyOjp1cGRhdGVTZXNzaW9u
U3RhdGUoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNz
aW9uTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L01lZGlhU2Vzc2lvbk1hbmFnZXIuaAkocmV2aXNpb24gMTYzMzA4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vTWVkaWFTZXNzaW9uTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NywxMiArNDcsMTYgQEAgcHVibGljOgogICAgIHZvaWQgYmVnaW5JbnRlcnJ1cHRpb24oKTsK
ICAgICB2b2lkIGVuZEludGVycnVwdGlvbihNZWRpYVNlc3Npb246OkVuZEludGVycnVwdGlvbkZs
YWdzKTsKIAorICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgY29uc3Q7
CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQoKSBjb25zdDsKKwogICAg
IGVudW0gU2Vzc2lvblJlc3RyaWN0aW9uRmxhZ3MgewogICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9
IDAsCiAgICAgICAgIENvbmN1cnJlbnRQbGF5YmFja05vdFBlcm1pdHRlZCA9IDEgPDwgMCwKICAg
ICAgICAgSW5saW5lVmlkZW9QbGF5YmFja1Jlc3RyaWN0ZWQgPSAxIDw8IDEsCiAgICAgICAgIE1l
dGFkYXRhUHJlbG9hZGluZ05vdFBlcm1pdHRlZCA9IDEgPDwgMiwKICAgICAgICAgQXV0b1ByZWxv
YWRpbmdOb3RQZXJtaXR0ZWQgPSAxIDw8IDMsCisgICAgICAgIEJhY2tncm91bmRQbGF5YmFja05v
dFBlcm1pdHRlZCA9IDEgPDwgNCwKICAgICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQgU2Vzc2lv
blJlc3RyaWN0aW9uczsKICAgICAKQEAgLTYyLDYgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZXNldFJlc3RyaWN0aW9ucygpOwogCiAgICAgdm9pZCBzZXNzaW9uV2lsbEJlZ2lu
UGxheWJhY2soY29uc3QgTWVkaWFTZXNzaW9uJikgY29uc3Q7CisKICAgICBib29sIHNlc3Npb25S
ZXN0cmljdHNJbmxpbmVWaWRlb1BsYXliYWNrKGNvbnN0IE1lZGlhU2Vzc2lvbiYpIGNvbnN0Owog
CiBwcm90ZWN0ZWQ6CkBAIC03Nyw3ICs4Miw3IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvblJlc3Ry
aWN0aW9ucyBtX3Jlc3RyaWN0aW9uc1tNZWRpYVNlc3Npb246OldlYkF1ZGlvICsgMV07CiAKICAg
ICBWZWN0b3I8TWVkaWFTZXNzaW9uKj4gbV9zZXNzaW9uczsKLSAgICBpbnQgbV9pbnRlcnJ1cHRp
b25zOworICAgIGJvb2wgbV9pbnRlcnJ1cHRlZDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Npb25NYW5hZ2VySU9TLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL01lZGlhU2Vzc2lvbk1hbmFn
ZXJJT1MuaAkocmV2aXNpb24gMTYzMzA4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vaW9zL01lZGlhU2Vzc2lvbk1hbmFnZXJJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lZGlhU2Vzc2lvbk1hbmFnZXJp
T1MgOiBwdWJsaWMgTWVkaWFTZXNzaW9uTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
TWVkaWFTZXNzaW9uTWFuYWdlcmlPUygpIHsgfQorICAgIHZpcnR1YWwgfk1lZGlhU2Vzc2lvbk1h
bmFnZXJpT1MoKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWVkaWFTZXNzaW9uTWFu
YWdlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Np
b25NYW5hZ2VySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2lvcy9NZWRpYVNlc3Npb25NYW5hZ2VySU9TLm1tCShyZXZpc2lvbiAxNjMzMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uTWFuYWdlcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzEsMjQgKzMxLDMwIEBACiAjaW1wb3J0ICJMb2dnaW5nLmgi
CiAjaW1wb3J0ICJNZWRpYVNlc3Npb24uaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCi0jaW1w
b3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCisjaW1wb3J0ICJXZWJDb3JlVGhyZWFkUnVuLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24v
QVZBdWRpb1Nlc3Npb24uaD4KKyNpbXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24uaD4KICNpbXBv
cnQgPG9iamMvcnVudGltZS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCiBTT0ZUX0xJ
TktfRlJBTUVXT1JLKEFWRm91bmRhdGlvbikKK1NPRlRfTElOS19GUkFNRVdPUksoVUlLaXQpCiAK
IFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uKQogCiBTT0ZUX0xJ
TktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uTm90aWZp
Y2F0aW9uLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkF1
ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXksIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9J
TlRFUihBVkZvdW5kYXRpb24sIEFWQXVkaW9TZXNzaW9uSW50ZXJydXB0aW9uT3B0aW9uS2V5LCBO
U1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoVUlLaXQsIFVJQXBwbGljYXRpb25XaWxsUmVz
aWduQWN0aXZlTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoVUlL
aXQsIFVJQXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kTm90aWZpY2F0aW9uLCBOU1N0cmlu
ZyAqKQogCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9uIGdldEFWQXVkaW9TZXNzaW9uQ2xhc3MoKQog
I2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbiBnZXRBVkF1ZGlv
U2Vzc2lvbkludGVycnVwdGlvbk5vdGlmaWNhdGlvbigpCiAjZGVmaW5lIEFWQXVkaW9TZXNzaW9u
SW50ZXJydXB0aW9uVHlwZUtleSBnZXRBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5cGVLZXko
KQogI2RlZmluZSBBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvbk9wdGlvbktleSBnZXRBVkF1ZGlv
U2Vzc2lvbkludGVycnVwdGlvbk9wdGlvbktleSgpCisjZGVmaW5lIFVJQXBwbGljYXRpb25XaWxs
UmVzaWduQWN0aXZlTm90aWZpY2F0aW9uIGdldFVJQXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZl
Tm90aWZpY2F0aW9uKCkKKyNkZWZpbmUgVUlBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmRO
b3RpZmljYXRpb24gZ2V0VUlBcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmROb3RpZmljYXRp
b24oKQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTcsMTAgKzYzLDEyIEBAIEBp
bnRlcmZhY2UgV2ViTWVkaWFTZXNzaW9uSGVscGVyIDogTlNPYmoKIH0KIAogLSAoaWQpaW5pdFdp
dGhDYWxsYmFjazooTWVkaWFTZXNzaW9uTWFuYWdlcmlPUyopY2FsbGJhY2s7CistICh2b2lkKWNs
ZWFyQ2FsbGJhY2s7CiAtICh2b2lkKWludGVycnVwdGlvbjooTlNOb3RpZmljYXRpb24qKW5vdGlm
aWNhdGlvbjsKKy0gKHZvaWQpYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kOihOU05vdGlm
aWNhdGlvbiopbm90aWZpY2F0aW9uOworLSAodm9pZClhcHBsaWNhdGlvbldpbGxSZXNpZ25BY3Rp
dmU6KE5TTm90aWZpY2F0aW9uKilub3RpZmljYXRpb247CiBAZW5kCiAKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBNZWRpYVNlc3Npb25NYW5hZ2VyJiBNZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKCkKQEAgLTc2LDYgKzg0LDExIEBAIE1lZGlhU2Vzc2lvbk1hbmFnZXJpT1M6Ok1l
ZGlhU2Vzc2lvbk1hbmEKICAgICByZXNldFJlc3RyaWN0aW9ucygpOwogfQogCitNZWRpYVNlc3Np
b25NYW5hZ2VyaU9TOjp+TWVkaWFTZXNzaW9uTWFuYWdlcmlPUygpCit7CisgICAgW21fb2JqY09i
c2VydmVyIGNsZWFyQ2FsbGJhY2tdOworfQorCiB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXJpT1M6
OnJlc2V0UmVzdHJpY3Rpb25zKCkKIHsKICAgICBNZWRpYVNlc3Npb25NYW5hZ2VyOjpyZXNldFJl
c3RyaWN0aW9ucygpOwpAQCAtODUsNiArOTgsOCBAQCB2b2lkIE1lZGlhU2Vzc2lvbk1hbmFnZXJp
T1M6OnJlc2V0UmVzdHJpCiAgICAgICAgIGFkZFJlc3RyaWN0aW9uKE1lZGlhU2Vzc2lvbjo6Vmlk
ZW8sIElubGluZVZpZGVvUGxheWJhY2tSZXN0cmljdGVkKTsKIAogICAgIGFkZFJlc3RyaWN0aW9u
KE1lZGlhU2Vzc2lvbjo6VmlkZW8sIENvbmN1cnJlbnRQbGF5YmFja05vdFBlcm1pdHRlZCk7Cisg
ICAgYWRkUmVzdHJpY3Rpb24oTWVkaWFTZXNzaW9uOjpWaWRlbywgQmFja2dyb3VuZFBsYXliYWNr
Tm90UGVybWl0dGVkKTsKKwogICAgIHJlbW92ZVJlc3RyaWN0aW9uKE1lZGlhU2Vzc2lvbjo6QXVk
aW8sIE1ldGFkYXRhUHJlbG9hZGluZ05vdFBlcm1pdHRlZCk7CiAgICAgcmVtb3ZlUmVzdHJpY3Rp
b24oTWVkaWFTZXNzaW9uOjpWaWRlbywgTWV0YWRhdGFQcmVsb2FkaW5nTm90UGVybWl0dGVkKTsK
ICAgICBhZGRSZXN0cmljdGlvbihNZWRpYVNlc3Npb246OkF1ZGlvLCBBdXRvUHJlbG9hZGluZ05v
dFBlcm1pdHRlZCk7CkBAIC0xMDQsNyArMTE5LDkgQEAgLSAoaWQpaW5pdFdpdGhDYWxsYmFjazoo
TWVkaWFTZXNzaW9uTWFuYQogCiAgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKmNlbnRlciA9IFtO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKICAgICBbY2VudGVyIGFkZE9ic2Vy
dmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGludGVycnVwdGlvbjopIG5hbWU6QVZBdWRpb1Nl
c3Npb25JbnRlcnJ1cHRpb25Ob3RpZmljYXRpb24gb2JqZWN0OltBVkF1ZGlvU2Vzc2lvbiBzaGFy
ZWRJbnN0YW5jZV1dOwotICAgIAorICAgIFtjZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IoYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kOikgbmFtZTpVSUFwcGxp
Y2F0aW9uV2lsbEVudGVyRm9yZWdyb3VuZE5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICBb
Y2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uV2ls
bFJlc2lnbkFjdGl2ZTopIG5hbWU6VUlBcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmVOb3RpZmlj
YXRpb24gb2JqZWN0Om5pbF07CisKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtMTE0LDExICsx
MzEsMTMgQEAgLSAodm9pZClkZWFsbG9jCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi0tICh2
b2lkKWludGVycnVwdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KKy0gKHZvaWQp
Y2xlYXJDYWxsYmFjawogewotICAgIGlmICghX2NhbGxiYWNrKQotICAgICAgICByZXR1cm47Cisg
ICAgX2NhbGxiYWNrID0gbmlsOworfQogCistICh2b2lkKWludGVycnVwdGlvbjooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KK3sKICAgICBOU1VJbnRlZ2VyIHR5cGUgPSBbW1tub3RpZmlj
YXRpb24gdXNlckluZm9dIG9iamVjdEZvcktleTpBVkF1ZGlvU2Vzc2lvbkludGVycnVwdGlvblR5
cGVLZXldIHVuc2lnbmVkSW50ZWdlclZhbHVlXTsKICAgICBNZWRpYVNlc3Npb246OkVuZEludGVy
cnVwdGlvbkZsYWdzIGZsYWdzID0gTWVkaWFTZXNzaW9uOjpOb0ZsYWdzOwogCkBAIC0xMzcsNiAr
MTU2LDM2IEBAIC0gKHZvaWQpaW50ZXJydXB0aW9uOihOU05vdGlmaWNhdGlvbiAqKW4KICAgICB9
KTsKIH0KIAorLSAodm9pZClhcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQ6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgVU5VU0VEX1BBUkFNKG5vdGlmaWNhdGlvbik7
CisgICAgCisgICAgaWYgKCFfY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIFdlYlRo
cmVhZFJ1biheeworICAgICAgICBpZiAoIV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIF9jYWxsYmFjay0+YXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3Jv
dW5kKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpYXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTShub3Rp
ZmljYXRpb24pOworCisgICAgaWYgKCFfY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBXZWJUaHJlYWRSdW4oXnsKKyAgICAgICAgaWYgKCFfY2FsbGJhY2spCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBfY2FsbGJhY2stPmFwcGxpY2F0aW9uV2lsbEVu
dGVyQmFja2dyb3VuZCgpOworICAgIH0pOworfQorCiBAZW5kCiAKICNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0
aW5hdGlvbk1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgJKHJldmlzaW9uIDE2MzMwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIGlzUGxheWluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisKICAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VQbGF5YmFjaygpIG92ZXJyaWRlIHsgc3RvcCgpOyB9CisgICAg
dmlydHVhbCB2b2lkIHJlc3VtZVBsYXliYWNrKCkgb3ZlcnJpZGUgeyBzdGFydCgpOyB9CiAKICAg
ICB2aXJ0dWFsIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nh
bXBsZVJhdGU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2
aXNpb24gMTYzMzA4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTg4LDYgKzIxODgsMTYgQEAgdm9pZCBJbnRlcm5hbHM6OmVuZE1l
ZGlhU2Vzc2lvbkludGVycnVwdAogICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5lbmRJbnRlcnJ1cHRpb24oZmxhZ3MpOwogfQogCit2b2lkIEludGVybmFsczo6YXBwbGlj
YXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCkgY29uc3QKK3sKKyAgICBNZWRpYVNlc3Npb25NYW5h
Z2VyOjpzaGFyZWRNYW5hZ2VyKCkuYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kKCk7Cit9
CisKK3ZvaWQgSW50ZXJuYWxzOjphcHBsaWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQoKSBjb25z
dAoreworICAgIE1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hcHBsaWNhdGlv
bldpbGxFbnRlckJhY2tncm91bmQoKTsKK30KKwogdm9pZCBJbnRlcm5hbHM6OnNldE1lZGlhU2Vz
c2lvblJlc3RyaWN0aW9ucyhjb25zdCBTdHJpbmcmIG1lZGlhVHlwZVN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXN0cmljdGlvbnNTdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIE1lZGlh
U2Vzc2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSA9IE1lZGlhU2Vzc2lvbjo6Tm9uZTsKQEAgLTIy
MTUsNiArMjIyNSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRNZWRpYVNlc3Npb25SZXN0cmljdGkK
ICAgICAgICAgcmVzdHJpY3Rpb25zICs9IE1lZGlhU2Vzc2lvbk1hbmFnZXI6Ok1ldGFkYXRhUHJl
bG9hZGluZ05vdFBlcm1pdHRlZDsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocmVzdHJpY3Rp
b25zU3RyaW5nLCAiQXV0b1ByZWxvYWRpbmdOb3RQZXJtaXR0ZWQiKSkKICAgICAgICAgcmVzdHJp
Y3Rpb25zICs9IE1lZGlhU2Vzc2lvbk1hbmFnZXI6OkF1dG9QcmVsb2FkaW5nTm90UGVybWl0dGVk
OworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShyZXN0cmljdGlvbnNTdHJpbmcsICJCYWNrZ3Jv
dW5kUGxheWJhY2tOb3RQZXJtaXR0ZWQiKSkKKyAgICAgICAgcmVzdHJpY3Rpb25zICs9IE1lZGlh
U2Vzc2lvbk1hbmFnZXI6OkJhY2tncm91bmRQbGF5YmFja05vdFBlcm1pdHRlZDsKIAogICAgIE1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5hZGRSZXN0cmljdGlvbihtZWRpYVR5
cGUsIHJlc3RyaWN0aW9ucyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJ
KHJldmlzaW9uIDE2MzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJl
Z2luTWVkaWFTZXNzaW9uSW50ZXJydXB0aW9uKCk7CiAgICAgdm9pZCBlbmRNZWRpYVNlc3Npb25J
bnRlcnJ1cHRpb24oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRl
ckZvcmVncm91bmQoKSBjb25zdDsKKyAgICB2b2lkIGFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dy
b3VuZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TWVkaWFTZXNzaW9uUmVzdHJpY3Rpb25zKGNvbnN0
IFN0cmluZyYgbWVkaWFUeXBlLCBjb25zdCBTdHJpbmcmIHJlc3RyaWN0aW9ucywgRXhjZXB0aW9u
Q29kZSYgZWMpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbAkocmV2aXNpb24gMTYzMzA4KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNSArMjc0LDcgQEAKIAogICAgIHZvaWQgYmVn
aW5NZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oKTsKICAgICB2b2lkIGVuZE1lZGlhU2Vzc2lvbklu
dGVycnVwdGlvbihET01TdHJpbmcgZmxhZ3MpOworICAgIHZvaWQgYXBwbGljYXRpb25XaWxsRW50
ZXJGb3JlZ3JvdW5kKCk7CisgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxFbnRlckJhY2tncm91bmQo
KTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9u
cyhET01TdHJpbmcgbWVkaWFUeXBlLCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKIH07CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNjMzMjYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wMi0wMyAgRXJpYyBDYXJsc29uICA8ZXJpYy5j
YXJsc29uQGFwcGxlLmNvbT4KKworICAgICAgICBSZWZpbmUgTWVkaWFTZXNzaW9uIGludGVycnVw
dGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODEyNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
bWVkaWEvdmlkZW8tYmFja2dyb3VuZC1wbGF5YmFjay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIG1lZGlhL3ZpZGVvLWJhY2tncm91bmQtcGxheWJhY2suaHRtbDogQWRkZWQuCisgICAg
ICAgICogbWVkaWEvdmlkZW8taW50ZXJydXB0aW9uLWFjdGl2ZS13aGVuLWVsZW1lbnQtY3JlYXRl
ZC1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogbWVkaWEvdmlkZW8taW50ZXJydXB0
aW9uLWFjdGl2ZS13aGVuLWVsZW1lbnQtY3JlYXRlZC5odG1sOiBSZW1vdmVkLgorICAgICAgICAq
IG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13aXRoLXJlc3VtZS1hbGxvd2luZy1wbGF5Lmh0bWw6
CisgICAgICAgICogbWVkaWEvdmlkZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLW5vdC1hbGxv
d2luZy1wbGF5Lmh0bWw6CisKIDIwMTQtMDEtMzEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlmaWVkIG5hbWUgc2NvcGUgY3JlYXRpb24gZm9yIGZ1
bmN0aW9uIGV4cHJlc3Npb25zCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1iYWNrZ3Jv
dW5kLXBsYXliYWNrLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRp
YS92aWRlby1iYWNrZ3JvdW5kLXBsYXliYWNrLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWJhY2tncm91bmQtcGxheWJhY2stZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKyAgCitUZXN0IHN3aXRjaGluZyBhcHBs
aWNhdGlvbiBzdGF0ZSB3aGVuIDx2aWRlbz4gaXMgbm90IGFsbG93ZWQgdG8gcGxheSBpbiBiYWNr
Z3JvdW5kLgorCitSVU4oaW50ZXJuYWxzLnNldE1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucygndmlk
ZW8nLCAnQmFja2dyb3VuZFBsYXliYWNrTm90UGVybWl0dGVkJykpCisKK0VWRU5UKGNhbnBsYXl0
aHJvdWdoKQorRVZFTlQoY2FucGxheXRocm91Z2gpCisKK1JVTihhdWRpby5wbGF5KCkpCitSVU4o
dmlkZW8ucGxheSgpKQorRVZFTlQocGxheWluZykKK0VWRU5UKHBsYXlpbmcpCisKKyoqIFNpbXVs
YXRlIHN3aXRjaCB0byBiYWNrZ3JvdW5kLCB2aWRlbyBzaG91bGQgcGF1c2UuCitSVU4oaW50ZXJu
YWxzLmFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpKQorCitFVkVOVChwYXVzZSkKKwor
KiogMTAwbXMgdGltZXIgZmlyZWQuLi4KK0VYUEVDVEVEICh2aWRlby5wYXVzZWQgPT0gJ3RydWUn
KSBPSworRVhQRUNURUQgKGF1ZGlvLnBhdXNlZCA9PSAnZmFsc2UnKSBPSworCisqKiBTaW11bGF0
ZSBzd2l0Y2ggYmFjayB0byBmb3JlZ3JvdW5kLCB2aWRlbyBzaG91bGQgcmVzdW1lLgorUlVOKGlu
dGVybmFscy5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQoKSkKKworRVZFTlQocGxheWlu
ZykKKworKiogMTAwbXMgdGltZXIgZmlyZWQuLi4KK0VYUEVDVEVEICh2aWRlby5wYXVzZWQgPT0g
J2ZhbHNlJykgT0sKK0VYUEVDVEVEIChhdWRpby5wYXVzZWQgPT0gJ2ZhbHNlJykgT0sKKworRU5E
IE9GIFRFU1QKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8tYmFja2dyb3VuZC1wbGF5
YmFjay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWJhY2tncm91
bmQtcGxheWJhY2suaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL3ZpZGVv
LWJhY2tncm91bmQtcGxheWJhY2suaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBA
Cis8aHRtbD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48
L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9dmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAg
ICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgIHZhciBwbGF5Q291bnQgPSAwOworICAgICAgICAg
ICAgdmFyIHBsYXlUaHJvdWdoQ291bnQgPSAwOworICAgICAgICAgICAgdmFyIHN0YXRlID0gMDsK
KyAgICAgICAgICAgIHZhciBhdWRpbzsKKyAgICAgICAgICAgIHZhciB2aWRlbworCisgICAgICAg
ICAgICBmdW5jdGlvbiBsb2dFdmVudChldnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc29sZVdyaXRlKCJFVkVOVCgiICsgZXZ0LnR5cGUgKyAiKSIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmdW5jdGlvbiBjaGVja1N0YXRlKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxicj4qKiAxMDBtcyB0aW1lciBmaXJlZC4uLiIp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgICAgICAgICBjYXNl
ICJiYWNrZ3JvdW5kIjoKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5w
YXVzZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJhdWRpby5w
YXVzZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gImZvcmVncm91bmQi
OworICAgICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxicj4qKiBTaW11bGF0ZSBzd2l0
Y2ggYmFjayB0byBmb3JlZ3JvdW5kLCB2aWRlbyBzaG91bGQgcmVzdW1lLiIpOworICAgICAgICAg
ICAgICAgICAgICBydW4oImludGVybmFscy5hcHBsaWNhdGlvbldpbGxFbnRlckZvcmVncm91bmQo
KSIpOworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrU3RhdGUsIDEwMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgImZvcmVncm91bmQiOgorICAgICAgICAgICAg
ICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnBhdXNlZCIsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJhdWRpby5wYXVzZWQiLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBwbGF5aW5nKGV2dCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBsb2dFdmVudChldnQpOworICAgICAgICAgICAgICAgIGlmICgr
K3BsYXlDb3VudCAhPSAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICBjb25zb2xlV3JpdGUoIjxicj4qKiBTaW11bGF0ZSBzd2l0Y2ggdG8gYmFja2dyb3Vu
ZCwgdmlkZW8gc2hvdWxkIHBhdXNlLiIpOworICAgICAgICAgICAgICAgIHJ1bigiaW50ZXJuYWxz
LmFwcGxpY2F0aW9uV2lsbEVudGVyQmFja2dyb3VuZCgpIik7CisgICAgICAgICAgICAgICAgc2V0
VGltZW91dChjaGVja1N0YXRlLCAxMDApOworICAgICAgICAgICAgICAgIHN0YXRlID0gImJhY2tn
cm91bmQiOworICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNhbnBsYXl0aHJvdWdoKGV2dCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBsb2dFdmVudChldnQpOworICAgICAgICAgICAgICAgIGlmICgr
K3BsYXlUaHJvdWdoQ291bnQgPCAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgICAgICBydW4oImF1ZGlv
LnBsYXkoKSIpOworICAgICAgICAgICAgICAgIHJ1bigidmlkZW8ucGxheSgpIik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXJ0KCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZmFpbFRlc3QoJ1RoaXMgdGVzdCByZXF1aXJlcyB3aW5kb3cuaW50ZXJuYWxzLicpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgdmFyIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVv
Jyk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVy
KCJjYW5wbGF5dGhyb3VnaCIsIGNhbnBsYXl0aHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudHNbaV0uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHBsYXlpbmcpOworICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50c1tpXS5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIGxvZ0V2
ZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlkZW8gPSBlbGVtZW50
c1swXTsKKyAgICAgICAgICAgICAgICB2aWRlby5zcmMgPSBmaW5kTWVkaWFGaWxlKCJ2aWRlbyIs
ICJjb250ZW50L3Rlc3QiKTsKKworICAgICAgICAgICAgICAgIGF1ZGlvID0gZWxlbWVudHNbMV07
CisgICAgICAgICAgICAgICAgYXVkaW8uc3JjID0gZmluZE1lZGlhRmlsZSgiYXVkaW8iLCAiY29u
dGVudC9zaWxlbmNlIik7CisKKyAgICAgICAgICAgICAgICBydW4oImludGVybmFscy5zZXRNZWRp
YVNlc3Npb25SZXN0cmljdGlvbnMoJ3ZpZGVvJywgJ0JhY2tncm91bmRQbGF5YmFja05vdFBlcm1p
dHRlZCcpIik7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAiZm9yZWdyb3VuZCI7CisgICAgICAg
ICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zY3Jp
cHQ+CisgICAgPC9oZWFkPgorCisgICAgPGJvZHkgb25sb2FkPSJzdGFydCgpIj4KKyAgICAgICAg
PHZpZGVvIGNvbnRyb2xzIGlkPSJvbmUiPjwvdmlkZW8+CisgICAgICAgIDx2aWRlbyBjb250cm9s
cyBpZD0idHdvIj48L3ZpZGVvPgorICAgICAgICA8cD5UZXN0IHN3aXRjaGluZyBhcHBsaWNhdGlv
biBzdGF0ZSB3aGVuICZsdDt2aWRlbyZndDsgaXMgbm90IGFsbG93ZWQgdG8gcGxheSBpbiBiYWNr
Z3JvdW5kLjwvcD4KKyAgICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9tZWRp
YS92aWRlby1pbnRlcnJ1cHRpb24tYWN0aXZlLXdoZW4tZWxlbWVudC1jcmVhdGVkLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1pbnRlcnJ1cHRpb24t
YWN0aXZlLXdoZW4tZWxlbWVudC1jcmVhdGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTYzMzA4
KQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdmlkZW8taW50ZXJydXB0aW9uLWFjdGl2ZS13aGVuLWVs
ZW1lbnQtY3JlYXRlZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUgKzAsMCBA
QAotVGVzdCBhIDx2aWRlbz4gZWxlbWVudCBjcmF0ZWQgZHVyaW5nIGludGVycnVwdGlvbiBiZWhh
dmVzIGNvcnJlY3RseS4KLQotUlVOKGludGVybmFscy5iZWdpbk1lZGlhU2Vzc2lvbkludGVycnVw
dGlvbigpKQotUlVOKHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKSkKLVJV
Tihkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpZGVvKSkKLUVWRU5UKGNhbnBsYXl0aHJvdWdo
KQotCi1SVU4odmlkZW8ucGxheSgpKQotMTAwbXMgdGltZXIgZmlyZWQuLi4KLUVYUEVDVEVEICh2
aWRlby5wYXVzZWQgPT0gJ3RydWUnKSBPSwotUlVOKGludGVybmFscy5lbmRNZWRpYVNlc3Npb25J
bnRlcnJ1cHRpb24oJ01heVJlc3VtZVBsYXlpbmcnKSkKLUVWRU5UKHBsYXlpbmcpCi0KLUVORCBP
RiBURVNUCi0KSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWludGVycnVwdGlvbi1hY3Rp
dmUtd2hlbi1lbGVtZW50LWNyZWF0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9t
ZWRpYS92aWRlby1pbnRlcnJ1cHRpb24tYWN0aXZlLXdoZW4tZWxlbWVudC1jcmVhdGVkLmh0bWwJ
KHJldmlzaW9uIDE2MzMwOCkKKysrIExheW91dFRlc3RzL21lZGlhL3ZpZGVvLWludGVycnVwdGlv
bi1hY3RpdmUtd2hlbi1lbGVtZW50LWNyZWF0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw1
NiArMCwwIEBACi08aHRtbD4KLSAgICA8aGVhZD4KLSAgICAgICAgPHNjcmlwdCBzcmM9bWVkaWEt
ZmlsZS5qcz48L3NjcmlwdD4KLSAgICAgICAgPHNjcmlwdCBzcmM9dmlkZW8tdGVzdC5qcz48L3Nj
cmlwdD4KLSAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgIHZhciBzdGF0ZSA9IDA7Ci0KLSAg
ICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrU3RhdGUoKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGNvbnNvbGVXcml0ZSgiMTAwbXMgdGltZXIgZmlyZWQuLi4iKTsKLSAgICAgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnBhdXNlZCIsIHRydWUpOwotICAgICAgICAgICAgICAg
IHN0YXRlID0gInJlc3VtaW5nIjsKLSAgICAgICAgICAgICAgICBydW4oImludGVybmFscy5lbmRN
ZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oJ01heVJlc3VtZVBsYXlpbmcnKSIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBwbGF5aW5nKCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gInJlc3VtaW5nIikKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGZhaWxUZXN0KCI8Yj5QbGF5YmFjayBzdGFydGVkIGR1cmluZyBpbnRlcnJ1cHRpb24uPC9i
PiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIiKTsKLSAgICAgICAgICAgICAgICBlbmRUZXN0
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGNhbnBsYXl0aHJvdWdo
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwotICAg
ICAgICAgICAgICAgIHJ1bigidmlkZW8ucGxheSgpIik7Ci0gICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChjaGVja1N0YXRlLCAxMDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5j
dGlvbiBzdGFydCgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cu
aW50ZXJuYWxzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxUZXN0KCdUaGlzIHRlc3QgcmVx
dWlyZXMgd2luZG93LmludGVybmFscy4nKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBydW4oImludGVybmFscy5iZWdpbk1l
ZGlhU2Vzc2lvbkludGVycnVwdGlvbigpIik7OwotICAgICAgICAgICAgICAgIHJ1bigidmlkZW8g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpIik7Ci0gICAgICAgICAgICAgICAgcnVu
KCJkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHZpZGVvKSIpOwotICAgICAgICAgICAgICAgIHdh
aXRGb3JFdmVudCgnY2FucGxheXRocm91Z2gnLCBjYW5wbGF5dGhyb3VnaCk7Ci0gICAgICAgICAg
ICAgICAgd2FpdEZvckV2ZW50KCdwbGF5aW5nJywgcGxheWluZyk7Ci0gICAgICAgICAgICAgICAg
dmlkZW8uc3JjID0gZmluZE1lZGlhRmlsZSgidmlkZW8iLCAiY29udGVudC90ZXN0Iik7Ci0gICAg
ICAgICAgICAgICAgc3RhdGUgPSAiaW50ZXJydXB0ZWQiOwotICAgICAgICAgICAgfQotICAgICAg
ICA8L3NjcmlwdD4KLSAgICA8L2hlYWQ+Ci0KLSAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0KCkiPgot
ICAgICAgICA8cD5UZXN0IGEgJmx0O3ZpZGVvJmd0OyBlbGVtZW50IGNyYXRlZCBkdXJpbmcgaW50
ZXJydXB0aW9uIGJlaGF2ZXMgY29ycmVjdGx5LjwvcD4KLSAgICA8L2JvZHk+Ci08L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtYWxs
b3dpbmctcGxheS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEv
dmlkZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLWFsbG93aW5nLXBsYXktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxNjMzMDgpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1pbnRlcnJ1cHRp
b24td2l0aC1yZXN1bWUtYWxsb3dpbmctcGxheS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTIsMTMgKzIsMTggQEAKIFRlc3QgdGhhdCBwbGF5KCkgZHVyaW5nIGludGVycnVwdGlvbiBk
b2VzIG5vdGhpbmcsIGVuZGluZyBpbnRlcnJ1cHRpb24gYWxsb3dzIHBsYXliYWNrIHRvIHJlc3Vt
ZS4KIAogRVZFTlQoY2FucGxheXRocm91Z2gpCitSVU4odmlkZW8ucGxheSgpKQogCitFVkVOVChw
bGF5aW5nKQorRVhQRUNURUQgKHZpZGVvLnBhdXNlZCA9PSAnZmFsc2UnKSBPSwogUlVOKGludGVy
bmFscy5iZWdpbk1lZGlhU2Vzc2lvbkludGVycnVwdGlvbigpKQotUlVOKHZpZGVvLnBsYXkoKSkK
KwogMTAwbXMgdGltZXIgZmlyZWQuLi4KIEVYUEVDVEVEICh2aWRlby5wYXVzZWQgPT0gJ3RydWUn
KSBPSwogUlVOKGludGVybmFscy5lbmRNZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oJ01heVJlc3Vt
ZVBsYXlpbmcnKSkKKwogRVZFTlQocGxheWluZykKK0VYUEVDVEVEICh2aWRlby5wYXVzZWQgPT0g
J2ZhbHNlJykgT0sKIAogRU5EIE9GIFRFU1QKIApJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdmlk
ZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLWFsbG93aW5nLXBsYXkuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtYWxs
b3dpbmctcGxheS5odG1sCShyZXZpc2lvbiAxNjMzMDgpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92
aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtYWxsb3dpbmctcGxheS5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC03LDMzICs3LDM0IEBACiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrU3Rh
dGUoKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiMTAwbXMg
dGltZXIgZmlyZWQuLi4iKTsKLSAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnBh
dXNlZCIsIHRydWUpOwotICAgICAgICAgICAgICAgIHN0YXRlID0gInJlc3VtaW5nIjsKLSAgICAg
ICAgICAgICAgICBydW4oImludGVybmFscy5lbmRNZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oJ01h
eVJlc3VtZVBsYXlpbmcnKSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlv
biBwbGF5aW5nKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0g
InJlc3VtaW5nIikKLSAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChz
dGF0ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgInBsYXlpbmciOgorICAgICAgICAgICAgICAg
ICAgICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnBhdXNlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUgPSAiaW50ZXJydXB0ZWQiOworICAgICAgICAgICAgICAgICAgICBydW4oImlu
dGVybmFscy5iZWdpbk1lZGlhU2Vzc2lvbkludGVycnVwdGlvbigpIik7OworICAgICAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGNoZWNrU3RhdGUsIDEwMCk7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiIik7Ci0gICAgICAgICAgICAgICAgICAgIGZhaWxUZXN0KCI8Yj5QbGF5
YmFjayBzdGFydGVkIGR1cmluZyBpbnRlcnJ1cHRpb24uPC9iPiIpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgImludGVycnVwdGVkIjoKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCIx
MDBtcyB0aW1lciBmaXJlZC4uLiIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQo
InZpZGVvLnBhdXNlZCIsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICJyZXN1
bWluZyI7CisgICAgICAgICAgICAgICAgICAgIHJ1bigiaW50ZXJuYWxzLmVuZE1lZGlhU2Vzc2lv
bkludGVycnVwdGlvbignTWF5UmVzdW1lUGxheWluZycpIik7CisgICAgICAgICAgICAgICAgICAg
IGNvbnNvbGVXcml0ZSgiIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgInJlc3VtaW5nIjoKKyAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVk
KCJ2aWRlby5wYXVzZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0
ZSgiIik7CisgICAgICAgICAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29uc29sZVdy
aXRlKCIiKTsKLSAgICAgICAgICAgICAgICBlbmRUZXN0KCk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGZ1bmN0aW9uIGNhbnBsYXl0aHJvdWdoKCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwotCi0gICAgICAgICAgICAgICAgcnVuKCJpbnRl
cm5hbHMuYmVnaW5NZWRpYVNlc3Npb25JbnRlcnJ1cHRpb24oKSIpOzsKLSAgICAgICAgICAgICAg
ICBzdGF0ZSA9ICJpbnRlcnJ1cHRlZCI7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAicGxheWlu
ZyI7CiAgICAgICAgICAgICAgICAgcnVuKCJ2aWRlby5wbGF5KCkiKTsKLSAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGNoZWNrU3RhdGUsIDEwMCk7CisgICAgICAgICAgICAgICAgY29uc29sZVdy
aXRlKCIiKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnQoKQpA
QCAtNDUsNyArNDYsNyBAQAogCiAgICAgICAgICAgICAgICAgZmluZE1lZGlhRWxlbWVudCgpOwog
ICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnY2FucGxheXRocm91Z2gnLCBjYW5wbGF5dGhy
b3VnaCk7Ci0gICAgICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdwbGF5aW5nJywgcGxheWluZyk7
CisgICAgICAgICAgICAgICAgd2FpdEZvckV2ZW50KCdwbGF5aW5nJywgY2hlY2tTdGF0ZSk7CiAg
ICAgICAgICAgICAgICAgdmlkZW8uc3JjID0gZmluZE1lZGlhRmlsZSgidmlkZW8iLCAiY29udGVu
dC90ZXN0Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0
VGVzdHMvbWVkaWEvdmlkZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLW5vdC1hbGxvd2luZy1w
bGF5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1p
bnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXktZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAxNjMzMDgpCisrKyBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1pbnRlcnJ1cHRpb24t
d2l0aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEzICsxLDE2IEBACiAKLVRlc3QgdGhhdCBwbGF5KCkgZHVyaW5nIGludGVycnVwdGlv
biBkb2VzIG5vdGhpbmcsIGVuZGluZyBpbnRlcnJ1cHRpb24gZG9lcyBub3QgYWxsb3cgcGxheWJh
Y2sgdG8gcmVzdW1lLgorVGVzdCB0aGF0IHBsYXliYWNrIGlzIHBhdXNlZCBieSBhbiBpbnRlcnJ1
cHRpb24sIGFuZCB0aGF0IGVuZGluZyB0aGUgaW50ZXJydXB0aW9uIGRvZXMgYXV0b21hdGljYWxs
eSByZXN1bWUgcGxheWJhY2suCiAKIEVWRU5UKGNhbnBsYXl0aHJvdWdoKQorUlVOKHZpZGVvLnBs
YXkoKSkKIAorRVZFTlQocGxheWluZykKIFJVTihpbnRlcm5hbHMuYmVnaW5NZWRpYVNlc3Npb25J
bnRlcnJ1cHRpb24oKSkKLVJVTih2aWRlby5wbGF5KCkpCisKIDEwMG1zIHRpbWVyIGZpcmVkLi4u
CiBFWFBFQ1RFRCAodmlkZW8ucGF1c2VkID09ICd0cnVlJykgT0sKIFJVTihpbnRlcm5hbHMuZW5k
TWVkaWFTZXNzaW9uSW50ZXJydXB0aW9uKCcnKSkKKwogMTAwbXMgdGltZXIgZmlyZWQuLi4KIEVY
UEVDVEVEICh2aWRlby5wYXVzZWQgPT0gJ3RydWUnKSBPSwogCkluZGV4OiBMYXlvdXRUZXN0cy9t
ZWRpYS92aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXkuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS92aWRlby1pbnRlcnJ1cHRpb24td2l0
aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXkuaHRtbAkocmV2aXNpb24gMTYzMzA4KQorKysgTGF5
b3V0VGVzdHMvbWVkaWEvdmlkZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLW5vdC1hbGxvd2lu
Zy1wbGF5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcsMTUgKzcsMTMgQEAKIAogICAgICAgICAg
ICAgZnVuY3Rpb24gcGxheWluZygpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0YXRlID09ICJyZXN1bWluZyIpCi0gICAgICAgICAgICAgICAgICAgIGZhaWxUZXN0KCI8Yj5Q
bGF5YmFjayBzdGFydGVkIGFmdGVyIGludGVycnVwdGlvbi48L2I+Iik7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBmYWlsVGVzdCgiPGI+UGxheWJhY2sgc3RhcnRl
ZCBkdXJpbmcgaW50ZXJydXB0aW9uLjwvYj4iKTsKKyAgICAgICAgICAgICAgICBydW4oImludGVy
bmFscy5iZWdpbk1lZGlhU2Vzc2lvbkludGVycnVwdGlvbigpIik7OworICAgICAgICAgICAgICAg
IHNldFRpbWVvdXQoY2hlY2tTdGF0ZSwgMTAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgZnVuY3Rpb24gY2hlY2tTdGF0ZSgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29uc29sZVdyaXRlKCIxMDBtcyB0aW1lciBmaXJlZC4uLiIpOworICAgICAgICAgICAgICAgIGNv
bnNvbGVXcml0ZSgiPGJyPjEwMG1zIHRpbWVyIGZpcmVkLi4uIik7CiAgICAgICAgICAgICAgICAg
dGVzdEV4cGVjdGVkKCJ2aWRlby5wYXVzZWQiLCB0cnVlKTsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0YXRlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAiaW50ZXJydXB0ZWQiOgpAQCAtMzIs
MTIgKzMwLDkgQEAKIAogICAgICAgICAgICAgZnVuY3Rpb24gY2FucGxheXRocm91Z2goKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiIik7Ci0KLSAgICAgICAg
ICAgICAgICBydW4oImludGVybmFscy5iZWdpbk1lZGlhU2Vzc2lvbkludGVycnVwdGlvbigpIik7
OwogICAgICAgICAgICAgICAgIHN0YXRlID0gImludGVycnVwdGVkIjsKICAgICAgICAgICAgICAg
ICBydW4oInZpZGVvLnBsYXkoKSIpOwotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tT
dGF0ZSwgMTAwKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBmdW5jdGlvbiBzdGFydCgpCkBAIC01Nyw2ICs1Miw2IEBACiAK
ICAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0KCkiPgogICAgICAgICA8dmlkZW8gY29udHJvbHMgPjwv
dmlkZW8+Ci0gICAgICAgIDxwPlRlc3QgdGhhdCBwbGF5KCkgZHVyaW5nIGludGVycnVwdGlvbiBk
b2VzIG5vdGhpbmcsIGVuZGluZyBpbnRlcnJ1cHRpb24gZG9lcyBub3QgYWxsb3cgcGxheWJhY2sg
dG8gcmVzdW1lLjwvcD4KKyAgICAgICAgPHA+VGVzdCB0aGF0IHBsYXliYWNrIGlzIHBhdXNlZCBi
eSBhbiBpbnRlcnJ1cHRpb24sIGFuZCB0aGF0IGVuZGluZyB0aGUgaW50ZXJydXB0aW9uIGRvZXMg
YXV0b21hdGljYWxseSByZXN1bWUgcGxheWJhY2suPC9wPgogICAgIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>