<?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>94068</bug_id>
          
          <creation_ts>2012-08-14 22:11:08 -0700</creation_ts>
          <short_desc>[chromium] Convert WebAnimationCurve subtypes into pure virtual</short_desc>
          <delta_ts>2012-08-23 17:35:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>695734</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-14 22:11:08 -0700</bug_when>
    <thetext>[chromium] Convert WebAnimationCurve subtypes into pure virtual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695736</commentid>
    <comment_count>1</comment_count>
      <attachid>158501</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-14 22:12:00 -0700</bug_when>
    <thetext>Created attachment 158501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696700</commentid>
    <comment_count>2</comment_count>
      <attachid>158703</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-15 21:06:14 -0700</bug_when>
    <thetext>Created attachment 158703
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696705</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-15 21:08:57 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700823</commentid>
    <comment_count>4</comment_count>
      <attachid>158703</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-21 09:17:54 -0700</bug_when>
    <thetext>Comment on attachment 158703
rebased

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

&gt; Source/Platform/chromium/public/WebAnimation.h:53
&gt; -    // The caller takes ownership of the returned valuev
&gt; -    WEBKIT_EXPORT static WebAnimation* create(const WebAnimationCurve&amp;, TargetProperty);
&gt; +    // The caller takes ownership of the returned value.
&gt; +    WEBKIT_EXPORT static WebAnimation* create(WebAnimationCurve*, TargetProperty);

If you&apos;re going to change the parameter type here, I think you also need some indication about the ownership/lifetime guarantees on the WebAnimationCurve, either via a comment or by reverting the signature change.  Previously it was a const ref, which I thought was much more clear.

&gt; Source/WebKit/chromium/src/WebAnimationImpl.h:40
&gt; +    explicit WebAnimationImpl(WebAnimationCurve*, int animationId, int groupId, TargetProperty);

s/explicit// ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701201</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-21 15:37:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 158703 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158703&amp;action=review
&gt; 
&gt; &gt; Source/Platform/chromium/public/WebAnimation.h:53
&gt; &gt; -    // The caller takes ownership of the returned valuev
&gt; &gt; -    WEBKIT_EXPORT static WebAnimation* create(const WebAnimationCurve&amp;, TargetProperty);
&gt; &gt; +    // The caller takes ownership of the returned value.
&gt; &gt; +    WEBKIT_EXPORT static WebAnimation* create(WebAnimationCurve*, TargetProperty);
&gt; 
&gt; If you&apos;re going to change the parameter type here, I think you also need some indication about the ownership/lifetime guarantees on the WebAnimationCurve, either via a comment or by reverting the signature change.  Previously it was a const ref, which I thought was much more clear.
&gt; 

I&apos;ve already seen one leak very similar to this.  We could adopt a convention that parameters that don&apos;t take ownership have a const ref and parameters that do take ownership take a pointer.  I think that would work well for everything except for WebLayerTreeView::setRootLayer(), which doesn&apos;t take ownership of the parameter but does let you pass in NULL as a value.  It&apos;s possible that we don&apos;t need that any more, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701204</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-21 15:40:43 -0700</bug_when>
    <thetext>This might also look weird for the WebLayer hierarchy APIs.  None of them take ownership, but currently they look like:

setMaskLayer(WebLayer*);
setChildren(WebVector&lt;WebLayer*&gt;);

We do need to null out mask layers. We could have a clear..() call in addition.

WebVector&lt;const WebLayer&amp;&gt; would be possible, but it just looks a little odd - I&apos;m not completely sure why but something about it is strange.

What would you prefer - const refs everywhere, or document ownership semantics function-by-function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702301</commentid>
    <comment_count>7</comment_count>
      <attachid>158703</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-22 13:54:40 -0700</bug_when>
    <thetext>Comment on attachment 158703
rebased

I&apos;ll update this patch (and our other APIs) to have parameters that don&apos;t transfer ownership be by const ref where possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703561</commentid>
    <comment_count>8</comment_count>
      <attachid>160286</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-23 17:05:45 -0700</bug_when>
    <thetext>Created attachment 160286
make non-ownership-transfer functions take const refs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703581</commentid>
    <comment_count>9</comment_count>
      <attachid>160286</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-23 17:24:54 -0700</bug_when>
    <thetext>Comment on attachment 160286
make non-ownership-transfer functions take const refs

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

R=me.

&gt; Source/WebKit/chromium/src/WebAnimationImpl.h:41
&gt; +    explicit WebAnimationImpl(const WebAnimationCurve&amp;, int animationId, int groupId, TargetProperty);
&gt; +    virtual ~WebAnimationImpl();

s/explicit// &gt;;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703587</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-23 17:35:38 -0700</bug_when>
    <thetext>Committed r126513: &lt;http://trac.webkit.org/changeset/126513&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158501</attachid>
            <date>2012-08-14 22:12:00 -0700</date>
            <delta_ts>2012-08-15 21:06:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94068-20120814221127.patch</filename>
            <type>text/plain</type>
            <size>64468</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjExCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBjNzBkNTFiY2JlNGE0
Y2IzM2RiZGE1MTYxYTI3MDQzYmRhMzBhZGFhLi45ZDNhODVmOGFhOWVlODI1MDY0ZjUwYTlhNTM1
OTI4MjI4MjlkYzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wOC0xNCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ29udmVydCBXZWJBbmltYXRpb25DdXJ2ZSBzdWJ0eXBlcyBpbnRvIHB1cmUgdmlydHVhbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQwNjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNocm9taXVt
L3B1YmxpYy9XZWJBbmltYXRpb24uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpX
ZWJBbmltYXRpb24pOgorICAgICAgICAoV2ViQW5pbWF0aW9uKToKKyAgICAgICAgKiBjaHJvbWl1
bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOgorICAgICAgICAoV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmU6On5XZWJGbG9hdEFu
aW1hdGlvbkN1cnZlKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUuaDoKKyAgICAgICAgKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6On5XZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSk6CisKIDIwMTItMDgtMDggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIE1vdmUgc2Nyb2xsYmFyIHBvaW50ZXIgaW50
byBXZWJTY3JvbGxiYXJUaGVtZVBhaW50ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzJlYTQ3YTRhNzdiYmE2
OTQ3NWZkYmUwMDJhMzkzZmNiNTkwZmI1Li5mYWM2YmNlNzg1YjM1N2I4ZmE3MTllMDViM2RlYjBk
OWQ1Mjk1NDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDgtMTQgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENv
bnZlcnQgV2ViQW5pbWF0aW9uQ3VydmUgc3VidHlwZXMgaW50byBwdXJlIHZpcnR1YWwKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MDY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVXZWJBbmltYXRpb24pOgorCiAyMDEyLTA4LTA5ICBCcnVubyBkZSBP
bGl2ZWlyYSBBYmluYWRlciAgPGJydW5vLmFiaW5hZGVyQGJhc3lza29tLmNvbT4KIAogICAgICAg
ICBbY3NzMy10ZXh0XSBBZGQgc3Vwb3J0IGZvciAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1saW5l
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZmOTVhYzlkZjE3M2RhOGRiMmU2ZDcxOTJk
NjM5NmMxY2RjNzRkNmEuLmI2MGVhZTk4MDYwZjU5MjI0MDY0Yzk5MTIxMDVkYWU5ZDdjN2QzZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTItMDgtMTQg
IEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENvbnZlcnQgV2ViQW5pbWF0aW9uQ3VydmUgc3VidHlwZXMgaW50byBwdXJlIHZpcnR1YWwK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MDY4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwOgorICAgICAgICAqIHNyYy9XZWJBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJBbmltYXRpb246OmluaXRpYWxpemUpOgorICAgICAgICAqIHNyYy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlSW1wbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjp+V2ViRmxvYXRB
bmltYXRpb25DdXJ2ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlSW1wbDo6dHlwZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJ
bXBsOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6
Z2V0VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6
Y2xvbmVUb0NDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIHNyYy9XZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdGVzdHMvV2ViQW5pbWF0aW9uVGVz
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYkZsb2F0
QW5pbWF0aW9uQ3VydmVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAg
ICogdGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6VEVTVCk6CisKIDIwMTItMDgtMDkgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogYWRkaXRpb25hbCBjaHJvbWl1bSBzaWduYXR1
cmUgZm9yIG9wZW5DdXJzb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViQW5pbWF0aW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YkFuaW1hdGlvbi5oCmluZGV4IDBkYjk4YWQzNTdkNzM5NjdlZWM4OGM5NzBiOTI2YjM3NTJmNGFh
YWEuLjJhMjQ5NjU3MWY3Mjc2YTRkYmFkNzE3MTFkMmFjMzZlODgwNWE4OGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgKKysrIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaApAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAgICAgICAgIFRhcmdldFByb3BlcnR5T3BhY2l0eQogICAgIH07CiAKLSAg
ICBXZWJBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBUYXJnZXRQcm9w
ZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICBXZWJBbmltYXRpb24oV2ViQW5pbWF0aW9uQ3VydmUq
IGN1cnZlLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIGlu
aXRpYWxpemUoY3VydmUsIHRhcmdldFByb3BlcnR5KTsKICAgICB9CkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICAvLyBBbiBhbmltYXRpb25JZCBpcyBlZmZlY3RpdmVseSB0aGUgYW5pbWF0
aW9uJ3MgbmFtZSwgYW5kIGl0IGlzIG5vdCB1bmlxdWUuCiAgICAgLy8gQW5pbWF0aW9ucyB3aXRo
IHRoZSBzYW1lIGdyb3VwSWQgYXJlIHJ1biBhdCB0aGUgc2FtZSB0aW1lLiBBbiBhbmltYXRpb24K
ICAgICAvLyBtYXkgYmUgdW5pcXVlbHkgaWRlbnRpZmllZCBieSBhIGNvbWJpbmF0aW9uIG9mIGdy
b3VwSWQgYW5kIHRhcmdldCBwcm9wZXJ0eS4KLSAgICBXZWJBbmltYXRpb24oY29uc3QgV2ViQW5p
bWF0aW9uQ3VydmUmIGN1cnZlLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBUYXJnZXRQ
cm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICBXZWJBbmltYXRpb24oV2ViQW5pbWF0aW9uQ3Vy
dmUqIGN1cnZlLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0
YXJnZXRQcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemUoY3VydmUsIGFuaW1hdGlv
bklkLCBncm91cElkLCB0YXJnZXRQcm9wZXJ0eSk7CiAgICAgfQpAQCAtOTEsOCArOTEsOCBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlh
bGl6ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYsIFRhcmdldFByb3BlcnR5KTsKLSAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYsIGludCBh
bmltYXRpb25JZCwgaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5KTsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgaW5pdGlhbGl6ZShXZWJBbmltYXRpb25DdXJ2ZSosIFRhcmdldFByb3BlcnR5KTsK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShXZWJBbmltYXRpb25DdXJ2ZSosIGlu
dCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQsIFRhcmdldFByb3BlcnR5KTsKICAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgZGVzdHJveSgpOwogCiAgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpD
Q0FjdGl2ZUFuaW1hdGlvbj4gbV9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGU5ZWNjMWVkYTQxOThlYzM2
MzE0ZjQ0MDcyNTNkZjAzYzU3ODQ1OGEuLmVjMDVkMzc5M2ZjMGI5NjYyN2FmZTQzMTZmYzcwMjI2
YjM5NmFjZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
QW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YkFuaW1hdGlvbkN1cnZlLmgKQEAgLTI2LDE5ICsyNiwxMSBAQAogI2RlZmluZSBXZWJBbmltYXRp
b25DdXJ2ZV9oCiAKICNpbmNsdWRlICJXZWJDb21tb24uaCIKLSNpbmNsdWRlICJXZWJOb25Db3B5
YWJsZS5oIgogCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0FuaW1hdGlvbkN1
cnZlOwotfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQW5pbWF0aW9uQ3VydmUg
OiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworY2xhc3MgV2ViQW5pbWF0aW9uQ3VydmUgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfldlYkFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKQEAgLTUwLDEyICs0
MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIFRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcgogICAgIH07
CiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICB2aXJ0dWFsIG9wZXJhdG9yIFBhc3NP
d25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdCA9IDA7Ci0jZW5kaWYKKyAg
ICBlbnVtIEFuaW1hdGlvbkN1cnZlVHlwZSB7CisgICAgICAgIEFuaW1hdGlvbkN1cnZlVHlwZUZs
b2F0LAorICAgICAgICBBbmltYXRpb25DdXJ2ZVR5cGVUcmFuc2Zvcm0sCisgICAgfTsKIAotcHJv
dGVjdGVkOgotICAgIFdlYkFuaW1hdGlvbkN1cnZlKCkgeyB9CisgICAgdmlydHVhbCBBbmltYXRp
b25DdXJ2ZVR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFu
aW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0
QW5pbWF0aW9uQ3VydmUuaAppbmRleCA2NWE3ZjI0MzhjZmFkMmYyYjdjYjYxZTcxZjkzNzlhMTg3
Njc5YzZkLi5iNTZiM2JkNGQ5MjkwZGZmODM1NGUyM2M3MDAwMWViYWNlY2EwZWUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5pbWF0
aW9uQ3VydmUuaApAQCAtMjksNDMgKzI5LDI0IEBACiAKICNpbmNsdWRlICJXZWJDb21tb24uaCIK
ICNpbmNsdWRlICJXZWJGbG9hdEtleWZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0
ci5oIgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0FuaW1hdGlvbkN1cnZl
OwotY2xhc3MgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOwotfQogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogLy8gQSBrZXlmcmFtZWQgZmxvYXQgYW5pbWF0aW9uIGN1cnZlLgogY2xhc3Mg
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBXZWJBbmltYXRpb25DdXJ2ZSB7CiBwdWJs
aWM6Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgaW5pdGlhbGl6ZSgpOyB9Ci0gICAg
dmlydHVhbCB+V2ViRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgZGVzdHJveSgpOyB9CisgICAgV0VC
S0lUX0VYUE9SVCBzdGF0aWMgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSogY3JlYXRlKCk7CisKKyAg
ICB2aXJ0dWFsIH5XZWJGbG9hdEFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKICAgICAvLyBBZGRzIHRo
ZSBrZXlmcmFtZSB3aXRoIHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiAoZWFzZSkuCi0gICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJik7Ci0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgVGltaW5nRnVuY3Rp
b25UeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgVGltaW5n
RnVuY3Rpb25UeXBlKSA9IDA7CiAgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3Rv
bSwgYmV6aWVyIHRpbWluZyBmdW5jdGlvbi4gTm90ZSwgaXQgaXMKICAgICAvLyBhc3N1bWVkIHRo
YXQgeDAgPSB5MCA9IDAsIGFuZCB4MyA9IHkzID0gMS4KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91Ymxl
IHgyLCBkb3VibGUgeTIpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBmbG9hdCBnZXRWYWx1ZShkb3Vi
bGUgdGltZSkgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICB2aXJ0dWFs
IG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdDsK
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7
Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
KGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgy
LCBkb3VibGUgeTIpID0gMDsKIAotICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBtX3ByaXZhdGU7CisgICAgdmlydHVhbCBmbG9hdCBn
ZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmgKaW5kZXggOTljYjY3MDU1ZDc2ZTc3Mzk0MDNiODdm
MDI1YWNkYmQ4MTI4YzczOS4uNjk5ZTQ5OGM4MjRhMTk5M2I1ZGI4YmUxMGY2NzA4ZjViZTQyOThj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZS5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaApAQCAtMjgsNDUgKzI4LDI3IEBACiAjaW5jbHVk
ZSAiV2ViQW5pbWF0aW9uQ3VydmUuaCIKIAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotI2luY2x1
ZGUgIldlYlByaXZhdGVPd25QdHIuaCIKICNpbmNsdWRlICJXZWJUcmFuc2Zvcm1LZXlmcmFtZS5o
IgogI2luY2x1ZGUgIldlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKLSNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIENDQW5pbWF0aW9uQ3VydmU7Ci1jbGFzcyBDQ0tleWZyYW1lZFRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOwotfQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gQSBr
ZXlmcmFtZWQgdHJhbnNmb3JtIGFuaW1hdGlvbiBjdXJ2ZS4KIGNsYXNzIFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlIDogcHVibGljIFdlYkFuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKLSAgICBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsgaW5pdGlhbGl6ZSgpOyB9Ci0gICAgdmlydHVh
bCB+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IGRlc3Ryb3koKTsgfQorICAgIFdFQktJ
VF9FWFBPUlQgc3RhdGljIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjcmVhdGUoKTsKKwor
ICAgIHZpcnR1YWwgfldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKICAgICAvLyBB
ZGRzIHRoZSBrZXlmcmFtZSB3aXRoIHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiAoZWFzZSku
Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYp
OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUm
LCBUaW1pbmdGdW5jdGlvblR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgV2ViVHJh
bnNmb3JtS2V5ZnJhbWUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJUcmFu
c2Zvcm1LZXlmcmFtZSYsIFRpbWluZ0Z1bmN0aW9uVHlwZSkgPSAwOwogICAgIC8vIEFkZHMgdGhl
IGtleWZyYW1lIHdpdGggYSBjdXN0b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24uIE5vdGUsIGl0
IGlzCiAgICAgLy8gYXNzdW1lZCB0aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5MyA9IDEuCi0g
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIGRv
dWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Mik7Ci0KLSAgICBXRUJLSVRf
RVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25z
dDsKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIHZpcnR1YWwgb3BlcmF0b3IgUGFz
c093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0OwotI2VuZGlmCisgICAg
dmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIGRvdWJsZSB4MSwg
ZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikgPSAwOwogCi1wcm90ZWN0ZWQ6Ci0gICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
ZGVzdHJveSgpOworICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUo
ZG91YmxlIHRpbWUpIGNvbnN0ID0gMDsKIAotICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6
Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gbV9wcml2YXRlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGls
LmNwcAppbmRleCBmOTM2OTVlMDQ1MDExN2I0MjYzNWQ3NDZiZjZlZWFkMjY0MjEyZjJlLi4zZGNm
OTRmMTU2OWRlODEwNDBkZDNhOWJlMWVmNjU2ZTM2NThmODMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0
aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Fu
aW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHAKQEAgLTEyMywxNiArMTIzLDE2IEBAIFdlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMmIHRyYW5zCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJh
bWUsIGNsYXNzIEN1cnZlPgotYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1
bmN0aW9uKEN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSwg
Y29uc3QgVmFsdWUqIGxhc3RWYWx1ZSwgV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlIHRpbWluZ0Z1bmN0aW9uVHlwZSwgY29uc3QgRmxvYXRTaXplJikKK2Jvb2wg
YXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbihDdXJ2ZSogY3VydmUsIGRv
dWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUs
IFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5j
dGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYpCiB7Ci0gICAgY3VydmUuYWRkKEtleWZyYW1lKGtl
eVRpbWUsIHZhbHVlLT52YWx1ZSgpKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICBjdXJ2ZS0+
YWRkKEtleWZyYW1lKGtleVRpbWUsIHZhbHVlLT52YWx1ZSgpKSwgdGltaW5nRnVuY3Rpb25UeXBl
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBL
ZXlmcmFtZSwgY2xhc3MgQ3VydmU+Ci1ib29sIGFwcGVuZEtleWZyYW1lV2l0aEN1c3RvbUJlemll
clRpbWluZ0Z1bmN0aW9uKEN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVl
KiB2YWx1ZSwgY29uc3QgVmFsdWUqIGxhc3RWYWx1ZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRv
dWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBGbG9hdFNpemUmKQorYm9vbCBhcHBlbmRLZXlmcmFt
ZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbihDdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlU
aW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIGRvdWJsZSB4
MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRTaXplJikKIHsK
LSAgICBjdXJ2ZS5hZGQoS2V5ZnJhbWUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCkpLCB4MSwgeTEs
IHgyLCB5Mik7CisgICAgY3VydmUtPmFkZChLZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUo
KSksIHgxLCB5MSwgeDIsIHkyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTczLDI4ICsx
NzMsMjggQEAgYm9vbCBjYXVzZXNSb3RhdGlvbk9mQXRMZWFzdDE4MERlZ3JlZXMoY29uc3QgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb24KIH0KIAogdGVtcGxhdGUgPD4KLWJvb2wg
YXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
PihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25z
dCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK2Jv
b2wgYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1Bbmlt
YXRpb25WYWx1ZSwgV2ViVHJhbnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlPihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBj
b25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkK
IHsKICAgICBpZiAoY2F1c2VzUm90YXRpb25PZkF0TGVhc3QxODBEZWdyZWVzKHZhbHVlLCBsYXN0
VmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgp
LCBib3hTaXplKTsKICAgICBpZiAob3BlcmF0aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJsZSgpKSB7
Ci0gICAgICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRp
b25zKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zv
cm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxh
dGUgPD4KLWJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRoQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb248
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBkb3Vi
bGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwg
ZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK2Jvb2wgYXBw
ZW5kS2V5ZnJhbWVXaXRoQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29u
c3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSogbGFzdFZhbHVlLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3Vi
bGUgeTIsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICBpZiAoY2F1c2VzUm90YXRp
b25PZkF0TGVhc3QxODBEZWdyZWVzKHZhbHVlLCBsYXN0VmFsdWUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRy
YW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKICAgICBpZiAob3Bl
cmF0aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgeDEsIHkxLCB4MiwgeTIpOwor
ICAgICAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlv
bnMpLCB4MSwgeTEsIHgyLCB5Mik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yMTMsNyArMjEzLDcgQEAgUGFzc093blB0cjxXZWJLaXQ6OldlYkFu
aW1hdGlvbj4gY3JlYXRlV2ViQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwK
ICAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlOwogICAgIH0KIAotICAgIEN1cnZlIGN1cnZlOwor
ICAgIE93blB0cjxDdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihDdXJ2ZTo6Y3JlYXRlKCkpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKICAgICAg
ICAgc2l6ZV90IGluZGV4ID0gcmV2ZXJzZSA/IHZhbHVlTGlzdC5zaXplKCkgLSBpIC0gMSA6IGk7
CkBAIC0yNjUsMTQgKzI2NSwxNCBAQCBQYXNzT3duUHRyPFdlYktpdDo6V2ViQW5pbWF0aW9uPiBj
cmVhdGVXZWJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogCiAgICAgICAg
IGJvb2wgYWRkZWRLZXlmcmFtZSA9IGZhbHNlOwogICAgICAgICBpZiAoaXNVc2luZ0N1c3RvbUJl
emllclRpbWluZ0Z1bmN0aW9uKQotICAgICAgICAgICAgYWRkZWRLZXlmcmFtZSA9IGFwcGVuZEtl
eWZyYW1lV2l0aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uPFZhbHVlLCBLZXlmcmFtZSwgQ3Vy
dmU+KGN1cnZlLCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCBsYXN0T3JpZ2luYWxWYWx1ZSwgeDEs
IHkxLCB4MiwgeTIsIGJveFNpemUpOworICAgICAgICAgICAgYWRkZWRLZXlmcmFtZSA9IGFwcGVu
ZEtleWZyYW1lV2l0aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uPFZhbHVlLCBLZXlmcmFtZSwg
Q3VydmU+KGN1cnZlLmdldCgpLCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCBsYXN0T3JpZ2luYWxW
YWx1ZSwgeDEsIHkxLCB4MiwgeTIsIGJveFNpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBhZGRlZEtleWZyYW1lID0gYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlv
bjxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPihjdXJ2ZSwga2V5VGltZSwgb3JpZ2luYWxWYWx1ZSwg
bGFzdE9yaWdpbmFsVmFsdWUsIHRpbWluZ0Z1bmN0aW9uVHlwZSwgYm94U2l6ZSk7CisgICAgICAg
ICAgICBhZGRlZEtleWZyYW1lID0gYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5j
dGlvbjxWYWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPihjdXJ2ZS5nZXQoKSwga2V5VGltZSwgb3JpZ2lu
YWxWYWx1ZSwgbGFzdE9yaWdpbmFsVmFsdWUsIHRpbWluZ0Z1bmN0aW9uVHlwZSwgYm94U2l6ZSk7
CiAgICAgICAgIGlmICghYWRkZWRLZXlmcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIE93blB0cjxXZWJLaXQ6OldlYkFuaW1hdGlvbj4gYW5pbShhZG9wdFB0
cihuZXcgV2ViS2l0OjpXZWJBbmltYXRpb24oY3VydmUsIGFuaW1hdGlvbklkLCBncm91cElkLCB0
YXJnZXRQcm9wZXJ0eSkpKTsKKyAgICBPd25QdHI8V2ViS2l0OjpXZWJBbmltYXRpb24+IGFuaW0o
YWRvcHRQdHIobmV3IFdlYktpdDo6V2ViQW5pbWF0aW9uKGN1cnZlLmdldCgpLCBhbmltYXRpb25J
ZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVydHkpKSk7CiAKICAgICBpbnQgaXRlcmF0aW9ucyA9IChh
bmltYXRpb24gJiYgYW5pbWF0aW9uLT5pc0l0ZXJhdGlvbkNvdW50U2V0KCkpID8gYW5pbWF0aW9u
LT5pdGVyYXRpb25Db3VudCgpIDogMTsKICAgICBhbmltLT5zZXRJdGVyYXRpb25zKGl0ZXJhdGlv
bnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDkxZjg1MjFiMzVkOWEzM2JkYTQw
ZWQxMjY5OGVmYTI0ODYzMGJkZDAuLjRlNDU1YjA3ZjQwY2RkNjRiYWNmMmNiNzI1OTkxMTI5ZDcx
NTY3ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ3NCw3ICs0NzQsNiBAQAog
ICAgICAgICAgICAgICAgICdzcmMvVXNlck1lZGlhQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJUZXh0Q2hlY2tpbmdDb21wbGV0aW9uSW1wbC5jcHAnLAotICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dENoZWNraW5nUmVzdWx0LmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJBbmltYXRpb24uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkNvbnRy
b2xsZXJJbXBsLmNwcCcsCkBAIC00ODMsNiArNDgyLDcgQEAKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQXJy
YXlCdWZmZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFycmF5QnVmZmVyVmlldy5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVGV4dENoZWNraW5nUmVzdWx0LmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJCaW5kaW5ncy5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViQmxvYi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYkRhdGEuY3BwJywK
QEAgLTUyNSw3ICs1MjUsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29zZXJD
b21wbGV0aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzSW1wbC5oJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUu
Y3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbC5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViRm9udERlc2NyaXB0aW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJG
b250SW1wbC5jcHAnLApAQCAtNjU1LDcgKzY1Niw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRJbnB1
dEluZm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRSdW4uY3BwJywKLSAgICAg
ICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbC5oJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlVSTExvYWRUaW1pbmcuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJU
ZXh0RmllbGREZWNvcmF0b3JDbGllbnQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJBbmltYXRpb24uY3BwCmluZGV4IDYxMDIwMTUxMjdmYmRhOTNiNjFiZDI5ZWFlMDgxMWFl
ZTdjZWExMGQuLmQ3MDZjMTdkYWM0OWFlMzlkODJkZDFhYjE1ZDc5MWRmNmM0Y2JjOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uLmNwcApAQCAtMjcsNiArMjcs
OCBAQAogI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb24uaD4KIAogI2luY2x1ZGUgIkFuaW1h
dGlvbklkVmVuZG9yLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuaCIKICNpbmNsdWRlICJj
Yy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIK
ICNpbmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaD4KQEAgLTkwLDE0ICs5MiwyOCBA
QCBXZWJBbmltYXRpb246Om9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmlt
YXRpb24+KCkgY29uc3QKICAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQogCi12b2lk
IFdlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYgY3VydmUs
IFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQordm9pZCBXZWJBbmltYXRpb246OmluaXRp
YWxpemUoV2ViQW5pbWF0aW9uQ3VydmUqIHdlYkN1cnZlLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQ
cm9wZXJ0eSkKIHsKLSAgICBpbml0aWFsaXplKGN1cnZlLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0
TmV4dEFuaW1hdGlvbklkKCksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLCB0
YXJnZXRQcm9wZXJ0eSk7CisgICAgaW5pdGlhbGl6ZSh3ZWJDdXJ2ZSwgQW5pbWF0aW9uSWRWZW5k
b3I6OmdldE5leHRBbmltYXRpb25JZCgpLCBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3Vw
SWQoKSwgdGFyZ2V0UHJvcGVydHkpOwogfQogCi12b2lkIFdlYkFuaW1hdGlvbjo6aW5pdGlhbGl6
ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYgY3VydmUsIGludCBhbmltYXRpb25JZCwgaW50IGdy
b3VwSWQsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQordm9pZCBXZWJBbmltYXRpb246
OmluaXRpYWxpemUoV2ViQW5pbWF0aW9uQ3VydmUqIHdlYkN1cnZlLCBpbnQgYW5pbWF0aW9uSWQs
IGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKIHsKLSAgICBtX3By
aXZhdGUucmVzZXQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgYW5pbWF0aW9uSWQs
IGdyb3VwSWQsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eT4odGFyZ2V0UHJvcGVydHkpKS5sZWFrUHRyKCkpOworICAgIFdlYkFuaW1hdGlvbkN1
cnZlOjpBbmltYXRpb25DdXJ2ZVR5cGUgY3VydmVUeXBlID0gd2ViQ3VydmUtPnR5cGUoKTsKKyAg
ICBPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmU7CisgICAgc3dpdGNoIChj
dXJ2ZVR5cGUpIHsKKyAgICBjYXNlIFdlYkFuaW1hdGlvbkN1cnZlOjpBbmltYXRpb25DdXJ2ZVR5
cGVGbG9hdDogeworICAgICAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCogZmxvYXRDdXJ2
ZUltcGwgPSBzdGF0aWNfY2FzdDxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCo+KHdlYkN1cnZl
KTsKKyAgICAgICAgY3VydmUgPSBmbG9hdEN1cnZlSW1wbC0+Y2xvbmVUb0NDQW5pbWF0aW9uQ3Vy
dmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViQW5pbWF0aW9uQ3VydmU6
OkFuaW1hdGlvbkN1cnZlVHlwZVRyYW5zZm9ybTogeworICAgICAgICBXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZUltcGwqIHRyYW5zZm9ybUN1cnZlSW1wbCA9IHN0YXRpY19jYXN0PFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlSW1wbCo+KHdlYkN1cnZlKTsKKyAgICAgICAgY3VydmUgPSB0cmFu
c2Zvcm1DdXJ2ZUltcGwtPmNsb25lVG9DQ0FuaW1hdGlvbkN1cnZlKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB9CisgICAgbV9wcml2YXRlLnJlc2V0KENDQWN0aXZlQW5pbWF0aW9uOjpj
cmVhdGUoY3VydmUucmVsZWFzZSgpLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5Pih0YXJnZXRQcm9wZXJ0
eSkpLmxlYWtQdHIoKSk7CiB9CiAKIHZvaWQgV2ViQW5pbWF0aW9uOjpkZXN0cm95KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4Y2M5YmI5OGRmZGM0NzQ2YmIwZDJh
ZmM4ZDQ1MDFkODZmMTE0MjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZS5oPgotCi0jaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCIKLSNpbmNsdWRlICJj
Yy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCi0jaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5j
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
OjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJhbWUpCi17Ci0gICAgYWRkKGtleWZy
YW1lLCBUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKLX0KLQotdm9pZCBXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJhbWUsIFRpbWluZ0Z1bmN0
aW9uVHlwZSB0eXBlKQotewotICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIGNyZWF0
ZVRpbWluZ0Z1bmN0aW9uKHR5cGUpKSk7Ci19Ci0KLXZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZTo6YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBkb3VibGUgeDEsIGRvdWJs
ZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCi17Ci0gICAgbV9wcml2YXRlLT5hZGRLZXlmcmFt
ZShXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFt
ZS52YWx1ZSwgV2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEs
IHkxLCB4MiwgeTIpKSk7Ci19Ci0KLWZsb2F0IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZh
bHVlKGRvdWJsZSB0aW1lKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFZhbHVl
KHRpbWUpOwotfQotCi1XZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpvcGVyYXRvciBQYXNzT3duUHRy
PFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5jbG9uZSgpOwotfQotCi12b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmluaXRpYWxp
emUoKQotewotICAgIG1fcHJpdmF0ZS5yZXNldChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU6OmNyZWF0ZSgpLmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6ZGVzdHJveSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KDApOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yM2NmZWNj
N2JmYTQ2MjAzMmI4MWMxZGJlMDFkNjk4MGY3ODg3YmFmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuY3BwCkBA
IC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmgiCisKKyNpbmNsdWRlICJXZWJBbmlt
YXRpb25DdXJ2ZUNvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNp
bmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NU
aW1pbmdGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSogV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gbmV3
IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsKFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworfQorCitXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwoUGFzc093blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKQorICAgIDogbV9jdXJ2ZShjdXJ2ZSkKK3sKK30K
KworV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6On5XZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1w
bCgpCit7Cit9CisKK1dlYkFuaW1hdGlvbkN1cnZlOjpBbmltYXRpb25DdXJ2ZVR5cGUgV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZUltcGw6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJBbmlt
YXRpb25DdXJ2ZTo6QW5pbWF0aW9uQ3VydmVUeXBlRmxvYXQ7Cit9CisKK3ZvaWQgV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZUltcGw6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSkK
K3sKKyAgICBhZGQoa2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UpOworfQorCit2b2lk
IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYg
a2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlKQoreworICAgIG1fY3VydmUtPmFkZEtl
eWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtl
eWZyYW1lLnZhbHVlLCBjcmVhdGVUaW1pbmdGdW5jdGlvbih0eXBlKSkpOworfQorCit2b2lkIFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5
ZnJhbWUsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAg
ICBtX2N1cnZlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShr
ZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgV2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKSk7Cit9CisKK2Zsb2F0IFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmVJbXBsOjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9jdXJ2ZS0+Z2V0VmFsdWUodGltZSk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6
Q0NBbmltYXRpb25DdXJ2ZT4gV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6OmNsb25lVG9DQ0Fu
aW1hdGlvbkN1cnZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJ2ZS0+Y2xvbmUoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGNhOTVmYTM5ZWRiZTdhODYyZTNjMGUxZjg4MjRhZDE2MmRiYWMxMTku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmg+Ci0KLSNp
bmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgotI2luY2x1ZGUgImNjL0NDS2V5ZnJh
bWVkQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCi0j
aW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQo
Y29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lKQotewotICAgIGFkZChrZXlmcmFt
ZSwgVGltaW5nRnVuY3Rpb25UeXBlRWFzZSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUsIFRpbWlu
Z0Z1bmN0aW9uVHlwZSB0eXBlKQotewotICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29y
ZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZh
bHVlLCBjcmVhdGVUaW1pbmdGdW5jdGlvbih0eXBlKSkpOwotfQotCi12b2lkIFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1l
LCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCi17Ci0gICAgbV9w
cml2YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUo
a2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSkpOwotfQotCi1XZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHRp
bWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VmFsdWUodGltZSk7Ci19Ci0K
LVdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6
OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jbG9u
ZSgpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkK
LXsKLSAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6ZGVzdHJveSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KDApOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCmluZGV4IGMyY2NjNDUwMzdmMDY1NTU1OTczN2E1MDk5
OTUyYjQxNjIzMTRhOTIuLmYyMDEwYWQyZGJmZWQyNTFhOGNmMmI0OTM0ZjVmYzY0ODA3NzIyZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmltYXRpb25UZXN0
LmNwcApAQCAtNDYsOCArNDYsOCBAQCBuYW1lc3BhY2UgewogI2VuZGlmCiBURVNUKFdlYkFuaW1h
dGlvblRlc3QsIE1BWUJFX0RlZmF1bHRTZXR0aW5ncykKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlIGN1cnZlOwotICAgIFdlYkFuaW1hdGlvbiBhbmltYXRpb24oY3VydmUsIFdlYkFuaW1h
dGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5KTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRp
b25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUo
KSk7CisgICAgV2ViQW5pbWF0aW9uIGFuaW1hdGlvbihjdXJ2ZS5nZXQoKSwgV2ViQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHkpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlZmF1
bHRzIGFyZSBjb3JyZWN0LgogICAgIEVYUEVDVF9FUSgxLCBhbmltYXRpb24uaXRlcmF0aW9ucygp
KTsKQEAgLTY3LDggKzY3LDggQEAgVEVTVChXZWJBbmltYXRpb25UZXN0LCBNQVlCRV9EZWZhdWx0
U2V0dGluZ3MpCiAjZW5kaWYKIFRFU1QoV2ViQW5pbWF0aW9uVGVzdCwgTUFZQkVfTW9kaWZpZWRT
ZXR0aW5ncykKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIFdlYkFu
aW1hdGlvbiBhbmltYXRpb24oY3VydmUsIFdlYkFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFj
aXR5KTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0
cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgV2ViQW5pbWF0aW9uIGFu
aW1hdGlvbihjdXJ2ZS5nZXQoKSwgV2ViQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHkp
OwogICAgIGFuaW1hdGlvbi5zZXRJdGVyYXRpb25zKDIpOwogICAgIGFuaW1hdGlvbi5zZXRTdGFy
dFRpbWUoMik7CiAgICAgYW5pbWF0aW9uLnNldFRpbWVPZmZzZXQoMik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRl
c3QuY3BwCmluZGV4IGJkZmU0ZWM3ZDkyOTUyOThjYTY0NmI2ZWE2OTI0NGI1NDBiNTVhNDcuLjlm
NjI0YjY0MTU0NWJjMWUyZDI2MTkwMGMzODg4NmQ5NDM4MjdjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRl
c3QuY3BwCkBAIC0zOSwxOTcgKzM5LDE5NyBAQCBuYW1lc3BhY2UgewogLy8gVGVzdHMgdGhhdCBh
IGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KIFRF
U1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIE9uZUZsb2F0S2V5ZnJhbWUpCiB7Ci0gICAg
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwg
Y3VydmUuZ2V0VmFsdWUoMC41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZh
bHVlKDEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMikpOworICAg
IE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwg
Y3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwog
fQogCiAvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3
b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b0Zs
b2F0S2V5ZnJhbWUpCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBj
dXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwg
NCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdl
dFZhbHVlKDAuNSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKSk7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDIpKTsKKyAgICBPd25QdHI8
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2
ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9u
IHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZyYW1lKQogewotICAgIFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiks
IFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgyLCA4KSwg
V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIs
IGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFs
dWUoMC41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KSk7Ci0gICAgRVhQRUNUX0ZM
T0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3Vy
dmUuZ2V0VmFsdWUoMykpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2
ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2
ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3Vy
dmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZh
bHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwg
Y3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0
VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwog
fQogCiAvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBh
dCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgogVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
VGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVzKQogewotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgNCksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJG
bG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA2KSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMiwgNiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0
UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdl
YkZsb2F0S2V5ZnJhbWUoMCwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChX
ZWJGbG9hdEtleWZyYW1lKDEsIDYpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgNiksIFdlYkFu
aW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCi0gICAgRVhQRUNUX0ZM
T0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1
cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUo
MC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CiAKICAgICAvLyBUaGVyZSBpcyBhIGRpc2Nv
bnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KLSAgICBm
bG9hdCB2YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIGZsb2F0IHZhbHVlID0gY3VydmUt
PmdldFZhbHVlKDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlID49IDQgJiYgdmFsdWUgPD0gNik7
CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KSk7Ci0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDIpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
NiwgY3VydmUuZ2V0VmFsdWUoMykpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0
VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7CiB9CiAKIC8vIFRl
c3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9mIG9yZGVyLgogVEVTVChX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlmcmFtZXMpCiB7Ci0gICAgV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgyLCA4KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0g
ICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1l
KDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLQot
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOwotICAgIEVYUEVDVF9G
TE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1
cnZlLmdldFZhbHVlKDAuNSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1
ZSgxKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEuNSkpOwotICAg
IEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDgsIGN1cnZlLmdldFZhbHVlKDMpKTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25D
dXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7
CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBXZWJBbmltYXRpb25DdXJ2
ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIp
OworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwg
Y3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRW
YWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4
LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0
VmFsdWUoMykpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgY3ViaWMgYmV6aWVyIHRpbWluZyBmdW5j
dGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3Qs
IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgMC4yNSwgMCwg
MC43NSwgMSk7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotCi0gICAgRVhQRUNUX0ZMT0FU
X0VRKDAsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfTFQoMCwgY3VydmUuZ2V0VmFs
dWUoMC4yNSkpOwotICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KSk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUuZ2V0VmFsdWUoMC41KSk7Ci0gICAgRVhQRUNU
X0xUKDAuNzUsIGN1cnZlLmdldFZhbHVlKDAuNzUpKTsKLSAgICBFWFBFQ1RfR1QoMSwgY3VydmUu
Z2V0VmFsdWUoMC43NSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBjdXJ2ZS5nZXRWYWx1ZSgx
KSk7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIo
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGQoV2ViRmxv
YXRLZXlmcmFtZSgwLCAwKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAgY3VydmUtPmFkZChXZWJG
bG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwor
ICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9HVCgw
LjI1LCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGN1
cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwgY3VydmUtPmdldFZhbHVl
KDAuNzUpKTsKKyAgICBFWFBFQ1RfR1QoMSwgY3VydmUtPmdldFZhbHVlKDAuNzUpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMSwgY3VydmUtPmdldFZhbHVlKDEpKTsKIH0KIAogLy8gVGVzdHMgdGhh
dCBhbiBlYXNlIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAs
IDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZSk7Ci0gICAgY3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBj
dXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVFYXNlKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwg
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAg
T3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6
OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAg
ICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZl
LmdldFZhbHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9u
LT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKICAgICB9CiB9CiAKIC8v
IFRlc3RzIHVzaW5nIGEgbGluZWFyIHRpbWluZyBmdW5jdGlvbi4KIFRFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCks
IFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3Vy
dmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwg
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1l
ID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS0+Z2V0VmFsdWUo
dGltZSkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5j
dGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3Qs
IEVhc2VJblRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3Vy
dmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1
cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW4pOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9h
dEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFz
ZUluKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNvcmU6
OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsK
ICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGlt
ZSkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRp
bWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCBh
biBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VPdXRUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1l
KDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCk7Ci0g
ICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsK
KyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZl
OjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIp
OwogCiAgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9u
KFdlYkNvcmU6OkNDRWFzZU91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAq
IDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUo
dGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRp
bWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKICAg
ICB9CiB9CiAKIC8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3Mg
YXMgZXhwZWN0ZWQuCiBURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5PdXRU
aW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAg
IGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0KTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Cisg
ICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLCAwKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91
dCk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxXZWJDb3JlOjpD
Q1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7
CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9G
TE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRp
bWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0
aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIHRoYXQg
YW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbikKIHsKLSAg
ICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpKTsKICAgICBkb3VibGUgeDEgPSAwLjM7CiAgICAgZG91YmxlIHkxID0gMC4yOwogICAgIGRv
dWJsZSB4MiA9IDAuODsKICAgICBkb3VibGUgeTIgPSAwLjc7Ci0gICAgY3VydmUuYWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMCwgMCksIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxv
YXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCB4MSwgeTEsIHgy
LCB5Mik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxXZWJDb3Jl
OjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IDQ7ICsraSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1
OwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUp
LCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdG
dW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CiAgICAgfQog
fQogCiAvLyBUZXN0cyB0aGF0IHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBpcyBpbmRlZWQg
ZWFzZS4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5j
dGlvbikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFk
ZChXZWJGbG9hdEtleWZyYW1lKDAsIDApKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Cisg
ICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLCAwKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJB
bmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxX
ZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsr
aSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OwotICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFs
dWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdC5jcHAKaW5kZXggZjE4Zjg3YmUyMDNiMjBiOTljNTI3NTJlMTYyOGQ0MWRh
M2NiNzQ0Ny4uZWI4YTgwOTYxYjllN2M3Yzg4NDZlZWNiNWJkZjRmMzA2M2Q2MGRmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtNDEsNjIgKzQxLDYyIEBAIG5hbWVzcGFjZSB7
CiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3
b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBP
bmVUcmFuc2Zvcm1LZXlmcmFtZSkKIHsKLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBj
dXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRv
cHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKICAgICBvcGVyYXRpb25zLmFwcGVu
ZFRyYW5zbGF0ZSgyLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
MCwgb3BlcmF0aW9ucyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9ucyks
IFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCi0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZM
T0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MiwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1
cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0
VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
LTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkubTQxKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkubTQxKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOwogfQogCiAvLyBU
ZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3Mg
YXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJh
bnNmb3JtS2V5ZnJhbWUpCiB7Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7
CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRy
KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRy
YW5zbGF0ZSgyLCAwLCAwKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczI7CiAgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOwotICAg
IGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRW
YWx1ZSgtMSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgw
KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQx
KCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKKyAgICBjdXJ2
ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9u
Q3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAp
Lm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkubTQx
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkubTQxKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOwogfQogCiAv
LyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3
b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBU
aHJlZVRyYW5zZm9ybUtleWZyYW1lKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBh
ZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5h
cHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAw
KTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CiAgICAg
b3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDgsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25z
MyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkpOwotICAgIEVYUEVDVF9G
TE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDMsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBj
dXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdl
dFZhbHVlKDEuNSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1
ZSgyKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDMpLm00
MSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMx
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3Vy
dmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZh
bHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgw
KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpLm00MSgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkubTQxKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykubTQxKCkpOwogfQogCiAvLyBUZXN0cyB0
aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0
aW1lIHdvcmtzIHNhbmVseS4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBS
ZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQogewogICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4KLSAg
ICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOwogICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKQEAgLTEwNSwxNTkg
KzEwNSwxNTkgQEAgVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVk
VHJhbnNmb3JtS2V5VGltZXMpCiAgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDYsIDAs
IDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsKICAg
ICBvcGVyYXRpb25zNC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAg
Y3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnM0KSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAg
Y3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCi0gICAgRVhQRUNUX0ZMT0FU
X0VRKDQsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQs
IGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUu
Z2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRW
YWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5t
NDEoKSk7CiAKICAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVl
IGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2
YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHZh
bHVlID0gY3VydmUtPmdldFZhbHVlKDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLm00MSgpID49
IDQgJiYgdmFsdWUubTQxKCkgPD0gNik7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUu
Z2V0VmFsdWUoMS41KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZh
bHVlKDIpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMyku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgyKS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKS5tNDEoKSk7CiB9CiAKIC8v
IFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9mIG9yZGVyLgogVEVT
VChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFVuc29ydGVkS2V5ZnJhbWVzKQogewot
ICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CiAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJh
dGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CiAgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRl
KDgsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRp
b25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAg
IGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOwotCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdl
dFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVl
KDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUoMC41KS5t
NDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KS5tNDEoKSk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykubTQxKCkpOworICAgIGN1cnZlLT5hZGQoV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRp
b25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYs
IGN1cnZlLT5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3Vy
dmUtPmdldFZhbHVlKDIpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdl
dFZhbHVlKDMpLm00MSgpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCBhIGN1YmljIGJlemllciB0aW1p
bmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAg
ICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwogICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRU
cmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAs
IG9wZXJhdGlvbnMxKSwgMC4yNSwgMCwgMC43NSwgMSk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLmdldFZhbHVl
KDApLm00MSgpKTsKLSAgICBFWFBFQ1RfTFQoMCwgY3VydmUuZ2V0VmFsdWUoMC4yNSkubTQxKCkp
OwotICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KS5tNDEoKSk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7Ci0gICAgRVhQ
RUNUX0xUKDAuNzUsIGN1cnZlLmdldFZhbHVlKDAuNzUpLm00MSgpKTsKLSAgICBFWFBFQ1RfR1Qo
MSwgY3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBj
dXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlm
cmFtZSgwLCBvcGVyYXRpb25zMSksIDAuMjUsIDAsIDAuNzUsIDEpOworICAgIGN1cnZlLT5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6
VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgY3VydmUt
PmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3VydmUtPmdldFZhbHVlKDAu
MjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfR1QoMC4yNSwgY3VydmUtPmdldFZhbHVlKDAuMjUpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5tNDEo
KSk7CisgICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1KS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0dUKDEsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1KS5tNDEoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7CiB9CiAKIC8vIFRlc3RzIHRo
YXQgYW4gZWFzZSB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZVRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMy
LmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlRWFzZSk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAg
Y3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRy
YW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5j
dGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0
ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3Qg
ZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1
bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAg
ICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2
ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdXNpbmcgYSBs
aW5lYXIgdGltaW5nIGZ1bmN0aW9uLgogVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRl
c3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUg
PSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25z
MS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAw
LCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2
ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgx
LCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0
IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBj
dXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1l
LCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhh
dCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5UaW1pbmdGdW5jdGlvbikKIHsKLSAg
ICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwogICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVyYXRp
b25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUVhc2VJbik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9w
ZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdl
YkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW4pOworICAgIGN1cnZlLT5h
ZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2
ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxXZWJDb3JlOjpDQ1Rp
bWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJblRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9F
USh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00
MSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0
aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKICAgICB9CiB9CiAKIC8vIFRlc3Rz
IHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNU
KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZU91dFRpbWluZ0Z1bmN0aW9uKQog
ewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7
CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9w
ZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlRWFzZU91dCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1l
KDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25z
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsKKyAgICBj
dXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAgICBPd25QdHI8V2ViQ29y
ZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlT3V0VGlt
aW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kp
IHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNU
X0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUo
dGltZSkubTQxKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdl
dFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0KIAog
Ly8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3Rl
ZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5PdXRUaW1pbmdG
dW5jdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBP
d25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDAsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUu
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgw
LCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNl
SW5PdXQpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9u
czIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAg
IE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3Jl
OjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7
Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSks
IGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRp
bWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgp
KTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24g
d29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwg
Q3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2
ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAg
ZG91YmxlIHgxID0gMC4zOwogICAgIGRvdWJsZSB5MSA9IDAuMjsKICAgICBkb3VibGUgeDIgPSAw
Ljg7CkBAIC0yNjYsMzEgKzI2NiwzMSBAQCBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
VGVzdCwgQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCiAgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDAsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Ci0g
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgeDEsIHkx
LCB4MiwgeTIpOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRp
b25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAg
IGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCB4MSwgeTEs
IHgyLCB5Mik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRp
b25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAg
ICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNv
cmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSk7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJs
ZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlv
bi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICAgICAg
RVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdl
dFZhbHVlKHRpbWUpLm00MSgpKTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGRlZmF1
bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgogVEVTVChXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAg
ICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwogICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRU
cmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAs
IG9wZXJhdGlvbnMxKSk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9w
ZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOwor
ICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJB
bmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxX
ZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsr
aSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OwotICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKS5tNDEoKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+
Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CiAgICAgfQogfQog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158703</attachid>
            <date>2012-08-15 21:06:14 -0700</date>
            <delta_ts>2012-08-23 17:05:42 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>bug-94068-20120815210542.patch</filename>
            <type>text/plain</type>
            <size>75199</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA3ZWU2NzZmODQwZDM3
NDI2OWM5ZDRlNDlhZDJlNzQ3NzY4Nzk3M2YyLi5hMTZlODU5ZWE3MGRjM2FhMWRmYmJhY2M3YWJi
ZmI5OTk4MjRjZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0wOC0xNSAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ29udmVydCBXZWJBbmltYXRpb25DdXJ2ZSBzdWJ0eXBlcyBpbnRvIHB1cmUgdmlydHVhbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQwNjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2Vz
IHRoZSBXZWIqQW5pbWF0aW9uQ3VydmUgaW50ZXJmYWNlcyBwdXJlIHZpcnR1YWwgdG8gcHJvdmlk
ZSBiZXR0ZXIgaW5zdWxhdGlvbiBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBkZXRh
aWxzIG9mIHRoZSBjbGFzc2VzLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1h
dGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJBbmltYXRpb24pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmlt
YXRpb25DdXJ2ZS5oOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlLmg6CisgICAgICAgIChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgor
ICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oOgor
ICAgICAgICAoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6fldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToK
KwogMjAxMi0wOC0xNCAgR3JlZ2cgVGF2YXJlcyAgPGdtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBQbHVtYiB0aHJvdWdoIEVYVF9kZWJ1Z19tYXJrZXIgZW50cnkgcG9pbnRzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggNTVhYjZmODUwZjNhYTliNzZmMWI1NzM2YzdkNzE0YzgzNTY5MmFmMS4uYmI1NmNkNGU5YzBl
NWQ2NTE5ZDkyOWM5Yzk0ZWUyNGEzYTljYmQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDEyLTA4LTE1ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBDb252ZXJ0IFdlYkFuaW1hdGlvbkN1cnZlIHN1YnR5cGVzIGludG8g
cHVyZSB2aXJ0dWFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05NDA2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0ZXMgdXNlcnMgb2YgdGhlIFdlYipBbmltYXRpb25DdXJ2ZSBpbnRlcmZhY2UgZm9y
IGl0cyBuZXcgcG9pbnRlcnkgZ29vZG5lc3MuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVXZWJBbmltYXRpb24pOgorCiAyMDEyLTA4LTE1ICBKdWxpZW4gQ2hhZmZy
YWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBhIHdhcy1pbnNlcnRl
ZC1pbnRvLXRyZWUgbm90aWZpY2F0aW9uIHRvIFJlbmRlck9iamVjdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCAyNTc5YzBkMmZkMjFjODM2MDUzYzI0OTJlNjI5NTQwYmQ0NWY3NjBlLi41
NzgzNTAyZTczOWZlYjkzNmVhNGFiOWM4NDZhNmUwZGViMDhmZjgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA4LTE1ICBKYW1lcyBSb2JpbnNvbiAg
PGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDb252ZXJ0IFdlYkFu
aW1hdGlvbkN1cnZlIHN1YnR5cGVzIGludG8gcHVyZSB2aXJ0dWFsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDA2OAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZXMgdGhlIGltcGxlbWVudGF0aW9u
cywgc29tZSBjYWxsZXJzIGFuZCB0ZXN0cyBvZiBXZWIqQW5pbWF0aW9uQ3VydmUgdG8gaXRzIG5l
dyBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHNyYy9XZWJB
bmltYXRpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OmluaXRpYWxpemUp
OgorICAgICAgICAqIHNyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNw
cC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJ
bXBsOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZs
b2F0QW5pbWF0aW9uQ3VydmVJbXBsOjp+V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6dHlwZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjphZGQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6Z2V0VmFsdWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6Y2xvbmVUb0NDQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIHNyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAgICogdGVzdHMvV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmVUZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisKIDIwMTItMDgt
MTUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXBkYXRlIG1h
bnVhbCB0ZXN0cyBhbmQgY29tbWVudHMgdG8gcmVmZXIgdG8gVGVzdFJ1bm5lciBpbnN0ZWFkIG9m
IExheW91dFRlc3RDb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYkFuaW1hdGlvbi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJBbmltYXRpb24uaAppbmRleCAyMzhiYmFhZTEyMGFhY2MxM2Q4YTc1NDU3Y2YxYTNhYWMz
NTY0NDM4Li4xNGExNzI0NjUwMDM3ODlkYjVlNTU3MDZmOGRiNWY1ZDMxMTdjOWM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgKQEAgLTQ5LDEz
ICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFRhcmdldFByb3BlcnR5T3BhY2l0eQogICAgIH07
CiAKLSAgICAvLyBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUgcmV0dXJuZWQgdmFs
dWV2Ci0gICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2ViQW5pbWF0aW9uKiBjcmVhdGUoY29uc3Qg
V2ViQW5pbWF0aW9uQ3VydmUmLCBUYXJnZXRQcm9wZXJ0eSk7CisgICAgLy8gVGhlIGNhbGxlciB0
YWtlcyBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHZhbHVlLgorICAgIFdFQktJVF9FWFBPUlQg
c3RhdGljIFdlYkFuaW1hdGlvbiogY3JlYXRlKFdlYkFuaW1hdGlvbkN1cnZlKiwgVGFyZ2V0UHJv
cGVydHkpOwogCiAgICAgLy8gQW4gYW5pbWF0aW9uSWQgaXMgZWZmZWN0aXZlbHkgdGhlIGFuaW1h
dGlvbidzIG5hbWUsIGFuZCBpdCBpcyBub3QgdW5pcXVlLgogICAgIC8vIEFuaW1hdGlvbnMgd2l0
aCB0aGUgc2FtZSBncm91cElkIGFyZSBydW4gYXQgdGhlIHNhbWUgdGltZS4gQW4gYW5pbWF0aW9u
CiAgICAgLy8gbWF5IGJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgYSBjb21iaW5hdGlvbiBvZiBn
cm91cElkIGFuZCB0YXJnZXQgcHJvcGVydHkuCi0gICAgV0VCS0lUX0VYUE9SVCBzdGF0aWMgV2Vi
QW5pbWF0aW9uKiBjcmVhdGUoY29uc3QgV2ViQW5pbWF0aW9uQ3VydmUmLCBpbnQgYW5pbWF0aW9u
SWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSk7CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViQW5pbWF0aW9uKiBjcmVhdGUoV2ViQW5pbWF0aW9uQ3VydmUqLCBpbnQgYW5pbWF0aW9u
SWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSk7CiAKICAgICB2aXJ0dWFsIH5XZWJBbmlt
YXRpb24oKSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJBbmltYXRpb25DdXJ2ZS5oCmluZGV4IGU5ZWNjMWVkYTQxOThlYzM2MzE0ZjQ0MDcyNTNkZjAz
YzU3ODQ1OGEuLmVjMDVkMzc5M2ZjMGI5NjYyN2FmZTQzMTZmYzcwMjI2YjM5NmFjZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUu
aAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZl
LmgKQEAgLTI2LDE5ICsyNiwxMSBAQAogI2RlZmluZSBXZWJBbmltYXRpb25DdXJ2ZV9oCiAKICNp
bmNsdWRlICJXZWJDb21tb24uaCIKLSNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgogCi0jaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOwotfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViTm9u
Q29weWFibGUgeworY2xhc3MgV2ViQW5pbWF0aW9uQ3VydmUgewogcHVibGljOgogICAgIHZpcnR1
YWwgfldlYkFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKQEAgLTUwLDEyICs0MiwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIFRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcgogICAgIH07CiAKLSNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KLSAgICB2aXJ0dWFsIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6
Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdCA9IDA7Ci0jZW5kaWYKKyAgICBlbnVtIEFuaW1hdGlv
bkN1cnZlVHlwZSB7CisgICAgICAgIEFuaW1hdGlvbkN1cnZlVHlwZUZsb2F0LAorICAgICAgICBB
bmltYXRpb25DdXJ2ZVR5cGVUcmFuc2Zvcm0sCisgICAgfTsKIAotcHJvdGVjdGVkOgotICAgIFdl
YkFuaW1hdGlvbkN1cnZlKCkgeyB9CisgICAgdmlydHVhbCBBbmltYXRpb25DdXJ2ZVR5cGUgdHlw
ZSgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUu
aAppbmRleCA2NWE3ZjI0MzhjZmFkMmYyYjdjYjYxZTcxZjkzNzlhMTg3Njc5YzZkLi5iNTZiM2Jk
NGQ5MjkwZGZmODM1NGUyM2M3MDAwMWViYWNlY2EwZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaApAQCAt
MjksNDMgKzI5LDI0IEBACiAKICNpbmNsdWRlICJXZWJDb21tb24uaCIKICNpbmNsdWRlICJXZWJG
bG9hdEtleWZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgotCi0jaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNlbmRpZgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOwotY2xhc3MgQ0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOwotfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8g
QSBrZXlmcmFtZWQgZmxvYXQgYW5pbWF0aW9uIGN1cnZlLgogY2xhc3MgV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZSA6IHB1YmxpYyBXZWJBbmltYXRpb25DdXJ2ZSB7CiBwdWJsaWM6Ci0gICAgV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZSgpIHsgaW5pdGlhbGl6ZSgpOyB9Ci0gICAgdmlydHVhbCB+V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZSgpIHsgZGVzdHJveSgpOyB9CisgICAgV0VCS0lUX0VYUE9SVCBzdGF0
aWMgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSogY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJG
bG9hdEFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKICAgICAvLyBBZGRzIHRoZSBrZXlmcmFtZSB3aXRo
IHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiAoZWFzZSkuCi0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJik7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgVGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgVGltaW5nRnVuY3Rpb25UeXBlKSA9
IDA7CiAgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6aWVyIHRpbWlu
ZyBmdW5jdGlvbi4gTm90ZSwgaXQgaXMKICAgICAvLyBhc3N1bWVkIHRoYXQgeDAgPSB5MCA9IDAs
IGFuZCB4MyA9IHkzID0gMS4KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYkZs
b2F0S2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIp
OwotCi0gICAgV0VCS0lUX0VYUE9SVCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3Q7
Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICB2aXJ0dWFsIG9wZXJhdG9yIFBhc3NP
d25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0
S2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpID0g
MDsKIAotICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBtX3ByaXZhdGU7CisgICAgdmlydHVhbCBmbG9hdCBnZXRWYWx1ZShkb3VibGUg
dGltZSkgY29uc3QgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlLmgKaW5kZXggOTljYjY3MDU1ZDc2ZTc3Mzk0MDNiODdmMDI1YWNkYmQ4MTI4Yzcz
OS4uNjk5ZTQ5OGM4MjRhMTk5M2I1ZGI4YmUxMGY2NzA4ZjViZTQyOThjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZS5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUuaApAQCAtMjgsNDUgKzI4LDI3IEBACiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9u
Q3VydmUuaCIKIAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVP
d25QdHIuaCIKICNpbmNsdWRlICJXZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIgogI2luY2x1ZGUgIldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIENDQW5pbWF0aW9uQ3VydmU7Ci1jbGFzcyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOwotfQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gQSBrZXlmcmFtZWQgdHJhbnNm
b3JtIGFuaW1hdGlvbiBjdXJ2ZS4KIGNsYXNzIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDog
cHVibGljIFdlYkFuaW1hdGlvbkN1cnZlIHsKIHB1YmxpYzoKLSAgICBXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSgpIHsgaW5pdGlhbGl6ZSgpOyB9Ci0gICAgdmlydHVhbCB+V2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUoKSB7IGRlc3Ryb3koKTsgfQorICAgIFdFQktJVF9FWFBPUlQgc3RhdGlj
IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjcmVhdGUoKTsKKworICAgIHZpcnR1YWwgfldl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyB9CiAKICAgICAvLyBBZGRzIHRoZSBrZXlmcmFt
ZSB3aXRoIHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiAoZWFzZSkuCi0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYpOwotICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmLCBUaW1pbmdGdW5jdGlv
blR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYs
IFRpbWluZ0Z1bmN0aW9uVHlwZSkgPSAwOwogICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGgg
YSBjdXN0b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24uIE5vdGUsIGl0IGlzCiAgICAgLy8gYXNz
dW1lZCB0aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5MyA9IDEuCi0gICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIGRvdWJsZSB4MSwgZG91Ymxl
IHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Mik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdDsKLQotI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgotICAgIHZpcnR1YWwgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3Jl
OjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0OwotI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIGFk
ZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3Vi
bGUgeDIsIGRvdWJsZSB5MikgPSAwOwogCi1wcm90ZWN0ZWQ6Ci0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGluaXRpYWxpemUoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGVzdHJveSgpOworICAg
IHZpcnR1YWwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNv
bnN0ID0gMDsKIAotICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4gbV9wcml2YXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGlsLmNwcAppbmRleCA2M2Nm
ZjMwZDk5NjVlZTNhNzg1NGVhZDk5YmQxMjljNTUxNWZiODA5Li5hYTljNWVjNjViYTE2MGRkMzUx
MGUyYzBmMjY1YTNkMWZjNGExNjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0
aW9uVXRpbC5jcHAKQEAgLTEyMywxNiArMTIzLDE2IEBAIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
dG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5z
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZl
PgotYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1bmN0aW9uKEN1cnZlJiBj
dXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSwgY29uc3QgVmFsdWUqIGxh
c3RWYWx1ZSwgV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlIHRp
bWluZ0Z1bmN0aW9uVHlwZSwgY29uc3QgRmxvYXRTaXplJikKK2Jvb2wgYXBwZW5kS2V5ZnJhbWVX
aXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbihDdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBj
b25zdCBWYWx1ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0
IEZsb2F0U2l6ZSYpCiB7Ci0gICAgY3VydmUuYWRkKEtleWZyYW1lKGtleVRpbWUsIHZhbHVlLT52
YWx1ZSgpKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICBjdXJ2ZS0+YWRkKEtleWZyYW1lKGtl
eVRpbWUsIHZhbHVlLT52YWx1ZSgpKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFZhbHVlLCBjbGFzcyBLZXlmcmFtZSwgY2xhc3Mg
Q3VydmU+Ci1ib29sIGFwcGVuZEtleWZyYW1lV2l0aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9u
KEN1cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFZhbHVlKiB2YWx1ZSwgY29uc3Qg
VmFsdWUqIGxhc3RWYWx1ZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91Ymxl
IHkyLCBjb25zdCBGbG9hdFNpemUmKQorYm9vbCBhcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXpp
ZXJUaW1pbmdGdW5jdGlvbihDdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBWYWx1
ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBk
b3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRTaXplJikKIHsKLSAgICBjdXJ2ZS5hZGQo
S2V5ZnJhbWUoa2V5VGltZSwgdmFsdWUtPnZhbHVlKCkpLCB4MSwgeTEsIHgyLCB5Mik7CisgICAg
Y3VydmUtPmFkZChLZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSksIHgxLCB5MSwgeDIs
IHkyKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg1LDI4ICsxODUsMjggQEAgYm9vbCBj
YXVzZXNSb3RhdGlvbk9mQXRMZWFzdDE4MERlZ3JlZXMoY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWUqIHZhbHVlLCBjb24KIH0KIAogdGVtcGxhdGUgPD4KLWJvb2wgYXBwZW5kS2V5ZnJhbWVX
aXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2ViVHJh
bnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1Bbmlt
YXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0VmFs
dWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdG
dW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK2Jvb2wgYXBwZW5kS2V5ZnJh
bWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSwgV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUsIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPihXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSogY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25zdCBUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZSogdmFsdWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiBsYXN0
VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1p
bmdGdW5jdGlvblR5cGUsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICBpZiAoY2F1
c2VzUm90YXRpb25PZkF0TGVhc3QxODBEZWdyZWVzKHZhbHVlLCBsYXN0VmFsdWUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMg
PSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKICAg
ICBpZiAob3BlcmF0aW9ucy5hcHBseSgpLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIGN1cnZl
LmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgdGltaW5nRnVu
Y3Rpb25UeXBlKTsKKyAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShrZXlU
aW1lLCBvcGVyYXRpb25zKSwgdGltaW5nRnVuY3Rpb25UeXBlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdGVtcGxhdGUgPD4KLWJvb2wgYXBw
ZW5kS2V5ZnJhbWVXaXRoQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29u
c3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZSogbGFzdFZhbHVlLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3Vi
bGUgeTIsIGNvbnN0IEZsb2F0U2l6ZSYgYm94U2l6ZSkKK2Jvb2wgYXBwZW5kS2V5ZnJhbWVXaXRo
Q3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRy
YW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZh
bHVlLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0IEZs
b2F0U2l6ZSYgYm94U2l6ZSkKIHsKICAgICBpZiAoY2F1c2VzUm90YXRpb25PZkF0TGVhc3QxODBE
ZWdyZWVzKHZhbHVlLCBsYXN0VmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMgPSB0b1dlYlRyYW5zZm9ybU9wZXJhdGlv
bnMoKnZhbHVlLT52YWx1ZSgpLCBib3hTaXplKTsKICAgICBpZiAob3BlcmF0aW9ucy5hcHBseSgp
LmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZShrZXlUaW1lLCBvcGVyYXRpb25zKSwgeDEsIHkxLCB4MiwgeTIpOworICAgICAgICBjdXJ2ZS0+
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKGtleVRpbWUsIG9wZXJhdGlvbnMpLCB4MSwgeTEsIHgy
LCB5Mik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yMjUsNyArMjI1LDcgQEAgUGFzc093blB0cjxXZWJLaXQ6OldlYkFuaW1hdGlvbj4gY3JlYXRl
V2ViQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWwKICAgICAgICAgICAgIHJl
dmVyc2UgPSB0cnVlOwogICAgIH0KIAotICAgIEN1cnZlIGN1cnZlOworICAgIE93blB0cjxDdXJ2
ZT4gY3VydmUgPSBhZG9wdFB0cihDdXJ2ZTo6Y3JlYXRlKCkpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpKyspIHsKICAgICAgICAgc2l6ZV90IGluZGV4
ID0gcmV2ZXJzZSA/IHZhbHVlTGlzdC5zaXplKCkgLSBpIC0gMSA6IGk7CkBAIC0yNzcsMTQgKzI3
NywxNCBAQCBQYXNzT3duUHRyPFdlYktpdDo6V2ViQW5pbWF0aW9uPiBjcmVhdGVXZWJBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbAogCiAgICAgICAgIGJvb2wgYWRkZWRLZXlm
cmFtZSA9IGZhbHNlOwogICAgICAgICBpZiAoaXNVc2luZ0N1c3RvbUJlemllclRpbWluZ0Z1bmN0
aW9uKQotICAgICAgICAgICAgYWRkZWRLZXlmcmFtZSA9IGFwcGVuZEtleWZyYW1lV2l0aEN1c3Rv
bUJlemllclRpbWluZ0Z1bmN0aW9uPFZhbHVlLCBLZXlmcmFtZSwgQ3VydmU+KGN1cnZlLCBrZXlU
aW1lLCBvcmlnaW5hbFZhbHVlLCBsYXN0T3JpZ2luYWxWYWx1ZSwgeDEsIHkxLCB4MiwgeTIsIGJv
eFNpemUpOworICAgICAgICAgICAgYWRkZWRLZXlmcmFtZSA9IGFwcGVuZEtleWZyYW1lV2l0aEN1
c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uPFZhbHVlLCBLZXlmcmFtZSwgQ3VydmU+KGN1cnZlLmdl
dCgpLCBrZXlUaW1lLCBvcmlnaW5hbFZhbHVlLCBsYXN0T3JpZ2luYWxWYWx1ZSwgeDEsIHkxLCB4
MiwgeTIsIGJveFNpemUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRlZEtleWZyYW1l
ID0gYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxWYWx1ZSwgS2V5ZnJh
bWUsIEN1cnZlPihjdXJ2ZSwga2V5VGltZSwgb3JpZ2luYWxWYWx1ZSwgbGFzdE9yaWdpbmFsVmFs
dWUsIHRpbWluZ0Z1bmN0aW9uVHlwZSwgYm94U2l6ZSk7CisgICAgICAgICAgICBhZGRlZEtleWZy
YW1lID0gYXBwZW5kS2V5ZnJhbWVXaXRoU3RhbmRhcmRUaW1pbmdGdW5jdGlvbjxWYWx1ZSwgS2V5
ZnJhbWUsIEN1cnZlPihjdXJ2ZS5nZXQoKSwga2V5VGltZSwgb3JpZ2luYWxWYWx1ZSwgbGFzdE9y
aWdpbmFsVmFsdWUsIHRpbWluZ0Z1bmN0aW9uVHlwZSwgYm94U2l6ZSk7CiAgICAgICAgIGlmICgh
YWRkZWRLZXlmcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IE93blB0cjxXZWJLaXQ6OldlYkFuaW1hdGlvbj4gYW5pbShhZG9wdFB0cihXZWJLaXQ6OldlYkFu
aW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCBhbmltYXRpb25JZCwgZ3JvdXBJZCwgdGFyZ2V0UHJvcGVy
dHkpKSk7CisgICAgT3duUHRyPFdlYktpdDo6V2ViQW5pbWF0aW9uPiBhbmltKGFkb3B0UHRyKFdl
YktpdDo6V2ViQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUuZ2V0KCksIGFuaW1hdGlvbklkLCBncm91
cElkLCB0YXJnZXRQcm9wZXJ0eSkpKTsKIAogICAgIGludCBpdGVyYXRpb25zID0gKGFuaW1hdGlv
biAmJiBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291bnRTZXQoKSkgPyBhbmltYXRpb24tPml0ZXJh
dGlvbkNvdW50KCkgOiAxOwogICAgIGFuaW0tPnNldEl0ZXJhdGlvbnMoaXRlcmF0aW9ucyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggYmVhNmY5ZWNmOTgyZjc1YjA4ZDg3YjI1YTg0
NDU2YzBmYTA1YWJhNC4uMTEzNjNjZmY3MWRiNzUxNGM5ZWVhMTU0ZjRlMGRkYjFhNWJhNjMyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNTIwLDcgKzUyMCw4IEBACiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgnLAotICAgICAgICAgICAgICAg
ICdzcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMv
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9u
dENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250RGVzY3JpcHRpb24uY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmNwcCcsCkBAIC02NTAsNyArNjUx
LDggQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViVGV4dElucHV0SW5mby5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViVGV4dFJ1bi5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlSW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmVJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJMTG9hZFRp
bWluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViU2NvcGVkVXNlckdlc3R1cmUuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRGaWVsZERlY29yYXRvckNsaWVudC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25JbXBsLmNwcApp
bmRleCAzZDNiNzAyZDgxNjQ3ODU5ZjZiNWIwMDNhNTZiY2VhNzYwZmI4OGY3Li44ZTg0NGQyYWM0
MzhjMTgxZmM5YjBmMzE0YjM4Y2U4NDU2NmUyOWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25JbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJBbmltYXRpb25JbXBsLmNwcApAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1
ZGUgIldlYkFuaW1hdGlvbkltcGwuaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgi
CisjaW5jbHVkZSAiV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuaCIKKyNpbmNsdWRlICJXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1h
dGlvbi5oIgogI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKICNpbmNsdWRlIDxwdWJs
aWMvV2ViQW5pbWF0aW9uLmg+CkBAIC0zOSwxNCArNDEsMzcgQEAgdXNpbmcgV2ViQ29yZTo6Q0NB
Y3RpdmVBbmltYXRpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJBbmltYXRpb24qIFdl
YkFuaW1hdGlvbjo6Y3JlYXRlKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgVGFyZ2V0
UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCitXZWJBbmltYXRpb24qIFdlYkFuaW1hdGlvbjo6Y3Jl
YXRlKFdlYkFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVy
dHkpCiB7CiAgICAgcmV0dXJuIFdlYkFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCBBbmltYXRpb25J
ZFZlbmRvcjo6Z2V0TmV4dEFuaW1hdGlvbklkKCksIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0
R3JvdXBJZCgpLCB0YXJnZXRQcm9wZXJ0eSk7CiB9CiAKLVdlYkFuaW1hdGlvbiogV2ViQW5pbWF0
aW9uOjpjcmVhdGUoY29uc3QgV2ViQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBpbnQgYW5pbWF0aW9u
SWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK1dlYkFuaW1h
dGlvbiogV2ViQW5pbWF0aW9uOjpjcmVhdGUoV2ViQW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBpbnQg
YW5pbWF0aW9uSWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkK
K3sKKyAgICByZXR1cm4gbmV3IFdlYkFuaW1hdGlvbkltcGwoY3VydmUsIGFuaW1hdGlvbklkLCBn
cm91cElkLCB0YXJnZXRQcm9wZXJ0eSk7Cit9CisKK1dlYkFuaW1hdGlvbkltcGw6OldlYkFuaW1h
dGlvbkltcGwoV2ViQW5pbWF0aW9uQ3VydmUqIHdlYkN1cnZlLCBpbnQgYW5pbWF0aW9uSWQsIGlu
dCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBXZWJBbmlt
YXRpb25DdXJ2ZTo6QW5pbWF0aW9uQ3VydmVUeXBlIGN1cnZlVHlwZSA9IHdlYkN1cnZlLT50eXBl
KCk7CisgICAgT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IGN1cnZlOworICAgIHN3
aXRjaCAoY3VydmVUeXBlKSB7CisgICAgY2FzZSBXZWJBbmltYXRpb25DdXJ2ZTo6QW5pbWF0aW9u
Q3VydmVUeXBlRmxvYXQ6IHsKKyAgICAgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwqIGZs
b2F0Q3VydmVJbXBsID0gc3RhdGljX2Nhc3Q8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwqPih3
ZWJDdXJ2ZSk7CisgICAgICAgIGN1cnZlID0gZmxvYXRDdXJ2ZUltcGwtPmNsb25lVG9DQ0FuaW1h
dGlvbkN1cnZlKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYkFuaW1hdGlv
bkN1cnZlOjpBbmltYXRpb25DdXJ2ZVR5cGVUcmFuc2Zvcm06IHsKKyAgICAgICAgV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmVJbXBsKiB0cmFuc2Zvcm1DdXJ2ZUltcGwgPSBzdGF0aWNfY2FzdDxX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwqPih3ZWJDdXJ2ZSk7CisgICAgICAgIGN1cnZl
ID0gdHJhbnNmb3JtQ3VydmVJbXBsLT5jbG9uZVRvQ0NBbmltYXRpb25DdXJ2ZSgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgfQorICAgIG1fYW5pbWF0aW9uID0gQ0NBY3RpdmVBbmltYXRp
b246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBncm91cElkLCBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHk+KHRhcmdldFBy
b3BlcnR5KSk7Cit9CisKK1dlYkFuaW1hdGlvbkltcGw6On5XZWJBbmltYXRpb25JbXBsKCkKIHsK
LSAgICByZXR1cm4gbmV3IFdlYkFuaW1hdGlvbkltcGwoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0
ZShjdXJ2ZSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNDQWN0
aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eT4odGFyZ2V0UHJvcGVydHkpKSk7CiB9CiAKIFdl
YkFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHkgV2ViQW5pbWF0aW9uSW1wbDo6dGFyZ2V0UHJvcGVy
dHkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5p
bWF0aW9uSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uSW1w
bC5oCmluZGV4IDg2NzdiOWM2MDk3ZWU4OThjNDc4ODE4NGUyNjIwOThmN2Q4ZmFjOTkuLmI0ZTBm
NzUxOTNjMDliNjQ4MGU4MTJhOTdmYjg4MThiYWJhOGY2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25JbXBsLmgKQEAgLTM3LDExICszNyw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBbmltYXRpb25JbXBsIDogcHVibGljIFdlYkFuaW1h
dGlvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViQW5pbWF0aW9uSW1wbChQYXNzT3duUHRy
PFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uPiBhbmltYXRpb24pCi0gICAgICAgIDogbV9hbmlt
YXRpb24oYW5pbWF0aW9uKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViQW5pbWF0aW9u
SW1wbCgpIHsgfQorICAgIGV4cGxpY2l0IFdlYkFuaW1hdGlvbkltcGwoV2ViQW5pbWF0aW9uQ3Vy
dmUqLCBpbnQgYW5pbWF0aW9uSWQsIGludCBncm91cElkLCBUYXJnZXRQcm9wZXJ0eSk7CisgICAg
dmlydHVhbCB+V2ViQW5pbWF0aW9uSW1wbCgpOwogCiAgICAgLy8gV2ViQW5pbWF0aW9uIGltcGxl
bWVudGF0aW9uCiAgICAgdmlydHVhbCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSgpIGNv
bnN0IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
bG9hdEFuaW1hdGlvbkN1cnZlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhj
YzliYjk4ZGZkYzQ3NDZiYjBkMmFmYzhkNDUwMWQ4NmYxMTQyOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmg+Ci0KLSNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNv
bW1vbi5oIgotI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNs
dWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFt
ZSkKLXsKLSAgICBhZGQoa2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UpOwotfQotCi12
b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBr
ZXlmcmFtZSwgVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCi17Ci0gICAgbV9wcml2YXRlLT5hZGRL
ZXlmcmFtZShXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBr
ZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGltaW5nRnVuY3Rpb24odHlwZSkpKTsKLX0KLQotdm9pZCBX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJh
bWUsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKLXsKLSAgICBt
X3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGtl
eWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpKTsKLX0KLQotZmxvYXQgV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+Z2V0VmFsdWUodGltZSk7Ci19Ci0KLVdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6
Om9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdAot
ewotICAgIHJldHVybiBtX3ByaXZhdGUtPmNsb25lKCk7Ci19Ci0KLXZvaWQgV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KFdlYkNvcmU6
OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKLX0K
LQotdm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpkZXN0cm95KCkKLXsKLSAgICBtX3ByaXZh
dGUucmVzZXQoMCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjIzY2ZlY2M3YmZhNDYyMDMyYjgxYzFkYmUwMWQ2OTgwZjc4ODdiYWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1h
dGlvbkN1cnZlSW1wbC5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuaCIK
KworI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NB
bmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
aCIKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKiBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUo
KQoreworICAgIHJldHVybiBuZXcgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwoV2ViQ29yZTo6
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7Cit9CisKK1dlYkZsb2F0
QW5pbWF0aW9uQ3VydmVJbXBsOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbChQYXNzT3duUHRy
PFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUpCisgICAgOiBt
X2N1cnZlKGN1cnZlKQoreworfQorCitXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6fldlYkZs
b2F0QW5pbWF0aW9uQ3VydmVJbXBsKCkKK3sKK30KKworV2ViQW5pbWF0aW9uQ3VydmU6OkFuaW1h
dGlvbkN1cnZlVHlwZSBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6dHlwZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdlYkFuaW1hdGlvbkN1cnZlOjpBbmltYXRpb25DdXJ2ZVR5cGVGbG9hdDsK
K30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6YWRkKGNvbnN0IFdlYkZsb2F0
S2V5ZnJhbWUmIGtleWZyYW1lKQoreworICAgIGFkZChrZXlmcmFtZSwgVGltaW5nRnVuY3Rpb25U
eXBlRWFzZSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6OmFkZChjb25z
dCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7
CisgICAgbV9jdXJ2ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1lOjpjcmVh
dGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIGNyZWF0ZVRpbWluZ0Z1bmN0aW9uKHR5
cGUpKSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6OmFkZChjb25zdCBX
ZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4
MiwgZG91YmxlIHkyKQoreworICAgIG1fY3VydmUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxv
YXRLZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBXZWJDb3Jl
OjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpKTsK
K30KKworZmxvYXQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6OmdldFZhbHVlKGRvdWJsZSB0
aW1lKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnZlLT5nZXRWYWx1ZSh0aW1lKTsKK30KKwor
UGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlSW1wbDo6Y2xvbmVUb0NDQW5pbWF0aW9uQ3VydmUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2N1cnZlLT5jbG9uZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU4ZjE2MjBkNmI5MDFlYTg5MDgyYzAyNTEzYmU5ZWU3MWY1Y2M0MGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1h
dGlvbkN1cnZlSW1wbC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGxfaAorI2RlZmluZSBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlSW1wbF9oCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwgOiBwdWJsaWMgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwo
UGFzc093blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+KTsKKyAg
ICB2aXJ0dWFsIH5XZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCgpOworCisgICAgLy8gV2ViQW5p
bWF0aW9uQ3VydmUgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCBBbmltYXRpb25DdXJ2ZVR5
cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgLy8gV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5
ZnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5
ZnJhbWUmLCBUaW1pbmdGdW5jdGlvblR5cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBh
ZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUg
eDIsIGRvdWJsZSB5MikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGZsb2F0IGdldFZhbHVlKGRv
dWJsZSB0aW1lKSBjb25zdCBPVkVSUklERTsKKworICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NB
bmltYXRpb25DdXJ2ZT4gY2xvbmVUb0NDQW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBt
X2N1cnZlOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGxf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTk1ZmEz
OWVkYmU3YTg2MmUzYzBlMWY4ODI0YWQxNjJkYmFjMTE5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
LSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oPgotCi0jaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3Vy
dmVDb21tb24uaCIKLSNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCi0j
aW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9p
ZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZy
YW1lJiBrZXlmcmFtZSkKLXsKLSAgICBhZGQoa2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZUVh
c2UpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lLCBUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSkKLXsK
LSAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGltaW5nRnVuY3Rp
b24odHlwZSkpKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkKGNv
bnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyKQotewotICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2Vi
Q29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1l
LnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwg
eTEsIHgyLCB5MikpKTsKLX0KLQotV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPmdldFZhbHVlKHRpbWUpOwotfQotCi1XZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2xvbmUoKTsKLX0KLQotdm9pZCBXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6aW5pdGlhbGl6ZSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0
KFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpLmxl
YWtQdHIoKSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3ko
KQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmVJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmI5NjAxMDdiNmE4NzUzYWU5
NjA4ZDA2ODExZWIyODhmMjZlYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsLmNwcApAQCAtMCwwICsx
LDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuaCIKKworI2luY2x1ZGUgIldlYkFuaW1hdGlv
bkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5o
IgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1w
bChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7
Cit9CisKK1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbDo6V2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVJbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4gY3VydmUpCisgICAgOiBtX2N1cnZlKGN1cnZlKQoreworfQorCitXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZUltcGw6On5XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwo
KQoreworfQorCitXZWJBbmltYXRpb25DdXJ2ZTo6QW5pbWF0aW9uQ3VydmVUeXBlIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlSW1wbDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkFu
aW1hdGlvbkN1cnZlOjpBbmltYXRpb25DdXJ2ZVR5cGVUcmFuc2Zvcm07Cit9CisKK3ZvaWQgV2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsOjphZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJh
bWUmIGtleWZyYW1lKQoreworICAgIGFkZChrZXlmcmFtZSwgVGltaW5nRnVuY3Rpb25UeXBlRWFz
ZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsOjphZGQoY29uc3Qg
V2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lLCBUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSkK
K3sKKyAgICBtX2N1cnZlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1l
OjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIGNyZWF0ZVRpbWluZ0Z1bmN0
aW9uKHR5cGUpKSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsOjph
ZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lLCBkb3VibGUgeDEsIGRvdWJs
ZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCit7CisgICAgbV9jdXJ2ZS0+YWRkS2V5ZnJhbWUo
V2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZy
YW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4
MSwgeTEsIHgyLCB5MikpKTsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmVJbXBsOjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jdXJ2ZS0+Z2V0VmFsdWUodGltZSk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29y
ZTo6Q0NBbmltYXRpb25DdXJ2ZT4gV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsOjpjbG9u
ZVRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VydmUtPmNsb25l
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NWEwM2VmMDZjOWViMDUzZjA5MTg3YzM1MmE1OTFjZDc2MTBkZTcyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVJbXBsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGxfaAorI2RlZmluZSBXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZUltcGxfaAorCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7Citj
bGFzcyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsIDogcHVibGlj
IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwoUGFzc093blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPik7CisgICAgdmlydHVhbCB+V2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmVJbXBsKCk7CisKKyAgICAvLyBXZWJBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2aXJ0dWFsIEFuaW1hdGlvbkN1cnZlVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJ
REU7CisKKyAgICAvLyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbi4K
KyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIFRp
bWluZ0Z1bmN0aW9uVHlwZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRv
dWJsZSB5MikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdCBPVkVSUklERTsKKworICAgIFBhc3NPd25QdHI8
V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmVUb0NDQW5pbWF0aW9uQ3VydmUoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZT4gbV9jdXJ2ZTsKK307CisKK30KKworI2VuZGlmIC8vIFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBlNjFhNWE3YmQ0
ZWI2ZDY3Mzc4YTk2OGRmN2RjMjBkNmY0YjNkZDg1Li40ZmVhMjE0ZDYzOTUwMTgyZDlhZjNlYzg1
ODI2YzYzZDc5ZDQ1MWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTk2LDkgKzk2LDkgQEAg
VEVTVF9GKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QsIHVwZGF0ZUxheWVyUHJlc2VydmVzM0RX
aXRoQW5pbWF0aW9ucykKIHsKICAgICBBU1NFUlRfRkFMU0UobV9wbGF0Zm9ybUxheWVyLT5oYXNB
Y3RpdmVBbmltYXRpb24oKSk7CiAKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwot
ICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAuMCwgMC4wKSk7Ci0gICAgT3duUHRyPFdl
YkFuaW1hdGlvbj4gZmxvYXRBbmltYXRpb24oYWRvcHRQdHIoV2ViQW5pbWF0aW9uOjpjcmVhdGUo
Y3VydmUsIDEsIDEsIFdlYkFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5KSkpOworICAg
IE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMC4wLCAwLjApKTsKKyAgICBPd25QdHI8V2ViQW5pbWF0aW9uPiBmbG9hdEFuaW1hdGlvbihh
ZG9wdFB0cihXZWJBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5nZXQoKSwgMSwgMSwgV2ViQW5pbWF0
aW9uOjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHkpKSk7CiAgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9y
bUxheWVyLT5hZGRBbmltYXRpb24oZmxvYXRBbmltYXRpb24uZ2V0KCkpKTsKIAogICAgIEFTU0VS
VF9UUlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAKaW5kZXggYTY4
MmFiMDIwMDIxYTc5MzUzMzkyMmFlY2Y4MGViMzU4YjI0NzAwNy4uYzNhZjQ2NTg0NDY5YTNmMzUz
NjdhMzU0NTNiYmI4NDQzZDI2MGFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCkBAIC00Niw4ICs0Niw4IEBAIG5hbWVzcGFjZSB7
CiAjZW5kaWYKIFRFU1QoV2ViQW5pbWF0aW9uVGVzdCwgTUFZQkVfRGVmYXVsdFNldHRpbmdzKQog
ewotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgT3duUHRyPFdlYkFuaW1h
dGlvbj4gYW5pbWF0aW9uID0gYWRvcHRQdHIoV2ViQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIFdl
YkFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5KSk7CisgICAgT3duUHRyPFdlYkFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpKTsKKyAgICBPd25QdHI8V2ViQW5pbWF0aW9uPiBhbmltYXRpb24gPSBhZG9wdFB0cihXZWJB
bmltYXRpb246OmNyZWF0ZShjdXJ2ZS5nZXQoKSwgV2ViQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0
eU9wYWNpdHkpKTsKIAogICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0cyBhcmUgY29ycmVj
dC4KICAgICBFWFBFQ1RfRVEoMSwgYW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOwpAQCAtNjcsOCAr
NjcsOCBAQCBURVNUKFdlYkFuaW1hdGlvblRlc3QsIE1BWUJFX0RlZmF1bHRTZXR0aW5ncykKICNl
bmRpZgogVEVTVChXZWJBbmltYXRpb25UZXN0LCBNQVlCRV9Nb2RpZmllZFNldHRpbmdzKQogewot
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgT3duUHRyPFdlYkFuaW1hdGlv
bj4gYW5pbWF0aW9uID0gYWRvcHRQdHIoV2ViQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIFdlYkFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5KSk7CisgICAgT3duUHRyPFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkpOworICAgIE93blB0cjxXZWJBbmltYXRpb24+IGFuaW1hdGlvbiA9IGFkb3B0UHRyKFdl
YkFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLmdldCgpLCBXZWJBbmltYXRpb246OlRhcmdldFByb3Bl
cnR5T3BhY2l0eSkpOwogICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9ucygyKTsKICAgICBhbmlt
YXRpb24tPnNldFN0YXJ0VGltZSgyKTsKICAgICBhbmltYXRpb24tPnNldFRpbWVPZmZzZXQoMik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZsb2F0QW5pbWF0
aW9uQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZVRlc3QuY3BwCmluZGV4IGJkZmU0ZWM3ZDkyOTUyOThjYTY0NmI2ZWE2OTI0
NGI1NDBiNTVhNDcuLjlmNjI0YjY0MTU0NWJjMWUyZDI2MTkwMGMzODg4NmQ5NDM4MjdjM2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC0zOSwxOTcgKzM5LDE5NyBAQCBuYW1lc3BhY2Ugewog
Ly8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBh
cyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIE9uZUZsb2F0S2V5
ZnJhbWUpCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0x
KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMC41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDIsIGN1cnZlLmdldFZhbHVlKDEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0
VmFsdWUoMikpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFk
b3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRk
KFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+
Z2V0VmFsdWUoMikpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGgg
dHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJhbWUpCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOwotICAg
IEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2
ZS5nZXRWYWx1ZSgxKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDIp
KTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9h
dEtleWZyYW1lKDAsIDIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGlu
ZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEg
ZmxvYXQgYW5pbWF0aW9uIHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgog
VEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZyYW1lKQogewot
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgyLCA4KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MywgY3VydmUuZ2V0VmFsdWUoMC41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdl
dFZhbHVlKDEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KSk7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxv
YXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMykpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGgg
bXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgogVEVTVChXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVzKQogewotICAgIFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MCwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAg
IGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgx
LCA2KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAg
Y3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgNiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
PiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAg
ICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Cisg
ICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDYpLCBXZWJBbmltYXRpb25DdXJ2ZTo6
VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMiwgNiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwog
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwg
Y3VydmUuZ2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRW
YWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CiAKICAgICAvLyBU
aGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBp
cyB2YWxpZC4KLSAgICBmbG9hdCB2YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIGZsb2F0
IHZhbHVlID0gY3VydmUtPmdldFZhbHVlKDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlID49IDQg
JiYgdmFsdWUgPD0gNik7CiAKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUo
MS41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDIpKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMykpOworICAgIEVYUEVDVF9GTE9BVF9F
USg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZl
LT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgz
KSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9m
IG9yZGVyLgogVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlmcmFt
ZXMpCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgyLCA4KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFu
aW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChX
ZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKLQotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkp
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0
LCBjdXJ2ZS5nZXRWYWx1ZSgxKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZh
bHVlKDEuNSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDMpKTsKKyAgICBPd25QdHI8V2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBX
ZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+
YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwg
V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5n
ZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9F
USg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgY3ViaWMgYmV6
aWVyIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgw
LCAwKSwgMC4yNSwgMCwgMC43NSwgMSk7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotCi0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfTFQo
MCwgY3VydmUuZ2V0VmFsdWUoMC4yNSkpOwotICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS5nZXRW
YWx1ZSgwLjI1KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUuZ2V0VmFsdWUoMC41
KSk7Ci0gICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLmdldFZhbHVlKDAuNzUpKTsKLSAgICBFWFBF
Q1RfR1QoMSwgY3VydmUuZ2V0VmFsdWUoMC43NSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBj
dXJ2ZS5nZXRWYWx1ZSgxKSk7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1
cnZlID0gYWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1
cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAg
Y3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBjdXJ2ZS0+
Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOwor
ICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgwLjUsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwg
Y3VydmUtPmdldFZhbHVlKDAuNzUpKTsKKyAgICBFWFBFQ1RfR1QoMSwgY3VydmUtPmdldFZhbHVl
KDAuNzUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgY3VydmUtPmdldFZhbHVlKDEpKTsKIH0K
IAogLy8gVGVzdHMgdGhhdCBhbiBlYXNlIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3Rl
ZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VUaW1pbmdGdW5jdGlvbikK
IHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJG
bG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
RWFzZSk7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIE93blB0cjxXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNy
ZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1
bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0g
aSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFs
dWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VR
KHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsK
ICAgICB9CiB9CiAKIC8vIFRlc3RzIHVzaW5nIGEgbGluZWFyIHRpbWluZyBmdW5jdGlvbi4KIFRF
U1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQogewot
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVh
dGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNv
bnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1l
LCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBj
dXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCBhbiBlYXNl
IGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIEVhc2VJblRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCks
IFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW4pOwotICAgIGN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUgPSBhZG9wdFB0cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3Vy
dmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlRWFzZUluKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwg
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAg
T3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6
OkNDRWFzZUluVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAg
ICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3Vy
dmUuZ2V0VmFsdWUodGltZSkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rp
b24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwogICAgIH0KIH0KIAog
Ly8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3Rl
ZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VPdXRUaW1pbmdGdW5jdGlv
bikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChX
ZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlRWFzZU91dCk7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFu
aW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIE93blB0cjxXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdl
YkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsKKyAgICBjdXJ2ZS0+
YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZU91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRv
dWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5j
dGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZh
bHVlKHRpbWUpKTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcg
ZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVU
ZXN0LCBFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0KTsKLSAgICBjdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0g
YWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUVhc2VJbk91dCk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93
blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpD
Q0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0g
ICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1
cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0
aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKICAgICB9CiB9CiAK
IC8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0
ZWQuCiBURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBDdXN0b21CZXppZXJUaW1pbmdG
dW5jdGlvbikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0
cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBkb3VibGUgeDEgPSAwLjM7CiAgICAgZG91YmxlIHkx
ID0gMC4yOwogICAgIGRvdWJsZSB4MiA9IDAuODsKICAgICBkb3VibGUgeTIgPSAwLjc7Ci0gICAg
Y3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIHgxLCB5MSwgeDIsIHkyKTsKLSAgICBj
dXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDAs
IDApLCB4MSwgeTEsIHgyLCB5Mik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEs
IDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAg
IE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3Jl
OjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgewogICAgICAgICBjb25zdCBkb3VibGUg
dGltZSA9IGkgKiAwLjI1OwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24t
PmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgICAgIEVYUEVDVF9G
TE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0
aW1lKSk7CiAgICAgfQogfQogCiAvLyBUZXN0cyB0aGF0IHRoZSBkZWZhdWx0IHRpbWluZyBmdW5j
dGlvbiBpcyBpbmRlZWQgZWFzZS4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIERl
ZmF1bHRUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZl
OwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApKTsKLSAgICBjdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0g
YWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZy
YW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
IAogICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihX
ZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IDQ7ICsraSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1
OwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUp
LCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdG
dW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKaW5kZXggZjE4Zjg3YmUyMDNiMjBiOTlj
NTI3NTJlMTYyOGQ0MWRhM2NiNzQ0Ny4uZWI4YTgwOTYxYjllN2M3Yzg4NDZlZWNiNWJkZjRmMzA2
M2Q2MGRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtNDEsNjIgKzQxLDYy
IEBAIG5hbWVzcGFjZSB7CiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRo
IG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVUZXN0LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkKIHsKLSAgICBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
KTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKICAgICBv
cGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9ucyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
MCwgb3BlcmF0aW9ucyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOwogCi0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMiwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBj
dXJ2ZS0+Z2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUt
PmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZh
bHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQx
KCkpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBr
ZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlVGVzdCwgVHdvVHJhbnNmb3JtS2V5ZnJhbWUpCiB7Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJh
dGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRl
KDQsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRp
b25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAg
IGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBj
dXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdl
dFZhbHVlKDAuNSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1
ZSgxKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDIpLm00
MSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMx
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3Vy
dmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3Vy
dmUtPmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdl
dFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFs
dWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMiku
bTQxKCkpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRo
cmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQogewotICAgIFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRl
KCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAg
ICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRy
YW5zbGF0ZSg0LCAwLCAwKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczM7CiAgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDgsIDAsIDApOwotICAg
IGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgyLCBvcGVyYXRpb25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkp
OwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkpOwotICAgIEVYUEVD
VF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDYsIGN1cnZlLmdldFZhbHVlKDEuNSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg4
LCBjdXJ2ZS5nZXRWYWx1ZSgyKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZl
LmdldFZhbHVlKDMpLm00MSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1l
KDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25z
MiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1
cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MiwgY3VydmUtPmdldFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1
cnZlLT5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5n
ZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZh
bHVlKDEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEu
NSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQx
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykubTQxKCkpOwog
fQogCiAvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtl
eXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVUZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQogewogICAgIC8vIEEgc3Rl
cCBmdW5jdGlvbi4KLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBP
d25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDQsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKQEAgLTEwNSwxNTkgKzEwNSwxNTkgQEAgVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCiAgICAgb3BlcmF0aW9uczMuYXBwZW5k
VHJhbnNsYXRlKDYsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zNDsKICAgICBvcGVyYXRpb25zNC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7Ci0g
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlv
bnM0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAg
Y3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRp
b25zNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCi0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQ
RUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQsIGN1cnZlLT5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBj
dXJ2ZS0+Z2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoMC41KS5tNDEoKSk7CiAKICAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkg
YXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KLSAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IHZhbHVlID0gY3VydmUtPmdldFZhbHVlKDEpOwogICAgIEVYUEVDVF9UUlVF
KHZhbHVlLm00MSgpID49IDQgJiYgdmFsdWUubTQxKCkgPD0gNik7CiAKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VR
KDYsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3Vy
dmUuZ2V0VmFsdWUoMykubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0
VmFsdWUoMS41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1
ZSgyKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKS5t
NDEoKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0
IG9mIG9yZGVyLgogVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFVuc29ydGVk
S2V5ZnJhbWVzKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAg
IE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xh
dGUoMiwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKICAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CiAgICAgb3BlcmF0aW9uczMu
YXBwZW5kVHJhbnNsYXRlKDgsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlm
cmFtZSgyLCBvcGVyYXRpb25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRp
b25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAg
IGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotCi0gICAgRVhQRUNUX0ZMT0FU
X0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIs
IGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUu
Z2V0VmFsdWUoMC41KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZh
bHVlKDEpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41
KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgp
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykubTQxKCkpOworICAg
IGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlm
cmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkubTQxKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDIpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoOCwgY3VydmUtPmdldFZhbHVlKDMpLm00MSgpKTsKIH0KIAogLy8gVGVzdHMgdGhhdCBhIGN1
YmljIGJlemllciB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKIHsK
LSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwog
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVy
YXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgMC4yNSwgMCwgMC43NSwgMSk7Ci0gICAgY3Vy
dmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9u
Q3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAs
IGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBFWFBFQ1RfTFQoMCwgY3VydmUuZ2V0VmFs
dWUoMC4yNSkubTQxKCkpOwotICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1
KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUuZ2V0VmFsdWUoMC41KS5t
NDEoKSk7Ci0gICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLmdldFZhbHVlKDAuNzUpLm00MSgpKTsK
LSAgICBFWFBFQ1RfR1QoMSwgY3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOwotICAgIEVYUEVD
VF9GTE9BVF9FUSgxLCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgY3VydmUtPmFkZChX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIDAuMjUsIDAsIDAuNzUsIDEpOwor
ICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJB
bmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgY3VydmUtPmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3Vy
dmUtPmdldFZhbHVlKDAuMjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfR1QoMC4yNSwgY3VydmUtPmdl
dFZhbHVlKDAuMjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLT5nZXRWYWx1ZSgw
Ljc1KS5tNDEoKSk7CisgICAgRVhQRUNUX0dUKDEsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1KS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7CiB9
CiAKIC8vIFRlc3RzIHRoYXQgYW4gZWFzZSB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0
ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZVRpbWluZ0Z1bmN0
aW9uKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0
cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwg
MCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwog
ICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6
VGltaW5nRnVuY3Rpb25UeXBlRWFzZSk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRp
b25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKKyAgICBj
dXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAgICBPd25QdHI8V2ViQ29y
ZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsK
ICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGlt
ZSkubTQxKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZh
bHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0KIAogLy8g
VGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0aW9uLgogVEVTVChXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsK
ICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVu
ZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
MCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGlu
ZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2
ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9u
Q3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7
CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9G
TE9BVF9FUSh0aW1lLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgICAgIEVYUEVD
VF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0K
IAogLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBl
Y3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5UaW1pbmdG
dW5jdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBP
d25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDAsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUu
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW4p
OworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBX
ZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0
cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vh
c2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0g
NDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAg
IEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdl
dFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0
aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKICAgICB9
CiB9CiAKIC8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMg
ZXhwZWN0ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZU91dFRp
bWluZ0Z1bmN0aW9uKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOwor
ICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFu
c2xhdGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBj
dXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCk7Ci0gICAgY3VydmUuYWRkKFdlYlRy
YW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVF
YXNlT3V0KTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAg
ICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29y
ZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsK
LSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwg
Y3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGlt
aW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkp
OwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3
b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBF
YXNlSW5PdXRUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0g
YWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEu
YXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwg
MCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwg
V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCk7Ci0gICAgY3Vy
dmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9u
Q3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVFYXNlSW5PdXQpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKIAogICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdG
dW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0
aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+
Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICAgICAgRVhQ
RUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZh
bHVlKHRpbWUpLm00MSgpKTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0
aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdCwgQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpj
cmVhdGUoKSk7CiAgICAgZG91YmxlIHgxID0gMC4zOwogICAgIGRvdWJsZSB5MSA9IDAuMjsKICAg
ICBkb3VibGUgeDIgPSAwLjg7CkBAIC0yNjYsMzEgKzI2NiwzMSBAQCBURVNUKFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlVGVzdCwgQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCiAgICAgb3Bl
cmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xh
dGUoMSwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJh
dGlvbnMxKSwgeDEsIHkxLCB4MiwgeTIpOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlm
cmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0
aW9uczEpLCB4MSwgeTEsIHgyLCB5Mik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlm
cmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWlu
Z0Z1bmN0aW9uKFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgx
LCB5MSwgeDIsIHkyKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9F
USh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00
MSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0
aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKICAgICB9CiB9CiAKIC8vIFRlc3Rz
IHRoYXQgdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgogVEVTVChX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5jdGlvbikKIHsK
LSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwog
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKICAgICBvcGVy
YXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSkpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3Bl
cmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
IAogICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihX
ZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IDQ7ICsraSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1
OwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUp
LCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0
aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEo
KSk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160286</attachid>
            <date>2012-08-23 17:05:45 -0700</date>
            <delta_ts>2012-08-23 17:24:53 -0700</delta_ts>
            <desc>make non-ownership-transfer functions take const refs</desc>
            <filename>bug-94068-20120823170541.patch</filename>
            <type>text/plain</type>
            <size>75414</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA2MzNlMmVmZTIxYzQ3
Zjk4ZjIxYTZlMjJmMGE5MjU3ZDVkZTBhNTM1Li40MTkwYzJjMmFiMGE3NGE4NDFhMjFmYWYzMWJl
ZjY1ZTAzYWQwYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0wOC0yMyAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ29udmVydCBXZWJBbmltYXRpb25DdXJ2ZSBzdWJ0eXBlcyBpbnRvIHB1cmUgdmlydHVhbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQwNjgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG1ha2Vz
IHRoZSBXZWIqQW5pbWF0aW9uQ3VydmUgaW50ZXJmYWNlcyBwdXJlIHZpcnR1YWwgdG8gcHJvdmlk
ZSBiZXR0ZXIgaW5zdWxhdGlvbiBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBkZXRh
aWxzIG9mIHRoZSBjbGFzc2VzLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1h
dGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJBbmltYXRpb24pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmlt
YXRpb25DdXJ2ZS5oOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlLmg6CisgICAgICAgIChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgor
ICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oOgor
ICAgICAgICAoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6fldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToK
KwogMjAxMi0wOC0yMiAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIFdlYkxheWVyOjpzZXRDaGlsZHJlbiBBUEkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA5MTY0NzczMzNlZjc4ZDk5ZWYxOWI4NDcxNWRkMWY1NWZiZTYzNTkzLi5jNmQ2YzA1
YTFhZWFlZTQ4ZDNhOTMyZjgyZjc4NmUxZjZmZTIxZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMTItMDgtMjMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4K
KworICAgICAgICBbY2hyb21pdW1dIENvbnZlcnQgV2ViQW5pbWF0aW9uQ3VydmUgc3VidHlwZXMg
aW50byBwdXJlIHZpcnR1YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk0MDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVXBkYXRlcyB1c2VycyBvZiB0aGUgV2ViKkFuaW1hdGlvbkN1cnZlIGludGVyZmFj
ZSBmb3IgaXRzIG5ldyBwb2ludGVyeSBnb29kbmVzcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0FuaW1hdGlvblRyYW5zbGF0aW9uVXRpbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBlbmRLZXlmcmFtZVdpdGhTdGFuZGFyZFRpbWluZ0Z1bmN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGVuZEtleWZyYW1lV2l0aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZVdlYkFuaW1hdGlvbik6CisKIDIwMTItMDgtMjMgIE90dG8gRGVy
ZWsgQ2hldW5nICA8b3RjaGV1bmdAcmltLmNvbT4KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IGE3Yjk1NDAxNmJhMDI2Mjc0ZDYyODU1ODQ2OGIxZDhkMWRhNTAwYzIuLjBjM2I2MDAy
Y2U3ZjIzNWUzMzRjZTdhNTFmNTg5YmQyNWEwODg2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTItMDgtMjMgIEphbWVzIFJvYmluc29uICA8amFtZXNy
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENvbnZlcnQgV2ViQW5pbWF0aW9u
Q3VydmUgc3VidHlwZXMgaW50byBwdXJlIHZpcnR1YWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MDY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlcyB0aGUgaW1wbGVtZW50YXRpb25zLCBzb21l
IGNhbGxlcnMgYW5kIHRlc3RzIG9mIFdlYipBbmltYXRpb25DdXJ2ZSB0byBpdHMgbmV3IGludGVy
ZmFjZS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlv
bi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmNwcDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwLgorICAg
ICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6Oldl
YkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZUltcGw6On5XZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjp0eXBlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6OmFkZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjpnZXRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjpjbG9uZVRvQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAg
ICAgICogc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiB0ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6
CisgICAgICAgICogdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKwogMjAxMi0wOC0yMyAgRGFu
YSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIERv
bid0IHJlcXVpcmUgYSBSZW5kZXJTdXJmYWNlKiBpbiBvcmRlciB0byBjcmVhdGUgYSBSZW5kZXJQ
YXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1h
dGlvbi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaApp
bmRleCAyMzhiYmFhZTEyMGFhY2MxM2Q4YTc1NDU3Y2YxYTNhYWMzNTY0NDM4Li42MjEzMzBjN2My
ODZiYmY1YjRiNzYwN2Q5ODZhNjk1MmM1YzFlMjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgog
ICAgICAgICBUYXJnZXRQcm9wZXJ0eU9wYWNpdHkKICAgICB9OwogCi0gICAgLy8gVGhlIGNhbGxl
ciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHJldHVybmVkIHZhbHVldgorICAgIC8vIFRoZSBjYWxs
ZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSByZXR1cm5lZCB2YWx1ZS4KICAgICBXRUJLSVRfRVhQ
T1JUIHN0YXRpYyBXZWJBbmltYXRpb24qIGNyZWF0ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYs
IFRhcmdldFByb3BlcnR5KTsKIAogICAgIC8vIEFuIGFuaW1hdGlvbklkIGlzIGVmZmVjdGl2ZWx5
IHRoZSBhbmltYXRpb24ncyBuYW1lLCBhbmQgaXQgaXMgbm90IHVuaXF1ZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaAppbmRleCBl
OWVjYzFlZGE0MTk4ZWMzNjMxNGY0NDA3MjUzZGYwM2M1Nzg0NThhLi5lYzA1ZDM3OTNmYzBiOTY2
MjdhZmU0MzE2ZmM3MDIyNmIzOTZhY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oCkBAIC0yNiwxOSArMjYsMTEgQEAKICNk
ZWZpbmUgV2ViQW5pbWF0aW9uQ3VydmVfaAogCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5j
bHVkZSAiV2ViTm9uQ29weWFibGUuaCIKIAotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgQ0NBbmltYXRpb25DdXJ2ZTsKLX0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdl
YkFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK2NsYXNzIFdlYkFuaW1h
dGlvbkN1cnZlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJBbmltYXRpb25DdXJ2ZSgpIHsg
fQogCkBAIC01MCwxMiArNDIsMTIgQEAgcHVibGljOgogICAgICAgICBUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIKICAgICB9OwogCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgdmlydHVh
bCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3Qg
PSAwOwotI2VuZGlmCisgICAgZW51bSBBbmltYXRpb25DdXJ2ZVR5cGUgeworICAgICAgICBBbmlt
YXRpb25DdXJ2ZVR5cGVGbG9hdCwKKyAgICAgICAgQW5pbWF0aW9uQ3VydmVUeXBlVHJhbnNmb3Jt
LAorICAgIH07CiAKLXByb3RlY3RlZDoKLSAgICBXZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorICAg
IHZpcnR1YWwgQW5pbWF0aW9uQ3VydmVUeXBlIHR5cGUoKSBjb25zdCA9IDA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgKaW5kZXggNjVhN2YyNDM4Y2ZhZDJmMmI3
Y2I2MWU3MWY5Mzc5YTE4NzY3OWM2ZC4uYjU2YjNiZDRkOTI5MGRmZjgzNTRlMjNjNzAwMDFlYmFj
ZWNhMGVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJG
bG9hdEFuaW1hdGlvbkN1cnZlLmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgKQEAgLTI5LDQzICsyOSwyNCBAQAogCiAjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCiAjaW5jbHVkZSAiV2ViRmxvYXRLZXlmcmFtZS5oIgotI2luY2x1ZGUg
IldlYlByaXZhdGVPd25QdHIuaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
Q0NBbmltYXRpb25DdXJ2ZTsKLWNsYXNzIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTsK
LX0KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEEga2V5ZnJhbWVkIGZsb2F0IGFuaW1hdGlv
biBjdXJ2ZS4KIGNsYXNzIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViQW5pbWF0
aW9uQ3VydmUgewogcHVibGljOgotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUoKSB7IGluaXRp
YWxpemUoKTsgfQotICAgIHZpcnR1YWwgfldlYkZsb2F0QW5pbWF0aW9uQ3VydmUoKSB7IGRlc3Ry
b3koKTsgfQorICAgIFdFQktJVF9FWFBPUlQgc3RhdGljIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUq
IGNyZWF0ZSgpOworCisgICAgdmlydHVhbCB+V2ViRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsgfQog
CiAgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCB0aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rp
b24gKGVhc2UpLgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViRmxvYXRLZXlm
cmFtZSYpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFt
ZSYsIFRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJG
bG9hdEtleWZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgV2ViRmxvYXRL
ZXlmcmFtZSYsIFRpbWluZ0Z1bmN0aW9uVHlwZSkgPSAwOwogICAgIC8vIEFkZHMgdGhlIGtleWZy
YW1lIHdpdGggYSBjdXN0b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24uIE5vdGUsIGl0IGlzCiAg
ICAgLy8gYXNzdW1lZCB0aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5MyA9IDEuCi0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgZG91YmxlIHgxLCBk
b3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKLQotICAgIFdFQktJVF9FWFBPUlQgZmxv
YXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0OwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCi0gICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9u
Q3VydmU+KCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgaW5pdGlhbGl6ZSgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95KCk7CisgICAg
dmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgZG91YmxlIHgxLCBkb3Vi
bGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKSA9IDA7CiAKLSAgICBXZWJQcml2YXRlT3duUHRy
PFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gbV9wcml2YXRlOworICAg
IHZpcnR1YWwgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0ID0gMDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oCmluZGV4IDk5Y2I2NzA1
NWQ3NmU3NzM5NDAzYjg3ZjAyNWFjZGJkODEyOGM3MzkuLjY5OWU0OThjODI0YTE5OTNiNWRiOGJl
MTBmNjcwOGY1YmU0Mjk4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaAorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmgKQEAgLTI4LDQ1ICsy
OCwyNyBAQAogI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlLmgiCiAKICNpbmNsdWRlICJXZWJD
b21tb24uaCIKLSNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCiAjaW5jbHVkZSAiV2ViVHJh
bnNmb3JtS2V5ZnJhbWUuaCIKICNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
Ci0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOwotY2xh
c3MgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTsKLX0KLQogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIC8vIEEga2V5ZnJhbWVkIHRyYW5zZm9ybSBhbmltYXRpb24gY3VydmUuCiBjbGFz
cyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBXZWJBbmltYXRpb25DdXJ2ZSB7
CiBwdWJsaWM6Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IGluaXRpYWxpemUo
KTsgfQotICAgIHZpcnR1YWwgfldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyBkZXN0cm95
KCk7IH0KKyAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSogY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgp
IHsgfQogCiAgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCB0aGUgZGVmYXVsdCB0aW1pbmcg
ZnVuY3Rpb24gKGVhc2UpLgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJh
bnNmb3JtS2V5ZnJhbWUmKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRy
YW5zZm9ybUtleWZyYW1lJiwgVGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBh
ZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmLCBUaW1pbmdGdW5jdGlvblR5cGUpID0gMDsK
ICAgICAvLyBBZGRzIHRoZSBrZXlmcmFtZSB3aXRoIGEgY3VzdG9tLCBiZXppZXIgdGltaW5nIGZ1
bmN0aW9uLiBOb3RlLCBpdCBpcwogICAgIC8vIGFzc3VtZWQgdGhhdCB4MCA9IHkwID0gMCwgYW5k
IHgzID0geTMgPSAxLgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNm
b3JtS2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIp
OwotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShk
b3VibGUgdGltZSkgY29uc3Q7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICB2aXJ0
dWFsIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25z
dDsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJh
bWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpID0gMDsKIAot
cHJvdGVjdGVkOgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdCA9IDA7CiAKLSAgICBXZWJQcml2YXRl
T3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IG1fcHJp
dmF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0aW9uVHJhbnNsYXRpb25VdGls
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0FuaW1hdGlv
blRyYW5zbGF0aW9uVXRpbC5jcHAKaW5kZXggNjNjZmYzMGQ5OTY1ZWUzYTc4NTRlYWQ5OWJkMTI5
YzU1MTVmYjgwOS4uODA2NGFlMzhlZDIwNjdmMTMwNTE1OTdmNGI2OTc5NGZjNDJmYWQ0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQW5pbWF0
aW9uVHJhbnNsYXRpb25VdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9BbmltYXRpb25UcmFuc2xhdGlvblV0aWwuY3BwCkBAIC0xMjMsMTYgKzEy
MywxNiBAQCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHRvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyhj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0cmFucwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVmFs
dWUsIGNsYXNzIEtleWZyYW1lLCBjbGFzcyBDdXJ2ZT4KLWJvb2wgYXBwZW5kS2V5ZnJhbWVXaXRo
U3RhbmRhcmRUaW1pbmdGdW5jdGlvbihDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlUaW1lLCBjb25z
dCBWYWx1ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIFdlYktpdDo6V2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSB0aW1pbmdGdW5jdGlvblR5cGUsIGNvbnN0IEZs
b2F0U2l6ZSYpCitib29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5nRnVuY3Rpb24o
Q3VydmUqIGN1cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBjb25zdCBW
YWx1ZSogbGFzdFZhbHVlLCBXZWJLaXQ6OldlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGUgdGltaW5nRnVuY3Rpb25UeXBlLCBjb25zdCBGbG9hdFNpemUmKQogewotICAgIGN1cnZl
LmFkZChLZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSksIHRpbWluZ0Z1bmN0aW9uVHlw
ZSk7CisgICAgY3VydmUtPmFkZChLZXlmcmFtZShrZXlUaW1lLCB2YWx1ZS0+dmFsdWUoKSksIHRp
bWluZ0Z1bmN0aW9uVHlwZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBWYWx1ZSwgY2xhc3MgS2V5ZnJhbWUsIGNsYXNzIEN1cnZlPgotYm9vbCBhcHBlbmRLZXlmcmFt
ZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbihDdXJ2ZSYgY3VydmUsIGRvdWJsZSBrZXlU
aW1lLCBjb25zdCBWYWx1ZSogdmFsdWUsIGNvbnN0IFZhbHVlKiBsYXN0VmFsdWUsIGRvdWJsZSB4
MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MiwgY29uc3QgRmxvYXRTaXplJikKK2Jv
b2wgYXBwZW5kS2V5ZnJhbWVXaXRoQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb24oQ3VydmUqIGN1
cnZlLCBkb3VibGUga2V5VGltZSwgY29uc3QgVmFsdWUqIHZhbHVlLCBjb25zdCBWYWx1ZSogbGFz
dFZhbHVlLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIsIGNvbnN0
IEZsb2F0U2l6ZSYpCiB7Ci0gICAgY3VydmUuYWRkKEtleWZyYW1lKGtleVRpbWUsIHZhbHVlLT52
YWx1ZSgpKSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGN1cnZlLT5hZGQoS2V5ZnJhbWUoa2V5VGlt
ZSwgdmFsdWUtPnZhbHVlKCkpLCB4MSwgeTEsIHgyLCB5Mik7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTE4NSwyOCArMTg1LDI4IEBAIGJvb2wgY2F1c2VzUm90YXRpb25PZkF0TGVhc3QxODBE
ZWdyZWVzKGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgY29uCiB9CiAKIHRl
bXBsYXRlIDw+Ci1ib29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5nRnVuY3Rpb248
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBkb3Vi
bGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBXZWJLaXQ6OldlYkFuaW1hdGlvbkN1
cnZlOjpUaW1pbmdGdW5jdGlvblR5cGUgdGltaW5nRnVuY3Rpb25UeXBlLCBjb25zdCBGbG9hdFNp
emUmIGJveFNpemUpCitib29sIGFwcGVuZEtleWZyYW1lV2l0aFN0YW5kYXJkVGltaW5nRnVuY3Rp
b248VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUsIFdlYlRyYW5zZm9ybUtleWZyYW1lLCBXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4oV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlLCBk
b3VibGUga2V5VGltZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIHZhbHVlLCBjb25z
dCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogbGFzdFZhbHVlLCBXZWJLaXQ6OldlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGUgdGltaW5nRnVuY3Rpb25UeXBlLCBjb25zdCBGbG9h
dFNpemUmIGJveFNpemUpCiB7CiAgICAgaWYgKGNhdXNlc1JvdGF0aW9uT2ZBdExlYXN0MTgwRGVn
cmVlcyh2YWx1ZSwgbGFzdFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
KCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6ZSk7CiAgICAgaWYgKG9wZXJhdGlvbnMuYXBwbHkoKS5p
c0ludmVydGlibGUoKSkgewotICAgICAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
a2V5VGltZSwgb3BlcmF0aW9ucyksIHRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAgICAgIGN1cnZl
LT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyksIHRpbWluZ0Z1
bmN0aW9uVHlwZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHRlbXBsYXRlIDw+Ci1ib29sIGFwcGVuZEtleWZyYW1lV2l0aEN1c3RvbUJlemll
clRpbWluZ0Z1bmN0aW9uPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBXZWJUcmFuc2Zvcm1LZXlm
cmFtZSwgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlJiBjdXJ2ZSwgZG91YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVl
KiB2YWx1ZSwgY29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RWYWx1ZSwgZG91Ymxl
IHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBGbG9hdFNpemUmIGJv
eFNpemUpCitib29sIGFwcGVuZEtleWZyYW1lV2l0aEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9u
PFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlLCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSwgV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmU+KFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSwgZG91
YmxlIGtleVRpbWUsIGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB2YWx1ZSwgY29uc3Qg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqIGxhc3RWYWx1ZSwgZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyLCBjb25zdCBGbG9hdFNpemUmIGJveFNpemUpCiB7CiAgICAg
aWYgKGNhdXNlc1JvdGF0aW9uT2ZBdExlYXN0MTgwRGVncmVlcyh2YWx1ZSwgbGFzdFZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zID0gdG9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zKCp2YWx1ZS0+dmFsdWUoKSwgYm94U2l6
ZSk7CiAgICAgaWYgKG9wZXJhdGlvbnMuYXBwbHkoKS5pc0ludmVydGlibGUoKSkgewotICAgICAg
ICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoa2V5VGltZSwgb3BlcmF0aW9ucyksIHgx
LCB5MSwgeDIsIHkyKTsKKyAgICAgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZShr
ZXlUaW1lLCBvcGVyYXRpb25zKSwgeDEsIHkxLCB4MiwgeTIpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI1LDcgKzIyNSw3IEBAIFBhc3NPd25Q
dHI8V2ViS2l0OjpXZWJBbmltYXRpb24+IGNyZWF0ZVdlYkFuaW1hdGlvbihjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYgdmFsCiAgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZTsKICAgICB9CiAKLSAg
ICBDdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8Q3VydmU+IGN1cnZlID0gYWRvcHRQdHIoQ3VydmU6
OmNyZWF0ZSgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUo
KTsgaSsrKSB7CiAgICAgICAgIHNpemVfdCBpbmRleCA9IHJldmVyc2UgPyB2YWx1ZUxpc3Quc2l6
ZSgpIC0gaSAtIDEgOiBpOwpAQCAtMjc3LDE0ICsyNzcsMTQgQEAgUGFzc093blB0cjxXZWJLaXQ6
OldlYkFuaW1hdGlvbj4gY3JlYXRlV2ViQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWwKIAogICAgICAgICBib29sIGFkZGVkS2V5ZnJhbWUgPSBmYWxzZTsKICAgICAgICAgaWYg
KGlzVXNpbmdDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbikKLSAgICAgICAgICAgIGFkZGVkS2V5
ZnJhbWUgPSBhcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbjxWYWx1
ZSwgS2V5ZnJhbWUsIEN1cnZlPihjdXJ2ZSwga2V5VGltZSwgb3JpZ2luYWxWYWx1ZSwgbGFzdE9y
aWdpbmFsVmFsdWUsIHgxLCB5MSwgeDIsIHkyLCBib3hTaXplKTsKKyAgICAgICAgICAgIGFkZGVk
S2V5ZnJhbWUgPSBhcHBlbmRLZXlmcmFtZVdpdGhDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbjxW
YWx1ZSwgS2V5ZnJhbWUsIEN1cnZlPihjdXJ2ZS5nZXQoKSwga2V5VGltZSwgb3JpZ2luYWxWYWx1
ZSwgbGFzdE9yaWdpbmFsVmFsdWUsIHgxLCB5MSwgeDIsIHkyLCBib3hTaXplKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYWRkZWRLZXlmcmFtZSA9IGFwcGVuZEtleWZyYW1lV2l0aFN0YW5k
YXJkVGltaW5nRnVuY3Rpb248VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oY3VydmUsIGtleVRpbWUs
IG9yaWdpbmFsVmFsdWUsIGxhc3RPcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlvblR5cGUsIGJv
eFNpemUpOworICAgICAgICAgICAgYWRkZWRLZXlmcmFtZSA9IGFwcGVuZEtleWZyYW1lV2l0aFN0
YW5kYXJkVGltaW5nRnVuY3Rpb248VmFsdWUsIEtleWZyYW1lLCBDdXJ2ZT4oY3VydmUuZ2V0KCks
IGtleVRpbWUsIG9yaWdpbmFsVmFsdWUsIGxhc3RPcmlnaW5hbFZhbHVlLCB0aW1pbmdGdW5jdGlv
blR5cGUsIGJveFNpemUpOwogICAgICAgICBpZiAoIWFkZGVkS2V5ZnJhbWUpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBPd25QdHI8V2ViS2l0OjpXZWJBbmltYXRp
b24+IGFuaW0oYWRvcHRQdHIoV2ViS2l0OjpXZWJBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgYW5p
bWF0aW9uSWQsIGdyb3VwSWQsIHRhcmdldFByb3BlcnR5KSkpOworICAgIE93blB0cjxXZWJLaXQ6
OldlYkFuaW1hdGlvbj4gYW5pbShhZG9wdFB0cihXZWJLaXQ6OldlYkFuaW1hdGlvbjo6Y3JlYXRl
KCpjdXJ2ZSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRhcmdldFByb3BlcnR5KSkpOwogCiAgICAg
aW50IGl0ZXJhdGlvbnMgPSAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi0+aXNJdGVyYXRpb25Db3Vu
dFNldCgpKSA/IGFuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA6IDE7CiAgICAgYW5pbS0+c2V0
SXRlcmF0aW9ucyhpdGVyYXRpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4
IGQyOGMyNmNmNzgxMDY4MDFlODEzYjU5MWFjMzI1YjdmYTNhODdjMzMuLjg5MGIzZjY3NTRkMGEz
MWM3YzczYjM1MzhjYjA1OTViZWFiYzBkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtMTg3LDcgKzE4Nyw4IEBACiAgICAgICAgICAgICAnc3JjL1dlYkNvbnRlbnRMYXllcklt
cGwuaCcsCiAgICAgICAgICAgICAnc3JjL1dlYkV4dGVybmFsVGV4dHVyZUxheWVySW1wbC5jcHAn
LAogICAgICAgICAgICAgJ3NyYy9XZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGwuaCcsCi0gICAg
ICAgICAgICAnc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwJywKKyAgICAgICAgICAgICdz
cmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuY3BwJywKKyAgICAgICAgICAgICdzcmMvV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZUltcGwuaCcsCiAgICAgICAgICAgICAnc3JjL1dlYklPU3VyZmFj
ZUxheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3NyYy9XZWJJT1N1cmZhY2VMYXllckltcGwu
aCcsCiAgICAgICAgICAgICAnc3JjL1dlYkltYWdlTGF5ZXJJbXBsLmNwcCcsCkBAIC0yMDEsNyAr
MjAyLDggQEAKICAgICAgICAgICAgICdzcmMvV2ViU2Nyb2xsYmFyTGF5ZXJJbXBsLmgnLAogICAg
ICAgICAgICAgJ3NyYy9XZWJTb2xpZENvbG9yTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAn
c3JjL1dlYlNvbGlkQ29sb3JMYXllckltcGwuaCcsCi0gICAgICAgICAgICAnc3JjL1dlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlLmNwcCcsCisgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlSW1wbC5jcHAnLAorICAgICAgICAgICAgJ3NyYy9XZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZUltcGwuaCcsCiAgICAgICAgICAgICAnc3JjL1dlYlZpZGVvTGF5ZXJJbXBsLmNw
cCcsCiAgICAgICAgICAgICAnc3JjL1dlYlZpZGVvTGF5ZXJJbXBsLmgnLAogICAgICAgICBdLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTGlua0hpZ2hsaWdodC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9MaW5rSGlnaGxpZ2h0LmNwcAppbmRleCBmYTM0
ZDFkMGQ1MjZlNjVhZmZlNWE5NTM5OTcxYzkzYjQ4ZWJlZTgyLi4yYzgwNGE4Y2Q1MGE2NGM2OGE0
OTY3YTc0NjM0ZWJkYmM5YTY4ZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9MaW5rSGlnaGxpZ2h0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9M
aW5rSGlnaGxpZ2h0LmNwcApAQCAtMjAwLDEzICsyMDAsMTMgQEAgdm9pZCBMaW5rSGlnaGxpZ2h0
OjpzdGFydEhpZ2hsaWdodEFuaW1hdGlvbigpCiAKICAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXIo
KS0+c2V0T3BhY2l0eShzdGFydE9wYWNpdHkpOwogCi0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCBzdGFydE9wYWNpdHkp
KTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZShkdXJhdGlvbiAvIDIsIHN0YXJ0T3Bh
Y2l0eSkpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0
UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdl
YkZsb2F0S2V5ZnJhbWUoMCwgc3RhcnRPcGFjaXR5KSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9h
dEtleWZyYW1lKGR1cmF0aW9uIC8gMiwgc3RhcnRPcGFjaXR5KSk7CiAgICAgLy8gRm9yIGxheW91
dCB0ZXN0cyB3ZSBkb24ndCBmYWRlIG91dC4KLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZShkdXJhdGlvbiwgV2ViS2l0OjpsYXlvdXRUZXN0TW9kZSgpID8gc3RhcnRPcGFjaXR5IDogMCkp
OworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZShkdXJhdGlvbiwgV2ViS2l0OjpsYXlv
dXRUZXN0TW9kZSgpID8gc3RhcnRPcGFjaXR5IDogMCkpOwogCi0gICAgbV9hbmltYXRpb24gPSBh
ZG9wdFB0cihXZWJBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwgV2ViQW5pbWF0aW9uOjpUYXJnZXRQ
cm9wZXJ0eU9wYWNpdHkpKTsKKyAgICBtX2FuaW1hdGlvbiA9IGFkb3B0UHRyKFdlYkFuaW1hdGlv
bjo6Y3JlYXRlKCpjdXJ2ZSwgV2ViQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHkpKTsK
ICAgICBtX2NvbnRlbnRMYXllci0+bGF5ZXIoKS0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogICAg
IG1fY29udGVudExheWVyLT5sYXllcigpLT5hZGRBbmltYXRpb24obV9hbmltYXRpb24uZ2V0KCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25J
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkltcGwuY3Bw
CmluZGV4IDE4NzI3MmVmMjJiMjllYmY5ODcyNDg1YTc2YTJlYzE3ZWY2NWZlNmUuLmU1ZDllZjJh
MzE2ZGE3YjMyNDEwYzM1ZmQwYjE5ZmMwZDM3ZDdlODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkltcGwuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5j
bHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKICNpbmNsdWRlICJDQ0FjdGl2ZUFuaW1hdGlvbi5o
IgogI2luY2x1ZGUgIkNDQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlSW1wbC5oIgorI2luY2x1ZGUgIldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1w
bC5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb24uaD4KICNpbmNsdWRlIDxwdWJsaWMv
V2ViQW5pbWF0aW9uQ3VydmUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC00Niw3ICs0
OCwzMCBAQCBXZWJBbmltYXRpb24qIFdlYkFuaW1hdGlvbjo6Y3JlYXRlKGNvbnN0IFdlYkFuaW1h
dGlvbkN1cnZlJiBjdXJ2ZSwgVGFyZ2V0UHJvcGVydAogCiBXZWJBbmltYXRpb24qIFdlYkFuaW1h
dGlvbjo6Y3JlYXRlKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgaW50IGFuaW1hdGlv
bklkLCBpbnQgZ3JvdXBJZCwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCiB7Ci0gICAg
cmV0dXJuIG5ldyBXZWJBbmltYXRpb25JbXBsKENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3Vy
dmUsIGFuaW1hdGlvbklkLCBncm91cElkLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHk+KHRhcmdldFByb3BlcnR5KSkpOworICAgIHJldHVybiBu
ZXcgV2ViQW5pbWF0aW9uSW1wbChjdXJ2ZSwgYW5pbWF0aW9uSWQsIGdyb3VwSWQsIHRhcmdldFBy
b3BlcnR5KTsKK30KKworV2ViQW5pbWF0aW9uSW1wbDo6V2ViQW5pbWF0aW9uSW1wbChjb25zdCBX
ZWJBbmltYXRpb25DdXJ2ZSYgd2ViQ3VydmUsIGludCBhbmltYXRpb25JZCwgaW50IGdyb3VwSWQs
IFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIFdlYkFuaW1hdGlvbkN1cnZl
OjpBbmltYXRpb25DdXJ2ZVR5cGUgY3VydmVUeXBlID0gd2ViQ3VydmUudHlwZSgpOworICAgIE93
blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjdXJ2ZTsKKyAgICBzd2l0Y2ggKGN1cnZl
VHlwZSkgeworICAgIGNhc2UgV2ViQW5pbWF0aW9uQ3VydmU6OkFuaW1hdGlvbkN1cnZlVHlwZUZs
b2F0OiB7CisgICAgICAgIGNvbnN0IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsKiBmbG9hdEN1
cnZlSW1wbCA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsKj4o
JndlYkN1cnZlKTsKKyAgICAgICAgY3VydmUgPSBmbG9hdEN1cnZlSW1wbC0+Y2xvbmVUb0NDQW5p
bWF0aW9uQ3VydmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViQW5pbWF0
aW9uQ3VydmU6OkFuaW1hdGlvbkN1cnZlVHlwZVRyYW5zZm9ybTogeworICAgICAgICBjb25zdCBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwqIHRyYW5zZm9ybUN1cnZlSW1wbCA9IHN0YXRp
Y19jYXN0PGNvbnN0IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbCo+KCZ3ZWJDdXJ2ZSk7
CisgICAgICAgIGN1cnZlID0gdHJhbnNmb3JtQ3VydmVJbXBsLT5jbG9uZVRvQ0NBbmltYXRpb25D
dXJ2ZSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorICAgIG1fYW5pbWF0aW9uID0g
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS5yZWxlYXNlKCksIGFuaW1hdGlvbklkLCBn
cm91cElkLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJv
cGVydHk+KHRhcmdldFByb3BlcnR5KSk7Cit9CisKK1dlYkFuaW1hdGlvbkltcGw6On5XZWJBbmlt
YXRpb25JbXBsKCkKK3sKIH0KIAogV2ViQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eSBXZWJBbmlt
YXRpb25JbXBsOjp0YXJnZXRQcm9wZXJ0eSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJBbmltYXRpb25JbXBsLmgKaW5kZXggODY3N2I5YzYwOTdlZTg5OGM0Nzg4MTg0
ZTI2MjA5OGY3ZDhmYWM5OS4uZTcwNjBlODE2NDViMDllMmU5NDIyZjBlZTgyNjUyMTcxMjlhN2Jh
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkltcGwuaApA
QCAtMzcsMTEgKzM3LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkFuaW1hdGlv
bkltcGwgOiBwdWJsaWMgV2ViQW5pbWF0aW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJB
bmltYXRpb25JbXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1h
dGlvbikKLSAgICAgICAgOiBtX2FuaW1hdGlvbihhbmltYXRpb24pCi0gICAgewotICAgIH0KLSAg
ICB2aXJ0dWFsIH5XZWJBbmltYXRpb25JbXBsKCkgeyB9CisgICAgZXhwbGljaXQgV2ViQW5pbWF0
aW9uSW1wbChjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYsIGludCBhbmltYXRpb25JZCwgaW50IGdy
b3VwSWQsIFRhcmdldFByb3BlcnR5KTsKKyAgICB2aXJ0dWFsIH5XZWJBbmltYXRpb25JbXBsKCk7
CiAKICAgICAvLyBXZWJBbmltYXRpb24gaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5KCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGNmN2MyZDIwMjlmZTQ2OThlZDdiMzI2NzlkYTEw
MTZjZTUyYmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaD4KLQot
I2luY2x1ZGUgIkNDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKLSNpbmNsdWRlICJDQ1RpbWlu
Z0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCIKLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0IFdl
YkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lKQotewotICAgIGFkZChrZXlmcmFtZSwgVGltaW5nRnVu
Y3Rpb25UeXBlRWFzZSk7Ci19Ci0KLXZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKGNv
bnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSkK
LXsKLSAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6
Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBjcmVhdGVUaW1pbmdGdW5jdGlv
bih0eXBlKSkpOwotfQotCi12b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBX
ZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4
MiwgZG91YmxlIHkyKQotewotICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NG
bG9hdEtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIFdlYkNv
cmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSkp
OwotfQotCi1mbG9hdCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdGlt
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRWYWx1ZSh0aW1lKTsKLX0KLQot
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0Fu
aW1hdGlvbkN1cnZlPigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2xvbmUoKTsK
LX0KLQotdm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkKLXsKLSAgICBt
X3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpj
cmVhdGUoKS5sZWFrUHRyKCkpOwotfQotCi12b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmRl
c3Ryb3koKQotewotICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFu
aW1hdGlvbkN1cnZlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9h
dEFuaW1hdGlvbkN1cnZlSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1NjY1Y2I4ZDQ0YTU5ZjZlZWE1
NzI4M2QxMzc1MjZjZWZjYWI0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmNwcApAQCAtMCwwICsxLDgyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlSW1wbC5oIgorCisjaW5jbHVkZSAiQ0NBbmltYXRpb25DdXJ2ZS5oIgor
I2luY2x1ZGUgIkNDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJDQ1RpbWlu
Z0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUqIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIG5ldyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
SW1wbChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsK
K30KKworV2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGw6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJ
bXBsKFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSkKKyAgICA6IG1fY3VydmUoY3VydmUpCit7Cit9CisKK1dlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmVJbXBsOjp+V2ViRmxvYXRBbmltYXRpb25DdXJ2ZUltcGwoKQoreworfQorCitXZWJBbmltYXRp
b25DdXJ2ZTo6QW5pbWF0aW9uQ3VydmVUeXBlIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjp0
eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViQW5pbWF0aW9uQ3VydmU6OkFuaW1hdGlvbkN1
cnZlVHlwZUZsb2F0OworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsOjphZGQo
Y29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJhbWUpCit7CisgICAgYWRkKGtleWZyYW1lLCBU
aW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
SW1wbDo6YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBUaW1pbmdGdW5jdGlv
blR5cGUgdHlwZSkKK3sKKyAgICBtX2N1cnZlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ0Zsb2F0
S2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGlt
aW5nRnVuY3Rpb24odHlwZSkpKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1w
bDo6YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBkb3VibGUgeDEsIGRvdWJs
ZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCit7CisgICAgbV9jdXJ2ZS0+YWRkS2V5ZnJhbWUo
V2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUu
dmFsdWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5
MSwgeDIsIHkyKSkpOworfQorCitmbG9hdCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbDo6Z2V0
VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VydmUtPmdldFZhbHVl
KHRpbWUpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmVJbXBsOjpjbG9uZVRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY3VydmUtPmNsb25lKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0
aW9uQ3VydmVJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThmMTYyMGQ2YjkwMWVhODkwODJjMDI1MTNiZTll
ZTcxZjVjYzQwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbF9oCisjZGVmaW5lIFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmVJbXBsX2gKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdEFuaW1h
dGlvbkN1cnZlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7
CitjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlSW1wbCA6IHB1YmxpYyBXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZT4pOworICAgIHZpcnR1YWwgfldlYkZsb2F0QW5pbWF0aW9uQ3VydmVJbXBsKCk7CisK
KyAgICAvLyBXZWJBbmltYXRpb25DdXJ2ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIEFu
aW1hdGlvbkN1cnZlVHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICAvLyBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBhZGQoY29u
c3QgV2ViRmxvYXRLZXlmcmFtZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGQoY29u
c3QgV2ViRmxvYXRLZXlmcmFtZSYsIFRpbWluZ0Z1bmN0aW9uVHlwZSkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwgZG91YmxlIHgxLCBkb3Vi
bGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgZmxv
YXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0IE9WRVJSSURFOworCisgICAgUGFzc093blB0
cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZVRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU+IG1fY3VydmU7Cit9OworCit9CisKKyNlbmRpZiAvLyBXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRhZDA4NDk4Nzg4ZGQ5M2Q4YWVlMjMyMTM4Njk5MGNmOTU1ZWIzNzAuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmg+Ci0KLSNpbmNsdWRlICJD
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCi0jaW5jbHVkZSAiQ0NUaW1pbmdGdW5jdGlvbi5o
IgotI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCi0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi12b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJhbnNm
b3JtS2V5ZnJhbWUmIGtleWZyYW1lKQotewotICAgIGFkZChrZXlmcmFtZSwgVGltaW5nRnVuY3Rp
b25UeXBlRWFzZSk7Ci19Ci0KLXZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZChj
b25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZSB0
eXBlKQotewotICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1L
ZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBjcmVhdGVUaW1p
bmdGdW5jdGlvbih0eXBlKSkpOwotfQotCi12b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjphZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lLCBkb3VibGUgeDEsIGRv
dWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCi17Ci0gICAgbV9wcml2YXRlLT5hZGRLZXlm
cmFtZShXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwg
a2V5ZnJhbWUudmFsdWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKHgxLCB5MSwgeDIsIHkyKSkpOwotfQotCi1XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VmFsdWUodGltZSk7Ci19Ci0KLVdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlOjpvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3Vy
dmU+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5jbG9uZSgpOwotfQotCi12b2lk
IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkKLXsKLSAgICBtX3ByaXZh
dGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkubGVha1B0cigpKTsKLX0KLQotdm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
ZGVzdHJveSgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0KDApOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwMTA0MmU5NTQ2
ZTVmMmYyZTYxMjBkMDEwMDViOGI3OGNkOWJkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuY3BwCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbC5oIgorCisjaW5jbHVkZSAiQ0NL
ZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgIkNDVGltaW5nRnVuY3Rpb24uaCIK
KyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBuZXcgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJ
bXBsKFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
KTsKK30KKworV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsOjpXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZUltcGwoUGFzc093blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlPiBjdXJ2ZSkKKyAgICA6IG1fY3VydmUoY3VydmUpCit7Cit9CisKK1dlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbDo6fldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1w
bCgpCit7Cit9CisKK1dlYkFuaW1hdGlvbkN1cnZlOjpBbmltYXRpb25DdXJ2ZVR5cGUgV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmVJbXBsOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2Vi
QW5pbWF0aW9uQ3VydmU6OkFuaW1hdGlvbkN1cnZlVHlwZVRyYW5zZm9ybTsKK30KKwordm9pZCBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGw6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlm
cmFtZSYga2V5ZnJhbWUpCit7CisgICAgYWRkKGtleWZyYW1lLCBUaW1pbmdGdW5jdGlvblR5cGVF
YXNlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGw6OmFkZChjb25z
dCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBl
KQoreworICAgIG1fY3VydmUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJh
bWU6OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGltaW5nRnVu
Y3Rpb24odHlwZSkpKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGw6
OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUsIGRvdWJsZSB4MSwgZG91
YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAgICBtX2N1cnZlLT5hZGRLZXlmcmFt
ZShXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5
ZnJhbWUudmFsdWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRl
KHgxLCB5MSwgeDIsIHkyKSkpOworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZUltcGw6OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAorewor
ICAgIHJldHVybiBtX2N1cnZlLT5nZXRWYWx1ZSh0aW1lKTsKK30KKworUGFzc093blB0cjxXZWJD
b3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGw6OmNs
b25lVG9DQ0FuaW1hdGlvbkN1cnZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jdXJ2ZS0+Y2xv
bmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ1YTAzZWYwNmM5ZWIwNTNmMDkxODdjMzUyYTU5MWNkNzYxMGRlNzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZUltcGwuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbF9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlSW1wbF9oCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsK
K2NsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZUltcGwgOiBwdWJs
aWMgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlSW1wbChQYXNzT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJh
bWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+KTsKKyAgICB2aXJ0dWFsIH5XZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZUltcGwoKTsKKworICAgIC8vIFdlYkFuaW1hdGlvbkN1cnZlIGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgQW5pbWF0aW9uQ3VydmVUeXBlIHR5cGUoKSBjb25zdCBPVkVS
UklERTsKKworICAgIC8vIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9u
LgorICAgIHZpcnR1YWwgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwg
VGltaW5nRnVuY3Rpb25UeXBlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkKGNvbnN0
IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4Miwg
ZG91YmxlIHkyKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0IE9WRVJSSURFOworCisgICAgUGFzc093blB0
cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBjbG9uZVRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIE93blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlPiBtX2N1cnZlOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmVJbXBsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDI2NjI3ZWM4
ZDdhNWYzOWVjNWU3MmFjMDg2ZWI3NWYzMDY1NTI1ZTEuLmMwYTljZjJlZjVmYjRiMDVjZjBlNjkw
MWYzM2JlYWE1MmNiNDA2ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTYsOSArOTYsOSBA
QCBURVNUX0YoR3JhcGhpY3NMYXllckNocm9taXVtVGVzdCwgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMz
RFdpdGhBbmltYXRpb25zKQogewogICAgIEFTU0VSVF9GQUxTRShtX3BsYXRmb3JtTGF5ZXItPmhh
c0FjdGl2ZUFuaW1hdGlvbigpKTsKIAotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7
Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMC4wLCAwLjApKTsKLSAgICBPd25QdHI8
V2ViQW5pbWF0aW9uPiBmbG9hdEFuaW1hdGlvbihhZG9wdFB0cihXZWJBbmltYXRpb246OmNyZWF0
ZShjdXJ2ZSwgMSwgMSwgV2ViQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHkpKSk7Cisg
ICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLjAsIDAuMCkpOworICAgIE93blB0cjxXZWJBbmltYXRpb24+IGZsb2F0QW5pbWF0aW9u
KGFkb3B0UHRyKFdlYkFuaW1hdGlvbjo6Y3JlYXRlKCpjdXJ2ZSwgMSwgMSwgV2ViQW5pbWF0aW9u
OjpUYXJnZXRQcm9wZXJ0eU9wYWNpdHkpKSk7CiAgICAgQVNTRVJUX1RSVUUobV9wbGF0Zm9ybUxh
eWVyLT5hZGRBbmltYXRpb24oZmxvYXRBbmltYXRpb24uZ2V0KCkpKTsKIAogICAgIEFTU0VSVF9U
UlVFKG1fcGxhdGZvcm1MYXllci0+aGFzQWN0aXZlQW5pbWF0aW9uKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAKaW5kZXggYTY4MmFi
MDIwMDIxYTc5MzUzMzkyMmFlY2Y4MGViMzU4YjI0NzAwNy4uMTgyMmZmNmEwZGYwYTAxZWJjZjhi
OTFkNWY2MjhiOGRhMDU0ZmU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCkBAIC00Niw4ICs0Niw4IEBAIG5hbWVzcGFjZSB7CiAj
ZW5kaWYKIFRFU1QoV2ViQW5pbWF0aW9uVGVzdCwgTUFZQkVfRGVmYXVsdFNldHRpbmdzKQogewot
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgT3duUHRyPFdlYkFuaW1hdGlv
bj4gYW5pbWF0aW9uID0gYWRvcHRQdHIoV2ViQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsIFdlYkFu
aW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5KSk7CisgICAgT3duUHRyPFdlYkFuaW1hdGlv
bkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
KTsKKyAgICBPd25QdHI8V2ViQW5pbWF0aW9uPiBhbmltYXRpb24gPSBhZG9wdFB0cihXZWJBbmlt
YXRpb246OmNyZWF0ZSgqY3VydmUsIFdlYkFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5
KSk7CiAKICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGVmYXVsdHMgYXJlIGNvcnJlY3QuCiAgICAg
RVhQRUNUX0VRKDEsIGFuaW1hdGlvbi0+aXRlcmF0aW9ucygpKTsKQEAgLTY3LDggKzY3LDggQEAg
VEVTVChXZWJBbmltYXRpb25UZXN0LCBNQVlCRV9EZWZhdWx0U2V0dGluZ3MpCiAjZW5kaWYKIFRF
U1QoV2ViQW5pbWF0aW9uVGVzdCwgTUFZQkVfTW9kaWZpZWRTZXR0aW5ncykKIHsKLSAgICBXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIE93blB0cjxXZWJBbmltYXRpb24+IGFuaW1h
dGlvbiA9IGFkb3B0UHRyKFdlYkFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLCBXZWJBbmltYXRpb246
OlRhcmdldFByb3BlcnR5T3BhY2l0eSkpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsK
KyAgICBPd25QdHI8V2ViQW5pbWF0aW9uPiBhbmltYXRpb24gPSBhZG9wdFB0cihXZWJBbmltYXRp
b246OmNyZWF0ZSgqY3VydmUsIFdlYkFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHlPcGFjaXR5KSk7
CiAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25zKDIpOwogICAgIGFuaW1hdGlvbi0+c2V0U3Rh
cnRUaW1lKDIpOwogICAgIGFuaW1hdGlvbi0+c2V0VGltZU9mZnNldCgyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZl
VGVzdC5jcHAKaW5kZXggM2NhYzc2NGI2Y2UwZjViYzFlMDhjOTdjNTFiNTY3ZjkzYTFhNGU3MC4u
N2E2YTUyNDA1NWQzNjI1M2Y1NzBlNTRlN2RkZjQ4MjE5ZGVjYmE0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZl
VGVzdC5jcHAKQEAgLTM5LDE5NyArMzksMTk3IEBAIG5hbWVzcGFjZSB7CiAvLyBUZXN0cyB0aGF0
IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggb25lIGtleWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgog
VEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgT25lRmxvYXRLZXlmcmFtZSkKIHsKLSAg
ICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0
VmFsdWUoMSkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7Cisg
ICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5n
ZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7
CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVz
IHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdv
RmxvYXRLZXlmcmFtZSkKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAg
IGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgx
LCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQRUNUX0ZMT0FU
X0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUu
Z2V0VmFsdWUoMC41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEp
KTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMikpOworICAgIE93blB0
cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0
aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwg
MiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1
cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRW
YWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQs
IGN1cnZlLT5nZXRWYWx1ZSgyKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRp
b24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCiBURVNUKFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZUZsb2F0S2V5ZnJhbWUpCiB7Ci0gICAgV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAy
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
MiwgY3VydmUuZ2V0VmFsdWUoMCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS5nZXRW
YWx1ZSgwLjUpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMSkpOwot
ICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMikpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBj
dXJ2ZS5nZXRWYWx1ZSgzKSk7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1
cnZlID0gYWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1
cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEs
IDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBj
dXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgOCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2
LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5n
ZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7
CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlz
IGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHkuCiBURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmVUZXN0LCBSZXBlYXRlZEZsb2F0S2V5VGltZXMpCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCA0KSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdl
YkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDYpLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgyLCA2KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRv
cHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAgIGN1cnZlLT5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgwLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJB
bmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRk
KFdlYkZsb2F0S2V5ZnJhbWUoMSwgNiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgyLCA2KSwgV2Vi
QW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwg
Y3VydmUuZ2V0VmFsdWUoMCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1
ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKIAogICAgIC8vIFRoZXJlIGlzIGEgZGlz
Y29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgotICAg
IGZsb2F0IHZhbHVlID0gY3VydmUuZ2V0VmFsdWUoMSk7CisgICAgZmxvYXQgdmFsdWUgPSBjdXJ2
ZS0+Z2V0VmFsdWUoMSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUgPj0gNCAmJiB2YWx1ZSA8PSA2
KTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpKTsKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMikpOwotICAgIEVYUEVDVF9GTE9BVF9F
USg2LCBjdXJ2ZS5nZXRWYWx1ZSgzKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5n
ZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDIp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDMpKTsKIH0KIAogLy8g
VGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQgb2Ygb3JkZXIuCiBURVNU
KFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNvcnRlZEtleWZyYW1lcykKIHsKLSAgICBX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZy
YW1lKDIsIDgpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
LSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6
OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwot
Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMywg
Y3VydmUuZ2V0VmFsdWUoMC41KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZh
bHVlKDEpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KSk7Ci0g
ICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpKTsKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgp
KTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgOCksIFdlYkFuaW1hdGlvbkN1
cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDgsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5n
ZXRWYWx1ZSgzKSk7CiB9CiAKIC8vIFRlc3RzIHRoYXQgYSBjdWJpYyBiZXppZXIgdGltaW5nIGZ1
bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVz
dCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlIGN1cnZlOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCAwLjI1LCAw
LCAwLjc1LCAxKTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0KLSAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgY3VydmUuZ2V0VmFsdWUoMCkpOwotICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS5nZXRW
YWx1ZSgwLjI1KSk7Ci0gICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLmdldFZhbHVlKDAuMjUpKTsK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKLSAgICBFWFBF
Q1RfTFQoMC43NSwgY3VydmUuZ2V0VmFsdWUoMC43NSkpOwotICAgIEVYUEVDVF9HVCgxLCBjdXJ2
ZS5nZXRWYWx1ZSgwLjc1KSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1cnZlLmdldFZhbHVl
KDEpKTsKKyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0
cihXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJG
bG9hdEtleWZyYW1lKDAsIDApLCAwLjI1LCAwLCAwLjc1LCAxKTsKKyAgICBjdXJ2ZS0+YWRkKFdl
YkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7
CisgICAgRVhQRUNUX0xUKDAsIGN1cnZlLT5nZXRWYWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0dU
KDAuMjUsIGN1cnZlLT5nZXRWYWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwg
Y3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9MVCgwLjc1LCBjdXJ2ZS0+Z2V0VmFs
dWUoMC43NSkpOworICAgIEVYUEVDVF9HVCgxLCBjdXJ2ZS0+Z2V0VmFsdWUoMC43NSkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgxLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOwogfQogCiAvLyBUZXN0cyB0
aGF0IGFuIGVhc2UgdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZVRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKLSAgICBj
dXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU+
IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOworICAg
IGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUVhc2UpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgx
LCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAg
ICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29y
ZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAg
ICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3Vy
dmUuZ2V0VmFsdWUodGltZSkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rp
b24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwogICAgIH0KIH0KIAog
Ly8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0aW9uLgogVEVTVChXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdCwgTGluZWFyVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZSBjdXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAw
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZSA9IGFkb3B0UHRyKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBj
dXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgx
LCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91YmxlIHRp
bWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUsIGN1cnZlLmdldFZh
bHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUsIGN1cnZlLT5nZXRWYWx1
ZSh0aW1lKSk7CiAgICAgfQogfQogCiAvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1
bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVz
dCwgRWFzZUluVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBj
dXJ2ZTsKLSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViQW5pbWF0aW9u
Q3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbik7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworICAgIE93blB0cjxXZWJGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRy
KFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVF
YXNlSW4pOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKICAgICBPd25QdHI8V2ViQ29y
ZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlSW5UaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkg
ewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OwotICAgICAgICBFWFBFQ1Rf
RkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0
aW1lKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUo
dGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CiAgICAgfQogfQogCiAvLyBUZXN0cyB0aGF0
IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZU91dFRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsK
LSAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6
OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgT3duUHRyPFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkp
OworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQpOworICAgIGN1cnZlLT5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CiAKICAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24oV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBp
ICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1
ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
dGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwog
ICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3Jr
cyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJbk91
dFRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0g
ICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVFYXNlSW5PdXQpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZy
YW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
KyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZUlu
T3V0KTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNvcmU6
OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluT3V0VGlt
aW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kp
IHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNU
X0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUo
dGltZSkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVl
KHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhh
dCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uKQogewot
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQdHIoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkpOwogICAgIGRvdWJsZSB4MSA9IDAuMzsKICAgICBkb3VibGUgeTEgPSAwLjI7CiAgICAg
ZG91YmxlIHgyID0gMC44OwogICAgIGRvdWJsZSB5MiA9IDAuNzsKLSAgICBjdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgwLCAwKSwgeDEsIHkxLCB4MiwgeTIpOwotICAgIGN1cnZlLmFkZChXZWJG
bG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIHgxLCB5MSwg
eDIsIHkyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNv
cmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSk7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPD0gNDsgKytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAu
MjU7Ci0gICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGlt
ZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWlu
Z0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKICAgICB9
CiB9CiAKIC8vIFRlc3RzIHRoYXQgdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVl
ZCBlYXNlLgogVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1
bmN0aW9uKQogewotICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Ci0gICAgY3VydmUu
YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCkpOwotICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZy
YW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
KyAgICBPd25QdHI8V2ViRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CisgICAgY3VydmUtPmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDApKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdl
YkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRy
PFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFz
ZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsg
KytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVY
UEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZh
bHVlKHRpbWUpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRW
YWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmVUZXN0LmNwcAppbmRleCAyZjRkZTczY2JkYjQ0MWNjYzQyNDkyNjkzN2Y5OTVh
YjhiOTJkNjU2Li45NmFjYjNjYzE1ODM1Y2JiNjUwYzJlOWJlMTcwZjFkYTA4YzU5ZDNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC00MSw2MiArNDEsNjIgQEAgbmFtZXNwYWNl
IHsKIC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggb25lIGtleWZyYW1l
IHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3Qs
IE9uZVRyYW5zZm9ybUtleWZyYW1lKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBh
ZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwogICAgIG9wZXJhdGlvbnMuYXBw
ZW5kVHJhbnNsYXRlKDIsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgwLCBvcGVyYXRpb25zKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25z
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKLSAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpLm00MSgpKTsKLSAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwg
Y3VydmUuZ2V0VmFsdWUoMSkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5n
ZXRWYWx1ZSgyKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1
ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgyKS5tNDEoKSk7CiB9CiAKIC8v
IFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3Jr
cyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29U
cmFuc2Zvcm1LZXlmcmFtZSkKIHsKLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2
ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlID0gYWRvcHRQ
dHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CiAgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDIsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKICAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7Ci0g
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdl
dFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVl
KDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUoMC41KS5t
NDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsK
LSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworICAgIGN1
cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRy
YW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRW
YWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUo
MCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5t
NDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgyKS5tNDEoKSk7CiB9CiAK
IC8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdGhyZWUga2V5ZnJhbWVz
IHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3Qs
IFRocmVlVHJhbnNmb3JtS2V5ZnJhbWUpCiB7Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9
IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMx
LmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAs
IDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKICAg
ICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoOCwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlv
bnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAg
RVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7Ci0gICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRf
RVEoMywgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDQs
IGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUu
Z2V0VmFsdWUoMS41KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZh
bHVlKDIpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMyku
bTQxKCkpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9u
czEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBj
dXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0
aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVl
KDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkubTQxKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgyKS5tNDEoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKS5tNDEoKSk7CiB9CiAKIC8vIFRlc3Rz
IHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBhdCBhIGdpdmVu
IHRpbWUgd29ya3Mgc2FuZWx5LgogVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3Qs
IFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCiB7CiAgICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgot
ICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CiAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwpAQCAtMTA1LDE1
OSArMTA1LDE1OSBAQCBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0
ZWRUcmFuc2Zvcm1LZXlUaW1lcykKICAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoNiwg
MCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0Owog
ICAgIG9wZXJhdGlvbnM0LmFwcGVuZFRyYW5zbGF0ZSg2LCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6
VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0
aW9uczMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKLSAg
ICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczQpLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlm
cmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0
aW9uczMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAg
ICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnM0KSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAKLSAgICBFWFBFQ1RfRkxP
QVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoLTEpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEo
NCwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2
ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdl
dFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1
ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
Lm00MSgpKTsKIAogICAgIC8vIFRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFs
dWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHZhbHVlID0gY3VydmUuZ2V0VmFsdWUoMSk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
dmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUubTQxKCkg
Pj0gNCAmJiB2YWx1ZS5tNDEoKSA8PSA2KTsKIAotICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2
ZS5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0
VmFsdWUoMikubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgz
KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDIpLm00MSgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDMpLm00MSgpKTsKIH0KIAog
Ly8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQgb2Ygb3JkZXIuCiBU
RVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlmcmFtZXMpCiB7
Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsK
ICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3Bl
cmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOwogICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKICAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xh
dGUoOCwgMCwgMCk7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJh
dGlvbnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0g
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0gICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Ci0KLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUu
Z2V0VmFsdWUoLTEpLm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFs
dWUoMCkubTQxKCkpOwotICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUp
Lm00MSgpKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMSkubTQxKCkp
OwotICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOwotICAgIEVYUEVD
VF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgzKS5tNDEoKSk7CisgICAgY3VydmUtPmFkZChX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJh
dGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKS5tNDEoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NiwgY3VydmUtPmdldFZhbHVlKDEuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBj
dXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+
Z2V0VmFsdWUoMykubTQxKCkpOwogfQogCiAvLyBUZXN0cyB0aGF0IGEgY3ViaWMgYmV6aWVyIHRp
bWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVUZXN0LCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsK
ICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVu
ZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
MCwgb3BlcmF0aW9uczEpLCAwLjI1LCAwLCAwLjc1LCAxKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgY3VydmUuZ2V0VmFs
dWUoMCkubTQxKCkpOwotICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KS5tNDEo
KSk7Ci0gICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLmdldFZhbHVlKDAuMjUpLm00MSgpKTsKLSAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKLSAgICBF
WFBFQ1RfTFQoMC43NSwgY3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOwotICAgIEVYUEVDVF9H
VCgxLCBjdXJ2ZS5nZXRWYWx1ZSgwLjc1KS5tNDEoKSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKDEs
IGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtl
eWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAgY3VydmUtPmFk
ZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZl
OjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBjdXJ2
ZS0+Z2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS0+Z2V0VmFsdWUo
MC4yNSkubTQxKCkpOworICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpLm00
MSgpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwgY3VydmUtPmdldFZhbHVlKDAuNzUpLm00MSgpKTsK
KyAgICBFWFBFQ1RfR1QoMSwgY3VydmUtPmdldFZhbHVlKDAuNzUpLm00MSgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMSwgY3VydmUtPmdldFZhbHVlKDEpLm00MSgpKTsKIH0KIAogLy8gVGVzdHMg
dGhhdCBhbiBlYXNlIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAg
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoKSk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKICAgICBX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9u
czIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1L
ZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGVFYXNlKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0
aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAg
ICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UpOworICAgIGN1cnZlLT5hZGQoV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1
bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgewogICAgICAgICBjb25z
dCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OwotICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5n
RnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7Cisg
ICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1
cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CiAgICAgfQogfQogCiAvLyBUZXN0cyB1c2luZyBh
IGxpbmVhciB0aW1pbmcgZnVuY3Rpb24uCiBURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
VGVzdCwgTGluZWFyVGltaW5nRnVuY3Rpb24pCiB7Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgY3VydmU7CisgICAgT3duUHRyPFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2
ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlv
bnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEs
IDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25z
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwotICAgIGN1
cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLT5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1l
KDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29u
c3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUs
IGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRp
bWUsIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CiAgICAgfQogfQogCiAvLyBUZXN0cyB0
aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgogVEVTVChX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJblRpbWluZ0Z1bmN0aW9uKQogewot
ICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJh
dGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNm
b3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVu
Y3Rpb25UeXBlRWFzZUluKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwg
b3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwg
V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbik7CisgICAgY3VydmUt
PmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1
cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRyPFdlYkNvcmU6OkND
VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKICAg
ICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZMT0FU
X0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSku
bTQxKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVl
KHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0KIAogLy8gVGVz
dHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KIFRF
U1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlT3V0VGltaW5nRnVuY3Rpb24p
CiB7Ci0gICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgT3duUHRyPFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZSA9IGFkb3B0UHRyKFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlOjpjcmVhdGUoKSk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOwogICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAw
KTsKICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CiAgICAg
b3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOwotICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1p
bmdGdW5jdGlvblR5cGVFYXNlT3V0KTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlv
bnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQpOworICAg
IGN1cnZlLT5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKIAogICAgIE93blB0cjxXZWJD
b3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VPdXRU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsr
aSkgewogICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OwotICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKS5tNDEoKSk7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+
Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CiAgICAgfQogfQog
CiAvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVj
dGVkLgogVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJbk91dFRpbWlu
Z0Z1bmN0aW9uKQogewotICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAg
IE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xh
dGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2
ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0KTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1l
KDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVh
c2VJbk91dCk7CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRp
b25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAg
ICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNv
cmU6OkNDRWFzZUluT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4y
NTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1l
KSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
dGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQx
KCkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlv
biB3b3JrcyBhcyBleHBlY3RlZC4KIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0
LCBDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSBjdXJ2ZTsKKyAgICBPd25QdHI8V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlID0gYWRvcHRQdHIoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpKTsKICAg
ICBkb3VibGUgeDEgPSAwLjM7CiAgICAgZG91YmxlIHkxID0gMC4yOwogICAgIGRvdWJsZSB4MiA9
IDAuODsKQEAgLTI2NiwzMSArMjY2LDMxIEBAIFRFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbikKICAgICBvcGVyYXRpb25zMS5hcHBl
bmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsK
LSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCB4MSwg
eTEsIHgyLCB5Mik7Ci0gICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJh
dGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Cisg
ICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIHgxLCB5
MSwgeDIsIHkyKTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJh
dGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CiAK
ICAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2Vi
Q29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIp
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKICAgICAgICAgY29uc3QgZG91
YmxlIHRpbWUgPSBpICogMC4yNTsKLSAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0
aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+
Z2V0VmFsdWUodGltZSkubTQxKCkpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgdGhhdCB0aGUgZGVm
YXVsdCB0aW1pbmcgZnVuY3Rpb24gaXMgaW5kZWVkIGVhc2UuCiBURVNUKFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1bmN0aW9uKQogewotICAgIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIE93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUgPSBhZG9wdFB0cihXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3Jl
YXRlKCkpOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsK
ICAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CiAgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwogICAgIG9wZXJhdGlvbnMyLmFwcGVu
ZFRyYW5zbGF0ZSgxLCAwLCAwKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
MCwgb3BlcmF0aW9uczEpKTsKLSAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwg
b3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKyAgICBjdXJ2ZS0+YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7
CisgICAgY3VydmUtPmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdl
YkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwogCiAgICAgT3duUHRy
PFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFz
ZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsg
KytpKSB7CiAgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Ci0gICAgICAgIEVY
UEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZh
bHVlKHRpbWUpLm00MSgpKTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9u
LT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKICAgICB9CiB9
CiAK
</data>
<flag name="review"
          id="170820"
          type_id="1"
          status="+"
          setter="enne"
    />
    <flag name="commit-queue"
          id="170827"
          type_id="3"
          status="-"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>