<?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>153481</bug_id>
          
          <creation_ts>2016-01-26 05:20:49 -0800</creation_ts>
          <short_desc>[GTK][EFL] Rename ScrollAnimationNone as ScrollAnimationSmooth</short_desc>
          <delta_ts>2016-01-27 02:33:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>153405</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ossy</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1158790</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-26 05:20:49 -0800</bug_when>
    <thetext>ScrollAnimationNone has always been used by EFL and GTK port to implement smooth scrolling. I think it should be possible for other scroll animators to implement smooth scrolling or even implement other kind of scroll animations. For example, in the future I would like to have kinetic scrolling implemented for the GTK+ port to match all other GTK+ application and decide at runtime between different animations without having to use a different scroll animator class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158792</commentid>
    <comment_count>1</comment_count>
      <attachid>269877</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-26 05:34:28 -0800</bug_when>
    <thetext>Created attachment 269877
Patch

For bug #153230 I plan to add ScrollAnimatorGtk to implement overlay scrollbars and use ScrollAnimationSmooth to still support smooth scrolling without using ScrollAnimatorSmooth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158793</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 05:35:47 -0800</bug_when>
    <thetext>Attachment 269877 did not pass style-queue:


ERROR: Source/WebCore/platform/ScrollAnimationSmooth.cpp:43:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/ScrollAnimationSmooth.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/ScrollAnimationSmooth.h:103:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158795</commentid>
    <comment_count>3</comment_count>
      <attachid>269878</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-26 05:55:04 -0800</bug_when>
    <thetext>Created attachment 269878
Fix the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158796</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-26 05:56:45 -0800</bug_when>
    <thetext>Attachment 269878 did not pass style-queue:


ERROR: Source/WebCore/platform/ScrollAnimationSmooth.cpp:43:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/ScrollAnimationSmooth.h:46:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/ScrollAnimationSmooth.h:103:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159258</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-27 02:33:17 -0800</bug_when>
    <thetext>Committed r195661: &lt;http://trac.webkit.org/changeset/195661&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269877</attachid>
            <date>2016-01-26 05:34:28 -0800</date>
            <delta_ts>2016-01-26 05:55:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-scroll-animator-smooth.diff</filename>
            <type>text/plain</type>
            <size>70002</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZGE0NjcwLi5kNzczZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkg
QEAKKzIwMTYtMDEtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW0VGTF0gUmVuYW1lIFNjcm9sbEFuaW1hdGlvbk5vbmUgYXMgU2Ny
b2xsQW5pbWF0aW9uU21vb3RoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM0ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTY3JvbGxBbmltYXRpb25Ob25lIGhhcyBhbHdheXMgYmVlbiB1c2VkIGJ5IEVG
TCBhbmQgR1RLIHBvcnRzIHRvCisgICAgICAgIGltcGxlbWVudCBzbW9vdGggc2Nyb2xsaW5nLiBJ
IHRoaW5rIGl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IKKyAgICAgICAgb3RoZXIgc2Nyb2xsIGFu
aW1hdG9ycyB0byBpbXBsZW1lbnQgc21vb3RoIHNjcm9sbGluZyBvciBldmVuCisgICAgICAgIGlt
cGxlbWVudCBvdGhlciBraW5kIG9mIHNjcm9sbCBhbmltYXRpb25zLiBGb3IgZXhhbXBsZSwgaW4g
dGhlCisgICAgICAgIGZ1dHVyZSBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBraW5ldGljIHNjcm9sbGlu
ZyBpbXBsZW1lbnRlZCBmb3IgdGhlCisgICAgICAgIEdUSysgcG9ydCB0byBtYXRjaCBhbGwgb3Ro
ZXIgR1RLKyBhcHBsaWNhdGlvbiBhbmQgZGVjaWRlIGF0CisgICAgICAgIHJ1bnRpbWUgYmV0d2Vl
biBkaWZmZXJlbnQgYW5pbWF0aW9ucyB3aXRob3V0IGhhdmluZyB0byB1c2UgYQorICAgICAgICBk
aWZmZXJlbnQgc2Nyb2xsIGFuaW1hdG9yIGNsYXNzLiBTbywgdGhpcyBwYXRjaCBhbHNvIG1vdmVz
IHRoZQorICAgICAgICBzbW9vdGggc2Nyb2xsaW5nIGFuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbiB0
byBpdHMgb3duIGNsYXNzCisgICAgICAgIFNjcm9sbEFuaW1hdGlvblNtb290aCB0aGF0IGltcGVt
ZW50cyBhbiBpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uCisgICAgICAgIHRoYXQgY291bGQgYmUg
dXNlZCB0byBpbXBsZW1lbnQgb3RoZXIgYW5pbWF0aW9ucy4gVGhpcyB3aWxsIGFsbG93CisgICAg
ICAgIHRoZSBHVEsrIHBvcnQgdG8gYWRkIGl0cyBvd24gc2Nyb2xsIGFuaW1hdG9yIGNsYXNzIGFu
ZCBzdGlsbAorICAgICAgICBzdXBwb3J0IHNtb290aCBzY3JvbGxpbmcgc2hhcmluZyB0aGUgY29k
ZSB3aXRoIHRoZQorICAgICAgICBTY3JvbGxBbmltYXRpb25TbW9vdGguCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUVmbC5jbWFrZTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbiBhbmQgcmVtb3Zl
IFNjcm9sbEFuaW1hdGlvbk5vbmUuCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbjo6c2VydmljZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb246OlNjcm9sbEFuaW1hdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OlNjcm9sbEFuaW1hdGlvblNtb290aCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0aW9uU21vb3RoOjp1cGRhdGVWaXNpYmxlTGVuZ3Rocyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnNldEN1cnJlbnRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnNlcnZpY2VBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoOjp+U2Nyb2xsQW5pbWF0aW9uU21v
b3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnZlQXQpOgorICAgICAgICAoV2ViQ29yZTo6YXR0
YWNrQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUN1cnZlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvYXN0Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3VydmVJbnRlZ3JhbEF0KToK
KyAgICAgICAgKFdlYkNvcmU6OmF0dGFja0FyZWEpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFz
ZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0QW5pbWF0aW9uUGFyYW1ldGVyc0ZvckdyYW51
bGFyaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6dXBkYXRl
UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoOjph
bmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6
YW5pbWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25T
bW9vdGg6OnN0YXJ0TmV4dFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlv
blNtb290aDo6YW5pbWF0aW9uVGltZXJBY3RpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bEFuaW1hdGlvblNtb290aC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldEN1cnJlbnRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6dXBkYXRlQWN0aXZlU2Ny
b2xsU25hcEluZGV4Rm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Ojpub3RpZnlQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3I6OnNjcm9sbE9mZnNldE9uQXhpcyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcjo6
Y3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU21vb3RoLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yU21vb3RoOjpTY3JvbGxBbmltYXRvclNtb290aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNtb290aDo6flNjcm9sbEFuaW1hdG9yU21v
b3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yU21vb3RoOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JTbW9vdGg6OnNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNtb290aDo6
Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNtb290
aDo6c2VydmljZVNjcm9sbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JTbW9vdGg6OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yU21vb3RoOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvclNtb290aDo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JTbW9vdGguaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KToKKwogMjAxNi0w
MS0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgU2Nyb2xsQW5pbWF0b3IgaXMgbm90IG5vdGlmaWVkIHdoZW4gbW91c2UgZW50ZXJlZCwgbW92
ZWQgb3IgZXhpdGVkIGEgUmVuZGVyTGlzdEJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCBjYTJlZGIwLi4xMjhhMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNTE3LDcg
KzUxNyw4IEBAIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfU01PT1RIX1NDUk9MTElORykKICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JOb25lLmNwcAorICAgICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguY3BwCisg
ICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU21vb3RoLmNwcAogICAgICkKIGVuZGlmICgp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGE4MmNiNC4uNGY0NzExZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTkzNSw3ICs5MzUsOCBAQCBzZXQoR09iamVjdERPTUJp
bmRpbmdzX0dJUl9IRUFERVJTICR7R09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFERVJTfSBQQVJF
TlRfU0NPUAogCiBpZiAoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcpCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAK
KyAgICAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcAorICAgICAgICBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvclNtb290aC5jcHAKICAgICApCiBlbmRpZiAoKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjcyZjJiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0
aW9uX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIFNj
cm9sbGFibGVBcmVhOworCitjbGFzcyBTY3JvbGxBbmltYXRpb24geworcHVibGljOgorICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmljZUFuaW1hdGlvbigpIHsgfTsKKworcHJvdGVjdGVk
OgorICAgIFNjcm9sbEFuaW1hdGlvbihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIDogbV9zY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSkKKyAgICB7CisgICAgfQor
CisgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRpb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3YWEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAKQEAgLTAsMCArMSw0
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25TbW9vdGguaCIKKwor
I2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUg
PSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgdGlja1RpbWUgPSAxIC8gZnJhbWVSYXRlOworc3Rh
dGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4wMDE7CisKK1Njcm9sbEFu
aW1hdGlvblNtb290aDo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkIChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVB
cmVhKQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlm
eVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUVfVElNRVIpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0aW9u
U21vb3RoOjphbmltYXRpb25UaW1lckZpcmVkKQorI2Vsc2UKKyAgICAsIG1fYW5pbWF0aW9uQWN0
aXZlKGZhbHNlKQorI2VuZGlmCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIGZsb2F0
IG1pblNjcm9sbFBvc2l0aW9uOworICAgIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uOworICAgIGlm
IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1pblNjcm9s
bFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCk7
CisgICAgICAgIG1heFNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKS54KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWluU2Nyb2xsUG9zaXRp
b24gPSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICAg
ICAgbWF4U2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3Np
dGlvbigpLnkoKTsKKyAgICB9CisgICAgYm9vbCBuZWVkVG9TY3JvbGwgPSB1cGRhdGVQZXJBeGlz
RGF0YShvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsRGF0
YSA6IG1fdmVydGljYWxEYXRhLCBncmFudWxhcml0eSwgc3RlcCAqIG11bHRpcGxpZXIsIG1pblNj
cm9sbFBvc2l0aW9uLCBtYXhTY3JvbGxQb3NpdGlvbik7CisgICAgaWYgKG5lZWRUb1Njcm9sbCAm
JiAhYW5pbWF0aW9uVGltZXJBY3RpdmUoKSkgeworICAgICAgICBtX3N0YXJ0VGltZSA9IG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxEYXRhLnN0YXJ0VGlt
ZSA6IG1fdmVydGljYWxEYXRhLnN0YXJ0VGltZTsKKyAgICAgICAgYW5pbWF0aW9uVGltZXJGaXJl
ZCgpOworICAgIH0KKyAgICByZXR1cm4gbmVlZFRvU2Nyb2xsOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdGlvblNtb290aDo6c3RvcCgpCit7CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X1RJTUVSKQorICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworI2Vsc2UKKyAgICBtX2FuaW1h
dGlvbkFjdGl2ZSA9IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uU21v
b3RoOjp1cGRhdGVWaXNpYmxlTGVuZ3RocygpCit7CisgICAgbV9ob3Jpem9udGFsRGF0YS52aXNp
YmxlTGVuZ3RoID0gbV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlV2lkdGgoKTsKKyAgICBtX3ZlcnRp
Y2FsRGF0YS52aXNpYmxlTGVuZ3RoID0gbV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpzZXRDdXJyZW50UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1faG9yaXpvbnRh
bERhdGEgPSBQZXJBeGlzRGF0YSgpOworICAgIG1faG9yaXpvbnRhbERhdGEuY3VycmVudFBvc2l0
aW9uID0gcG9zaXRpb24ueCgpOworICAgIG1faG9yaXpvbnRhbERhdGEuZGVzaXJlZFBvc2l0aW9u
ID0gbV9ob3Jpem9udGFsRGF0YS5jdXJyZW50UG9zaXRpb247CisKKyAgICBtX3ZlcnRpY2FsRGF0
YSA9IFBlckF4aXNEYXRhKCk7CisgICAgbV92ZXJ0aWNhbERhdGEuY3VycmVudFBvc2l0aW9uID0g
cG9zaXRpb24ueSgpOworICAgIG1fdmVydGljYWxEYXRhLmRlc2lyZWRQb3NpdGlvbiA9IG1fdmVy
dGljYWxEYXRhLmN1cnJlbnRQb3NpdGlvbjsKK30KKworI2lmICFVU0UoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUVfVElNRVIpCit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6c2VydmljZUFuaW1h
dGlvbigpCit7CisgICAgaWYgKG1fYW5pbWF0aW9uQWN0aXZlKQorICAgICAgICBhbmltYXRpb25U
aW1lckZpcmVkKCk7Cit9CisjZW5kaWYKKworU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjp+U2Nyb2xs
QW5pbWF0aW9uU21vb3RoKCkKK3sKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgY3VydmVBdChT
Y3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgdCkKK3sKKyAgICBzd2l0
Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlOjpMaW5l
YXI6CisgICAgICAgIHJldHVybiB0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpD
dXJ2ZTo6UXVhZHJhdGljOgorICAgICAgICByZXR1cm4gdCAqIHQ7CisgICAgY2FzZSBTY3JvbGxB
bmltYXRpb25TbW9vdGg6OkN1cnZlOjpDdWJpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogdDsK
KyAgICBjYXNlIFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmU6OlF1YXJ0aWM6CisgICAgICAg
IHJldHVybiB0ICogdCAqIHQgKiB0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpD
dXJ2ZTo6Qm91bmNlOgorICAgICAgICAvLyBUaW1lIGJhc2UgaXMgY2hvc2VuIHRvIGtlZXAgdGhl
IGJvdW5jZSBwb2ludHMgc2ltcGxlcjoKKyAgICAgICAgLy8gMSAoaGFsZiBib3VuY2UgY29taW5n
IGluKSArIDEgKyAuNSArIC4yNQorICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVCYXNl
ID0gMi43NTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lQmFzZVNxdWFyZWQgPSB0
aW1lQmFzZSAqIHRpbWVCYXNlOworICAgICAgICBpZiAodCA8IDEgLyB0aW1lQmFzZSkKKyAgICAg
ICAgICAgIHJldHVybiB0aW1lQmFzZVNxdWFyZWQgKiB0ICogdDsKKyAgICAgICAgaWYgKHQgPCAy
IC8gdGltZUJhc2UpIHsKKyAgICAgICAgICAgIC8vIEludmVydCBhIFstLjUsLjVdIHF1YWRyYXRp
YyBwYXJhYm9sYSwgY2VudGVyIGl0IGluIFsxLDJdLgorICAgICAgICAgICAgZG91YmxlIHQxID0g
dCAtIDEuNSAvIHRpbWVCYXNlOworICAgICAgICAgICAgY29uc3QgZG91YmxlIHBhcmFib2xhQXRF
ZGdlID0gMSAtIC41ICogLjU7CisgICAgICAgICAgICByZXR1cm4gdGltZUJhc2VTcXVhcmVkICog
dDEgKiB0MSArIHBhcmFib2xhQXRFZGdlOworICAgICAgICB9CisgICAgICAgIGlmICh0IDwgMi41
IC8gdGltZUJhc2UpIHsKKyAgICAgICAgICAgIC8vIEludmVydCBhIFstLjI1LC4yNV0gcXVhZHJh
dGljIHBhcmFib2xhLCBjZW50ZXIgaXQgaW4gWzIsMi41XS4KKyAgICAgICAgICAgIGRvdWJsZSB0
MiA9IHQgLSAyLjI1IC8gdGltZUJhc2U7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgcGFyYWJv
bGFBdEVkZ2UgPSAxIC0gLjI1ICogLjI1OworICAgICAgICAgICAgcmV0dXJuIHRpbWVCYXNlU3F1
YXJlZCAqIHQyICogdDIgKyBwYXJhYm9sYUF0RWRnZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJ
bnZlcnQgYSBbLS4xMjUsLjEyNV0gcXVhZHJhdGljIHBhcmFib2xhLCBjZW50ZXIgaXQgaW4gWzIu
NSwyLjc1XS4KKyAgICAgICAgY29uc3QgZG91YmxlIHBhcmFib2xhQXRFZGdlID0gMSAtIC4xMjUg
KiAuMTI1OworICAgICAgICB0IC09IDIuNjI1IC8gdGltZUJhc2U7CisgICAgICAgIHJldHVybiB0
aW1lQmFzZVNxdWFyZWQgKiB0ICogdCArIHBhcmFib2xhQXRFZGdlOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBkb3Vi
bGUgYXR0YWNrQ3VydmUoU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpDdXJ2ZSBjdXJ2ZSwgZG91Ymxl
IGRlbHRhVGltZSwgZG91YmxlIGN1cnZlVCwgZG91YmxlIHN0YXJ0UG9zaXRpb24sIGRvdWJsZSBh
dHRhY2tQb3NpdGlvbikKK3sKKyAgICBkb3VibGUgdCA9IGRlbHRhVGltZSAvIGN1cnZlVDsKKyAg
ICBkb3VibGUgcG9zaXRpb25GYWN0b3IgPSBjdXJ2ZUF0KGN1cnZlLCB0KTsKKyAgICByZXR1cm4g
c3RhcnRQb3NpdGlvbiArIHBvc2l0aW9uRmFjdG9yICogKGF0dGFja1Bvc2l0aW9uIC0gc3RhcnRQ
b3NpdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHJlbGVhc2VDdXJ2ZShTY3JvbGxB
bmltYXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgZGVsdGFUaW1lLCBkb3VibGUgY3Vy
dmVULCBkb3VibGUgcmVsZWFzZVBvc2l0aW9uLCBkb3VibGUgZGVzaXJlZFBvc2l0aW9uKQorewor
ICAgIGRvdWJsZSB0ID0gZGVsdGFUaW1lIC8gY3VydmVUOworICAgIGRvdWJsZSBwb3NpdGlvbkZh
Y3RvciA9IDEgLSBjdXJ2ZUF0KGN1cnZlLCAxIC0gdCk7CisgICAgcmV0dXJuIHJlbGVhc2VQb3Np
dGlvbiArIChwb3NpdGlvbkZhY3RvciAqIChkZXNpcmVkUG9zaXRpb24gLSByZWxlYXNlUG9zaXRp
b24pKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgY29hc3RDdXJ2ZShTY3JvbGxBbmltYXRp
b25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgZmFjdG9yKQoreworICAgIHJldHVybiAxIC0g
Y3VydmVBdChjdXJ2ZSwgMSAtIGZhY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGN1
cnZlSW50ZWdyYWxBdChTY3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUg
dCkKK3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRpb25TbW9v
dGg6OkN1cnZlOjpMaW5lYXI6CisgICAgICAgIHJldHVybiB0ICogdCAvIDI7CisgICAgY2FzZSBT
Y3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlOjpRdWFkcmF0aWM6CisgICAgICAgIHJldHVybiB0
ICogdCAqIHQgLyAzOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpDdXJ2ZTo6Q3Vi
aWM6CisgICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0IC8gNDsKKyAgICBjYXNlIFNjcm9sbEFu
aW1hdGlvblNtb290aDo6Q3VydmU6OlF1YXJ0aWM6CisgICAgICAgIHJldHVybiB0ICogdCAqIHQg
KiB0ICogdCAvIDU7CisgICAgY2FzZSBTY3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlOjpCb3Vu
Y2U6CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGltZUJhc2UgPSAyLjc1OworICAgICAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVCYXNlU3F1YXJlZCA9IHRpbWVCYXNlICogdGltZUJh
c2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGltZUJhc2VTcXVhcmVkT3ZlclRocmVl
ID0gdGltZUJhc2VTcXVhcmVkIC8gMzsKKyAgICAgICAgZG91YmxlIGFyZWE7CisgICAgICAgIGRv
dWJsZSB0MSA9IHN0ZDo6bWluKHQsIDEgLyB0aW1lQmFzZSk7CisgICAgICAgIGFyZWEgPSB0aW1l
QmFzZVNxdWFyZWRPdmVyVGhyZWUgKiB0MSAqIHQxICogdDE7CisgICAgICAgIGlmICh0IDwgMSAv
IHRpbWVCYXNlKQorICAgICAgICAgICAgcmV0dXJuIGFyZWE7CisKKyAgICAgICAgdDEgPSBzdGQ6
Om1pbih0IC0gMSAvIHRpbWVCYXNlLCAxIC8gdGltZUJhc2UpOworICAgICAgICAvLyBUaGUgaW50
ZWdyYWwgb2YgdGltZUJhc2VTcXVhcmVkICogKHQxIC0gLjUgLyB0aW1lQmFzZSkgKiAodDEgLSAu
NSAvIHRpbWVCYXNlKSArIHBhcmFib2xhQXRFZGdlCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgc2Vjb25kSW5uZXJPZmZzZXQgPSB0aW1lQmFzZVNxdWFyZWQgKiAuNSAvIHRpbWVCYXNlOwor
ICAgICAgICBkb3VibGUgYm91bmNlQXJlYSA9IHQxICogKHQxICogKHRpbWVCYXNlU3F1YXJlZE92
ZXJUaHJlZSAqIHQxIC0gc2Vjb25kSW5uZXJPZmZzZXQpICsgMSk7CisgICAgICAgIGFyZWEgKz0g
Ym91bmNlQXJlYTsKKyAgICAgICAgaWYgKHQgPCAyIC8gdGltZUJhc2UpCisgICAgICAgICAgICBy
ZXR1cm4gYXJlYTsKKworICAgICAgICB0MSA9IHN0ZDo6bWluKHQgLSAyIC8gdGltZUJhc2UsIDAu
NSAvIHRpbWVCYXNlKTsKKyAgICAgICAgLy8gVGhlIGludGVncmFsIG9mIHRpbWVCYXNlU3F1YXJl
ZCAqICh0MSAtIC4yNSAvIHRpbWVCYXNlKSAqICh0MSAtIC4yNSAvIHRpbWVCYXNlKSArIHBhcmFi
b2xhQXRFZGdlCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGhpcmRJbm5lck9mZnNldCA9
IHRpbWVCYXNlU3F1YXJlZCAqIC4yNSAvIHRpbWVCYXNlOworICAgICAgICBib3VuY2VBcmVhID0g
IHQxICogKHQxICogKHRpbWVCYXNlU3F1YXJlZE92ZXJUaHJlZSAqIHQxIC0gdGhpcmRJbm5lck9m
ZnNldCkgKyAxKTsKKyAgICAgICAgYXJlYSArPSBib3VuY2VBcmVhOworICAgICAgICBpZiAodCA8
IDIuNSAvIHRpbWVCYXNlKQorICAgICAgICAgICAgcmV0dXJuIGFyZWE7CisKKyAgICAgICAgdDEg
PSB0IC0gMi41IC8gdGltZUJhc2U7CisgICAgICAgIC8vIFRoZSBpbnRlZ3JhbCBvZiB0aW1lQmFz
ZVNxdWFyZWQgKiAodDEgLSAuMTI1IC8gdGltZUJhc2UpICogKHQxIC0gLjEyNSAvIHRpbWVCYXNl
KSArIHBhcmFib2xhQXRFZGdlCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZm91cnRoSW5u
ZXJPZmZzZXQgPSB0aW1lQmFzZVNxdWFyZWQgKiAuMTI1IC8gdGltZUJhc2U7CisgICAgICAgIGJv
dW5jZUFyZWEgPSB0MSAqICh0MSAqICh0aW1lQmFzZVNxdWFyZWRPdmVyVGhyZWUgKiB0MSAtIGZv
dXJ0aElubmVyT2Zmc2V0KSArIDEpOworICAgICAgICBhcmVhICs9IGJvdW5jZUFyZWE7CisgICAg
ICAgIHJldHVybiBhcmVhOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgYXR0YWNrQXJlYShTY3JvbGxBbmlt
YXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgc3RhcnRULCBkb3VibGUgZW5kVCkKK3sK
KyAgICBkb3VibGUgc3RhcnRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgc3RhcnRUKTsK
KyAgICBkb3VibGUgZW5kVmFsdWUgPSBjdXJ2ZUludGVncmFsQXQoY3VydmUsIGVuZFQpOworICAg
IHJldHVybiBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91Ymxl
IHJlbGVhc2VBcmVhKFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmUgY3VydmUsIGRvdWJsZSBz
dGFydFQsIGRvdWJsZSBlbmRUKQoreworICAgIGRvdWJsZSBzdGFydFZhbHVlID0gY3VydmVJbnRl
Z3JhbEF0KGN1cnZlLCAxIC0gZW5kVCk7CisgICAgZG91YmxlIGVuZFZhbHVlID0gY3VydmVJbnRl
Z3JhbEF0KGN1cnZlLCAxIC0gc3RhcnRUKTsKKyAgICByZXR1cm4gZW5kVmFsdWUgLSBzdGFydFZh
bHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0QW5pbWF0aW9uUGFyYW1ldGVyc0Zvckdy
YW51bGFyaXR5KFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBkb3VibGUmIGFuaW1hdGlv
blRpbWUsIGRvdWJsZSYgcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lLCBkb3VibGUmIGF0dGFja1Rp
bWUsIGRvdWJsZSYgcmVsZWFzZVRpbWUsIFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmUmIGNv
YXN0VGltZUN1cnZlLCBkb3VibGUmIG1heGltdW1Db2FzdFRpbWUpCit7CisgICAgc3dpdGNoIChn
cmFudWxhcml0eSkgeworICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoKKyAgICAgICAgYW5pbWF0
aW9uVGltZSA9IDIwICogdGlja1RpbWU7CisgICAgICAgIHJlcGVhdE1pbmltdW1TdXN0YWluVGlt
ZSA9IDEwICogdGlja1RpbWU7CisgICAgICAgIGF0dGFja1RpbWUgPSAxMCAqIHRpY2tUaW1lOwor
ICAgICAgICByZWxlYXNlVGltZSA9IDEwICogdGlja1RpbWU7CisgICAgICAgIGNvYXN0VGltZUN1
cnZlID0gU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpDdXJ2ZTo6TGluZWFyOworICAgICAgICBtYXhp
bXVtQ29hc3RUaW1lID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6
CisgICAgICAgIGFuaW1hdGlvblRpbWUgPSAxMCAqIHRpY2tUaW1lOworICAgICAgICByZXBlYXRN
aW5pbXVtU3VzdGFpblRpbWUgPSA3ICogdGlja1RpbWU7CisgICAgICAgIGF0dGFja1RpbWUgPSAz
ICogdGlja1RpbWU7CisgICAgICAgIHJlbGVhc2VUaW1lID0gMyAqIHRpY2tUaW1lOworICAgICAg
ICBjb2FzdFRpbWVDdXJ2ZSA9IFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmU6OkxpbmVhcjsK
KyAgICAgICAgbWF4aW11bUNvYXN0VGltZSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U2Nyb2xsQnlQYWdlOgorICAgICAgICBhbmltYXRpb25UaW1lID0gMTUgKiB0aWNrVGltZTsKKyAg
ICAgICAgcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lID0gMTAgKiB0aWNrVGltZTsKKyAgICAgICAg
YXR0YWNrVGltZSA9IDUgKiB0aWNrVGltZTsKKyAgICAgICAgcmVsZWFzZVRpbWUgPSA1ICogdGlj
a1RpbWU7CisgICAgICAgIGNvYXN0VGltZUN1cnZlID0gU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpD
dXJ2ZTo6TGluZWFyOworICAgICAgICBtYXhpbXVtQ29hc3RUaW1lID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTY3JvbGxCeVBpeGVsOgorICAgICAgICBhbmltYXRpb25UaW1lID0gMSAq
IHRpY2tUaW1lOworICAgICAgICByZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUgPSAyICogdGlja1Rp
bWU7CisgICAgICAgIGF0dGFja1RpbWUgPSAzICogdGlja1RpbWU7CisgICAgICAgIHJlbGVhc2VU
aW1lID0gMyAqIHRpY2tUaW1lOworICAgICAgICBjb2FzdFRpbWVDdXJ2ZSA9IFNjcm9sbEFuaW1h
dGlvblNtb290aDo6Q3VydmU6OlF1YWRyYXRpYzsKKyAgICAgICAgbWF4aW11bUNvYXN0VGltZSA9
IDEuMjU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxBbmltYXRpb25TbW9vdGg6OnVwZGF0
ZVBlckF4aXNEYXRhKFBlckF4aXNEYXRhJiBkYXRhLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgZGVsdGEsIGZsb2F0IG1pblNjcm9sbFBvc2l0aW9uLCBmbG9hdCBtYXhTY3Jv
bGxQb3NpdGlvbikKK3sKKyAgICBpZiAoIWRhdGEuc3RhcnRUaW1lIHx8ICFkZWx0YSB8fCAoZGVs
dGEgPCAwKSAhPSAoZGF0YS5kZXNpcmVkUG9zaXRpb24gLSBkYXRhLmN1cnJlbnRQb3NpdGlvbiA8
IDApKSB7CisgICAgICAgIGRhdGEuZGVzaXJlZFBvc2l0aW9uID0gZGF0YS5jdXJyZW50UG9zaXRp
b247CisgICAgICAgIGRhdGEuc3RhcnRUaW1lID0gMDsKKyAgICB9CisgICAgZmxvYXQgbmV3UG9z
aXRpb24gPSBkYXRhLmRlc2lyZWRQb3NpdGlvbiArIGRlbHRhOworCisgICAgbmV3UG9zaXRpb24g
PSBzdGQ6Om1heChzdGQ6Om1pbihuZXdQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24pLCBtaW5T
Y3JvbGxQb3NpdGlvbik7CisKKyAgICBpZiAobmV3UG9zaXRpb24gPT0gZGF0YS5kZXNpcmVkUG9z
aXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvdWJsZSBhbmltYXRpb25UaW1l
LCByZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUsIGF0dGFja1RpbWUsIHJlbGVhc2VUaW1lLCBtYXhp
bXVtQ29hc3RUaW1lOworICAgIEN1cnZlIGNvYXN0VGltZUN1cnZlOworICAgIGdldEFuaW1hdGlv
blBhcmFtZXRlcnNGb3JHcmFudWxhcml0eShncmFudWxhcml0eSwgYW5pbWF0aW9uVGltZSwgcmVw
ZWF0TWluaW11bVN1c3RhaW5UaW1lLCBhdHRhY2tUaW1lLCByZWxlYXNlVGltZSwgY29hc3RUaW1l
Q3VydmUsIG1heGltdW1Db2FzdFRpbWUpOworCisgICAgZGF0YS5kZXNpcmVkUG9zaXRpb24gPSBu
ZXdQb3NpdGlvbjsKKyAgICBpZiAoIWRhdGEuc3RhcnRUaW1lKQorICAgICAgICBkYXRhLmF0dGFj
a1RpbWUgPSBhdHRhY2tUaW1lOworICAgIGRhdGEuYW5pbWF0aW9uVGltZSA9IGFuaW1hdGlvblRp
bWU7CisgICAgZGF0YS5yZWxlYXNlVGltZSA9IHJlbGVhc2VUaW1lOworCisgICAgLy8gUHJpb3Jp
dGl6ZSBvdXIgd2F5IG91dCBvZiBvdmVyIGNvbnN0cmFpbnQuCisgICAgaWYgKGRhdGEuYXR0YWNr
VGltZSArIGRhdGEucmVsZWFzZVRpbWUgPiBkYXRhLmFuaW1hdGlvblRpbWUpIHsKKyAgICAgICAg
aWYgKGRhdGEucmVsZWFzZVRpbWUgPiBkYXRhLmFuaW1hdGlvblRpbWUpCisgICAgICAgICAgICBk
YXRhLnJlbGVhc2VUaW1lID0gZGF0YS5hbmltYXRpb25UaW1lOworICAgICAgICBkYXRhLmF0dGFj
a1RpbWUgPSBkYXRhLmFuaW1hdGlvblRpbWUgLSBkYXRhLnJlbGVhc2VUaW1lOworICAgIH0KKwor
ICAgIGlmICghZGF0YS5zdGFydFRpbWUpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIHRoZSB0aW1lIGZyb20gdGhlIGV2ZW50IHRoYXQgZ290IHVzIGhlcmUuCisgICAgICAgIGRh
dGEuc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSB0aWNrVGltZSAv
IDI7CisgICAgICAgIGRhdGEuc3RhcnRQb3NpdGlvbiA9IGRhdGEuY3VycmVudFBvc2l0aW9uOwor
ICAgICAgICBkYXRhLmxhc3RBbmltYXRpb25UaW1lID0gZGF0YS5zdGFydFRpbWU7CisgICAgfQor
ICAgIGRhdGEuc3RhcnRWZWxvY2l0eSA9IGRhdGEuY3VycmVudFZlbG9jaXR5OworCisgICAgZG91
YmxlIHJlbWFpbmluZ0RlbHRhID0gZGF0YS5kZXNpcmVkUG9zaXRpb24gLSBkYXRhLmN1cnJlbnRQ
b3NpdGlvbjsKKyAgICBkb3VibGUgYXR0YWNrQXJlYUxlZnQgPSAwOworICAgIGRvdWJsZSBkZWx0
YVRpbWUgPSBkYXRhLmxhc3RBbmltYXRpb25UaW1lIC0gZGF0YS5zdGFydFRpbWU7CisgICAgZG91
YmxlIGF0dGFja1RpbWVMZWZ0ID0gc3RkOjptYXgoMC4sIGRhdGEuYXR0YWNrVGltZSAtIGRlbHRh
VGltZSk7CisgICAgZG91YmxlIHRpbWVMZWZ0ID0gZGF0YS5hbmltYXRpb25UaW1lIC0gZGVsdGFU
aW1lOworICAgIGRvdWJsZSBtaW5UaW1lTGVmdCA9IGRhdGEucmVsZWFzZVRpbWUgKyBzdGQ6Om1p
bihyZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUsIGRhdGEuYW5pbWF0aW9uVGltZSAtIGRhdGEucmVs
ZWFzZVRpbWUgLSBhdHRhY2tUaW1lTGVmdCk7CisgICAgaWYgKHRpbWVMZWZ0IDwgbWluVGltZUxl
ZnQpIHsKKyAgICAgICAgZGF0YS5hbmltYXRpb25UaW1lID0gZGVsdGFUaW1lICsgbWluVGltZUxl
ZnQ7CisgICAgICAgIHRpbWVMZWZ0ID0gbWluVGltZUxlZnQ7CisgICAgfQorCisgICAgaWYgKG1h
eGltdW1Db2FzdFRpbWUgPiAocmVwZWF0TWluaW11bVN1c3RhaW5UaW1lICsgcmVsZWFzZVRpbWUp
KSB7CisgICAgICAgIGRvdWJsZSB0YXJnZXRNYXhDb2FzdFZlbG9jaXR5ID0gZGF0YS52aXNpYmxl
TGVuZ3RoICogLjI1ICogZnJhbWVSYXRlOworICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGFz
IG1pbmltYWwgYXMgcG9zc2libGUgd2hpbGUgbm90IGJlaW5nIGludHJ1c2l2ZSB0byBwYWdlIHVw
L2Rvd24uCisgICAgICAgIGRvdWJsZSBtaW5Db2FzdERlbHRhID0gZGF0YS52aXNpYmxlTGVuZ3Ro
OworCisgICAgICAgIGlmIChmYWJzKHJlbWFpbmluZ0RlbHRhKSA+IG1pbkNvYXN0RGVsdGEpIHsK
KyAgICAgICAgICAgIGRvdWJsZSBtYXhDb2FzdERlbHRhID0gbWF4aW11bUNvYXN0VGltZSAqIHRh
cmdldE1heENvYXN0VmVsb2NpdHk7CisgICAgICAgICAgICBkb3VibGUgY29hc3RGYWN0b3IgPSBz
dGQ6Om1pbigxLiwgKGZhYnMocmVtYWluaW5nRGVsdGEpIC0gbWluQ29hc3REZWx0YSkgLyAobWF4
Q29hc3REZWx0YSAtIG1pbkNvYXN0RGVsdGEpKTsKKworICAgICAgICAgICAgLy8gV2UgY291bGQg
cGxheSB3aXRoIHRoZSBjdXJ2ZSBoZXJlIC0gbGluZWFyIHNlZW1zIGEgbGl0dGxlIHNvZnQuIElu
aXRpYWwgdGVzdGluZyBtYWtlcyBtZSB3YW50IHRvIGZlZWQgaW50byB0aGUgc3VzdGFpbiB0aW1l
IG1vcmUgYWdncmVzc2l2ZWx5LgorICAgICAgICAgICAgZG91YmxlIGNvYXN0TWluVGltZUxlZnQg
PSBzdGQ6Om1pbihtYXhpbXVtQ29hc3RUaW1lLCBtaW5UaW1lTGVmdCArIGNvYXN0Q3VydmUoY29h
c3RUaW1lQ3VydmUsIGNvYXN0RmFjdG9yKSAqIChtYXhpbXVtQ29hc3RUaW1lIC0gbWluVGltZUxl
ZnQpKTsKKworICAgICAgICAgICAgaWYgKGRvdWJsZSBhZGRpdGlvbmFsVGltZSA9IHN0ZDo6bWF4
KDAuLCBjb2FzdE1pblRpbWVMZWZ0IC0gbWluVGltZUxlZnQpKSB7CisgICAgICAgICAgICAgICAg
ZG91YmxlIGFkZGl0aW9uYWxSZWxlYXNlVGltZSA9IHN0ZDo6bWluKGFkZGl0aW9uYWxUaW1lLCBy
ZWxlYXNlVGltZSAvIChyZWxlYXNlVGltZSArIHJlcGVhdE1pbmltdW1TdXN0YWluVGltZSkgKiBh
ZGRpdGlvbmFsVGltZSk7CisgICAgICAgICAgICAgICAgZGF0YS5yZWxlYXNlVGltZSA9IHJlbGVh
c2VUaW1lICsgYWRkaXRpb25hbFJlbGVhc2VUaW1lOworICAgICAgICAgICAgICAgIGRhdGEuYW5p
bWF0aW9uVGltZSA9IGRlbHRhVGltZSArIGNvYXN0TWluVGltZUxlZnQ7CisgICAgICAgICAgICAg
ICAgdGltZUxlZnQgPSBjb2FzdE1pblRpbWVMZWZ0OworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZG91YmxlIHJlbGVhc2VUaW1lTGVmdCA9IHN0ZDo6bWluKHRpbWVMZWZ0
LCBkYXRhLnJlbGVhc2VUaW1lKTsKKyAgICBkb3VibGUgc3VzdGFpblRpbWVMZWZ0ID0gc3RkOjpt
YXgoMC4sIHRpbWVMZWZ0IC0gcmVsZWFzZVRpbWVMZWZ0IC0gYXR0YWNrVGltZUxlZnQpOworICAg
IGlmIChhdHRhY2tUaW1lTGVmdCkgeworICAgICAgICBkb3VibGUgYXR0YWNrU3BvdCA9IGRlbHRh
VGltZSAvIGRhdGEuYXR0YWNrVGltZTsKKyAgICAgICAgYXR0YWNrQXJlYUxlZnQgPSBhdHRhY2tB
cmVhKEN1cnZlOjpDdWJpYywgYXR0YWNrU3BvdCwgMSkgKiBkYXRhLmF0dGFja1RpbWU7CisgICAg
fQorCisgICAgZG91YmxlIHJlbGVhc2VTcG90ID0gKGRhdGEucmVsZWFzZVRpbWUgLSByZWxlYXNl
VGltZUxlZnQpIC8gZGF0YS5yZWxlYXNlVGltZTsKKyAgICBkb3VibGUgcmVsZWFzZUFyZWFMZWZ0
ID0gcmVsZWFzZUFyZWEoQ3VydmU6OkN1YmljLCByZWxlYXNlU3BvdCwgMSkgKiBkYXRhLnJlbGVh
c2VUaW1lOworCisgICAgZGF0YS5kZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIChh
dHRhY2tBcmVhTGVmdCArIHN1c3RhaW5UaW1lTGVmdCArIHJlbGVhc2VBcmVhTGVmdCk7CisgICAg
ZGF0YS5yZWxlYXNlUG9zaXRpb24gPSBkYXRhLmRlc2lyZWRQb3NpdGlvbiAtIGRhdGEuZGVzaXJl
ZFZlbG9jaXR5ICogcmVsZWFzZUFyZWFMZWZ0OworICAgIGlmIChhdHRhY2tBcmVhTGVmdCkKKyAg
ICAgICAgZGF0YS5hdHRhY2tQb3NpdGlvbiA9IGRhdGEuc3RhcnRQb3NpdGlvbiArIGRhdGEuZGVz
aXJlZFZlbG9jaXR5ICogYXR0YWNrQXJlYUxlZnQ7CisgICAgZWxzZQorICAgICAgICBkYXRhLmF0
dGFja1Bvc2l0aW9uID0gZGF0YS5yZWxlYXNlUG9zaXRpb24gLSAoZGF0YS5hbmltYXRpb25UaW1l
IC0gZGF0YS5yZWxlYXNlVGltZSAtIGRhdGEuYXR0YWNrVGltZSkgKiBkYXRhLmRlc2lyZWRWZWxv
Y2l0eTsKKworICAgIGlmIChzdXN0YWluVGltZUxlZnQpIHsKKyAgICAgICAgZG91YmxlIHJvdW5k
T2ZmID0gZGF0YS5yZWxlYXNlUG9zaXRpb24gLSAoKGF0dGFja0FyZWFMZWZ0ID8gZGF0YS5hdHRh
Y2tQb3NpdGlvbiA6IGRhdGEuY3VycmVudFBvc2l0aW9uKSArIGRhdGEuZGVzaXJlZFZlbG9jaXR5
ICogc3VzdGFpblRpbWVMZWZ0KTsKKyAgICAgICAgZGF0YS5kZXNpcmVkVmVsb2NpdHkgKz0gcm91
bmRPZmYgLyBzdXN0YWluVGltZUxlZnQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhJiBk
YXRhLCBkb3VibGUgY3VycmVudFRpbWUpCit7CisgICAgaWYgKCFkYXRhLnN0YXJ0VGltZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG91YmxlIGxhc3RTY3JvbGxJbnRlcnZhbCA9IGN1
cnJlbnRUaW1lIC0gZGF0YS5sYXN0QW5pbWF0aW9uVGltZTsKKyAgICBpZiAobGFzdFNjcm9sbElu
dGVydmFsIDwgbWluaW11bVRpbWVySW50ZXJ2YWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgZGF0YS5sYXN0QW5pbWF0aW9uVGltZSA9IGN1cnJlbnRUaW1lOworCisgICAgZG91YmxlIGRl
bHRhVGltZSA9IGN1cnJlbnRUaW1lIC0gZGF0YS5zdGFydFRpbWU7CisgICAgZG91YmxlIG5ld1Bv
c2l0aW9uID0gZGF0YS5jdXJyZW50UG9zaXRpb247CisKKyAgICBpZiAoZGVsdGFUaW1lID4gZGF0
YS5hbmltYXRpb25UaW1lKSB7CisgICAgICAgIGRvdWJsZSBkZXNpcmVkUG9zaXRpb24gPSBkYXRh
LmRlc2lyZWRQb3NpdGlvbjsKKyAgICAgICAgZGF0YSA9IFBlckF4aXNEYXRhKCk7CisgICAgICAg
IGRhdGEuY3VycmVudFBvc2l0aW9uID0gZGVzaXJlZFBvc2l0aW9uOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmIChkZWx0YVRpbWUgPCBkYXRhLmF0dGFja1RpbWUpCisgICAg
ICAgIG5ld1Bvc2l0aW9uID0gYXR0YWNrQ3VydmUoQ3VydmU6OkN1YmljLCBkZWx0YVRpbWUsIGRh
dGEuYXR0YWNrVGltZSwgZGF0YS5zdGFydFBvc2l0aW9uLCBkYXRhLmF0dGFja1Bvc2l0aW9uKTsK
KyAgICBlbHNlIGlmIChkZWx0YVRpbWUgPCAoZGF0YS5hbmltYXRpb25UaW1lIC0gZGF0YS5yZWxl
YXNlVGltZSkpCisgICAgICAgIG5ld1Bvc2l0aW9uID0gZGF0YS5hdHRhY2tQb3NpdGlvbiArIChk
ZWx0YVRpbWUgLSBkYXRhLmF0dGFja1RpbWUpICogZGF0YS5kZXNpcmVkVmVsb2NpdHk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIHJlbGVhc2UgaXMgYmFzZWQgb24gdGFyZ2V0aW5nIHRoZSBleGFj
dCBmaW5hbCBwb3NpdGlvbi4KKyAgICAgICAgZG91YmxlIHJlbGVhc2VEZWx0YVQgPSBkZWx0YVRp
bWUgLSAoZGF0YS5hbmltYXRpb25UaW1lIC0gZGF0YS5yZWxlYXNlVGltZSk7CisgICAgICAgIG5l
d1Bvc2l0aW9uID0gcmVsZWFzZUN1cnZlKEN1cnZlOjpDdWJpYywgcmVsZWFzZURlbHRhVCwgZGF0
YS5yZWxlYXNlVGltZSwgZGF0YS5yZWxlYXNlUG9zaXRpb24sIGRhdGEuZGVzaXJlZFBvc2l0aW9u
KTsKKyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgdmVsb2NpdHkgdG8gYSBwZXIgc2Vjb25kIGFt
b3VudC4gQ291bGQgYmUgdXNlZCB0byBjaGVjayBmb3IgamFuay4KKyAgICBpZiAobGFzdFNjcm9s
bEludGVydmFsID4gMCkKKyAgICAgICAgZGF0YS5jdXJyZW50VmVsb2NpdHkgPSAobmV3UG9zaXRp
b24gLSBkYXRhLmN1cnJlbnRQb3NpdGlvbikgLyBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgZGF0
YS5jdXJyZW50UG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6YW5pbWF0aW9uVGltZXJGaXJlZCgpCit7Cisg
ICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Cisg
ICAgZG91YmxlIGRlbHRhVG9OZXh0RnJhbWUgPSBjZWlsKChjdXJyZW50VGltZSAtIG1fc3RhcnRU
aW1lKSAqIGZyYW1lUmF0ZSkgLyBmcmFtZVJhdGUgLSAoY3VycmVudFRpbWUgLSBtX3N0YXJ0VGlt
ZSk7CisgICAgY3VycmVudFRpbWUgKz0gZGVsdGFUb05leHRGcmFtZTsKKworICAgIGJvb2wgY29u
dGludWVBbmltYXRpb24gPSBmYWxzZTsKKyAgICBpZiAoYW5pbWF0ZVNjcm9sbChtX2hvcml6b250
YWxEYXRhLCBjdXJyZW50VGltZSkpCisgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsK
KyAgICBpZiAoYW5pbWF0ZVNjcm9sbChtX3ZlcnRpY2FsRGF0YSwgY3VycmVudFRpbWUpKQorICAg
ICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisKKyAgICBpZiAoY29udGludWVBbmltYXRp
b24pCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgICAgICBzdGFy
dE5leHRUaW1lcihzdGQ6Om1heChtaW5pbXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFt
ZSkpOworI2Vsc2UKKyAgICAgICAgc3RhcnROZXh0VGltZXIoKTsKKyAgICBlbHNlCisgICAgICAg
IG1fYW5pbWF0aW9uQWN0aXZlID0gZmFsc2U7CisjZW5kaWYKKworICAgIG1fbm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24oRmxvYXRQb2ludChtX2hvcml6b250YWxEYXRhLmN1cnJlbnRQb3Np
dGlvbiwgbV92ZXJ0aWNhbERhdGEuY3VycmVudFBvc2l0aW9uKSk7Cit9CisKKyNpZiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6
c3RhcnROZXh0VGltZXIoZG91YmxlIGRlbGF5KQoreworICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KGRlbGF5KTsKK30KKyNlbHNlCit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6
c3RhcnROZXh0VGltZXIoKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnNjaGVkdWxlQW5p
bWF0aW9uKCkpCisgICAgICAgIG1fYW5pbWF0aW9uQWN0aXZlID0gdHJ1ZTsKK30KKyNlbmRpZgor
Citib29sIFNjcm9sbEFuaW1hdGlvblNtb290aDo6YW5pbWF0aW9uVGltZXJBY3RpdmUoKSBjb25z
dAoreworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKKyAgICByZXR1cm4g
bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbV9hbmltYXRp
b25BY3RpdmU7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvblNtb290aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjc1ZjI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb25TbW9vdGguaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdGlv
blNtb290aF9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvblNtb290aF9oCisKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRpb24uaCIKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaWYg
IUVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNlcnJvciAiU01PT1RIX1NDUk9MTElO
RyByZXF1aXJlcyBSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSB0byBiZSBlbmFibGVkLiIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFBvaW50OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlv
blNtb290aCBmaW5hbDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgU2Ny
b2xsQW5pbWF0aW9uU21vb3RoKFNjcm9sbGFibGVBcmVhJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChG
bG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKTsKKyAgICB2aXJ0
dWFsIH5TY3JvbGxBbmltYXRpb25TbW9vdGgoKTsKKworICAgIGVudW0gY2xhc3MgQ3VydmUgewor
ICAgICAgICBMaW5lYXIsCisgICAgICAgIFF1YWRyYXRpYywKKyAgICAgICAgQ3ViaWMsCisgICAg
ICAgIFF1YXJ0aWMsCisgICAgICAgIEJvdW5jZQorICAgIH07CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhz
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jikgb3ZlcnJpZGU7CisjaWYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9U
SU1FUikKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmljZUFuaW1hdGlvbigpIG92ZXJyaWRlOworI2Vu
ZGlmCisKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgICAgICBmbG9hdCBjdXJyZW50UG9z
aXRpb24geyAwIH07CisgICAgICAgIGRvdWJsZSBjdXJyZW50VmVsb2NpdHkgeyAwIH07CisKKyAg
ICAgICAgZG91YmxlIGRlc2lyZWRQb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgZG91YmxlIGRlc2ly
ZWRWZWxvY2l0eSB7IDAgfTsKKworICAgICAgICBkb3VibGUgc3RhcnRQb3NpdGlvbiB7IDAgfTsK
KyAgICAgICAgZG91YmxlIHN0YXJ0VGltZSB7IDAgfTsKKyAgICAgICAgZG91YmxlIHN0YXJ0VmVs
b2NpdHkgeyAwIH07CisKKyAgICAgICAgZG91YmxlIGFuaW1hdGlvblRpbWUgeyAwIH07CisgICAg
ICAgIGRvdWJsZSBsYXN0QW5pbWF0aW9uVGltZSB7IDAgfTsKKworICAgICAgICBkb3VibGUgYXR0
YWNrUG9zaXRpb24geyAwIH07CisgICAgICAgIGRvdWJsZSBhdHRhY2tUaW1lIHsgMCB9OworICAg
ICAgICBDdXJ2ZSBhdHRhY2tDdXJ2ZSB7IEN1cnZlOjpRdWFkcmF0aWMgfTsKKworICAgICAgICBk
b3VibGUgcmVsZWFzZVBvc2l0aW9uIHsgMCB9OworICAgICAgICBkb3VibGUgcmVsZWFzZVRpbWUg
eyAwIH07CisgICAgICAgIEN1cnZlIHJlbGVhc2VDdXJ2ZSB7IEN1cnZlOjpRdWFkcmF0aWMgfTsK
KworICAgICAgICBpbnQgdmlzaWJsZUxlbmd0aCB7IDAgfTsKKyAgICB9OworCisgICAgYm9vbCB1
cGRhdGVQZXJBeGlzRGF0YShQZXJBeGlzRGF0YSYsIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBk
ZWx0YSwgZmxvYXQgbWluU2Nyb2xsUG9zaXRpb24sIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uKTsK
KyAgICBib29sIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEmLCBkb3VibGUgY3VycmVudFRpbWUp
OworCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgIHZvaWQgcmVx
dWVzdEFuaW1hdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0TmV4dFRpbWVyKGRvdWJs
ZSBkZWxheSk7CisjZWxzZQorICAgIHZvaWQgc3RhcnROZXh0VGltZXIoKTsKKyNlbmRpZgorICAg
IHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworICAgIGJvb2wgYW5pbWF0aW9uVGltZXJBY3Rp
dmUoKSBjb25zdDsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRmxvYXRQb2ludCYmKT4gbV9u
b3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbjsKKworICAgIFBlckF4aXNEYXRhIG1faG9yaXpv
bnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7CisKKyAgICBkb3VibGUg
bV9zdGFydFRpbWUgeyAwIH07CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVS
KQorICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7CisjZWxzZQorICAgIGJvb2wgbV9hbmltYXRp
b25BY3RpdmUgeyBmYWxzZSB9OworI2VuZGlmCisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2VuZGlmIC8vIFNjcm9s
bEFuaW1hdGlvblNtb290aF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAKaW5kZXggOTc4OGIyOS4uMjNmZTE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9y
OjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5LAogICAgIGlmIChjdXJyZW50UG9zaXRpb24gPT0gbmV3UG9zaXRpb24pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHNldEN1cnJlbnRQb3NpdGlvbkludGVybmFsKG5ld1Bvc2l0aW9u
KTsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwogICAgIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChuZXdQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7CiAgICAgRmxv
YXRQb2ludCBuZXdQb3NpdG9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkp
KTsKICAgICBGbG9hdFNpemUgZGVsdGEgPSBuZXdQb3NpdG9uIC0gY3VycmVudFBvc2l0aW9uKCk7
Ci0gICAgc2V0Q3VycmVudFBvc2l0aW9uSW50ZXJuYWwobmV3UG9zaXRvbik7CisgICAgbV9jdXJy
ZW50UG9zaXRpb24gPSBuZXdQb3NpdG9uOwogICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0
YSk7CiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCk7CiB9CkBAIC0x
NzIsNyArMTcyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRDdXJyZW50
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgc2V0Q3VycmVudFBv
c2l0aW9uSW50ZXJuYWwocG9zaXRpb24pOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gcG9zaXRp
b247CiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCk7CiB9CiAKQEAg
LTE4MCw3ICsxODAsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVBY3RpdmVTY3JvbGxT
bmFwSW5kZXhGb3JPZmZzZXQoKQogewogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAg
Ly8gRklYTUU6IE5lZWRzIG9mZnNldC9wb3NpdGlvbiBkaXNhbWJpZ3VhdGlvbi4KLSAgICBtX3Nj
cm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQobV9jdXJy
ZW50UG9zWCwgbV9jdXJyZW50UG9zWSk7CisgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KGN1cnJlbnRQb3NpdGlvbi54KCksIG1fY3VycmVu
dFBvc2l0aW9uLnkoKSk7CiAgICAgaWYgKG1fc2Nyb2xsQ29udHJvbGxlci5hY3RpdmVTY3JvbGxT
bmFwSW5kZXhEaWRDaGFuZ2UoKSkgewogICAgICAgICBtX3Njcm9sbGFibGVBcmVhLnNldEN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9s
bFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CiAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgobV9zY3Jv
bGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlz
OjpWZXJ0aWNhbCkpOwpAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCiAKIExheW91dFVuaXQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9s
bE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKIHsKLSAgICByZXR1cm4g
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyBtX2N1cnJlbnRQb3NYIDogbV9j
dXJyZW50UG9zWTsKKyAgICByZXR1cm4gYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250
YWwgPyBtX2N1cnJlbnRQb3NpdGlvbi54KCkgOiBtX2N1cnJlbnRQb3NpdGlvbi55KCk7CiB9CiAK
IHZvaWQgU2Nyb2xsQW5pbWF0b3I6OmltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4
aXMgYXhpcywgZmxvYXQgZGVsdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAppbmRleCBjNDRlYzQzLi5lNjI2YjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yLmgKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2
b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgRmxvYXRQb2lu
dCBjdXJyZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBv
c1gsIG1fY3VycmVudFBvc1kpOyB9CisgICAgY29uc3QgRmxvYXRQb2ludCYgY3VycmVudFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zaXRpb247IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxBbmltYXRpb25zKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHNlcnZpY2VTY3Jv
bGxBbmltYXRpb25zKCkgeyB9CkBAIC0xNDUsMTkgKzE0NSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChjb25zdCBGbG9hdFNpemUmIGRlbHRh
KTsKICAgICB2b2lkIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvck9mZnNldCgpOwogCi0g
ICAgdm9pZCBzZXRDdXJyZW50UG9zaXRpb25JbnRlcm5hbChjb25zdCBGbG9hdFBvaW50JiBwKQot
ICAgIHsKLSAgICAgICAgbV9jdXJyZW50UG9zWCA9IHAueCgpOwotICAgICAgICBtX2N1cnJlbnRQ
b3NZID0gcC55KCk7Ci0gICAgfQotCiAgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFy
ZWE7CiAgICAgUmVmUHRyPFdoZWVsRXZlbnRUZXN0VHJpZ2dlcj4gbV93aGVlbEV2ZW50VGVzdFRy
aWdnZXI7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkgfHwgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQogICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxDb250cm9sbGVyOwogI2VuZGlmCi0g
ICAgZmxvYXQgbV9jdXJyZW50UG9zWCB7IDAgfTsgLy8gU2Nyb2xsQW5pbWF0b3JOb25lIHRha2Vz
IGFkZHJlc3NlcyBvZiB0aGVzZSwgc28gY2FuJ3QgdXNlIGEgRmxvYXRQb2ludC4KLSAgICBmbG9h
dCBtX2N1cnJlbnRQb3NZIHsgMCB9OworICAgIEZsb2F0UG9pbnQgbV9jdXJyZW50UG9zaXRpb247
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JOb25lLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ODdjM2EzZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvck5vbmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0KLSNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKLQotI2luY2x1ZGUgIlNjcm9s
bEFuaW1hdG9yTm9uZS5oIgotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKLSNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZS5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jb25zdCBkb3VibGUga0ZyYW1lUmF0ZSA9IDYwOwotY29uc3QgZG91YmxlIGtUaWNrVGlt
ZSA9IDEgLyBrRnJhbWVSYXRlOwotY29uc3QgZG91YmxlIGtNaW5pbXVtVGltZXJJbnRlcnZhbCA9
IC4wMDE7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgaWYgKHNjcm9s
bGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRvck5vbmU+KHNjcm9sbGFibGVBcmVhKTsKLSAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRvcj4oc2Nyb2xsYWJsZUFyZWEpOwotfQot
Ci1TY3JvbGxBbmltYXRvck5vbmU6OlBhcmFtZXRlcnM6OlBhcmFtZXRlcnMoKQotICAgIDogbV9p
c0VuYWJsZWQoZmFsc2UpCi17Ci19Ci0KLVNjcm9sbEFuaW1hdG9yTm9uZTo6UGFyYW1ldGVyczo6
UGFyYW1ldGVycyhib29sIGlzRW5hYmxlZCwgZG91YmxlIGFuaW1hdGlvblRpbWUsIGRvdWJsZSBy
ZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUsIEN1cnZlIGF0dGFja0N1cnZlLCBkb3VibGUgYXR0YWNr
VGltZSwgQ3VydmUgcmVsZWFzZUN1cnZlLCBkb3VibGUgcmVsZWFzZVRpbWUsIEN1cnZlIGNvYXN0
VGltZUN1cnZlLCBkb3VibGUgbWF4aW11bUNvYXN0VGltZSkKLSAgICA6IG1faXNFbmFibGVkKGlz
RW5hYmxlZCkKLSAgICAsIG1fYW5pbWF0aW9uVGltZShhbmltYXRpb25UaW1lKQotICAgICwgbV9y
ZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUocmVwZWF0TWluaW11bVN1c3RhaW5UaW1lKQotICAgICwg
bV9hdHRhY2tDdXJ2ZShhdHRhY2tDdXJ2ZSkKLSAgICAsIG1fYXR0YWNrVGltZShhdHRhY2tUaW1l
KQotICAgICwgbV9yZWxlYXNlQ3VydmUocmVsZWFzZUN1cnZlKQotICAgICwgbV9yZWxlYXNlVGlt
ZShyZWxlYXNlVGltZSkKLSAgICAsIG1fY29hc3RUaW1lQ3VydmUoY29hc3RUaW1lQ3VydmUpCi0g
ICAgLCBtX21heGltdW1Db2FzdFRpbWUobWF4aW11bUNvYXN0VGltZSkKLXsKLX0KLQotZG91Ymxl
IFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmN1cnZlQXQoQ3VydmUgY3VydmUsIGRv
dWJsZSB0KQotewotICAgIHN3aXRjaCAoY3VydmUpIHsKLSAgICBjYXNlIExpbmVhcjoKLSAgICAg
ICAgcmV0dXJuIHQ7Ci0gICAgY2FzZSBRdWFkcmF0aWM6Ci0gICAgICAgIHJldHVybiB0ICogdDsK
LSAgICBjYXNlIEN1YmljOgotICAgICAgICByZXR1cm4gdCAqIHQgKiB0OwotICAgIGNhc2UgUXVh
cnRpYzoKLSAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHQ7Ci0gICAgY2FzZSBCb3VuY2U6Ci0g
ICAgICAgIC8vIFRpbWUgYmFzZSBpcyBjaG9zZW4gdG8ga2VlcCB0aGUgYm91bmNlIHBvaW50cyBz
aW1wbGVyOgotICAgICAgICAvLyAxIChoYWxmIGJvdW5jZSBjb21pbmcgaW4pICsgMSArIC41ICsg
LjI1Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBrVGltZUJhc2UgPSAyLjc1OwotICAgICAgICBjb25z
dCBkb3VibGUga1RpbWVCYXNlU3F1YXJlZCA9IGtUaW1lQmFzZSAqIGtUaW1lQmFzZTsKLSAgICAg
ICAgaWYgKHQgPCAxIC8ga1RpbWVCYXNlKQotICAgICAgICAgICAgcmV0dXJuIGtUaW1lQmFzZVNx
dWFyZWQgKiB0ICogdDsKLSAgICAgICAgaWYgKHQgPCAyIC8ga1RpbWVCYXNlKSB7Ci0gICAgICAg
ICAgICAvLyBJbnZlcnQgYSBbLS41LC41XSBxdWFkcmF0aWMgcGFyYWJvbGEsIGNlbnRlciBpdCBp
biBbMSwyXS4KLSAgICAgICAgICAgIGRvdWJsZSB0MSA9IHQgLSAxLjUgLyBrVGltZUJhc2U7Ci0g
ICAgICAgICAgICBjb25zdCBkb3VibGUga1BhcmFib2xhQXRFZGdlID0gMSAtIC41ICogLjU7Ci0g
ICAgICAgICAgICByZXR1cm4ga1RpbWVCYXNlU3F1YXJlZCAqIHQxICogdDEgKyBrUGFyYWJvbGFB
dEVkZ2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHQgPCAyLjUgLyBrVGltZUJhc2UpIHsKLSAg
ICAgICAgICAgIC8vIEludmVydCBhIFstLjI1LC4yNV0gcXVhZHJhdGljIHBhcmFib2xhLCBjZW50
ZXIgaXQgaW4gWzIsMi41XS4KLSAgICAgICAgICAgIGRvdWJsZSB0MiA9IHQgLSAyLjI1IC8ga1Rp
bWVCYXNlOwotICAgICAgICAgICAgY29uc3QgZG91YmxlIGtQYXJhYm9sYUF0RWRnZSA9IDEgLSAu
MjUgKiAuMjU7Ci0gICAgICAgICAgICByZXR1cm4ga1RpbWVCYXNlU3F1YXJlZCAqIHQyICogdDIg
KyBrUGFyYWJvbGFBdEVkZ2U7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIC8vIEludmVydCBhIFst
LjEyNSwuMTI1XSBxdWFkcmF0aWMgcGFyYWJvbGEsIGNlbnRlciBpdCBpbiBbMi41LDIuNzVdLgot
ICAgICAgICBjb25zdCBkb3VibGUga1BhcmFib2xhQXRFZGdlID0gMSAtIC4xMjUgKiAuMTI1Owot
ICAgICAgICB0IC09IDIuNjI1IC8ga1RpbWVCYXNlOwotICAgICAgICByZXR1cm4ga1RpbWVCYXNl
U3F1YXJlZCAqIHQgKiB0ICsga1BhcmFib2xhQXRFZGdlOwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9u
ZTo6UGVyQXhpc0RhdGE6OmF0dGFja0N1cnZlKEN1cnZlIGN1cnZlLCBkb3VibGUgZGVsdGFUaW1l
LCBkb3VibGUgY3VydmVULCBkb3VibGUgc3RhcnRQb3NpdGlvbiwgZG91YmxlIGF0dGFja1Bvc2l0
aW9uKQotewotICAgIGRvdWJsZSB0ID0gZGVsdGFUaW1lIC8gY3VydmVUOwotICAgIGRvdWJsZSBw
b3NpdGlvbkZhY3RvciA9IGN1cnZlQXQoY3VydmUsIHQpOwotICAgIHJldHVybiBzdGFydFBvc2l0
aW9uICsgcG9zaXRpb25GYWN0b3IgKiAoYXR0YWNrUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsK
LX0KLQotZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OnJlbGVhc2VDdXJ2
ZShDdXJ2ZSBjdXJ2ZSwgZG91YmxlIGRlbHRhVGltZSwgZG91YmxlIGN1cnZlVCwgZG91YmxlIHJl
bGVhc2VQb3NpdGlvbiwgZG91YmxlIGRlc2lyZWRQb3NpdGlvbikKLXsKLSAgICBkb3VibGUgdCA9
IGRlbHRhVGltZSAvIGN1cnZlVDsKLSAgICBkb3VibGUgcG9zaXRpb25GYWN0b3IgPSAxIC0gY3Vy
dmVBdChjdXJ2ZSwgMSAtIHQpOwotICAgIHJldHVybiByZWxlYXNlUG9zaXRpb24gKyAocG9zaXRp
b25GYWN0b3IgKiAoZGVzaXJlZFBvc2l0aW9uIC0gcmVsZWFzZVBvc2l0aW9uKSk7Ci19Ci0KLWRv
dWJsZSBTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRhOjpjb2FzdEN1cnZlKEN1cnZlIGN1
cnZlLCBkb3VibGUgZmFjdG9yKQotewotICAgIHJldHVybiAxIC0gY3VydmVBdChjdXJ2ZSwgMSAt
IGZhY3Rvcik7Ci19Ci0KLWRvdWJsZSBTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRhOjpj
dXJ2ZUludGVncmFsQXQoQ3VydmUgY3VydmUsIGRvdWJsZSB0KQotewotICAgIHN3aXRjaCAoY3Vy
dmUpIHsKLSAgICBjYXNlIExpbmVhcjoKLSAgICAgICAgcmV0dXJuIHQgKiB0IC8gMjsKLSAgICBj
YXNlIFF1YWRyYXRpYzoKLSAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAvIDM7Ci0gICAgY2FzZSBD
dWJpYzoKLSAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHQgLyA0OwotICAgIGNhc2UgUXVhcnRp
YzoKLSAgICAgICAgcmV0dXJuIHQgKiB0ICogdCAqIHQgKiB0IC8gNTsKLSAgICBjYXNlIEJvdW5j
ZToKLSAgICAgICAgY29uc3QgZG91YmxlIGtUaW1lQmFzZSA9IDIuNzU7Ci0gICAgICAgIGNvbnN0
IGRvdWJsZSBrVGltZUJhc2VTcXVhcmVkID0ga1RpbWVCYXNlICoga1RpbWVCYXNlOwotICAgICAg
ICBjb25zdCBkb3VibGUga1RpbWVCYXNlU3F1YXJlZE92ZXJUaHJlZSA9IGtUaW1lQmFzZVNxdWFy
ZWQgLyAzOwotICAgICAgICBkb3VibGUgYXJlYTsKLSAgICAgICAgZG91YmxlIHQxID0gbWluKHQs
IDEgLyBrVGltZUJhc2UpOwotICAgICAgICBhcmVhID0ga1RpbWVCYXNlU3F1YXJlZE92ZXJUaHJl
ZSAqIHQxICogdDEgKiB0MTsKLSAgICAgICAgaWYgKHQgPCAxIC8ga1RpbWVCYXNlKQotICAgICAg
ICAgICAgcmV0dXJuIGFyZWE7Ci0KLSAgICAgICAgdDEgPSBtaW4odCAtIDEgLyBrVGltZUJhc2Us
IDEgLyBrVGltZUJhc2UpOwotICAgICAgICAvLyBUaGUgaW50ZWdyYWwgb2Yga1RpbWVCYXNlU3F1
YXJlZCAqICh0MSAtIC41IC8ga1RpbWVCYXNlKSAqICh0MSAtIC41IC8ga1RpbWVCYXNlKSArIGtQ
YXJhYm9sYUF0RWRnZQotICAgICAgICBjb25zdCBkb3VibGUga1NlY29uZElubmVyT2Zmc2V0ID0g
a1RpbWVCYXNlU3F1YXJlZCAqIC41IC8ga1RpbWVCYXNlOwotICAgICAgICBkb3VibGUgYm91bmNl
QXJlYSA9IHQxICogKHQxICogKGtUaW1lQmFzZVNxdWFyZWRPdmVyVGhyZWUgKiB0MSAtIGtTZWNv
bmRJbm5lck9mZnNldCkgKyAxKTsKLSAgICAgICAgYXJlYSArPSBib3VuY2VBcmVhOwotICAgICAg
ICBpZiAodCA8IDIgLyBrVGltZUJhc2UpCi0gICAgICAgICAgICByZXR1cm4gYXJlYTsKLQotICAg
ICAgICB0MSA9IG1pbih0IC0gMiAvIGtUaW1lQmFzZSwgMC41IC8ga1RpbWVCYXNlKTsKLSAgICAg
ICAgLy8gVGhlIGludGVncmFsIG9mIGtUaW1lQmFzZVNxdWFyZWQgKiAodDEgLSAuMjUgLyBrVGlt
ZUJhc2UpICogKHQxIC0gLjI1IC8ga1RpbWVCYXNlKSArIGtQYXJhYm9sYUF0RWRnZQotICAgICAg
ICBjb25zdCBkb3VibGUga1RoaXJkSW5uZXJPZmZzZXQgPSBrVGltZUJhc2VTcXVhcmVkICogLjI1
IC8ga1RpbWVCYXNlOwotICAgICAgICBib3VuY2VBcmVhID0gIHQxICogKHQxICogKGtUaW1lQmFz
ZVNxdWFyZWRPdmVyVGhyZWUgKiB0MSAtIGtUaGlyZElubmVyT2Zmc2V0KSArIDEpOwotICAgICAg
ICBhcmVhICs9IGJvdW5jZUFyZWE7Ci0gICAgICAgIGlmICh0IDwgMi41IC8ga1RpbWVCYXNlKQot
ICAgICAgICAgICAgcmV0dXJuIGFyZWE7Ci0KLSAgICAgICAgdDEgPSB0IC0gMi41IC8ga1RpbWVC
YXNlOwotICAgICAgICAvLyBUaGUgaW50ZWdyYWwgb2Yga1RpbWVCYXNlU3F1YXJlZCAqICh0MSAt
IC4xMjUgLyBrVGltZUJhc2UpICogKHQxIC0gLjEyNSAvIGtUaW1lQmFzZSkgKyBrUGFyYWJvbGFB
dEVkZ2UKLSAgICAgICAgY29uc3QgZG91YmxlIGtGb3VydGhJbm5lck9mZnNldCA9IGtUaW1lQmFz
ZVNxdWFyZWQgKiAuMTI1IC8ga1RpbWVCYXNlOwotICAgICAgICBib3VuY2VBcmVhID0gdDEgKiAo
dDEgKiAoa1RpbWVCYXNlU3F1YXJlZE92ZXJUaHJlZSAqIHQxIC0ga0ZvdXJ0aElubmVyT2Zmc2V0
KSArIDEpOwotICAgICAgICBhcmVhICs9IGJvdW5jZUFyZWE7Ci0gICAgICAgIHJldHVybiBhcmVh
OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
ZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmF0dGFja0FyZWEoQ3VydmUg
Y3VydmUsIGRvdWJsZSBzdGFydFQsIGRvdWJsZSBlbmRUKQotewotICAgIGRvdWJsZSBzdGFydFZh
bHVlID0gY3VydmVJbnRlZ3JhbEF0KGN1cnZlLCBzdGFydFQpOwotICAgIGRvdWJsZSBlbmRWYWx1
ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgZW5kVCk7Ci0gICAgcmV0dXJuIGVuZFZhbHVlIC0g
c3RhcnRWYWx1ZTsKLX0KLQotZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6
OnJlbGVhc2VBcmVhKEN1cnZlIGN1cnZlLCBkb3VibGUgc3RhcnRULCBkb3VibGUgZW5kVCkKLXsK
LSAgICBkb3VibGUgc3RhcnRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgMSAtIGVuZFQp
OwotICAgIGRvdWJsZSBlbmRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgMSAtIHN0YXJ0
VCk7Ci0gICAgcmV0dXJuIGVuZFZhbHVlIC0gc3RhcnRWYWx1ZTsKLX0KLQotU2Nyb2xsQW5pbWF0
b3JOb25lOjpQZXJBeGlzRGF0YTo6UGVyQXhpc0RhdGEoU2Nyb2xsQW5pbWF0b3JOb25lKiwgZmxv
YXQqIGN1cnJlbnRQb3NpdGlvbiwgaW50IHZpc2libGVMZW5ndGgpCi0gICAgOiBtX2N1cnJlbnRQ
b3NpdGlvbihjdXJyZW50UG9zaXRpb24pCi0gICAgLCBtX3Zpc2libGVMZW5ndGgodmlzaWJsZUxl
bmd0aCkKLXsKLSAgICByZXNldCgpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVy
QXhpc0RhdGE6OnJlc2V0KCkKLXsKLSAgICBtX2N1cnJlbnRWZWxvY2l0eSA9IDA7Ci0KLSAgICBt
X2Rlc2lyZWRQb3NpdGlvbiA9IDA7Ci0gICAgbV9kZXNpcmVkVmVsb2NpdHkgPSAwOwotCi0gICAg
bV9zdGFydFBvc2l0aW9uID0gMDsKLSAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAgbV9zdGFydFZl
bG9jaXR5ID0gMDsKLQotICAgIG1fYW5pbWF0aW9uVGltZSA9IDA7Ci0gICAgbV9sYXN0QW5pbWF0
aW9uVGltZSA9IDA7Ci0KLSAgICBtX2F0dGFja1Bvc2l0aW9uID0gMDsKLSAgICBtX2F0dGFja1Rp
bWUgPSAwOwotICAgIG1fYXR0YWNrQ3VydmUgPSBRdWFkcmF0aWM7Ci0KLSAgICBtX3JlbGVhc2VQ
b3NpdGlvbiA9IDA7Ci0gICAgbV9yZWxlYXNlVGltZSA9IDA7Ci0gICAgbV9yZWxlYXNlQ3VydmUg
PSBRdWFkcmF0aWM7Ci19Ci0KLQotYm9vbCBTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRh
Ojp1cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwg
ZmxvYXQgbWluU2Nyb2xsUG9zaXRpb24sIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uLCBkb3VibGUg
Y3VycmVudFRpbWUsIFBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCi17Ci0gICAgZmxvYXQgZGVsdGEg
PSBzdGVwICogbXVsdGlwbGllcjsKLSAgICBpZiAoIW1fc3RhcnRUaW1lIHx8ICFkZWx0YSB8fCAo
ZGVsdGEgPCAwKSAhPSAobV9kZXNpcmVkUG9zaXRpb24gLSAqbV9jdXJyZW50UG9zaXRpb24gPCAw
KSkgewotICAgICAgICBtX2Rlc2lyZWRQb3NpdGlvbiA9ICptX2N1cnJlbnRQb3NpdGlvbjsKLSAg
ICAgICAgbV9zdGFydFRpbWUgPSAwOwotICAgIH0KLSAgICBmbG9hdCBuZXdQb3NpdGlvbiA9IG1f
ZGVzaXJlZFBvc2l0aW9uICsgZGVsdGE7Ci0KLSAgICBuZXdQb3NpdGlvbiA9IG1heChtaW4obmV3
UG9zaXRpb24sIG1heFNjcm9sbFBvc2l0aW9uKSwgbWluU2Nyb2xsUG9zaXRpb24pOwotCi0gICAg
aWYgKG5ld1Bvc2l0aW9uID09IG1fZGVzaXJlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX2Rlc2lyZWRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgaWYgKCFt
X3N0YXJ0VGltZSkgewotICAgICAgICBtX2F0dGFja1RpbWUgPSBwYXJhbWV0ZXJzLT5tX2F0dGFj
a1RpbWU7Ci0gICAgICAgIG1fYXR0YWNrQ3VydmUgPSBwYXJhbWV0ZXJzLT5tX2F0dGFja0N1cnZl
OwotICAgIH0KLSAgICBtX2FuaW1hdGlvblRpbWUgPSBwYXJhbWV0ZXJzLT5tX2FuaW1hdGlvblRp
bWU7Ci0gICAgbV9yZWxlYXNlVGltZSA9IHBhcmFtZXRlcnMtPm1fcmVsZWFzZVRpbWU7Ci0gICAg
bV9yZWxlYXNlQ3VydmUgPSBwYXJhbWV0ZXJzLT5tX3JlbGVhc2VDdXJ2ZTsKLQotICAgIC8vIFBy
aW9yaXRpemUgb3VyIHdheSBvdXQgb2Ygb3ZlciBjb25zdHJhaW50LgotICAgIGlmIChtX2F0dGFj
a1RpbWUgKyBtX3JlbGVhc2VUaW1lID4gbV9hbmltYXRpb25UaW1lKSB7Ci0gICAgICAgIGlmICht
X3JlbGVhc2VUaW1lID4gbV9hbmltYXRpb25UaW1lKQotICAgICAgICAgICAgbV9yZWxlYXNlVGlt
ZSA9IG1fYW5pbWF0aW9uVGltZTsKLSAgICAgICAgbV9hdHRhY2tUaW1lID0gbV9hbmltYXRpb25U
aW1lIC0gbV9yZWxlYXNlVGltZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB0aGUgdGltZSBmcm9tIHRoZSBldmVudCB0
aGF0IGdvdCB1cyBoZXJlLgotICAgICAgICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lIC0ga1Rp
Y2tUaW1lIC8gMjsKLSAgICAgICAgbV9zdGFydFBvc2l0aW9uID0gKm1fY3VycmVudFBvc2l0aW9u
OwotICAgICAgICBtX2xhc3RBbmltYXRpb25UaW1lID0gbV9zdGFydFRpbWU7Ci0gICAgfQotICAg
IG1fc3RhcnRWZWxvY2l0eSA9IG1fY3VycmVudFZlbG9jaXR5OwotCi0gICAgZG91YmxlIHJlbWFp
bmluZ0RlbHRhID0gbV9kZXNpcmVkUG9zaXRpb24gLSAqbV9jdXJyZW50UG9zaXRpb247Ci0KLSAg
ICBkb3VibGUgYXR0YWNrQXJlYUxlZnQgPSAwOwotCi0gICAgZG91YmxlIGRlbHRhVGltZSA9IG1f
bGFzdEFuaW1hdGlvblRpbWUgLSBtX3N0YXJ0VGltZTsKLSAgICBkb3VibGUgYXR0YWNrVGltZUxl
ZnQgPSBtYXgoMC4sIG1fYXR0YWNrVGltZSAtIGRlbHRhVGltZSk7Ci0gICAgZG91YmxlIHRpbWVM
ZWZ0ID0gbV9hbmltYXRpb25UaW1lIC0gZGVsdGFUaW1lOwotICAgIGRvdWJsZSBtaW5UaW1lTGVm
dCA9IG1fcmVsZWFzZVRpbWUgKyBtaW4ocGFyYW1ldGVycy0+bV9yZXBlYXRNaW5pbXVtU3VzdGFp
blRpbWUsIG1fYW5pbWF0aW9uVGltZSAtIG1fcmVsZWFzZVRpbWUgLSBhdHRhY2tUaW1lTGVmdCk7
Ci0gICAgaWYgKHRpbWVMZWZ0IDwgbWluVGltZUxlZnQpIHsKLSAgICAgICAgbV9hbmltYXRpb25U
aW1lID0gZGVsdGFUaW1lICsgbWluVGltZUxlZnQ7Ci0gICAgICAgIHRpbWVMZWZ0ID0gbWluVGlt
ZUxlZnQ7Ci0gICAgfQotCi0gICAgaWYgKHBhcmFtZXRlcnMtPm1fbWF4aW11bUNvYXN0VGltZSA+
IChwYXJhbWV0ZXJzLT5tX3JlcGVhdE1pbmltdW1TdXN0YWluVGltZSArIHBhcmFtZXRlcnMtPm1f
cmVsZWFzZVRpbWUpKSB7Ci0gICAgICAgIGRvdWJsZSB0YXJnZXRNYXhDb2FzdFZlbG9jaXR5ID0g
bV92aXNpYmxlTGVuZ3RoICogLjI1ICoga0ZyYW1lUmF0ZTsKLSAgICAgICAgLy8gVGhpcyBuZWVk
cyB0byBiZSBhcyBtaW5pbWFsIGFzIHBvc3NpYmxlIHdoaWxlIG5vdCBiZWluZyBpbnRydXNpdmUg
dG8gcGFnZSB1cC9kb3duLgotICAgICAgICBkb3VibGUgbWluQ29hc3REZWx0YSA9IG1fdmlzaWJs
ZUxlbmd0aDsKLQotICAgICAgICBpZiAoZmFicyhyZW1haW5pbmdEZWx0YSkgPiBtaW5Db2FzdERl
bHRhKSB7Ci0gICAgICAgICAgICBkb3VibGUgbWF4Q29hc3REZWx0YSA9IHBhcmFtZXRlcnMtPm1f
bWF4aW11bUNvYXN0VGltZSAqIHRhcmdldE1heENvYXN0VmVsb2NpdHk7Ci0gICAgICAgICAgICBk
b3VibGUgY29hc3RGYWN0b3IgPSBtaW4oMS4sIChmYWJzKHJlbWFpbmluZ0RlbHRhKSAtIG1pbkNv
YXN0RGVsdGEpIC8gKG1heENvYXN0RGVsdGEgLSBtaW5Db2FzdERlbHRhKSk7Ci0KLSAgICAgICAg
ICAgIC8vIFdlIGNvdWxkIHBsYXkgd2l0aCB0aGUgY3VydmUgaGVyZSAtIGxpbmVhciBzZWVtcyBh
IGxpdHRsZSBzb2Z0LiBJbml0aWFsIHRlc3RpbmcgbWFrZXMgbWUgd2FudCB0byBmZWVkIGludG8g
dGhlIHN1c3RhaW4gdGltZSBtb3JlIGFnZ3Jlc3NpdmVseS4KLSAgICAgICAgICAgIGRvdWJsZSBj
b2FzdE1pblRpbWVMZWZ0ID0gbWluKHBhcmFtZXRlcnMtPm1fbWF4aW11bUNvYXN0VGltZSwgbWlu
VGltZUxlZnQgKyBjb2FzdEN1cnZlKHBhcmFtZXRlcnMtPm1fY29hc3RUaW1lQ3VydmUsIGNvYXN0
RmFjdG9yKSAqIChwYXJhbWV0ZXJzLT5tX21heGltdW1Db2FzdFRpbWUgLSBtaW5UaW1lTGVmdCkp
OwotCi0gICAgICAgICAgICBkb3VibGUgYWRkaXRpb25hbFRpbWUgPSBtYXgoMC4sIGNvYXN0TWlu
VGltZUxlZnQgLSBtaW5UaW1lTGVmdCk7Ci0gICAgICAgICAgICBpZiAoYWRkaXRpb25hbFRpbWUp
IHsKLSAgICAgICAgICAgICAgICBkb3VibGUgYWRkaXRpb25hbFJlbGVhc2VUaW1lID0gbWluKGFk
ZGl0aW9uYWxUaW1lLCBwYXJhbWV0ZXJzLT5tX3JlbGVhc2VUaW1lIC8gKHBhcmFtZXRlcnMtPm1f
cmVsZWFzZVRpbWUgKyBwYXJhbWV0ZXJzLT5tX3JlcGVhdE1pbmltdW1TdXN0YWluVGltZSkgKiBh
ZGRpdGlvbmFsVGltZSk7Ci0gICAgICAgICAgICAgICAgbV9yZWxlYXNlVGltZSA9IHBhcmFtZXRl
cnMtPm1fcmVsZWFzZVRpbWUgKyBhZGRpdGlvbmFsUmVsZWFzZVRpbWU7Ci0gICAgICAgICAgICAg
ICAgbV9hbmltYXRpb25UaW1lID0gZGVsdGFUaW1lICsgY29hc3RNaW5UaW1lTGVmdDsKLSAgICAg
ICAgICAgICAgICB0aW1lTGVmdCA9IGNvYXN0TWluVGltZUxlZnQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBkb3VibGUgcmVsZWFzZVRpbWVMZWZ0ID0gbWluKHRpbWVM
ZWZ0LCBtX3JlbGVhc2VUaW1lKTsKLSAgICBkb3VibGUgc3VzdGFpblRpbWVMZWZ0ID0gbWF4KDAu
LCB0aW1lTGVmdCAtIHJlbGVhc2VUaW1lTGVmdCAtIGF0dGFja1RpbWVMZWZ0KTsKLQotICAgIGlm
IChhdHRhY2tUaW1lTGVmdCkgewotICAgICAgICBkb3VibGUgYXR0YWNrU3BvdCA9IGRlbHRhVGlt
ZSAvIG1fYXR0YWNrVGltZTsKLSAgICAgICAgYXR0YWNrQXJlYUxlZnQgPSBhdHRhY2tBcmVhKG1f
YXR0YWNrQ3VydmUsIGF0dGFja1Nwb3QsIDEpICogbV9hdHRhY2tUaW1lOwotICAgIH0KLQotICAg
IGRvdWJsZSByZWxlYXNlU3BvdCA9IChtX3JlbGVhc2VUaW1lIC0gcmVsZWFzZVRpbWVMZWZ0KSAv
IG1fcmVsZWFzZVRpbWU7Ci0gICAgZG91YmxlIHJlbGVhc2VBcmVhTGVmdCAgPSByZWxlYXNlQXJl
YShtX3JlbGVhc2VDdXJ2ZSwgcmVsZWFzZVNwb3QsIDEpICogbV9yZWxlYXNlVGltZTsKLQotICAg
IG1fZGVzaXJlZFZlbG9jaXR5ID0gcmVtYWluaW5nRGVsdGEgLyAoYXR0YWNrQXJlYUxlZnQgKyBz
dXN0YWluVGltZUxlZnQgKyByZWxlYXNlQXJlYUxlZnQpOwotICAgIG1fcmVsZWFzZVBvc2l0aW9u
ID0gbV9kZXNpcmVkUG9zaXRpb24gLSBtX2Rlc2lyZWRWZWxvY2l0eSAqIHJlbGVhc2VBcmVhTGVm
dDsKLSAgICBpZiAoYXR0YWNrQXJlYUxlZnQpCi0gICAgICAgIG1fYXR0YWNrUG9zaXRpb24gPSBt
X3N0YXJ0UG9zaXRpb24gKyBtX2Rlc2lyZWRWZWxvY2l0eSAqIGF0dGFja0FyZWFMZWZ0OwotICAg
IGVsc2UKLSAgICAgICAgbV9hdHRhY2tQb3NpdGlvbiA9IG1fcmVsZWFzZVBvc2l0aW9uIC0gKG1f
YW5pbWF0aW9uVGltZSAtIG1fcmVsZWFzZVRpbWUgLSBtX2F0dGFja1RpbWUpICogbV9kZXNpcmVk
VmVsb2NpdHk7Ci0KLSAgICBpZiAoc3VzdGFpblRpbWVMZWZ0KSB7Ci0gICAgICAgIGRvdWJsZSBy
b3VuZE9mZiA9IG1fcmVsZWFzZVBvc2l0aW9uIC0gKChhdHRhY2tBcmVhTGVmdCA/IG1fYXR0YWNr
UG9zaXRpb24gOiAqbV9jdXJyZW50UG9zaXRpb24pICsgbV9kZXNpcmVkVmVsb2NpdHkgKiBzdXN0
YWluVGltZUxlZnQpOwotICAgICAgICBtX2Rlc2lyZWRWZWxvY2l0eSArPSByb3VuZE9mZiAvIHN1
c3RhaW5UaW1lTGVmdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRklYTUU6
IEFkZCBpbiBqYW5rIGRldGVjdGlvbiB0cmFjZSBldmVudHMgaW50byB0aGlzIGZ1bmN0aW9uLgot
Ym9vbCBTY3JvbGxBbmltYXRvck5vbmU6OlBlckF4aXNEYXRhOjphbmltYXRlU2Nyb2xsKGRvdWJs
ZSBjdXJyZW50VGltZSkKLXsKLSAgICBkb3VibGUgbGFzdFNjcm9sbEludGVydmFsID0gY3VycmVu
dFRpbWUgLSBtX2xhc3RBbmltYXRpb25UaW1lOwotICAgIGlmIChsYXN0U2Nyb2xsSW50ZXJ2YWwg
PCBrTWluaW11bVRpbWVySW50ZXJ2YWwpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgbV9s
YXN0QW5pbWF0aW9uVGltZSA9IGN1cnJlbnRUaW1lOwotCi0gICAgZG91YmxlIGRlbHRhVGltZSA9
IGN1cnJlbnRUaW1lIC0gbV9zdGFydFRpbWU7Ci0gICAgZG91YmxlIG5ld1Bvc2l0aW9uID0gKm1f
Y3VycmVudFBvc2l0aW9uOwotCi0gICAgaWYgKGRlbHRhVGltZSA+IG1fYW5pbWF0aW9uVGltZSkg
ewotICAgICAgICAqbV9jdXJyZW50UG9zaXRpb24gPSBtX2Rlc2lyZWRQb3NpdGlvbjsKLSAgICAg
ICAgcmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoZGVsdGFU
aW1lIDwgbV9hdHRhY2tUaW1lKQotICAgICAgICBuZXdQb3NpdGlvbiA9IGF0dGFja0N1cnZlKG1f
YXR0YWNrQ3VydmUsIGRlbHRhVGltZSwgbV9hdHRhY2tUaW1lLCBtX3N0YXJ0UG9zaXRpb24sIG1f
YXR0YWNrUG9zaXRpb24pOwotICAgIGVsc2UgaWYgKGRlbHRhVGltZSA8IChtX2FuaW1hdGlvblRp
bWUgLSBtX3JlbGVhc2VUaW1lKSkKLSAgICAgICAgbmV3UG9zaXRpb24gPSBtX2F0dGFja1Bvc2l0
aW9uICsgKGRlbHRhVGltZSAtIG1fYXR0YWNrVGltZSkgKiBtX2Rlc2lyZWRWZWxvY2l0eTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gcmVsZWFzZSBpcyBiYXNlZCBvbiB0YXJnZXRpbmcgdGhlIGV4
YWN0IGZpbmFsIHBvc2l0aW9uLgotICAgICAgICBkb3VibGUgcmVsZWFzZURlbHRhVCA9IGRlbHRh
VGltZSAtIChtX2FuaW1hdGlvblRpbWUgLSBtX3JlbGVhc2VUaW1lKTsKLSAgICAgICAgbmV3UG9z
aXRpb24gPSByZWxlYXNlQ3VydmUobV9yZWxlYXNlQ3VydmUsIHJlbGVhc2VEZWx0YVQsIG1fcmVs
ZWFzZVRpbWUsIG1fcmVsZWFzZVBvc2l0aW9uLCBtX2Rlc2lyZWRQb3NpdGlvbik7Ci0gICAgfQot
Ci0gICAgLy8gTm9ybWFsaXplIHZlbG9jaXR5IHRvIGEgcGVyIHNlY29uZCBhbW91bnQuIENvdWxk
IGJlIHVzZWQgdG8gY2hlY2sgZm9yIGphbmsuCi0gICAgaWYgKGxhc3RTY3JvbGxJbnRlcnZhbCA+
IDApCi0gICAgICAgIG1fY3VycmVudFZlbG9jaXR5ID0gKG5ld1Bvc2l0aW9uIC0gKm1fY3VycmVu
dFBvc2l0aW9uKSAvIGxhc3RTY3JvbGxJbnRlcnZhbDsKLSAgICAqbV9jdXJyZW50UG9zaXRpb24g
PSBuZXdQb3NpdGlvbjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9sbEFuaW1h
dG9yTm9uZTo6UGVyQXhpc0RhdGE6OnVwZGF0ZVZpc2libGVMZW5ndGgoaW50IHZpc2libGVMZW5n
dGgpCi17Ci0gICAgbV92aXNpYmxlTGVuZ3RoID0gdmlzaWJsZUxlbmd0aDsKLX0KLQotU2Nyb2xs
QW5pbWF0b3JOb25lOjpTY3JvbGxBbmltYXRvck5vbmUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFi
bGVBcmVhKQotICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFyZWEpCi0gICAgLCBtX2hv
cml6b250YWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NYLCBzY3JvbGxhYmxlQXJlYS52aXNpYmxl
V2lkdGgoKSkKLSAgICAsIG1fdmVydGljYWxEYXRhKHRoaXMsICZtX2N1cnJlbnRQb3NZLCBzY3Jv
bGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCkpCi0gICAgLCBtX3N0YXJ0VGltZSgwKQotI2lmIFVT
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLSAgICAsIG1fYW5pbWF0aW9uVGltZXIo
KnRoaXMsICZTY3JvbGxBbmltYXRvck5vbmU6OnJlcXVlc3RBbmltYXRpb25UaW1lckZpcmVkKQot
I2Vsc2UKLSAgICAsIG1fYW5pbWF0aW9uQWN0aXZlKGZhbHNlKQotI2VuZGlmCi17Ci19Ci0KLVNj
cm9sbEFuaW1hdG9yTm9uZTo6flNjcm9sbEFuaW1hdG9yTm9uZSgpCi17Ci0gICAgc3RvcEFuaW1h
dGlvblRpbWVySWZOZWVkZWQoKTsKLX0KLQotU2Nyb2xsQW5pbWF0b3JOb25lOjpQYXJhbWV0ZXJz
IFNjcm9sbEFuaW1hdG9yTm9uZTo6cGFyYW1ldGVyc0ZvclNjcm9sbEdyYW51bGFyaXR5KFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KSBjb25zdAotewotICAgIHN3aXRjaCAoZ3JhbnVsYXJp
dHkpIHsKLSAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBQYXJhbWV0
ZXJzKHRydWUsIDIwICoga1RpY2tUaW1lLCAxMCAqIGtUaWNrVGltZSwgQ3ViaWMsIDEwICoga1Rp
Y2tUaW1lLCBDdWJpYywgMTAgKiBrVGlja1RpbWUsIExpbmVhciwgMSk7Ci0gICAgY2FzZSBTY3Jv
bGxCeUxpbmU6Ci0gICAgICAgIHJldHVybiBQYXJhbWV0ZXJzKHRydWUsIDEwICoga1RpY2tUaW1l
LCA3ICoga1RpY2tUaW1lLCBDdWJpYywgMyAqIGtUaWNrVGltZSwgQ3ViaWMsIDMgKiBrVGlja1Rp
bWUsIExpbmVhciwgMSk7Ci0gICAgY2FzZSBTY3JvbGxCeVBhZ2U6Ci0gICAgICAgIHJldHVybiBQ
YXJhbWV0ZXJzKHRydWUsIDE1ICoga1RpY2tUaW1lLCAxMCAqIGtUaWNrVGltZSwgQ3ViaWMsIDUg
KiBrVGlja1RpbWUsIEN1YmljLCA1ICoga1RpY2tUaW1lLCBMaW5lYXIsIDEpOwotICAgIGNhc2Ug
U2Nyb2xsQnlQaXhlbDoKLSAgICAgICAgcmV0dXJuIFBhcmFtZXRlcnModHJ1ZSwgMTEgKiBrVGlj
a1RpbWUsIDIgKiBrVGlja1RpbWUsIEN1YmljLCAzICoga1RpY2tUaW1lLCBDdWJpYywgMyAqIGtU
aWNrVGltZSwgUXVhZHJhdGljLCAxLjI1KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFBhcmFtZXRlcnMoKTsKLX0KLQotYm9v
bCBTY3JvbGxBbmltYXRvck5vbmU6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11
bHRpcGxpZXIpCi17Ci0gICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlv
biwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotCi0gICAgLy8gRklYTUU6IGdldCB0
aGUgdHlwZSBwYXNzZWQgaW4uIE1vdXNlV2hlZWwgY291bGQgYWxzbyBiZSBieSBsaW5lLCBidXQg
c2hvdWxkIHN0aWxsIGhhdmUgZGlmZmVyZW50Ci0gICAgLy8gYW5pbWF0aW9uIHBhcmFtZXRlcnMg
dGhhbiB0aGUga2V5Ym9hcmQuCi0gICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIHN3aXRj
aCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6Ci0gICAgY2FzZSBT
Y3JvbGxCeUxpbmU6Ci0gICAgY2FzZSBTY3JvbGxCeVBhZ2U6Ci0gICAgY2FzZSBTY3JvbGxCeVBp
eGVsOgotICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0ZvclNjcm9sbEdyYW51bGFyaXR5
KGdyYW51bGFyaXR5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCeVByZWNpc2VQ
aXhlbDoKLSAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24s
IGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUg
aW5kaXZpZHVhbCBpbnB1dCBzZXR0aW5nIGlzIGRpc2FibGVkLCBiYWlsLgotICAgIGlmICghcGFy
YW1ldGVycy5tX2lzRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3Jv
bGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIC8v
IFRoaXMgaXMgYW4gYW5pbWF0YWJsZSBzY3JvbGwuIFNldCB0aGUgYW5pbWF0aW9uIGluIG1vdGlv
biB1c2luZyB0aGUgYXBwcm9wcmlhdGUgcGFyYW1ldGVycy4KLSAgICBmbG9hdCBtaW5TY3JvbGxQ
b3NpdGlvbjsKLSAgICBmbG9hdCBtYXhTY3JvbGxQb3NpdGlvbjsKLSAgICBpZiAob3JpZW50YXRp
b24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBtaW5TY3JvbGxQb3NpdGlvbiA9
IG1fc2Nyb2xsYWJsZUFyZWEubWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOwotICAgICAgICBt
YXhTY3JvbGxQb3NpdGlvbiA9IG1fc2Nyb2xsYWJsZUFyZWEubWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkueCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pblNjcm9sbFBvc2l0aW9uID0gbV9zY3Jv
bGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7Ci0gICAgICAgIG1heFNjcm9s
bFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCk7
Ci0gICAgfQotCi0gICAgUGVyQXhpc0RhdGEmIGRhdGEgPSAob3JpZW50YXRpb24gPT0gVmVydGlj
YWxTY3JvbGxiYXIpID8gbV92ZXJ0aWNhbERhdGEgOiBtX2hvcml6b250YWxEYXRhOwotICAgIGJv
b2wgbmVlZFRvU2Nyb2xsID0gZGF0YS51cGRhdGVEYXRhRnJvbVBhcmFtZXRlcnMoc3RlcCwgbXVs
dGlwbGllciwgbWluU2Nyb2xsUG9zaXRpb24sIG1heFNjcm9sbFBvc2l0aW9uLCBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSwgJnBhcmFtZXRlcnMpOwotICAgIGlmIChuZWVkVG9TY3JvbGwg
JiYgIWFuaW1hdGlvblRpbWVyQWN0aXZlKCkpIHsKLSAgICAgICAgbV9zdGFydFRpbWUgPSBkYXRh
Lm1fc3RhcnRUaW1lOwotICAgICAgICBhbmltYXRpb25XaWxsU3RhcnQoKTsKLSAgICAgICAgYW5p
bWF0aW9uVGltZXJGaXJlZCgpOwotICAgIH0KLSAgICByZXR1cm4gbmVlZFRvU2Nyb2xsOwotfQot
Ci12b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKLXsKLSAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5l
ZWRlZCgpOwotICAgIAotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCwgdG9GbG9hdFNpemUobV9zY3JvbGxhYmxl
QXJlYS5zY3JvbGxPcmlnaW4oKSkpOwotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0g
RmxvYXRQb2ludCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3NpdGlvbiwgKm1fdmVydGlj
YWxEYXRhLm1fY3VycmVudFBvc2l0aW9uKTsKLQotICAgIG1faG9yaXpvbnRhbERhdGEucmVzZXQo
KTsKLSAgICAqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uLngo
KTsKLSAgICBtX2hvcml6b250YWxEYXRhLm1fZGVzaXJlZFBvc2l0aW9uID0gcG9zaXRpb24ueCgp
OwotCi0gICAgbV92ZXJ0aWNhbERhdGEucmVzZXQoKTsKLSAgICAqbV92ZXJ0aWNhbERhdGEubV9j
dXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbi55KCk7Ci0gICAgbV92ZXJ0aWNhbERhdGEubV9kZXNp
cmVkUG9zaXRpb24gPSBwb3NpdGlvbi55KCk7Ci0KLSAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQo
ZGVsdGEpOwotfQotCi0jaWYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLXZv
aWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpjYW5jZWxBbmltYXRpb25zKCkKLXsKLSAgICBtX2FuaW1h
dGlvbkFjdGl2ZSA9IGZhbHNlOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Vydmlj
ZVNjcm9sbEFuaW1hdGlvbnMoKQotewotICAgIGlmIChtX2FuaW1hdGlvbkFjdGl2ZSkKLSAgICAg
ICAgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotfQotI2VuZGlmCi0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JOb25lOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCi17Ci0gICAgdXBkYXRlVmlzaWJsZUxlbmd0aHMo
KTsKLX0KLQotdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciopCi17Ci0gICAgdXBkYXRlVmlzaWJsZUxlbmd0aHMoKTsKLX0KLQotdm9pZCBT
Y3JvbGxBbmltYXRvck5vbmU6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikK
LXsKLSAgICB1cGRhdGVWaXNpYmxlTGVuZ3RocygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9y
Tm9uZTo6dXBkYXRlVmlzaWJsZUxlbmd0aHMoKQotewotICAgIG1faG9yaXpvbnRhbERhdGEudXBk
YXRlVmlzaWJsZUxlbmd0aChzY3JvbGxhYmxlQXJlYSgpLnZpc2libGVXaWR0aCgpKTsKLSAgICBt
X3ZlcnRpY2FsRGF0YS51cGRhdGVWaXNpYmxlTGVuZ3RoKHNjcm9sbGFibGVBcmVhKCkudmlzaWJs
ZUhlaWdodCgpKTsKLX0KLQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikK
LXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpyZXF1ZXN0QW5pbWF0aW9uVGltZXJGaXJlZCgpCi17
Ci0gICAgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotfQotI2VuZGlmCi0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JOb25lOjphbmltYXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICBkb3VibGUgY3VycmVudFRp
bWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLSAgICBkb3VibGUgZGVsdGFUb05l
eHRGcmFtZSA9IGNlaWwoKGN1cnJlbnRUaW1lIC0gbV9zdGFydFRpbWUpICoga0ZyYW1lUmF0ZSkg
LyBrRnJhbWVSYXRlIC0gKGN1cnJlbnRUaW1lIC0gbV9zdGFydFRpbWUpOwotICAgIGN1cnJlbnRU
aW1lICs9IGRlbHRhVG9OZXh0RnJhbWU7Ci0KLSAgICBib29sIGNvbnRpbnVlQW5pbWF0aW9uID0g
ZmFsc2U7Ci0gICAgaWYgKG1faG9yaXpvbnRhbERhdGEubV9zdGFydFRpbWUgJiYgbV9ob3Jpem9u
dGFsRGF0YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1lKSkKLSAgICAgICAgY29udGludWVBbmlt
YXRpb24gPSB0cnVlOwotICAgIGlmIChtX3ZlcnRpY2FsRGF0YS5tX3N0YXJ0VGltZSAmJiBtX3Zl
cnRpY2FsRGF0YS5hbmltYXRlU2Nyb2xsKGN1cnJlbnRUaW1lKSkKLSAgICAgICAgY29udGludWVB
bmltYXRpb24gPSB0cnVlOwotCi0gICAgaWYgKGNvbnRpbnVlQW5pbWF0aW9uKQotI2lmIFVTRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLSAgICAgICAgc3RhcnROZXh0VGltZXIobWF4
KGtNaW5pbXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFtZSkpOwotI2Vsc2UKLSAgICAg
ICAgc3RhcnROZXh0VGltZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYW5pbWF0aW9uQWN0aXZl
ID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChGbG9hdFNpemUo
KSk7Ci0KLSAgICBpZiAoIWNvbnRpbnVlQW5pbWF0aW9uKQotICAgICAgICBhbmltYXRpb25EaWRG
aW5pc2goKTsKLX0KLQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLXZv
aWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzdGFydE5leHRUaW1lcihkb3VibGUgZGVsYXkpCi17Ci0g
ICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoZGVsYXkpOwotfQotI2Vsc2UKLXZvaWQg
U2Nyb2xsQW5pbWF0b3JOb25lOjpzdGFydE5leHRUaW1lcigpCi17Ci0gICAgaWYgKHNjcm9sbGFi
bGVBcmVhKCkuc2NoZWR1bGVBbmltYXRpb24oKSkKLSAgICAgICAgbV9hbmltYXRpb25BY3RpdmUg
PSB0cnVlOwotfQotI2VuZGlmCi0KLWJvb2wgU2Nyb2xsQW5pbWF0b3JOb25lOjphbmltYXRpb25U
aW1lckFjdGl2ZSgpCi17Ci0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQot
ICAgIHJldHVybiBtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCk7Ci0jZWxzZQotICAgIHJldHVy
biBtX2FuaW1hdGlvbkFjdGl2ZTsKLSNlbmRpZgotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTm9u
ZTo6c3RvcEFuaW1hdGlvblRpbWVySWZOZWVkZWQoKQotewotICAgIGlmIChhbmltYXRpb25UaW1l
ckFjdGl2ZSgpKQotI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLSAgICAg
ICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0jZWxzZQotICAgICAgICBtX2FuaW1hdGlvbkFj
dGl2ZSA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JOb25lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvck5vbmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzEz
MmZhOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ck5vbmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxB
bmltYXRvck5vbmVfaAotI2RlZmluZSBTY3JvbGxBbmltYXRvck5vbmVfaAotCi0jaWYgRU5BQkxF
KFNNT09USF9TQ1JPTExJTkcpCi0KLSNpZiAhRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQotI2Vycm9yICJTTU9PVEhfU0NST0xMSU5HIHJlcXVpcmVzIFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FIHRvIGJlIGVuYWJsZWQuIgotI2VuZGlmCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0j
aW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotCi1jbGFzcyBT
Y3JvbGxBbmltYXRvck5vbmVUZXN0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElu
dFBvaW50OwotY2xhc3MgQWN0aXZlUGxhdGZvcm1HZXN0dXJlQW5pbWF0aW9uOwotc3RydWN0IFNj
cm9sbEFuaW1hdG9yUGFyYW1ldGVyczsKLQotY2xhc3MgU2Nyb2xsQW5pbWF0b3JOb25lIDogcHVi
bGljIFNjcm9sbEFuaW1hdG9yIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRv
ck5vbmUoU2Nyb2xsYWJsZUFyZWEmKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck5vbmUo
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsK
LQotI2lmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCi0gICAgdmlydHVhbCB2
b2lkIGNhbmNlbEFuaW1hdGlvbnMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VydmljZVNjcm9sbEFu
aW1hdGlvbnMoKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXpl
KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciop
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciop
OwotCi0gICAgZW51bSBDdXJ2ZSB7Ci0gICAgICAgIExpbmVhciwKLSAgICAgICAgUXVhZHJhdGlj
LAotICAgICAgICBDdWJpYywKLSAgICAgICAgUXVhcnRpYywKLSAgICAgICAgQm91bmNlCi0gICAg
fTsKLQotICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKLSAgICAgICAgUGFyYW1ldGVycygpOwotICAg
ICAgICBQYXJhbWV0ZXJzKGJvb2wgaXNFbmFibGVkLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgZG91
YmxlIHJlcGVhdE1pbmltdW1TdXN0YWluVGltZSwgQ3VydmUgYXR0YWNrQ3VydmUsIGRvdWJsZSBh
dHRhY2tUaW1lLCBDdXJ2ZSByZWxlYXNlQ3VydmUsIGRvdWJsZSByZWxlYXNlVGltZSwgQ3VydmUg
Y29hc3RUaW1lQ3VydmUsIGRvdWJsZSBtYXhpbXVtQ29hc3RUaW1lKTsKLQotICAgICAgICAvLyBO
b3RlIHRoYXQgdGhlIHRpbWVzIGNhbiBiZSBvdmVyc3BlY2lmaWVkIHN1Y2ggdGhhdCByZWxlYXNl
VGltZSBvciByZWxlYXNlVGltZSBhbmQgYXR0YWNrVGltZSBhcmUgZ3JlYXRlcgotICAgICAgICAv
LyB0aGFuIGFuaW1hdGlvblRpbWUuIGFuaW1hdGlvblRpbWUgdGFrZXMgcHJpb3JpdHkgb3ZlciBy
ZWxlYXNlVGltZSwgY2FwcGluZyBpdC4gYXR0YWNrVGltZSBpcyBjYXBwZWQgYXQKLSAgICAgICAg
Ly8gd2hhdGV2ZXIgdGltZSByZW1haW5zLCBvciB6ZXJvIGlmIG5vbmUuCi0gICAgICAgIGJvb2wg
bV9pc0VuYWJsZWQ7Ci0gICAgICAgIGRvdWJsZSBtX2FuaW1hdGlvblRpbWU7Ci0gICAgICAgIGRv
dWJsZSBtX3JlcGVhdE1pbmltdW1TdXN0YWluVGltZTsKLQotICAgICAgICBDdXJ2ZSBtX2F0dGFj
a0N1cnZlOwotICAgICAgICBkb3VibGUgbV9hdHRhY2tUaW1lOwotCi0gICAgICAgIEN1cnZlIG1f
cmVsZWFzZUN1cnZlOwotICAgICAgICBkb3VibGUgbV9yZWxlYXNlVGltZTsKLQotICAgICAgICBD
dXJ2ZSBtX2NvYXN0VGltZUN1cnZlOwotICAgICAgICBkb3VibGUgbV9tYXhpbXVtQ29hc3RUaW1l
OwotICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uV2lsbFN0
YXJ0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkRpZEZpbmlzaCgpIHsgfQotCi0g
ICAgUGFyYW1ldGVycyBwYXJhbWV0ZXJzRm9yU2Nyb2xsR3JhbnVsYXJpdHkoU2Nyb2xsR3JhbnVs
YXJpdHkpIGNvbnN0OwotCi0gICAgZnJpZW5kIGNsYXNzIDo6U2Nyb2xsQW5pbWF0b3JOb25lVGVz
dDsKLQotICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7Ci0gICAgICAgIFBlckF4aXNEYXRhKFNjcm9s
bEFuaW1hdG9yTm9uZSogcGFyZW50LCBmbG9hdCogY3VycmVudFBvcywgaW50IHZpc2libGVMZW5n
dGgpOwotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIGJvb2wgdXBkYXRlRGF0YUZyb21Q
YXJhbWV0ZXJzKGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIsIGZsb2F0IG1pblNjcm9sbFBv
c2l0aW9uLCBmbG9hdCBtYXhTY3JvbGxQb3NpdGlvbiwgZG91YmxlIGN1cnJlbnRUaW1lLCBQYXJh
bWV0ZXJzKik7Ci0gICAgICAgIGJvb2wgYW5pbWF0ZVNjcm9sbChkb3VibGUgY3VycmVudFRpbWUp
OwotICAgICAgICB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGgoaW50IHZpc2libGVMZW5ndGgpOwot
Ci0gICAgICAgIHN0YXRpYyBkb3VibGUgY3VydmVBdChDdXJ2ZSwgZG91YmxlIHQpOwotICAgICAg
ICBzdGF0aWMgZG91YmxlIGF0dGFja0N1cnZlKEN1cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUg
Y3VydmVULCBkb3VibGUgc3RhcnRQb3MsIGRvdWJsZSBhdHRhY2tQb3MpOwotICAgICAgICBzdGF0
aWMgZG91YmxlIHJlbGVhc2VDdXJ2ZShDdXJ2ZSwgZG91YmxlIGRlbHRhVCwgZG91YmxlIGN1cnZl
VCwgZG91YmxlIHJlbGVhc2VQb3MsIGRvdWJsZSBkZXNpcmVkUG9zKTsKLSAgICAgICAgc3RhdGlj
IGRvdWJsZSBjb2FzdEN1cnZlKEN1cnZlLCBkb3VibGUgZmFjdG9yKTsKLQotICAgICAgICBzdGF0
aWMgZG91YmxlIGN1cnZlSW50ZWdyYWxBdChDdXJ2ZSwgZG91YmxlIHQpOwotICAgICAgICBzdGF0
aWMgZG91YmxlIGF0dGFja0FyZWEoQ3VydmUsIGRvdWJsZSBzdGFydFQsIGRvdWJsZSBlbmRUKTsK
LSAgICAgICAgc3RhdGljIGRvdWJsZSByZWxlYXNlQXJlYShDdXJ2ZSwgZG91YmxlIHN0YXJ0VCwg
ZG91YmxlIGVuZFQpOwotCi0gICAgICAgIGZsb2F0KiBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICAg
ICAgZG91YmxlIG1fY3VycmVudFZlbG9jaXR5OwotCi0gICAgICAgIGRvdWJsZSBtX2Rlc2lyZWRQ
b3NpdGlvbjsKLSAgICAgICAgZG91YmxlIG1fZGVzaXJlZFZlbG9jaXR5OwotCi0gICAgICAgIGRv
dWJsZSBtX3N0YXJ0UG9zaXRpb247Ci0gICAgICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKLSAgICAg
ICAgZG91YmxlIG1fc3RhcnRWZWxvY2l0eTsKLQotICAgICAgICBkb3VibGUgbV9hbmltYXRpb25U
aW1lOwotICAgICAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uVGltZTsKLQotICAgICAgICBkb3Vi
bGUgbV9hdHRhY2tQb3NpdGlvbjsKLSAgICAgICAgZG91YmxlIG1fYXR0YWNrVGltZTsKLSAgICAg
ICAgQ3VydmUgbV9hdHRhY2tDdXJ2ZTsKLQotICAgICAgICBkb3VibGUgbV9yZWxlYXNlUG9zaXRp
b247Ci0gICAgICAgIGRvdWJsZSBtX3JlbGVhc2VUaW1lOwotICAgICAgICBDdXJ2ZSBtX3JlbGVh
c2VDdXJ2ZTsKLQotICAgICAgICBpbnQgbV92aXNpYmxlTGVuZ3RoOwotICAgIH07Ci0KLSNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCi0gICAgdm9pZCByZXF1ZXN0QW5pbWF0
aW9uVGltZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnROZXh0VGltZXIoZG91YmxlIGRlbGF5KTsK
LSNlbHNlCi0gICAgdm9pZCBzdGFydE5leHRUaW1lcigpOwotI2VuZGlmCi0gICAgdm9pZCBhbmlt
YXRpb25UaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVk
KCk7Ci0gICAgYm9vbCBhbmltYXRpb25UaW1lckFjdGl2ZSgpOwotICAgIHZvaWQgdXBkYXRlVmlz
aWJsZUxlbmd0aHMoKTsKLQotICAgIFBlckF4aXNEYXRhIG1faG9yaXpvbnRhbERhdGE7Ci0gICAg
UGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7Ci0KLSAgICBkb3VibGUgbV9zdGFydFRpbWU7Ci0j
aWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQotICAgIFRpbWVyIG1fYW5pbWF0
aW9uVGltZXI7Ci0jZWxzZQotICAgIGJvb2wgbV9hbmltYXRpb25BY3RpdmU7Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQotCi0jZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JOb25lX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU21vb3RoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU21vb3RoLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MGZkNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JTbW9vdGguY3BwCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yU21vb3RoLmgiCisK
KyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdGlv
blNtb290aC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRvcjo6
Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKK3sKKyAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFNjcm9sbEFuaW1hdG9yU21vb3RoPihzY3JvbGxhYmxlQXJlYSk7CisgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0b3I+KHNjcm9sbGFibGVBcmVhKTsKK30K
KworU2Nyb2xsQW5pbWF0b3JTbW9vdGg6OlNjcm9sbEFuaW1hdG9yU21vb3RoKFNjcm9sbGFibGVB
cmVhJiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVh
KQorICAgICwgbV9hbmltYXRpb24oc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRpb25TbW9v
dGg+KHNjcm9sbGFibGVBcmVhLCBbdGhpc10oRmxvYXRQb2ludCYmIHBvc2l0aW9uKSB7CisgICAg
ICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9zaXRpb247CisgICAg
ICAgIG1fY3VycmVudFBvc2l0aW9uID0gV1RGTW92ZShwb3NpdGlvbik7CisgICAgICAgIG5vdGlm
eVBvc2l0aW9uQ2hhbmdlZChkZWx0YSk7CisgICAgfSkpCit7Cit9CisKK1Njcm9sbEFuaW1hdG9y
U21vb3RoOjp+U2Nyb2xsQW5pbWF0b3JTbW9vdGgoKQoreworfQorCitib29sIFNjcm9sbEFuaW1h
dG9yU21vb3RoOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQor
eworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSB8fCBn
cmFudWxhcml0eSA9PSBTY3JvbGxCeVByZWNpc2VQaXhlbCkKKyAgICAgICAgcmV0dXJuIFNjcm9s
bEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBs
aWVyKTsKKworICAgIHJldHVybiBtX2FuaW1hdGlvbi0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFu
dWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JTbW9v
dGg6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZz
ZXQpCit7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxQ
b3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFibGVBcmVhLnNj
cm9sbE9yaWdpbigpKSk7CisgICAgbV9hbmltYXRpb24tPnNldEN1cnJlbnRQb3NpdGlvbihwb3Np
dGlvbik7CisKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBwb3NpdGlvbiAtIG1fY3VycmVudFBvc2l0
aW9uOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgbm90aWZ5UG9zaXRp
b25DaGFuZ2VkKGRlbHRhKTsKK30KKworI2lmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
VElNRVIpCit2b2lkIFNjcm9sbEFuaW1hdG9yU21vb3RoOjpjYW5jZWxBbmltYXRpb25zKCkKK3sK
KyAgICBtX2FuaW1hdGlvbi0+c3RvcCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yU21vb3Ro
OjpzZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpCit7CisgICAgbV9hbmltYXRpb24tPnNlcnZpY2VB
bmltYXRpb24oKTsKK30KKyNlbmRpZgorCit2b2lkIFNjcm9sbEFuaW1hdG9yU21vb3RoOjp3aWxs
RW5kTGl2ZVJlc2l6ZSgpCit7CisgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhz
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JTbW9vdGg6OmRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKFNjcm9sbGJhciopCit7CisgICAgbV9hbmltYXRpb24tPnVwZGF0ZVZpc2libGVMZW5ndGhz
KCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JTbW9vdGg6OmRpZEFkZEhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikKK3sKKyAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0
aHMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNN
T09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvclNtb290aC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JTbW9vdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWExODZhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JT
bW9vdGguaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JvbGxBbmltYXRvclNtb290aF9oCisj
ZGVmaW5lIFNjcm9sbEFuaW1hdG9yU21vb3RoX2gKKworI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
LmgiCisKKyNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTY3JvbGxBbmltYXRpb247CisKK2NsYXNzIFNjcm9sbEFuaW1hdG9yU21vb3Ro
IGZpbmFsIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBT
Y3JvbGxBbmltYXRvclNtb290aChTY3JvbGxhYmxlQXJlYSYpOworICAgIHZpcnR1YWwgflNjcm9s
bEFuaW1hdG9yU21vb3RoKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CisKKyNpZiAhVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxBbmltYXRpb25zKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkgb3Zl
cnJpZGU7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJh
cihTY3JvbGxiYXIqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY3JvbGxBbmltYXRpb24+IG1fYW5pbWF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBT
Y3JvbGxBbmltYXRvclNtb290aF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0KaW5kZXggZDk4ODE3Zi4uZjI3NDcxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtNzYzLDcg
Kzc2Myw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAg
IEZsb2F0U2l6ZSBkZWx0YSA9IGFkanVzdGVkUG9zaXRpb24gLSBjdXJyZW50UG9zaXRpb247Ci0g
ICAgc2V0Q3VycmVudFBvc2l0aW9uSW50ZXJuYWwoYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgbV9j
dXJyZW50UG9zaXRpb24gPSBhZGp1c3RlZFBvc2l0aW9uOwogICAgIG5vdGlmeVBvc2l0aW9uQ2hh
bmdlZChkZWx0YSk7CiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCk7
CiB9CkBAIC0xMzA0LDcgKzEzMDQsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlh
dGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIGRlbHRhKQogICAgICAgICByZXR1cm47CiAKICAg
ICBGbG9hdFNpemUgYWRqdXN0ZWREZWx0YSA9IG5ld1Bvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9u
OwotICAgIHNldEN1cnJlbnRQb3NpdGlvbkludGVybmFsKG5ld1Bvc2l0aW9uKTsKKyAgICBtX2N1
cnJlbnRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwogICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChh
ZGp1c3RlZERlbHRhKTsKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JPZmZzZXQo
KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269878</attachid>
            <date>2016-01-26 05:55:04 -0800</date>
            <delta_ts>2016-01-26 11:37:23 -0800</delta_ts>
            <desc>Fix the build</desc>
            <filename>wcore-scroll-animator-smooth.diff</filename>
            <type>text/plain</type>
            <size>70004</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZGE0NjcwLi5kNzczZWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkg
QEAKKzIwMTYtMDEtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdW0VGTF0gUmVuYW1lIFNjcm9sbEFuaW1hdGlvbk5vbmUgYXMgU2Ny
b2xsQW5pbWF0aW9uU21vb3RoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTM0ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTY3JvbGxBbmltYXRpb25Ob25lIGhhcyBhbHdheXMgYmVlbiB1c2VkIGJ5IEVG
TCBhbmQgR1RLIHBvcnRzIHRvCisgICAgICAgIGltcGxlbWVudCBzbW9vdGggc2Nyb2xsaW5nLiBJ
IHRoaW5rIGl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IKKyAgICAgICAgb3RoZXIgc2Nyb2xsIGFu
aW1hdG9ycyB0byBpbXBsZW1lbnQgc21vb3RoIHNjcm9sbGluZyBvciBldmVuCisgICAgICAgIGlt
cGxlbWVudCBvdGhlciBraW5kIG9mIHNjcm9sbCBhbmltYXRpb25zLiBGb3IgZXhhbXBsZSwgaW4g
dGhlCisgICAgICAgIGZ1dHVyZSBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBraW5ldGljIHNjcm9sbGlu
ZyBpbXBsZW1lbnRlZCBmb3IgdGhlCisgICAgICAgIEdUSysgcG9ydCB0byBtYXRjaCBhbGwgb3Ro
ZXIgR1RLKyBhcHBsaWNhdGlvbiBhbmQgZGVjaWRlIGF0CisgICAgICAgIHJ1bnRpbWUgYmV0d2Vl
biBkaWZmZXJlbnQgYW5pbWF0aW9ucyB3aXRob3V0IGhhdmluZyB0byB1c2UgYQorICAgICAgICBk
aWZmZXJlbnQgc2Nyb2xsIGFuaW1hdG9yIGNsYXNzLiBTbywgdGhpcyBwYXRjaCBhbHNvIG1vdmVz
IHRoZQorICAgICAgICBzbW9vdGggc2Nyb2xsaW5nIGFuaW1hdGlvbiBpbXBsZW1lbnRhdGlvbiB0
byBpdHMgb3duIGNsYXNzCisgICAgICAgIFNjcm9sbEFuaW1hdGlvblNtb290aCB0aGF0IGltcGVt
ZW50cyBhbiBpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uCisgICAgICAgIHRoYXQgY291bGQgYmUg
dXNlZCB0byBpbXBsZW1lbnQgb3RoZXIgYW5pbWF0aW9ucy4gVGhpcyB3aWxsIGFsbG93CisgICAg
ICAgIHRoZSBHVEsrIHBvcnQgdG8gYWRkIGl0cyBvd24gc2Nyb2xsIGFuaW1hdG9yIGNsYXNzIGFu
ZCBzdGlsbAorICAgICAgICBzdXBwb3J0IHNtb290aCBzY3JvbGxpbmcgc2hhcmluZyB0aGUgY29k
ZSB3aXRoIHRoZQorICAgICAgICBTY3JvbGxBbmltYXRpb25TbW9vdGguCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUVmbC5jbWFrZTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbiBhbmQgcmVtb3Zl
IFNjcm9sbEFuaW1hdGlvbk5vbmUuCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvbjo6c2VydmljZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRpb246OlNjcm9sbEFuaW1hdGlvbik6CisgICAgICAgICogcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OlNjcm9sbEFuaW1hdGlvblNtb290aCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0aW9uU21vb3RoOjp1cGRhdGVWaXNpYmxlTGVuZ3Rocyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnNldEN1cnJlbnRQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25TbW9vdGg6OnNlcnZpY2VBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoOjp+U2Nyb2xsQW5pbWF0aW9uU21v
b3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnZlQXQpOgorICAgICAgICAoV2ViQ29yZTo6YXR0
YWNrQ3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFzZUN1cnZlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvYXN0Q3VydmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3VydmVJbnRlZ3JhbEF0KToK
KyAgICAgICAgKFdlYkNvcmU6OmF0dGFja0FyZWEpOgorICAgICAgICAoV2ViQ29yZTo6cmVsZWFz
ZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0QW5pbWF0aW9uUGFyYW1ldGVyc0ZvckdyYW51
bGFyaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6dXBkYXRl
UGVyQXhpc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoOjph
bmltYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlvblNtb290aDo6
YW5pbWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRpb25T
bW9vdGg6OnN0YXJ0TmV4dFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdGlv
blNtb290aDo6YW5pbWF0aW9uVGltZXJBY3RpdmUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9s
bEFuaW1hdGlvblNtb290aC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OnNldEN1cnJlbnRQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6dXBkYXRlQWN0aXZlU2Ny
b2xsU25hcEluZGV4Rm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Ojpub3RpZnlQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3I6OnNjcm9sbE9mZnNldE9uQXhpcyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcjo6
Y3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU21vb3RoLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yU21vb3RoOjpTY3JvbGxBbmltYXRvclNtb290aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNtb290aDo6flNjcm9sbEFuaW1hdG9yU21v
b3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yU21vb3RoOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JTbW9vdGg6OnNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNtb290aDo6
Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvclNtb290
aDo6c2VydmljZVNjcm9sbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JTbW9vdGg6OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yU21vb3RoOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvclNtb290aDo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcik6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JTbW9vdGguaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KToKKwogMjAxNi0w
MS0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgU2Nyb2xsQW5pbWF0b3IgaXMgbm90IG5vdGlmaWVkIHdoZW4gbW91c2UgZW50ZXJlZCwgbW92
ZWQgb3IgZXhpdGVkIGEgUmVuZGVyTGlzdEJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCBjYTJlZGIwLi4xMjhhMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVm
bC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNTE3LDcg
KzUxNyw4IEBAIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfU01PT1RIX1NDUk9MTElORykKICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKLSAgICAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3JOb25lLmNwcAorICAgICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguY3BwCisg
ICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yU21vb3RoLmNwcAogICAgICkKIGVuZGlmICgp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZGE4MmNiNC4uNGY0NzExZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTkzNSw3ICs5MzUsOCBAQCBzZXQoR09iamVjdERPTUJp
bmRpbmdzX0dJUl9IRUFERVJTICR7R09iamVjdERPTUJpbmRpbmdzX0dJUl9IRUFERVJTfSBQQVJF
TlRfU0NPUAogCiBpZiAoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcpCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCi0gICAgICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAK
KyAgICAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcAorICAgICAgICBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvclNtb290aC5jcHAKICAgICApCiBlbmRpZiAoKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjcyZjJiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb24uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0
aW9uX2gKKyNkZWZpbmUgU2Nyb2xsQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIFNj
cm9sbGFibGVBcmVhOworCitjbGFzcyBTY3JvbGxBbmltYXRpb24geworcHVibGljOgorICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhzKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJyZW50UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmljZUFuaW1hdGlvbigpIHsgfTsKKworcHJvdGVjdGVk
OgorICAgIFNjcm9sbEFuaW1hdGlvbihTY3JvbGxhYmxlQXJlYSYgc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIDogbV9zY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSkKKyAgICB7CisgICAgfQor
CisgICAgU2Nyb2xsYWJsZUFyZWEmIG1fc2Nyb2xsYWJsZUFyZWE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRpb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uU21vb3RoLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3YWEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdGlvblNtb290aC5jcHAKQEAgLTAsMCArMSw0
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRpb25TbW9vdGguaCIKKwor
I2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgor
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBmcmFtZVJhdGUg
PSA2MDsKK3N0YXRpYyBjb25zdCBkb3VibGUgdGlja1RpbWUgPSAxIC8gZnJhbWVSYXRlOworc3Rh
dGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCA9IC4wMDE7CisKK1Njcm9sbEFu
aW1hdGlvblNtb290aDo6U2Nyb2xsQW5pbWF0aW9uU21vb3RoKFNjcm9sbGFibGVBcmVhJiBzY3Jv
bGxhYmxlQXJlYSwgc3RkOjpmdW5jdGlvbjx2b2lkIChGbG9hdFBvaW50JiYpPiYmIG5vdGlmeVBv
c2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKQorICAgIDogU2Nyb2xsQW5pbWF0aW9uKHNjcm9sbGFibGVB
cmVhKQorICAgICwgbV9ub3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbihXVEZNb3ZlKG5vdGlm
eVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKSkKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUVfVElNRVIpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0aW9u
U21vb3RoOjphbmltYXRpb25UaW1lckZpcmVkKQorI2Vsc2UKKyAgICAsIG1fYW5pbWF0aW9uQWN0
aXZlKGZhbHNlKQorI2VuZGlmCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIGZsb2F0
IG1pblNjcm9sbFBvc2l0aW9uOworICAgIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uOworICAgIGlm
IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1pblNjcm9s
bFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCk7
CisgICAgICAgIG1heFNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKS54KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWluU2Nyb2xsUG9zaXRp
b24gPSBtX3Njcm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICAg
ICAgbWF4U2Nyb2xsUG9zaXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3Np
dGlvbigpLnkoKTsKKyAgICB9CisgICAgYm9vbCBuZWVkVG9TY3JvbGwgPSB1cGRhdGVQZXJBeGlz
RGF0YShvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsRGF0
YSA6IG1fdmVydGljYWxEYXRhLCBncmFudWxhcml0eSwgc3RlcCAqIG11bHRpcGxpZXIsIG1pblNj
cm9sbFBvc2l0aW9uLCBtYXhTY3JvbGxQb3NpdGlvbik7CisgICAgaWYgKG5lZWRUb1Njcm9sbCAm
JiAhYW5pbWF0aW9uVGltZXJBY3RpdmUoKSkgeworICAgICAgICBtX3N0YXJ0VGltZSA9IG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxEYXRhLnN0YXJ0VGlt
ZSA6IG1fdmVydGljYWxEYXRhLnN0YXJ0VGltZTsKKyAgICAgICAgYW5pbWF0aW9uVGltZXJGaXJl
ZCgpOworICAgIH0KKyAgICByZXR1cm4gbmVlZFRvU2Nyb2xsOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdGlvblNtb290aDo6c3RvcCgpCit7CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X1RJTUVSKQorICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworI2Vsc2UKKyAgICBtX2FuaW1h
dGlvbkFjdGl2ZSA9IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uU21v
b3RoOjp1cGRhdGVWaXNpYmxlTGVuZ3RocygpCit7CisgICAgbV9ob3Jpem9udGFsRGF0YS52aXNp
YmxlTGVuZ3RoID0gbV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlV2lkdGgoKTsKKyAgICBtX3ZlcnRp
Y2FsRGF0YS52aXNpYmxlTGVuZ3RoID0gbV9zY3JvbGxhYmxlQXJlYS52aXNpYmxlSGVpZ2h0KCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpzZXRDdXJyZW50UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgc3RvcCgpOworICAgIG1faG9yaXpvbnRh
bERhdGEgPSBQZXJBeGlzRGF0YSgpOworICAgIG1faG9yaXpvbnRhbERhdGEuY3VycmVudFBvc2l0
aW9uID0gcG9zaXRpb24ueCgpOworICAgIG1faG9yaXpvbnRhbERhdGEuZGVzaXJlZFBvc2l0aW9u
ID0gbV9ob3Jpem9udGFsRGF0YS5jdXJyZW50UG9zaXRpb247CisKKyAgICBtX3ZlcnRpY2FsRGF0
YSA9IFBlckF4aXNEYXRhKCk7CisgICAgbV92ZXJ0aWNhbERhdGEuY3VycmVudFBvc2l0aW9uID0g
cG9zaXRpb24ueSgpOworICAgIG1fdmVydGljYWxEYXRhLmRlc2lyZWRQb3NpdGlvbiA9IG1fdmVy
dGljYWxEYXRhLmN1cnJlbnRQb3NpdGlvbjsKK30KKworI2lmICFVU0UoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUVfVElNRVIpCit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6c2VydmljZUFuaW1h
dGlvbigpCit7CisgICAgaWYgKG1fYW5pbWF0aW9uQWN0aXZlKQorICAgICAgICBhbmltYXRpb25U
aW1lckZpcmVkKCk7Cit9CisjZW5kaWYKKworU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjp+U2Nyb2xs
QW5pbWF0aW9uU21vb3RoKCkKK3sKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgY3VydmVBdChT
Y3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgdCkKK3sKKyAgICBzd2l0
Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlOjpMaW5l
YXI6CisgICAgICAgIHJldHVybiB0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpD
dXJ2ZTo6UXVhZHJhdGljOgorICAgICAgICByZXR1cm4gdCAqIHQ7CisgICAgY2FzZSBTY3JvbGxB
bmltYXRpb25TbW9vdGg6OkN1cnZlOjpDdWJpYzoKKyAgICAgICAgcmV0dXJuIHQgKiB0ICogdDsK
KyAgICBjYXNlIFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmU6OlF1YXJ0aWM6CisgICAgICAg
IHJldHVybiB0ICogdCAqIHQgKiB0OworICAgIGNhc2UgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpD
dXJ2ZTo6Qm91bmNlOgorICAgICAgICAvLyBUaW1lIGJhc2UgaXMgY2hvc2VuIHRvIGtlZXAgdGhl
IGJvdW5jZSBwb2ludHMgc2ltcGxlcjoKKyAgICAgICAgLy8gMSAoaGFsZiBib3VuY2UgY29taW5n
IGluKSArIDEgKyAuNSArIC4yNQorICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVCYXNl
ID0gMi43NTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lQmFzZVNxdWFyZWQgPSB0
aW1lQmFzZSAqIHRpbWVCYXNlOworICAgICAgICBpZiAodCA8IDEgLyB0aW1lQmFzZSkKKyAgICAg
ICAgICAgIHJldHVybiB0aW1lQmFzZVNxdWFyZWQgKiB0ICogdDsKKyAgICAgICAgaWYgKHQgPCAy
IC8gdGltZUJhc2UpIHsKKyAgICAgICAgICAgIC8vIEludmVydCBhIFstLjUsLjVdIHF1YWRyYXRp
YyBwYXJhYm9sYSwgY2VudGVyIGl0IGluIFsxLDJdLgorICAgICAgICAgICAgZG91YmxlIHQxID0g
dCAtIDEuNSAvIHRpbWVCYXNlOworICAgICAgICAgICAgY29uc3QgZG91YmxlIHBhcmFib2xhQXRF
ZGdlID0gMSAtIC41ICogLjU7CisgICAgICAgICAgICByZXR1cm4gdGltZUJhc2VTcXVhcmVkICog
dDEgKiB0MSArIHBhcmFib2xhQXRFZGdlOworICAgICAgICB9CisgICAgICAgIGlmICh0IDwgMi41
IC8gdGltZUJhc2UpIHsKKyAgICAgICAgICAgIC8vIEludmVydCBhIFstLjI1LC4yNV0gcXVhZHJh
dGljIHBhcmFib2xhLCBjZW50ZXIgaXQgaW4gWzIsMi41XS4KKyAgICAgICAgICAgIGRvdWJsZSB0
MiA9IHQgLSAyLjI1IC8gdGltZUJhc2U7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgcGFyYWJv
bGFBdEVkZ2UgPSAxIC0gLjI1ICogLjI1OworICAgICAgICAgICAgcmV0dXJuIHRpbWVCYXNlU3F1
YXJlZCAqIHQyICogdDIgKyBwYXJhYm9sYUF0RWRnZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJ
bnZlcnQgYSBbLS4xMjUsLjEyNV0gcXVhZHJhdGljIHBhcmFib2xhLCBjZW50ZXIgaXQgaW4gWzIu
NSwyLjc1XS4KKyAgICAgICAgY29uc3QgZG91YmxlIHBhcmFib2xhQXRFZGdlID0gMSAtIC4xMjUg
KiAuMTI1OworICAgICAgICB0IC09IDIuNjI1IC8gdGltZUJhc2U7CisgICAgICAgIHJldHVybiB0
aW1lQmFzZVNxdWFyZWQgKiB0ICogdCArIHBhcmFib2xhQXRFZGdlOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBkb3Vi
bGUgYXR0YWNrQ3VydmUoU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpDdXJ2ZSBjdXJ2ZSwgZG91Ymxl
IGRlbHRhVGltZSwgZG91YmxlIGN1cnZlVCwgZG91YmxlIHN0YXJ0UG9zaXRpb24sIGRvdWJsZSBh
dHRhY2tQb3NpdGlvbikKK3sKKyAgICBkb3VibGUgdCA9IGRlbHRhVGltZSAvIGN1cnZlVDsKKyAg
ICBkb3VibGUgcG9zaXRpb25GYWN0b3IgPSBjdXJ2ZUF0KGN1cnZlLCB0KTsKKyAgICByZXR1cm4g
c3RhcnRQb3NpdGlvbiArIHBvc2l0aW9uRmFjdG9yICogKGF0dGFja1Bvc2l0aW9uIC0gc3RhcnRQ
b3NpdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHJlbGVhc2VDdXJ2ZShTY3JvbGxB
bmltYXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgZGVsdGFUaW1lLCBkb3VibGUgY3Vy
dmVULCBkb3VibGUgcmVsZWFzZVBvc2l0aW9uLCBkb3VibGUgZGVzaXJlZFBvc2l0aW9uKQorewor
ICAgIGRvdWJsZSB0ID0gZGVsdGFUaW1lIC8gY3VydmVUOworICAgIGRvdWJsZSBwb3NpdGlvbkZh
Y3RvciA9IDEgLSBjdXJ2ZUF0KGN1cnZlLCAxIC0gdCk7CisgICAgcmV0dXJuIHJlbGVhc2VQb3Np
dGlvbiArIChwb3NpdGlvbkZhY3RvciAqIChkZXNpcmVkUG9zaXRpb24gLSByZWxlYXNlUG9zaXRp
b24pKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgY29hc3RDdXJ2ZShTY3JvbGxBbmltYXRp
b25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgZmFjdG9yKQoreworICAgIHJldHVybiAxIC0g
Y3VydmVBdChjdXJ2ZSwgMSAtIGZhY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGN1
cnZlSW50ZWdyYWxBdChTY3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUg
dCkKK3sKKyAgICBzd2l0Y2ggKGN1cnZlKSB7CisgICAgY2FzZSBTY3JvbGxBbmltYXRpb25TbW9v
dGg6OkN1cnZlOjpMaW5lYXI6CisgICAgICAgIHJldHVybiB0ICogdCAvIDI7CisgICAgY2FzZSBT
Y3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlOjpRdWFkcmF0aWM6CisgICAgICAgIHJldHVybiB0
ICogdCAqIHQgLyAzOworICAgIGNhc2UgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpDdXJ2ZTo6Q3Vi
aWM6CisgICAgICAgIHJldHVybiB0ICogdCAqIHQgKiB0IC8gNDsKKyAgICBjYXNlIFNjcm9sbEFu
aW1hdGlvblNtb290aDo6Q3VydmU6OlF1YXJ0aWM6CisgICAgICAgIHJldHVybiB0ICogdCAqIHQg
KiB0ICogdCAvIDU7CisgICAgY2FzZSBTY3JvbGxBbmltYXRpb25TbW9vdGg6OkN1cnZlOjpCb3Vu
Y2U6CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGltZUJhc2UgPSAyLjc1OworICAgICAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVCYXNlU3F1YXJlZCA9IHRpbWVCYXNlICogdGltZUJh
c2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGltZUJhc2VTcXVhcmVkT3ZlclRocmVl
ID0gdGltZUJhc2VTcXVhcmVkIC8gMzsKKyAgICAgICAgZG91YmxlIGFyZWE7CisgICAgICAgIGRv
dWJsZSB0MSA9IHN0ZDo6bWluKHQsIDEgLyB0aW1lQmFzZSk7CisgICAgICAgIGFyZWEgPSB0aW1l
QmFzZVNxdWFyZWRPdmVyVGhyZWUgKiB0MSAqIHQxICogdDE7CisgICAgICAgIGlmICh0IDwgMSAv
IHRpbWVCYXNlKQorICAgICAgICAgICAgcmV0dXJuIGFyZWE7CisKKyAgICAgICAgdDEgPSBzdGQ6
Om1pbih0IC0gMSAvIHRpbWVCYXNlLCAxIC8gdGltZUJhc2UpOworICAgICAgICAvLyBUaGUgaW50
ZWdyYWwgb2YgdGltZUJhc2VTcXVhcmVkICogKHQxIC0gLjUgLyB0aW1lQmFzZSkgKiAodDEgLSAu
NSAvIHRpbWVCYXNlKSArIHBhcmFib2xhQXRFZGdlCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgc2Vjb25kSW5uZXJPZmZzZXQgPSB0aW1lQmFzZVNxdWFyZWQgKiAuNSAvIHRpbWVCYXNlOwor
ICAgICAgICBkb3VibGUgYm91bmNlQXJlYSA9IHQxICogKHQxICogKHRpbWVCYXNlU3F1YXJlZE92
ZXJUaHJlZSAqIHQxIC0gc2Vjb25kSW5uZXJPZmZzZXQpICsgMSk7CisgICAgICAgIGFyZWEgKz0g
Ym91bmNlQXJlYTsKKyAgICAgICAgaWYgKHQgPCAyIC8gdGltZUJhc2UpCisgICAgICAgICAgICBy
ZXR1cm4gYXJlYTsKKworICAgICAgICB0MSA9IHN0ZDo6bWluKHQgLSAyIC8gdGltZUJhc2UsIDAu
NSAvIHRpbWVCYXNlKTsKKyAgICAgICAgLy8gVGhlIGludGVncmFsIG9mIHRpbWVCYXNlU3F1YXJl
ZCAqICh0MSAtIC4yNSAvIHRpbWVCYXNlKSAqICh0MSAtIC4yNSAvIHRpbWVCYXNlKSArIHBhcmFi
b2xhQXRFZGdlCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdGhpcmRJbm5lck9mZnNldCA9
IHRpbWVCYXNlU3F1YXJlZCAqIC4yNSAvIHRpbWVCYXNlOworICAgICAgICBib3VuY2VBcmVhID0g
IHQxICogKHQxICogKHRpbWVCYXNlU3F1YXJlZE92ZXJUaHJlZSAqIHQxIC0gdGhpcmRJbm5lck9m
ZnNldCkgKyAxKTsKKyAgICAgICAgYXJlYSArPSBib3VuY2VBcmVhOworICAgICAgICBpZiAodCA8
IDIuNSAvIHRpbWVCYXNlKQorICAgICAgICAgICAgcmV0dXJuIGFyZWE7CisKKyAgICAgICAgdDEg
PSB0IC0gMi41IC8gdGltZUJhc2U7CisgICAgICAgIC8vIFRoZSBpbnRlZ3JhbCBvZiB0aW1lQmFz
ZVNxdWFyZWQgKiAodDEgLSAuMTI1IC8gdGltZUJhc2UpICogKHQxIC0gLjEyNSAvIHRpbWVCYXNl
KSArIHBhcmFib2xhQXRFZGdlCisgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZm91cnRoSW5u
ZXJPZmZzZXQgPSB0aW1lQmFzZVNxdWFyZWQgKiAuMTI1IC8gdGltZUJhc2U7CisgICAgICAgIGJv
dW5jZUFyZWEgPSB0MSAqICh0MSAqICh0aW1lQmFzZVNxdWFyZWRPdmVyVGhyZWUgKiB0MSAtIGZv
dXJ0aElubmVyT2Zmc2V0KSArIDEpOworICAgICAgICBhcmVhICs9IGJvdW5jZUFyZWE7CisgICAg
ICAgIHJldHVybiBhcmVhOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgYXR0YWNrQXJlYShTY3JvbGxBbmlt
YXRpb25TbW9vdGg6OkN1cnZlIGN1cnZlLCBkb3VibGUgc3RhcnRULCBkb3VibGUgZW5kVCkKK3sK
KyAgICBkb3VibGUgc3RhcnRWYWx1ZSA9IGN1cnZlSW50ZWdyYWxBdChjdXJ2ZSwgc3RhcnRUKTsK
KyAgICBkb3VibGUgZW5kVmFsdWUgPSBjdXJ2ZUludGVncmFsQXQoY3VydmUsIGVuZFQpOworICAg
IHJldHVybiBlbmRWYWx1ZSAtIHN0YXJ0VmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91Ymxl
IHJlbGVhc2VBcmVhKFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmUgY3VydmUsIGRvdWJsZSBz
dGFydFQsIGRvdWJsZSBlbmRUKQoreworICAgIGRvdWJsZSBzdGFydFZhbHVlID0gY3VydmVJbnRl
Z3JhbEF0KGN1cnZlLCAxIC0gZW5kVCk7CisgICAgZG91YmxlIGVuZFZhbHVlID0gY3VydmVJbnRl
Z3JhbEF0KGN1cnZlLCAxIC0gc3RhcnRUKTsKKyAgICByZXR1cm4gZW5kVmFsdWUgLSBzdGFydFZh
bHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0QW5pbWF0aW9uUGFyYW1ldGVyc0Zvckdy
YW51bGFyaXR5KFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBkb3VibGUmIGFuaW1hdGlv
blRpbWUsIGRvdWJsZSYgcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lLCBkb3VibGUmIGF0dGFja1Rp
bWUsIGRvdWJsZSYgcmVsZWFzZVRpbWUsIFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmUmIGNv
YXN0VGltZUN1cnZlLCBkb3VibGUmIG1heGltdW1Db2FzdFRpbWUpCit7CisgICAgc3dpdGNoIChn
cmFudWxhcml0eSkgeworICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoKKyAgICAgICAgYW5pbWF0
aW9uVGltZSA9IDIwICogdGlja1RpbWU7CisgICAgICAgIHJlcGVhdE1pbmltdW1TdXN0YWluVGlt
ZSA9IDEwICogdGlja1RpbWU7CisgICAgICAgIGF0dGFja1RpbWUgPSAxMCAqIHRpY2tUaW1lOwor
ICAgICAgICByZWxlYXNlVGltZSA9IDEwICogdGlja1RpbWU7CisgICAgICAgIGNvYXN0VGltZUN1
cnZlID0gU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpDdXJ2ZTo6TGluZWFyOworICAgICAgICBtYXhp
bXVtQ29hc3RUaW1lID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6
CisgICAgICAgIGFuaW1hdGlvblRpbWUgPSAxMCAqIHRpY2tUaW1lOworICAgICAgICByZXBlYXRN
aW5pbXVtU3VzdGFpblRpbWUgPSA3ICogdGlja1RpbWU7CisgICAgICAgIGF0dGFja1RpbWUgPSAz
ICogdGlja1RpbWU7CisgICAgICAgIHJlbGVhc2VUaW1lID0gMyAqIHRpY2tUaW1lOworICAgICAg
ICBjb2FzdFRpbWVDdXJ2ZSA9IFNjcm9sbEFuaW1hdGlvblNtb290aDo6Q3VydmU6OkxpbmVhcjsK
KyAgICAgICAgbWF4aW11bUNvYXN0VGltZSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U2Nyb2xsQnlQYWdlOgorICAgICAgICBhbmltYXRpb25UaW1lID0gMTUgKiB0aWNrVGltZTsKKyAg
ICAgICAgcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lID0gMTAgKiB0aWNrVGltZTsKKyAgICAgICAg
YXR0YWNrVGltZSA9IDUgKiB0aWNrVGltZTsKKyAgICAgICAgcmVsZWFzZVRpbWUgPSA1ICogdGlj
a1RpbWU7CisgICAgICAgIGNvYXN0VGltZUN1cnZlID0gU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjpD
dXJ2ZTo6TGluZWFyOworICAgICAgICBtYXhpbXVtQ29hc3RUaW1lID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTY3JvbGxCeVBpeGVsOgorICAgICAgICBhbmltYXRpb25UaW1lID0gMSAq
IHRpY2tUaW1lOworICAgICAgICByZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUgPSAyICogdGlja1Rp
bWU7CisgICAgICAgIGF0dGFja1RpbWUgPSAzICogdGlja1RpbWU7CisgICAgICAgIHJlbGVhc2VU
aW1lID0gMyAqIHRpY2tUaW1lOworICAgICAgICBjb2FzdFRpbWVDdXJ2ZSA9IFNjcm9sbEFuaW1h
dGlvblNtb290aDo6Q3VydmU6OlF1YWRyYXRpYzsKKyAgICAgICAgbWF4aW11bUNvYXN0VGltZSA9
IDEuMjU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBTY3JvbGxBbmltYXRpb25TbW9vdGg6OnVwZGF0
ZVBlckF4aXNEYXRhKFBlckF4aXNEYXRhJiBkYXRhLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgZGVsdGEsIGZsb2F0IG1pblNjcm9sbFBvc2l0aW9uLCBmbG9hdCBtYXhTY3Jv
bGxQb3NpdGlvbikKK3sKKyAgICBpZiAoIWRhdGEuc3RhcnRUaW1lIHx8ICFkZWx0YSB8fCAoZGVs
dGEgPCAwKSAhPSAoZGF0YS5kZXNpcmVkUG9zaXRpb24gLSBkYXRhLmN1cnJlbnRQb3NpdGlvbiA8
IDApKSB7CisgICAgICAgIGRhdGEuZGVzaXJlZFBvc2l0aW9uID0gZGF0YS5jdXJyZW50UG9zaXRp
b247CisgICAgICAgIGRhdGEuc3RhcnRUaW1lID0gMDsKKyAgICB9CisgICAgZmxvYXQgbmV3UG9z
aXRpb24gPSBkYXRhLmRlc2lyZWRQb3NpdGlvbiArIGRlbHRhOworCisgICAgbmV3UG9zaXRpb24g
PSBzdGQ6Om1heChzdGQ6Om1pbihuZXdQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24pLCBtaW5T
Y3JvbGxQb3NpdGlvbik7CisKKyAgICBpZiAobmV3UG9zaXRpb24gPT0gZGF0YS5kZXNpcmVkUG9z
aXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRvdWJsZSBhbmltYXRpb25UaW1l
LCByZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUsIGF0dGFja1RpbWUsIHJlbGVhc2VUaW1lLCBtYXhp
bXVtQ29hc3RUaW1lOworICAgIEN1cnZlIGNvYXN0VGltZUN1cnZlOworICAgIGdldEFuaW1hdGlv
blBhcmFtZXRlcnNGb3JHcmFudWxhcml0eShncmFudWxhcml0eSwgYW5pbWF0aW9uVGltZSwgcmVw
ZWF0TWluaW11bVN1c3RhaW5UaW1lLCBhdHRhY2tUaW1lLCByZWxlYXNlVGltZSwgY29hc3RUaW1l
Q3VydmUsIG1heGltdW1Db2FzdFRpbWUpOworCisgICAgZGF0YS5kZXNpcmVkUG9zaXRpb24gPSBu
ZXdQb3NpdGlvbjsKKyAgICBpZiAoIWRhdGEuc3RhcnRUaW1lKQorICAgICAgICBkYXRhLmF0dGFj
a1RpbWUgPSBhdHRhY2tUaW1lOworICAgIGRhdGEuYW5pbWF0aW9uVGltZSA9IGFuaW1hdGlvblRp
bWU7CisgICAgZGF0YS5yZWxlYXNlVGltZSA9IHJlbGVhc2VUaW1lOworCisgICAgLy8gUHJpb3Jp
dGl6ZSBvdXIgd2F5IG91dCBvZiBvdmVyIGNvbnN0cmFpbnQuCisgICAgaWYgKGRhdGEuYXR0YWNr
VGltZSArIGRhdGEucmVsZWFzZVRpbWUgPiBkYXRhLmFuaW1hdGlvblRpbWUpIHsKKyAgICAgICAg
aWYgKGRhdGEucmVsZWFzZVRpbWUgPiBkYXRhLmFuaW1hdGlvblRpbWUpCisgICAgICAgICAgICBk
YXRhLnJlbGVhc2VUaW1lID0gZGF0YS5hbmltYXRpb25UaW1lOworICAgICAgICBkYXRhLmF0dGFj
a1RpbWUgPSBkYXRhLmFuaW1hdGlvblRpbWUgLSBkYXRhLnJlbGVhc2VUaW1lOworICAgIH0KKwor
ICAgIGlmICghZGF0YS5zdGFydFRpbWUpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIHRoZSB0aW1lIGZyb20gdGhlIGV2ZW50IHRoYXQgZ290IHVzIGhlcmUuCisgICAgICAgIGRh
dGEuc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSB0aWNrVGltZSAv
IDI7CisgICAgICAgIGRhdGEuc3RhcnRQb3NpdGlvbiA9IGRhdGEuY3VycmVudFBvc2l0aW9uOwor
ICAgICAgICBkYXRhLmxhc3RBbmltYXRpb25UaW1lID0gZGF0YS5zdGFydFRpbWU7CisgICAgfQor
ICAgIGRhdGEuc3RhcnRWZWxvY2l0eSA9IGRhdGEuY3VycmVudFZlbG9jaXR5OworCisgICAgZG91
YmxlIHJlbWFpbmluZ0RlbHRhID0gZGF0YS5kZXNpcmVkUG9zaXRpb24gLSBkYXRhLmN1cnJlbnRQ
b3NpdGlvbjsKKyAgICBkb3VibGUgYXR0YWNrQXJlYUxlZnQgPSAwOworICAgIGRvdWJsZSBkZWx0
YVRpbWUgPSBkYXRhLmxhc3RBbmltYXRpb25UaW1lIC0gZGF0YS5zdGFydFRpbWU7CisgICAgZG91
YmxlIGF0dGFja1RpbWVMZWZ0ID0gc3RkOjptYXgoMC4sIGRhdGEuYXR0YWNrVGltZSAtIGRlbHRh
VGltZSk7CisgICAgZG91YmxlIHRpbWVMZWZ0ID0gZGF0YS5hbmltYXRpb25UaW1lIC0gZGVsdGFU
aW1lOworICAgIGRvdWJsZSBtaW5UaW1lTGVmdCA9IGRhdGEucmVsZWFzZVRpbWUgKyBzdGQ6Om1p
bihyZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUsIGRhdGEuYW5pbWF0aW9uVGltZSAtIGRhdGEucmVs
ZWFzZVRpbWUgLSBhdHRhY2tUaW1lTGVmdCk7CisgICAgaWYgKHRpbWVMZWZ0IDwgbWluVGltZUxl
ZnQpIHsKKyAgICAgICAgZGF0YS5hbmltYXRpb25UaW1lID0gZGVsdGFUaW1lICsgbWluVGltZUxl
ZnQ7CisgICAgICAgIHRpbWVMZWZ0ID0gbWluVGltZUxlZnQ7CisgICAgfQorCisgICAgaWYgKG1h
eGltdW1Db2FzdFRpbWUgPiAocmVwZWF0TWluaW11bVN1c3RhaW5UaW1lICsgcmVsZWFzZVRpbWUp
KSB7CisgICAgICAgIGRvdWJsZSB0YXJnZXRNYXhDb2FzdFZlbG9jaXR5ID0gZGF0YS52aXNpYmxl
TGVuZ3RoICogLjI1ICogZnJhbWVSYXRlOworICAgICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGFz
IG1pbmltYWwgYXMgcG9zc2libGUgd2hpbGUgbm90IGJlaW5nIGludHJ1c2l2ZSB0byBwYWdlIHVw
L2Rvd24uCisgICAgICAgIGRvdWJsZSBtaW5Db2FzdERlbHRhID0gZGF0YS52aXNpYmxlTGVuZ3Ro
OworCisgICAgICAgIGlmIChmYWJzKHJlbWFpbmluZ0RlbHRhKSA+IG1pbkNvYXN0RGVsdGEpIHsK
KyAgICAgICAgICAgIGRvdWJsZSBtYXhDb2FzdERlbHRhID0gbWF4aW11bUNvYXN0VGltZSAqIHRh
cmdldE1heENvYXN0VmVsb2NpdHk7CisgICAgICAgICAgICBkb3VibGUgY29hc3RGYWN0b3IgPSBz
dGQ6Om1pbigxLiwgKGZhYnMocmVtYWluaW5nRGVsdGEpIC0gbWluQ29hc3REZWx0YSkgLyAobWF4
Q29hc3REZWx0YSAtIG1pbkNvYXN0RGVsdGEpKTsKKworICAgICAgICAgICAgLy8gV2UgY291bGQg
cGxheSB3aXRoIHRoZSBjdXJ2ZSBoZXJlIC0gbGluZWFyIHNlZW1zIGEgbGl0dGxlIHNvZnQuIElu
aXRpYWwgdGVzdGluZyBtYWtlcyBtZSB3YW50IHRvIGZlZWQgaW50byB0aGUgc3VzdGFpbiB0aW1l
IG1vcmUgYWdncmVzc2l2ZWx5LgorICAgICAgICAgICAgZG91YmxlIGNvYXN0TWluVGltZUxlZnQg
PSBzdGQ6Om1pbihtYXhpbXVtQ29hc3RUaW1lLCBtaW5UaW1lTGVmdCArIGNvYXN0Q3VydmUoY29h
c3RUaW1lQ3VydmUsIGNvYXN0RmFjdG9yKSAqIChtYXhpbXVtQ29hc3RUaW1lIC0gbWluVGltZUxl
ZnQpKTsKKworICAgICAgICAgICAgaWYgKGRvdWJsZSBhZGRpdGlvbmFsVGltZSA9IHN0ZDo6bWF4
KDAuLCBjb2FzdE1pblRpbWVMZWZ0IC0gbWluVGltZUxlZnQpKSB7CisgICAgICAgICAgICAgICAg
ZG91YmxlIGFkZGl0aW9uYWxSZWxlYXNlVGltZSA9IHN0ZDo6bWluKGFkZGl0aW9uYWxUaW1lLCBy
ZWxlYXNlVGltZSAvIChyZWxlYXNlVGltZSArIHJlcGVhdE1pbmltdW1TdXN0YWluVGltZSkgKiBh
ZGRpdGlvbmFsVGltZSk7CisgICAgICAgICAgICAgICAgZGF0YS5yZWxlYXNlVGltZSA9IHJlbGVh
c2VUaW1lICsgYWRkaXRpb25hbFJlbGVhc2VUaW1lOworICAgICAgICAgICAgICAgIGRhdGEuYW5p
bWF0aW9uVGltZSA9IGRlbHRhVGltZSArIGNvYXN0TWluVGltZUxlZnQ7CisgICAgICAgICAgICAg
ICAgdGltZUxlZnQgPSBjb2FzdE1pblRpbWVMZWZ0OworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgZG91YmxlIHJlbGVhc2VUaW1lTGVmdCA9IHN0ZDo6bWluKHRpbWVMZWZ0
LCBkYXRhLnJlbGVhc2VUaW1lKTsKKyAgICBkb3VibGUgc3VzdGFpblRpbWVMZWZ0ID0gc3RkOjpt
YXgoMC4sIHRpbWVMZWZ0IC0gcmVsZWFzZVRpbWVMZWZ0IC0gYXR0YWNrVGltZUxlZnQpOworICAg
IGlmIChhdHRhY2tUaW1lTGVmdCkgeworICAgICAgICBkb3VibGUgYXR0YWNrU3BvdCA9IGRlbHRh
VGltZSAvIGRhdGEuYXR0YWNrVGltZTsKKyAgICAgICAgYXR0YWNrQXJlYUxlZnQgPSBhdHRhY2tB
cmVhKEN1cnZlOjpDdWJpYywgYXR0YWNrU3BvdCwgMSkgKiBkYXRhLmF0dGFja1RpbWU7CisgICAg
fQorCisgICAgZG91YmxlIHJlbGVhc2VTcG90ID0gKGRhdGEucmVsZWFzZVRpbWUgLSByZWxlYXNl
VGltZUxlZnQpIC8gZGF0YS5yZWxlYXNlVGltZTsKKyAgICBkb3VibGUgcmVsZWFzZUFyZWFMZWZ0
ID0gcmVsZWFzZUFyZWEoQ3VydmU6OkN1YmljLCByZWxlYXNlU3BvdCwgMSkgKiBkYXRhLnJlbGVh
c2VUaW1lOworCisgICAgZGF0YS5kZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIChh
dHRhY2tBcmVhTGVmdCArIHN1c3RhaW5UaW1lTGVmdCArIHJlbGVhc2VBcmVhTGVmdCk7CisgICAg
ZGF0YS5yZWxlYXNlUG9zaXRpb24gPSBkYXRhLmRlc2lyZWRQb3NpdGlvbiAtIGRhdGEuZGVzaXJl
ZFZlbG9jaXR5ICogcmVsZWFzZUFyZWFMZWZ0OworICAgIGlmIChhdHRhY2tBcmVhTGVmdCkKKyAg
ICAgICAgZGF0YS5hdHRhY2tQb3NpdGlvbiA9IGRhdGEuc3RhcnRQb3NpdGlvbiArIGRhdGEuZGVz
aXJlZFZlbG9jaXR5ICogYXR0YWNrQXJlYUxlZnQ7CisgICAgZWxzZQorICAgICAgICBkYXRhLmF0
dGFja1Bvc2l0aW9uID0gZGF0YS5yZWxlYXNlUG9zaXRpb24gLSAoZGF0YS5hbmltYXRpb25UaW1l
IC0gZGF0YS5yZWxlYXNlVGltZSAtIGRhdGEuYXR0YWNrVGltZSkgKiBkYXRhLmRlc2lyZWRWZWxv
Y2l0eTsKKworICAgIGlmIChzdXN0YWluVGltZUxlZnQpIHsKKyAgICAgICAgZG91YmxlIHJvdW5k
T2ZmID0gZGF0YS5yZWxlYXNlUG9zaXRpb24gLSAoKGF0dGFja0FyZWFMZWZ0ID8gZGF0YS5hdHRh
Y2tQb3NpdGlvbiA6IGRhdGEuY3VycmVudFBvc2l0aW9uKSArIGRhdGEuZGVzaXJlZFZlbG9jaXR5
ICogc3VzdGFpblRpbWVMZWZ0KTsKKyAgICAgICAgZGF0YS5kZXNpcmVkVmVsb2NpdHkgKz0gcm91
bmRPZmYgLyBzdXN0YWluVGltZUxlZnQ7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU2Nyb2xsQW5pbWF0aW9uU21vb3RoOjphbmltYXRlU2Nyb2xsKFBlckF4aXNEYXRhJiBk
YXRhLCBkb3VibGUgY3VycmVudFRpbWUpCit7CisgICAgaWYgKCFkYXRhLnN0YXJ0VGltZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG91YmxlIGxhc3RTY3JvbGxJbnRlcnZhbCA9IGN1
cnJlbnRUaW1lIC0gZGF0YS5sYXN0QW5pbWF0aW9uVGltZTsKKyAgICBpZiAobGFzdFNjcm9sbElu
dGVydmFsIDwgbWluaW11bVRpbWVySW50ZXJ2YWwpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgZGF0YS5sYXN0QW5pbWF0aW9uVGltZSA9IGN1cnJlbnRUaW1lOworCisgICAgZG91YmxlIGRl
bHRhVGltZSA9IGN1cnJlbnRUaW1lIC0gZGF0YS5zdGFydFRpbWU7CisgICAgZG91YmxlIG5ld1Bv
c2l0aW9uID0gZGF0YS5jdXJyZW50UG9zaXRpb247CisKKyAgICBpZiAoZGVsdGFUaW1lID4gZGF0
YS5hbmltYXRpb25UaW1lKSB7CisgICAgICAgIGRvdWJsZSBkZXNpcmVkUG9zaXRpb24gPSBkYXRh
LmRlc2lyZWRQb3NpdGlvbjsKKyAgICAgICAgZGF0YSA9IFBlckF4aXNEYXRhKCk7CisgICAgICAg
IGRhdGEuY3VycmVudFBvc2l0aW9uID0gZGVzaXJlZFBvc2l0aW9uOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGlmIChkZWx0YVRpbWUgPCBkYXRhLmF0dGFja1RpbWUpCisgICAg
ICAgIG5ld1Bvc2l0aW9uID0gYXR0YWNrQ3VydmUoQ3VydmU6OkN1YmljLCBkZWx0YVRpbWUsIGRh
dGEuYXR0YWNrVGltZSwgZGF0YS5zdGFydFBvc2l0aW9uLCBkYXRhLmF0dGFja1Bvc2l0aW9uKTsK
KyAgICBlbHNlIGlmIChkZWx0YVRpbWUgPCAoZGF0YS5hbmltYXRpb25UaW1lIC0gZGF0YS5yZWxl
YXNlVGltZSkpCisgICAgICAgIG5ld1Bvc2l0aW9uID0gZGF0YS5hdHRhY2tQb3NpdGlvbiArIChk
ZWx0YVRpbWUgLSBkYXRhLmF0dGFja1RpbWUpICogZGF0YS5kZXNpcmVkVmVsb2NpdHk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8vIHJlbGVhc2UgaXMgYmFzZWQgb24gdGFyZ2V0aW5nIHRoZSBleGFj
dCBmaW5hbCBwb3NpdGlvbi4KKyAgICAgICAgZG91YmxlIHJlbGVhc2VEZWx0YVQgPSBkZWx0YVRp
bWUgLSAoZGF0YS5hbmltYXRpb25UaW1lIC0gZGF0YS5yZWxlYXNlVGltZSk7CisgICAgICAgIG5l
d1Bvc2l0aW9uID0gcmVsZWFzZUN1cnZlKEN1cnZlOjpDdWJpYywgcmVsZWFzZURlbHRhVCwgZGF0
YS5yZWxlYXNlVGltZSwgZGF0YS5yZWxlYXNlUG9zaXRpb24sIGRhdGEuZGVzaXJlZFBvc2l0aW9u
KTsKKyAgICB9CisKKyAgICAvLyBOb3JtYWxpemUgdmVsb2NpdHkgdG8gYSBwZXIgc2Vjb25kIGFt
b3VudC4gQ291bGQgYmUgdXNlZCB0byBjaGVjayBmb3IgamFuay4KKyAgICBpZiAobGFzdFNjcm9s
bEludGVydmFsID4gMCkKKyAgICAgICAgZGF0YS5jdXJyZW50VmVsb2NpdHkgPSAobmV3UG9zaXRp
b24gLSBkYXRhLmN1cnJlbnRQb3NpdGlvbikgLyBsYXN0U2Nyb2xsSW50ZXJ2YWw7CisgICAgZGF0
YS5jdXJyZW50UG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6YW5pbWF0aW9uVGltZXJGaXJlZCgpCit7Cisg
ICAgZG91YmxlIGN1cnJlbnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Cisg
ICAgZG91YmxlIGRlbHRhVG9OZXh0RnJhbWUgPSBjZWlsKChjdXJyZW50VGltZSAtIG1fc3RhcnRU
aW1lKSAqIGZyYW1lUmF0ZSkgLyBmcmFtZVJhdGUgLSAoY3VycmVudFRpbWUgLSBtX3N0YXJ0VGlt
ZSk7CisgICAgY3VycmVudFRpbWUgKz0gZGVsdGFUb05leHRGcmFtZTsKKworICAgIGJvb2wgY29u
dGludWVBbmltYXRpb24gPSBmYWxzZTsKKyAgICBpZiAoYW5pbWF0ZVNjcm9sbChtX2hvcml6b250
YWxEYXRhLCBjdXJyZW50VGltZSkpCisgICAgICAgIGNvbnRpbnVlQW5pbWF0aW9uID0gdHJ1ZTsK
KyAgICBpZiAoYW5pbWF0ZVNjcm9sbChtX3ZlcnRpY2FsRGF0YSwgY3VycmVudFRpbWUpKQorICAg
ICAgICBjb250aW51ZUFuaW1hdGlvbiA9IHRydWU7CisKKyAgICBpZiAoY29udGludWVBbmltYXRp
b24pCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgICAgICBzdGFy
dE5leHRUaW1lcihzdGQ6Om1heChtaW5pbXVtVGltZXJJbnRlcnZhbCwgZGVsdGFUb05leHRGcmFt
ZSkpOworI2Vsc2UKKyAgICAgICAgc3RhcnROZXh0VGltZXIoKTsKKyAgICBlbHNlCisgICAgICAg
IG1fYW5pbWF0aW9uQWN0aXZlID0gZmFsc2U7CisjZW5kaWYKKworICAgIG1fbm90aWZ5UG9zaXRp
b25DaGFuZ2VkRnVuY3Rpb24oRmxvYXRQb2ludChtX2hvcml6b250YWxEYXRhLmN1cnJlbnRQb3Np
dGlvbiwgbV92ZXJ0aWNhbERhdGEuY3VycmVudFBvc2l0aW9uKSk7Cit9CisKKyNpZiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6
c3RhcnROZXh0VGltZXIoZG91YmxlIGRlbGF5KQoreworICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KGRlbGF5KTsKK30KKyNlbHNlCit2b2lkIFNjcm9sbEFuaW1hdGlvblNtb290aDo6
c3RhcnROZXh0VGltZXIoKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhLnNjaGVkdWxlQW5p
bWF0aW9uKCkpCisgICAgICAgIG1fYW5pbWF0aW9uQWN0aXZlID0gdHJ1ZTsKK30KKyNlbmRpZgor
Citib29sIFNjcm9sbEFuaW1hdGlvblNtb290aDo6YW5pbWF0aW9uVGltZXJBY3RpdmUoKSBjb25z
dAoreworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKKyAgICByZXR1cm4g
bV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gbV9hbmltYXRp
b25BY3RpdmU7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRpb25TbW9vdGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdGlvblNtb290aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjc1ZjI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRpb25TbW9vdGguaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdGlv
blNtb290aF9oCisjZGVmaW5lIFNjcm9sbEFuaW1hdGlvblNtb290aF9oCisKKyNpbmNsdWRlICJT
Y3JvbGxBbmltYXRpb24uaCIKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaWYg
IUVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNlcnJvciAiU01PT1RIX1NDUk9MTElO
RyByZXF1aXJlcyBSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSB0byBiZSBlbmFibGVkLiIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiVGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
bG9hdFBvaW50OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlv
blNtb290aCBmaW5hbDogcHVibGljIFNjcm9sbEFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgU2Ny
b2xsQW5pbWF0aW9uU21vb3RoKFNjcm9sbGFibGVBcmVhJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChG
bG9hdFBvaW50JiYpPiYmIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZEZ1bmN0aW9uKTsKKyAgICB2aXJ0
dWFsIH5TY3JvbGxBbmltYXRpb25TbW9vdGgoKTsKKworICAgIGVudW0gY2xhc3MgQ3VydmUgewor
ICAgICAgICBMaW5lYXIsCisgICAgICAgIFF1YWRyYXRpYywKKyAgICAgICAgQ3ViaWMsCisgICAg
ICAgIFF1YXJ0aWMsCisgICAgICAgIEJvdW5jZQorICAgIH07CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2libGVMZW5ndGhz
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jikgb3ZlcnJpZGU7CisjaWYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9U
SU1FUikKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmljZUFuaW1hdGlvbigpIG92ZXJyaWRlOworI2Vu
ZGlmCisKKyAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgeworICAgICAgICBmbG9hdCBjdXJyZW50UG9z
aXRpb24geyAwIH07CisgICAgICAgIGRvdWJsZSBjdXJyZW50VmVsb2NpdHkgeyAwIH07CisKKyAg
ICAgICAgZG91YmxlIGRlc2lyZWRQb3NpdGlvbiB7IDAgfTsKKyAgICAgICAgZG91YmxlIGRlc2ly
ZWRWZWxvY2l0eSB7IDAgfTsKKworICAgICAgICBkb3VibGUgc3RhcnRQb3NpdGlvbiB7IDAgfTsK
KyAgICAgICAgZG91YmxlIHN0YXJ0VGltZSB7IDAgfTsKKyAgICAgICAgZG91YmxlIHN0YXJ0VmVs
b2NpdHkgeyAwIH07CisKKyAgICAgICAgZG91YmxlIGFuaW1hdGlvblRpbWUgeyAwIH07CisgICAg
ICAgIGRvdWJsZSBsYXN0QW5pbWF0aW9uVGltZSB7IDAgfTsKKworICAgICAgICBkb3VibGUgYXR0
YWNrUG9zaXRpb24geyAwIH07CisgICAgICAgIGRvdWJsZSBhdHRhY2tUaW1lIHsgMCB9OworICAg
ICAgICBDdXJ2ZSBhdHRhY2tDdXJ2ZSB7IEN1cnZlOjpRdWFkcmF0aWMgfTsKKworICAgICAgICBk
b3VibGUgcmVsZWFzZVBvc2l0aW9uIHsgMCB9OworICAgICAgICBkb3VibGUgcmVsZWFzZVRpbWUg
eyAwIH07CisgICAgICAgIEN1cnZlIHJlbGVhc2VDdXJ2ZSB7IEN1cnZlOjpRdWFkcmF0aWMgfTsK
KworICAgICAgICBpbnQgdmlzaWJsZUxlbmd0aCB7IDAgfTsKKyAgICB9OworCisgICAgYm9vbCB1
cGRhdGVQZXJBeGlzRGF0YShQZXJBeGlzRGF0YSYsIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBk
ZWx0YSwgZmxvYXQgbWluU2Nyb2xsUG9zaXRpb24sIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uKTsK
KyAgICBib29sIGFuaW1hdGVTY3JvbGwoUGVyQXhpc0RhdGEmLCBkb3VibGUgY3VycmVudFRpbWUp
OworCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgIHZvaWQgcmVx
dWVzdEFuaW1hdGlvblRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0TmV4dFRpbWVyKGRvdWJs
ZSBkZWxheSk7CisjZWxzZQorICAgIHZvaWQgc3RhcnROZXh0VGltZXIoKTsKKyNlbmRpZgorICAg
IHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOworICAgIGJvb2wgYW5pbWF0aW9uVGltZXJBY3Rp
dmUoKSBjb25zdDsKKworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRmxvYXRQb2ludCYmKT4gbV9u
b3RpZnlQb3NpdGlvbkNoYW5nZWRGdW5jdGlvbjsKKworICAgIFBlckF4aXNEYXRhIG1faG9yaXpv
bnRhbERhdGE7CisgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7CisKKyAgICBkb3VibGUg
bV9zdGFydFRpbWUgeyAwIH07CisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVS
KQorICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7CisjZWxzZQorICAgIGJvb2wgbV9hbmltYXRp
b25BY3RpdmUgeyBmYWxzZSB9OworI2VuZGlmCisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorI2VuZGlmIC8vIFNjcm9s
bEFuaW1hdGlvblNtb290aF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHAKaW5kZXggOTc4OGIyOS4uYjc5YzQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yLmNwcApAQCAtNzIsNyArNzIsNyBAQCBib29sIFNjcm9sbEFuaW1hdG9y
OjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5LAogICAgIGlmIChjdXJyZW50UG9zaXRpb24gPT0gbmV3UG9zaXRpb24pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHNldEN1cnJlbnRQb3NpdGlvbkludGVybmFsKG5ld1Bvc2l0aW9u
KTsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwogICAgIG5vdGlmeVBvc2l0
aW9uQ2hhbmdlZChuZXdQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7CiAgICAgRmxv
YXRQb2ludCBuZXdQb3NpdG9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsT3JpZ2luKCkp
KTsKICAgICBGbG9hdFNpemUgZGVsdGEgPSBuZXdQb3NpdG9uIC0gY3VycmVudFBvc2l0aW9uKCk7
Ci0gICAgc2V0Q3VycmVudFBvc2l0aW9uSW50ZXJuYWwobmV3UG9zaXRvbik7CisgICAgbV9jdXJy
ZW50UG9zaXRpb24gPSBuZXdQb3NpdG9uOwogICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdlZChkZWx0
YSk7CiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCk7CiB9CkBAIC0x
NzIsNyArMTcyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmKQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRDdXJyZW50
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgc2V0Q3VycmVudFBv
c2l0aW9uSW50ZXJuYWwocG9zaXRpb24pOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gcG9zaXRp
b247CiAgICAgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCk7CiB9CiAKQEAg
LTE4MCw3ICsxODAsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yOjp1cGRhdGVBY3RpdmVTY3JvbGxT
bmFwSW5kZXhGb3JPZmZzZXQoKQogewogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAg
Ly8gRklYTUU6IE5lZWRzIG9mZnNldC9wb3NpdGlvbiBkaXNhbWJpZ3VhdGlvbi4KLSAgICBtX3Nj
cm9sbENvbnRyb2xsZXIuc2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXNGb3JPZmZzZXQobV9jdXJy
ZW50UG9zWCwgbV9jdXJyZW50UG9zWSk7CisgICAgbV9zY3JvbGxDb250cm9sbGVyLnNldEFjdGl2
ZVNjcm9sbFNuYXBJbmRpY2VzRm9yT2Zmc2V0KG1fY3VycmVudFBvc2l0aW9uLngoKSwgbV9jdXJy
ZW50UG9zaXRpb24ueSgpKTsKICAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSgpKSB7CiAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEuc2V0Q3Vy
cmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Ny
b2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKICAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleChtX3Nj
cm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4
aXM6OlZlcnRpY2FsKSk7CkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvcjo6
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCkKIAogTGF5b3V0VW5pdCBTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAogewotICAgIHJldHVy
biBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IG1fY3VycmVudFBvc1ggOiBt
X2N1cnJlbnRQb3NZOworICAgIHJldHVybiBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpv
bnRhbCA/IG1fY3VycmVudFBvc2l0aW9uLngoKSA6IG1fY3VycmVudFBvc2l0aW9uLnkoKTsKIH0K
IAogdm9pZCBTY3JvbGxBbmltYXRvcjo6aW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBmbG9hdCBkZWx0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCmluZGV4IGM0NGVjNDMuLmU2MjZiOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsQW5pbWF0b3IuaApAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IHZvaWQgc2V0Q3VycmVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBGbG9hdFBv
aW50IGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UG9pbnQobV9jdXJyZW50
UG9zWCwgbV9jdXJyZW50UG9zWSk7IH0KKyAgICBjb25zdCBGbG9hdFBvaW50JiBjdXJyZW50UG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRQb3NpdGlvbjsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2VydmljZVNj
cm9sbEFuaW1hdGlvbnMoKSB7IH0KQEAgLTE0NSwxOSArMTQ1LDEyIEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYgZGVs
dGEpOwogICAgIHZvaWQgdXBkYXRlQWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yT2Zmc2V0KCk7CiAK
LSAgICB2b2lkIHNldEN1cnJlbnRQb3NpdGlvbkludGVybmFsKGNvbnN0IEZsb2F0UG9pbnQmIHAp
Ci0gICAgewotICAgICAgICBtX2N1cnJlbnRQb3NYID0gcC54KCk7Ci0gICAgICAgIG1fY3VycmVu
dFBvc1kgPSBwLnkoKTsKLSAgICB9Ci0KICAgICBTY3JvbGxhYmxlQXJlYSYgbV9zY3JvbGxhYmxl
QXJlYTsKICAgICBSZWZQdHI8V2hlZWxFdmVudFRlc3RUcmlnZ2VyPiBtX3doZWVsRXZlbnRUZXN0
VHJpZ2dlcjsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKSB8fCBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCiAgICAgU2Nyb2xsQ29udHJvbGxlciBtX3Njcm9sbENvbnRyb2xsZXI7CiAjZW5kaWYK
LSAgICBmbG9hdCBtX2N1cnJlbnRQb3NYIHsgMCB9OyAvLyBTY3JvbGxBbmltYXRvck5vbmUgdGFr
ZXMgYWRkcmVzc2VzIG9mIHRoZXNlLCBzbyBjYW4ndCB1c2UgYSBGbG9hdFBvaW50LgotICAgIGZs
b2F0IG1fY3VycmVudFBvc1kgeyAwIH07CisgICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb3NpdGlv
bjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA4N2MzYTNkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yTm9uZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NjggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQotCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3JOb25lLmgiCi0KLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgotI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNvbnN0IGRvdWJsZSBrRnJhbWVSYXRlID0gNjA7Ci1jb25zdCBkb3VibGUga1RpY2tU
aW1lID0gMSAvIGtGcmFtZVJhdGU7Ci1jb25zdCBkb3VibGUga01pbmltdW1UaW1lckludGVydmFs
ID0gLjAwMTsKLQotc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEFuaW1hdG9yPiBTY3JvbGxBbmltYXRv
cjo6Y3JlYXRlKFNjcm9sbGFibGVBcmVhJiBzY3JvbGxhYmxlQXJlYSkKLXsKLSAgICBpZiAoc2Ny
b2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdG9yTm9uZT4oc2Nyb2xsYWJsZUFyZWEpOwotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdG9yPihzY3JvbGxhYmxlQXJlYSk7Ci19
Ci0KLVNjcm9sbEFuaW1hdG9yTm9uZTo6UGFyYW1ldGVyczo6UGFyYW1ldGVycygpCi0gICAgOiBt
X2lzRW5hYmxlZChmYWxzZSkKLXsKLX0KLQotU2Nyb2xsQW5pbWF0b3JOb25lOjpQYXJhbWV0ZXJz
OjpQYXJhbWV0ZXJzKGJvb2wgaXNFbmFibGVkLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgZG91Ymxl
IHJlcGVhdE1pbmltdW1TdXN0YWluVGltZSwgQ3VydmUgYXR0YWNrQ3VydmUsIGRvdWJsZSBhdHRh
Y2tUaW1lLCBDdXJ2ZSByZWxlYXNlQ3VydmUsIGRvdWJsZSByZWxlYXNlVGltZSwgQ3VydmUgY29h
c3RUaW1lQ3VydmUsIGRvdWJsZSBtYXhpbXVtQ29hc3RUaW1lKQotICAgIDogbV9pc0VuYWJsZWQo
aXNFbmFibGVkKQotICAgICwgbV9hbmltYXRpb25UaW1lKGFuaW1hdGlvblRpbWUpCi0gICAgLCBt
X3JlcGVhdE1pbmltdW1TdXN0YWluVGltZShyZXBlYXRNaW5pbXVtU3VzdGFpblRpbWUpCi0gICAg
LCBtX2F0dGFja0N1cnZlKGF0dGFja0N1cnZlKQotICAgICwgbV9hdHRhY2tUaW1lKGF0dGFja1Rp
bWUpCi0gICAgLCBtX3JlbGVhc2VDdXJ2ZShyZWxlYXNlQ3VydmUpCi0gICAgLCBtX3JlbGVhc2VU
aW1lKHJlbGVhc2VUaW1lKQotICAgICwgbV9jb2FzdFRpbWVDdXJ2ZShjb2FzdFRpbWVDdXJ2ZSkK
LSAgICAsIG1fbWF4aW11bUNvYXN0VGltZShtYXhpbXVtQ29hc3RUaW1lKQotewotfQotCi1kb3Vi
bGUgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6Y3VydmVBdChDdXJ2ZSBjdXJ2ZSwg
ZG91YmxlIHQpCi17Ci0gICAgc3dpdGNoIChjdXJ2ZSkgewotICAgIGNhc2UgTGluZWFyOgotICAg
ICAgICByZXR1cm4gdDsKLSAgICBjYXNlIFF1YWRyYXRpYzoKLSAgICAgICAgcmV0dXJuIHQgKiB0
OwotICAgIGNhc2UgQ3ViaWM6Ci0gICAgICAgIHJldHVybiB0ICogdCAqIHQ7Ci0gICAgY2FzZSBR
dWFydGljOgotICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdDsKLSAgICBjYXNlIEJvdW5jZToK
LSAgICAgICAgLy8gVGltZSBiYXNlIGlzIGNob3NlbiB0byBrZWVwIHRoZSBib3VuY2UgcG9pbnRz
IHNpbXBsZXI6Ci0gICAgICAgIC8vIDEgKGhhbGYgYm91bmNlIGNvbWluZyBpbikgKyAxICsgLjUg
KyAuMjUKLSAgICAgICAgY29uc3QgZG91YmxlIGtUaW1lQmFzZSA9IDIuNzU7Ci0gICAgICAgIGNv
bnN0IGRvdWJsZSBrVGltZUJhc2VTcXVhcmVkID0ga1RpbWVCYXNlICoga1RpbWVCYXNlOwotICAg
ICAgICBpZiAodCA8IDEgLyBrVGltZUJhc2UpCi0gICAgICAgICAgICByZXR1cm4ga1RpbWVCYXNl
U3F1YXJlZCAqIHQgKiB0OwotICAgICAgICBpZiAodCA8IDIgLyBrVGltZUJhc2UpIHsKLSAgICAg
ICAgICAgIC8vIEludmVydCBhIFstLjUsLjVdIHF1YWRyYXRpYyBwYXJhYm9sYSwgY2VudGVyIGl0
IGluIFsxLDJdLgotICAgICAgICAgICAgZG91YmxlIHQxID0gdCAtIDEuNSAvIGtUaW1lQmFzZTsK
LSAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBrUGFyYWJvbGFBdEVkZ2UgPSAxIC0gLjUgKiAuNTsK
LSAgICAgICAgICAgIHJldHVybiBrVGltZUJhc2VTcXVhcmVkICogdDEgKiB0MSArIGtQYXJhYm9s
YUF0RWRnZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodCA8IDIuNSAvIGtUaW1lQmFzZSkgewot
ICAgICAgICAgICAgLy8gSW52ZXJ0IGEgWy0uMjUsLjI1XSBxdWFkcmF0aWMgcGFyYWJvbGEsIGNl
bnRlciBpdCBpbiBbMiwyLjVdLgotICAgICAgICAgICAgZG91YmxlIHQyID0gdCAtIDIuMjUgLyBr
VGltZUJhc2U7Ci0gICAgICAgICAgICBjb25zdCBkb3VibGUga1BhcmFib2xhQXRFZGdlID0gMSAt
IC4yNSAqIC4yNTsKLSAgICAgICAgICAgIHJldHVybiBrVGltZUJhc2VTcXVhcmVkICogdDIgKiB0
MiArIGtQYXJhYm9sYUF0RWRnZTsKLSAgICAgICAgfQotICAgICAgICAgICAgLy8gSW52ZXJ0IGEg
Wy0uMTI1LC4xMjVdIHF1YWRyYXRpYyBwYXJhYm9sYSwgY2VudGVyIGl0IGluIFsyLjUsMi43NV0u
Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBrUGFyYWJvbGFBdEVkZ2UgPSAxIC0gLjEyNSAqIC4xMjU7
Ci0gICAgICAgIHQgLT0gMi42MjUgLyBrVGltZUJhc2U7Ci0gICAgICAgIHJldHVybiBrVGltZUJh
c2VTcXVhcmVkICogdCAqIHQgKyBrUGFyYWJvbGFBdEVkZ2U7Ci0gICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1kb3VibGUgU2Nyb2xsQW5pbWF0b3JO
b25lOjpQZXJBeGlzRGF0YTo6YXR0YWNrQ3VydmUoQ3VydmUgY3VydmUsIGRvdWJsZSBkZWx0YVRp
bWUsIGRvdWJsZSBjdXJ2ZVQsIGRvdWJsZSBzdGFydFBvc2l0aW9uLCBkb3VibGUgYXR0YWNrUG9z
aXRpb24pCi17Ci0gICAgZG91YmxlIHQgPSBkZWx0YVRpbWUgLyBjdXJ2ZVQ7Ci0gICAgZG91Ymxl
IHBvc2l0aW9uRmFjdG9yID0gY3VydmVBdChjdXJ2ZSwgdCk7Ci0gICAgcmV0dXJuIHN0YXJ0UG9z
aXRpb24gKyBwb3NpdGlvbkZhY3RvciAqIChhdHRhY2tQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24p
OwotfQotCi1kb3VibGUgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6cmVsZWFzZUN1
cnZlKEN1cnZlIGN1cnZlLCBkb3VibGUgZGVsdGFUaW1lLCBkb3VibGUgY3VydmVULCBkb3VibGUg
cmVsZWFzZVBvc2l0aW9uLCBkb3VibGUgZGVzaXJlZFBvc2l0aW9uKQotewotICAgIGRvdWJsZSB0
ID0gZGVsdGFUaW1lIC8gY3VydmVUOwotICAgIGRvdWJsZSBwb3NpdGlvbkZhY3RvciA9IDEgLSBj
dXJ2ZUF0KGN1cnZlLCAxIC0gdCk7Ci0gICAgcmV0dXJuIHJlbGVhc2VQb3NpdGlvbiArIChwb3Np
dGlvbkZhY3RvciAqIChkZXNpcmVkUG9zaXRpb24gLSByZWxlYXNlUG9zaXRpb24pKTsKLX0KLQot
ZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmNvYXN0Q3VydmUoQ3VydmUg
Y3VydmUsIGRvdWJsZSBmYWN0b3IpCi17Ci0gICAgcmV0dXJuIDEgLSBjdXJ2ZUF0KGN1cnZlLCAx
IC0gZmFjdG9yKTsKLX0KLQotZG91YmxlIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6
OmN1cnZlSW50ZWdyYWxBdChDdXJ2ZSBjdXJ2ZSwgZG91YmxlIHQpCi17Ci0gICAgc3dpdGNoIChj
dXJ2ZSkgewotICAgIGNhc2UgTGluZWFyOgotICAgICAgICByZXR1cm4gdCAqIHQgLyAyOwotICAg
IGNhc2UgUXVhZHJhdGljOgotICAgICAgICByZXR1cm4gdCAqIHQgKiB0IC8gMzsKLSAgICBjYXNl
IEN1YmljOgotICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAvIDQ7Ci0gICAgY2FzZSBRdWFy
dGljOgotICAgICAgICByZXR1cm4gdCAqIHQgKiB0ICogdCAqIHQgLyA1OwotICAgIGNhc2UgQm91
bmNlOgotICAgICAgICBjb25zdCBkb3VibGUga1RpbWVCYXNlID0gMi43NTsKLSAgICAgICAgY29u
c3QgZG91YmxlIGtUaW1lQmFzZVNxdWFyZWQgPSBrVGltZUJhc2UgKiBrVGltZUJhc2U7Ci0gICAg
ICAgIGNvbnN0IGRvdWJsZSBrVGltZUJhc2VTcXVhcmVkT3ZlclRocmVlID0ga1RpbWVCYXNlU3F1
YXJlZCAvIDM7Ci0gICAgICAgIGRvdWJsZSBhcmVhOwotICAgICAgICBkb3VibGUgdDEgPSBtaW4o
dCwgMSAvIGtUaW1lQmFzZSk7Ci0gICAgICAgIGFyZWEgPSBrVGltZUJhc2VTcXVhcmVkT3ZlclRo
cmVlICogdDEgKiB0MSAqIHQxOwotICAgICAgICBpZiAodCA8IDEgLyBrVGltZUJhc2UpCi0gICAg
ICAgICAgICByZXR1cm4gYXJlYTsKLQotICAgICAgICB0MSA9IG1pbih0IC0gMSAvIGtUaW1lQmFz
ZSwgMSAvIGtUaW1lQmFzZSk7Ci0gICAgICAgIC8vIFRoZSBpbnRlZ3JhbCBvZiBrVGltZUJhc2VT
cXVhcmVkICogKHQxIC0gLjUgLyBrVGltZUJhc2UpICogKHQxIC0gLjUgLyBrVGltZUJhc2UpICsg
a1BhcmFib2xhQXRFZGdlCi0gICAgICAgIGNvbnN0IGRvdWJsZSBrU2Vjb25kSW5uZXJPZmZzZXQg
PSBrVGltZUJhc2VTcXVhcmVkICogLjUgLyBrVGltZUJhc2U7Ci0gICAgICAgIGRvdWJsZSBib3Vu
Y2VBcmVhID0gdDEgKiAodDEgKiAoa1RpbWVCYXNlU3F1YXJlZE92ZXJUaHJlZSAqIHQxIC0ga1Nl
Y29uZElubmVyT2Zmc2V0KSArIDEpOwotICAgICAgICBhcmVhICs9IGJvdW5jZUFyZWE7Ci0gICAg
ICAgIGlmICh0IDwgMiAvIGtUaW1lQmFzZSkKLSAgICAgICAgICAgIHJldHVybiBhcmVhOwotCi0g
ICAgICAgIHQxID0gbWluKHQgLSAyIC8ga1RpbWVCYXNlLCAwLjUgLyBrVGltZUJhc2UpOwotICAg
ICAgICAvLyBUaGUgaW50ZWdyYWwgb2Yga1RpbWVCYXNlU3F1YXJlZCAqICh0MSAtIC4yNSAvIGtU
aW1lQmFzZSkgKiAodDEgLSAuMjUgLyBrVGltZUJhc2UpICsga1BhcmFib2xhQXRFZGdlCi0gICAg
ICAgIGNvbnN0IGRvdWJsZSBrVGhpcmRJbm5lck9mZnNldCA9IGtUaW1lQmFzZVNxdWFyZWQgKiAu
MjUgLyBrVGltZUJhc2U7Ci0gICAgICAgIGJvdW5jZUFyZWEgPSAgdDEgKiAodDEgKiAoa1RpbWVC
YXNlU3F1YXJlZE92ZXJUaHJlZSAqIHQxIC0ga1RoaXJkSW5uZXJPZmZzZXQpICsgMSk7Ci0gICAg
ICAgIGFyZWEgKz0gYm91bmNlQXJlYTsKLSAgICAgICAgaWYgKHQgPCAyLjUgLyBrVGltZUJhc2Up
Ci0gICAgICAgICAgICByZXR1cm4gYXJlYTsKLQotICAgICAgICB0MSA9IHQgLSAyLjUgLyBrVGlt
ZUJhc2U7Ci0gICAgICAgIC8vIFRoZSBpbnRlZ3JhbCBvZiBrVGltZUJhc2VTcXVhcmVkICogKHQx
IC0gLjEyNSAvIGtUaW1lQmFzZSkgKiAodDEgLSAuMTI1IC8ga1RpbWVCYXNlKSArIGtQYXJhYm9s
YUF0RWRnZQotICAgICAgICBjb25zdCBkb3VibGUga0ZvdXJ0aElubmVyT2Zmc2V0ID0ga1RpbWVC
YXNlU3F1YXJlZCAqIC4xMjUgLyBrVGltZUJhc2U7Ci0gICAgICAgIGJvdW5jZUFyZWEgPSB0MSAq
ICh0MSAqIChrVGltZUJhc2VTcXVhcmVkT3ZlclRocmVlICogdDEgLSBrRm91cnRoSW5uZXJPZmZz
ZXQpICsgMSk7Ci0gICAgICAgIGFyZWEgKz0gYm91bmNlQXJlYTsKLSAgICAgICAgcmV0dXJuIGFy
ZWE7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQot
Ci1kb3VibGUgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6YXR0YWNrQXJlYShDdXJ2
ZSBjdXJ2ZSwgZG91YmxlIHN0YXJ0VCwgZG91YmxlIGVuZFQpCi17Ci0gICAgZG91YmxlIHN0YXJ0
VmFsdWUgPSBjdXJ2ZUludGVncmFsQXQoY3VydmUsIHN0YXJ0VCk7Ci0gICAgZG91YmxlIGVuZFZh
bHVlID0gY3VydmVJbnRlZ3JhbEF0KGN1cnZlLCBlbmRUKTsKLSAgICByZXR1cm4gZW5kVmFsdWUg
LSBzdGFydFZhbHVlOwotfQotCi1kb3VibGUgU2Nyb2xsQW5pbWF0b3JOb25lOjpQZXJBeGlzRGF0
YTo6cmVsZWFzZUFyZWEoQ3VydmUgY3VydmUsIGRvdWJsZSBzdGFydFQsIGRvdWJsZSBlbmRUKQot
ewotICAgIGRvdWJsZSBzdGFydFZhbHVlID0gY3VydmVJbnRlZ3JhbEF0KGN1cnZlLCAxIC0gZW5k
VCk7Ci0gICAgZG91YmxlIGVuZFZhbHVlID0gY3VydmVJbnRlZ3JhbEF0KGN1cnZlLCAxIC0gc3Rh
cnRUKTsKLSAgICByZXR1cm4gZW5kVmFsdWUgLSBzdGFydFZhbHVlOwotfQotCi1TY3JvbGxBbmlt
YXRvck5vbmU6OlBlckF4aXNEYXRhOjpQZXJBeGlzRGF0YShTY3JvbGxBbmltYXRvck5vbmUqLCBm
bG9hdCogY3VycmVudFBvc2l0aW9uLCBpbnQgdmlzaWJsZUxlbmd0aCkKLSAgICA6IG1fY3VycmVu
dFBvc2l0aW9uKGN1cnJlbnRQb3NpdGlvbikKLSAgICAsIG1fdmlzaWJsZUxlbmd0aCh2aXNpYmxl
TGVuZ3RoKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpQ
ZXJBeGlzRGF0YTo6cmVzZXQoKQotewotICAgIG1fY3VycmVudFZlbG9jaXR5ID0gMDsKLQotICAg
IG1fZGVzaXJlZFBvc2l0aW9uID0gMDsKLSAgICBtX2Rlc2lyZWRWZWxvY2l0eSA9IDA7Ci0KLSAg
ICBtX3N0YXJ0UG9zaXRpb24gPSAwOwotICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICBtX3N0YXJ0
VmVsb2NpdHkgPSAwOwotCi0gICAgbV9hbmltYXRpb25UaW1lID0gMDsKLSAgICBtX2xhc3RBbmlt
YXRpb25UaW1lID0gMDsKLQotICAgIG1fYXR0YWNrUG9zaXRpb24gPSAwOwotICAgIG1fYXR0YWNr
VGltZSA9IDA7Ci0gICAgbV9hdHRhY2tDdXJ2ZSA9IFF1YWRyYXRpYzsKLQotICAgIG1fcmVsZWFz
ZVBvc2l0aW9uID0gMDsKLSAgICBtX3JlbGVhc2VUaW1lID0gMDsKLSAgICBtX3JlbGVhc2VDdXJ2
ZSA9IFF1YWRyYXRpYzsKLX0KLQotCi1ib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0Rh
dGE6OnVwZGF0ZURhdGFGcm9tUGFyYW1ldGVycyhmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVy
LCBmbG9hdCBtaW5TY3JvbGxQb3NpdGlvbiwgZmxvYXQgbWF4U2Nyb2xsUG9zaXRpb24sIGRvdWJs
ZSBjdXJyZW50VGltZSwgUGFyYW1ldGVycyogcGFyYW1ldGVycykKLXsKLSAgICBmbG9hdCBkZWx0
YSA9IHN0ZXAgKiBtdWx0aXBsaWVyOwotICAgIGlmICghbV9zdGFydFRpbWUgfHwgIWRlbHRhIHx8
IChkZWx0YSA8IDApICE9IChtX2Rlc2lyZWRQb3NpdGlvbiAtICptX2N1cnJlbnRQb3NpdGlvbiA8
IDApKSB7Ci0gICAgICAgIG1fZGVzaXJlZFBvc2l0aW9uID0gKm1fY3VycmVudFBvc2l0aW9uOwot
ICAgICAgICBtX3N0YXJ0VGltZSA9IDA7Ci0gICAgfQotICAgIGZsb2F0IG5ld1Bvc2l0aW9uID0g
bV9kZXNpcmVkUG9zaXRpb24gKyBkZWx0YTsKLQotICAgIG5ld1Bvc2l0aW9uID0gbWF4KG1pbihu
ZXdQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24pLCBtaW5TY3JvbGxQb3NpdGlvbik7Ci0KLSAg
ICBpZiAobmV3UG9zaXRpb24gPT0gbV9kZXNpcmVkUG9zaXRpb24pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG1fZGVzaXJlZFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0KLSAgICBpZiAo
IW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgIG1fYXR0YWNrVGltZSA9IHBhcmFtZXRlcnMtPm1fYXR0
YWNrVGltZTsKLSAgICAgICAgbV9hdHRhY2tDdXJ2ZSA9IHBhcmFtZXRlcnMtPm1fYXR0YWNrQ3Vy
dmU7Ci0gICAgfQotICAgIG1fYW5pbWF0aW9uVGltZSA9IHBhcmFtZXRlcnMtPm1fYW5pbWF0aW9u
VGltZTsKLSAgICBtX3JlbGVhc2VUaW1lID0gcGFyYW1ldGVycy0+bV9yZWxlYXNlVGltZTsKLSAg
ICBtX3JlbGVhc2VDdXJ2ZSA9IHBhcmFtZXRlcnMtPm1fcmVsZWFzZUN1cnZlOwotCi0gICAgLy8g
UHJpb3JpdGl6ZSBvdXIgd2F5IG91dCBvZiBvdmVyIGNvbnN0cmFpbnQuCi0gICAgaWYgKG1fYXR0
YWNrVGltZSArIG1fcmVsZWFzZVRpbWUgPiBtX2FuaW1hdGlvblRpbWUpIHsKLSAgICAgICAgaWYg
KG1fcmVsZWFzZVRpbWUgPiBtX2FuaW1hdGlvblRpbWUpCi0gICAgICAgICAgICBtX3JlbGVhc2VU
aW1lID0gbV9hbmltYXRpb25UaW1lOwotICAgICAgICBtX2F0dGFja1RpbWUgPSBtX2FuaW1hdGlv
blRpbWUgLSBtX3JlbGVhc2VUaW1lOwotICAgIH0KLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHRoZSB0aW1lIGZyb20gdGhlIGV2ZW50
IHRoYXQgZ290IHVzIGhlcmUuCi0gICAgICAgIG1fc3RhcnRUaW1lID0gY3VycmVudFRpbWUgLSBr
VGlja1RpbWUgLyAyOwotICAgICAgICBtX3N0YXJ0UG9zaXRpb24gPSAqbV9jdXJyZW50UG9zaXRp
b247Ci0gICAgICAgIG1fbGFzdEFuaW1hdGlvblRpbWUgPSBtX3N0YXJ0VGltZTsKLSAgICB9Ci0g
ICAgbV9zdGFydFZlbG9jaXR5ID0gbV9jdXJyZW50VmVsb2NpdHk7Ci0KLSAgICBkb3VibGUgcmVt
YWluaW5nRGVsdGEgPSBtX2Rlc2lyZWRQb3NpdGlvbiAtICptX2N1cnJlbnRQb3NpdGlvbjsKLQot
ICAgIGRvdWJsZSBhdHRhY2tBcmVhTGVmdCA9IDA7Ci0KLSAgICBkb3VibGUgZGVsdGFUaW1lID0g
bV9sYXN0QW5pbWF0aW9uVGltZSAtIG1fc3RhcnRUaW1lOwotICAgIGRvdWJsZSBhdHRhY2tUaW1l
TGVmdCA9IG1heCgwLiwgbV9hdHRhY2tUaW1lIC0gZGVsdGFUaW1lKTsKLSAgICBkb3VibGUgdGlt
ZUxlZnQgPSBtX2FuaW1hdGlvblRpbWUgLSBkZWx0YVRpbWU7Ci0gICAgZG91YmxlIG1pblRpbWVM
ZWZ0ID0gbV9yZWxlYXNlVGltZSArIG1pbihwYXJhbWV0ZXJzLT5tX3JlcGVhdE1pbmltdW1TdXN0
YWluVGltZSwgbV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSAtIGF0dGFja1RpbWVMZWZ0
KTsKLSAgICBpZiAodGltZUxlZnQgPCBtaW5UaW1lTGVmdCkgewotICAgICAgICBtX2FuaW1hdGlv
blRpbWUgPSBkZWx0YVRpbWUgKyBtaW5UaW1lTGVmdDsKLSAgICAgICAgdGltZUxlZnQgPSBtaW5U
aW1lTGVmdDsKLSAgICB9Ci0KLSAgICBpZiAocGFyYW1ldGVycy0+bV9tYXhpbXVtQ29hc3RUaW1l
ID4gKHBhcmFtZXRlcnMtPm1fcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lICsgcGFyYW1ldGVycy0+
bV9yZWxlYXNlVGltZSkpIHsKLSAgICAgICAgZG91YmxlIHRhcmdldE1heENvYXN0VmVsb2NpdHkg
PSBtX3Zpc2libGVMZW5ndGggKiAuMjUgKiBrRnJhbWVSYXRlOwotICAgICAgICAvLyBUaGlzIG5l
ZWRzIHRvIGJlIGFzIG1pbmltYWwgYXMgcG9zc2libGUgd2hpbGUgbm90IGJlaW5nIGludHJ1c2l2
ZSB0byBwYWdlIHVwL2Rvd24uCi0gICAgICAgIGRvdWJsZSBtaW5Db2FzdERlbHRhID0gbV92aXNp
YmxlTGVuZ3RoOwotCi0gICAgICAgIGlmIChmYWJzKHJlbWFpbmluZ0RlbHRhKSA+IG1pbkNvYXN0
RGVsdGEpIHsKLSAgICAgICAgICAgIGRvdWJsZSBtYXhDb2FzdERlbHRhID0gcGFyYW1ldGVycy0+
bV9tYXhpbXVtQ29hc3RUaW1lICogdGFyZ2V0TWF4Q29hc3RWZWxvY2l0eTsKLSAgICAgICAgICAg
IGRvdWJsZSBjb2FzdEZhY3RvciA9IG1pbigxLiwgKGZhYnMocmVtYWluaW5nRGVsdGEpIC0gbWlu
Q29hc3REZWx0YSkgLyAobWF4Q29hc3REZWx0YSAtIG1pbkNvYXN0RGVsdGEpKTsKLQotICAgICAg
ICAgICAgLy8gV2UgY291bGQgcGxheSB3aXRoIHRoZSBjdXJ2ZSBoZXJlIC0gbGluZWFyIHNlZW1z
IGEgbGl0dGxlIHNvZnQuIEluaXRpYWwgdGVzdGluZyBtYWtlcyBtZSB3YW50IHRvIGZlZWQgaW50
byB0aGUgc3VzdGFpbiB0aW1lIG1vcmUgYWdncmVzc2l2ZWx5LgotICAgICAgICAgICAgZG91Ymxl
IGNvYXN0TWluVGltZUxlZnQgPSBtaW4ocGFyYW1ldGVycy0+bV9tYXhpbXVtQ29hc3RUaW1lLCBt
aW5UaW1lTGVmdCArIGNvYXN0Q3VydmUocGFyYW1ldGVycy0+bV9jb2FzdFRpbWVDdXJ2ZSwgY29h
c3RGYWN0b3IpICogKHBhcmFtZXRlcnMtPm1fbWF4aW11bUNvYXN0VGltZSAtIG1pblRpbWVMZWZ0
KSk7Ci0KLSAgICAgICAgICAgIGRvdWJsZSBhZGRpdGlvbmFsVGltZSA9IG1heCgwLiwgY29hc3RN
aW5UaW1lTGVmdCAtIG1pblRpbWVMZWZ0KTsKLSAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsVGlt
ZSkgewotICAgICAgICAgICAgICAgIGRvdWJsZSBhZGRpdGlvbmFsUmVsZWFzZVRpbWUgPSBtaW4o
YWRkaXRpb25hbFRpbWUsIHBhcmFtZXRlcnMtPm1fcmVsZWFzZVRpbWUgLyAocGFyYW1ldGVycy0+
bV9yZWxlYXNlVGltZSArIHBhcmFtZXRlcnMtPm1fcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lKSAq
IGFkZGl0aW9uYWxUaW1lKTsKLSAgICAgICAgICAgICAgICBtX3JlbGVhc2VUaW1lID0gcGFyYW1l
dGVycy0+bV9yZWxlYXNlVGltZSArIGFkZGl0aW9uYWxSZWxlYXNlVGltZTsKLSAgICAgICAgICAg
ICAgICBtX2FuaW1hdGlvblRpbWUgPSBkZWx0YVRpbWUgKyBjb2FzdE1pblRpbWVMZWZ0OwotICAg
ICAgICAgICAgICAgIHRpbWVMZWZ0ID0gY29hc3RNaW5UaW1lTGVmdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSByZWxlYXNlVGltZUxlZnQgPSBtaW4odGlt
ZUxlZnQsIG1fcmVsZWFzZVRpbWUpOwotICAgIGRvdWJsZSBzdXN0YWluVGltZUxlZnQgPSBtYXgo
MC4sIHRpbWVMZWZ0IC0gcmVsZWFzZVRpbWVMZWZ0IC0gYXR0YWNrVGltZUxlZnQpOwotCi0gICAg
aWYgKGF0dGFja1RpbWVMZWZ0KSB7Ci0gICAgICAgIGRvdWJsZSBhdHRhY2tTcG90ID0gZGVsdGFU
aW1lIC8gbV9hdHRhY2tUaW1lOwotICAgICAgICBhdHRhY2tBcmVhTGVmdCA9IGF0dGFja0FyZWEo
bV9hdHRhY2tDdXJ2ZSwgYXR0YWNrU3BvdCwgMSkgKiBtX2F0dGFja1RpbWU7Ci0gICAgfQotCi0g
ICAgZG91YmxlIHJlbGVhc2VTcG90ID0gKG1fcmVsZWFzZVRpbWUgLSByZWxlYXNlVGltZUxlZnQp
IC8gbV9yZWxlYXNlVGltZTsKLSAgICBkb3VibGUgcmVsZWFzZUFyZWFMZWZ0ICA9IHJlbGVhc2VB
cmVhKG1fcmVsZWFzZUN1cnZlLCByZWxlYXNlU3BvdCwgMSkgKiBtX3JlbGVhc2VUaW1lOwotCi0g
ICAgbV9kZXNpcmVkVmVsb2NpdHkgPSByZW1haW5pbmdEZWx0YSAvIChhdHRhY2tBcmVhTGVmdCAr
IHN1c3RhaW5UaW1lTGVmdCArIHJlbGVhc2VBcmVhTGVmdCk7Ci0gICAgbV9yZWxlYXNlUG9zaXRp
b24gPSBtX2Rlc2lyZWRQb3NpdGlvbiAtIG1fZGVzaXJlZFZlbG9jaXR5ICogcmVsZWFzZUFyZWFM
ZWZ0OwotICAgIGlmIChhdHRhY2tBcmVhTGVmdCkKLSAgICAgICAgbV9hdHRhY2tQb3NpdGlvbiA9
IG1fc3RhcnRQb3NpdGlvbiArIG1fZGVzaXJlZFZlbG9jaXR5ICogYXR0YWNrQXJlYUxlZnQ7Ci0g
ICAgZWxzZQotICAgICAgICBtX2F0dGFja1Bvc2l0aW9uID0gbV9yZWxlYXNlUG9zaXRpb24gLSAo
bV9hbmltYXRpb25UaW1lIC0gbV9yZWxlYXNlVGltZSAtIG1fYXR0YWNrVGltZSkgKiBtX2Rlc2ly
ZWRWZWxvY2l0eTsKLQotICAgIGlmIChzdXN0YWluVGltZUxlZnQpIHsKLSAgICAgICAgZG91Ymxl
IHJvdW5kT2ZmID0gbV9yZWxlYXNlUG9zaXRpb24gLSAoKGF0dGFja0FyZWFMZWZ0ID8gbV9hdHRh
Y2tQb3NpdGlvbiA6ICptX2N1cnJlbnRQb3NpdGlvbikgKyBtX2Rlc2lyZWRWZWxvY2l0eSAqIHN1
c3RhaW5UaW1lTGVmdCk7Ci0gICAgICAgIG1fZGVzaXJlZFZlbG9jaXR5ICs9IHJvdW5kT2ZmIC8g
c3VzdGFpblRpbWVMZWZ0OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBGSVhN
RTogQWRkIGluIGphbmsgZGV0ZWN0aW9uIHRyYWNlIGV2ZW50cyBpbnRvIHRoaXMgZnVuY3Rpb24u
Ci1ib29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6UGVyQXhpc0RhdGE6OmFuaW1hdGVTY3JvbGwoZG91
YmxlIGN1cnJlbnRUaW1lKQotewotICAgIGRvdWJsZSBsYXN0U2Nyb2xsSW50ZXJ2YWwgPSBjdXJy
ZW50VGltZSAtIG1fbGFzdEFuaW1hdGlvblRpbWU7Ci0gICAgaWYgKGxhc3RTY3JvbGxJbnRlcnZh
bCA8IGtNaW5pbXVtVGltZXJJbnRlcnZhbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBt
X2xhc3RBbmltYXRpb25UaW1lID0gY3VycmVudFRpbWU7Ci0KLSAgICBkb3VibGUgZGVsdGFUaW1l
ID0gY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZTsKLSAgICBkb3VibGUgbmV3UG9zaXRpb24gPSAq
bV9jdXJyZW50UG9zaXRpb247Ci0KLSAgICBpZiAoZGVsdGFUaW1lID4gbV9hbmltYXRpb25UaW1l
KSB7Ci0gICAgICAgICptX2N1cnJlbnRQb3NpdGlvbiA9IG1fZGVzaXJlZFBvc2l0aW9uOwotICAg
ICAgICByZXNldCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChkZWx0
YVRpbWUgPCBtX2F0dGFja1RpbWUpCi0gICAgICAgIG5ld1Bvc2l0aW9uID0gYXR0YWNrQ3VydmUo
bV9hdHRhY2tDdXJ2ZSwgZGVsdGFUaW1lLCBtX2F0dGFja1RpbWUsIG1fc3RhcnRQb3NpdGlvbiwg
bV9hdHRhY2tQb3NpdGlvbik7Ci0gICAgZWxzZSBpZiAoZGVsdGFUaW1lIDwgKG1fYW5pbWF0aW9u
VGltZSAtIG1fcmVsZWFzZVRpbWUpKQotICAgICAgICBuZXdQb3NpdGlvbiA9IG1fYXR0YWNrUG9z
aXRpb24gKyAoZGVsdGFUaW1lIC0gbV9hdHRhY2tUaW1lKSAqIG1fZGVzaXJlZFZlbG9jaXR5Owot
ICAgIGVsc2UgewotICAgICAgICAvLyByZWxlYXNlIGlzIGJhc2VkIG9uIHRhcmdldGluZyB0aGUg
ZXhhY3QgZmluYWwgcG9zaXRpb24uCi0gICAgICAgIGRvdWJsZSByZWxlYXNlRGVsdGFUID0gZGVs
dGFUaW1lIC0gKG1fYW5pbWF0aW9uVGltZSAtIG1fcmVsZWFzZVRpbWUpOwotICAgICAgICBuZXdQ
b3NpdGlvbiA9IHJlbGVhc2VDdXJ2ZShtX3JlbGVhc2VDdXJ2ZSwgcmVsZWFzZURlbHRhVCwgbV9y
ZWxlYXNlVGltZSwgbV9yZWxlYXNlUG9zaXRpb24sIG1fZGVzaXJlZFBvc2l0aW9uKTsKLSAgICB9
Ci0KLSAgICAvLyBOb3JtYWxpemUgdmVsb2NpdHkgdG8gYSBwZXIgc2Vjb25kIGFtb3VudC4gQ291
bGQgYmUgdXNlZCB0byBjaGVjayBmb3IgamFuay4KLSAgICBpZiAobGFzdFNjcm9sbEludGVydmFs
ID4gMCkKLSAgICAgICAgbV9jdXJyZW50VmVsb2NpdHkgPSAobmV3UG9zaXRpb24gLSAqbV9jdXJy
ZW50UG9zaXRpb24pIC8gbGFzdFNjcm9sbEludGVydmFsOwotICAgICptX2N1cnJlbnRQb3NpdGlv
biA9IG5ld1Bvc2l0aW9uOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5p
bWF0b3JOb25lOjpQZXJBeGlzRGF0YTo6dXBkYXRlVmlzaWJsZUxlbmd0aChpbnQgdmlzaWJsZUxl
bmd0aCkKLXsKLSAgICBtX3Zpc2libGVMZW5ndGggPSB2aXNpYmxlTGVuZ3RoOwotfQotCi1TY3Jv
bGxBbmltYXRvck5vbmU6OlNjcm9sbEFuaW1hdG9yTm9uZShTY3JvbGxhYmxlQXJlYSYgc2Nyb2xs
YWJsZUFyZWEpCi0gICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKLSAgICAsIG1f
aG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gsIHNjcm9sbGFibGVBcmVhLnZpc2li
bGVXaWR0aCgpKQotICAgICwgbV92ZXJ0aWNhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1ksIHNj
cm9sbGFibGVBcmVhLnZpc2libGVIZWlnaHQoKSkKLSAgICAsIG1fc3RhcnRUaW1lKDApCi0jaWYg
VVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQotICAgICwgbV9hbmltYXRpb25UaW1l
cigqdGhpcywgJlNjcm9sbEFuaW1hdG9yTm9uZTo6cmVxdWVzdEFuaW1hdGlvblRpbWVyRmlyZWQp
Ci0jZWxzZQotICAgICwgbV9hbmltYXRpb25BY3RpdmUoZmFsc2UpCi0jZW5kaWYKLXsKLX0KLQot
U2Nyb2xsQW5pbWF0b3JOb25lOjp+U2Nyb2xsQW5pbWF0b3JOb25lKCkKLXsKLSAgICBzdG9wQW5p
bWF0aW9uVGltZXJJZk5lZWRlZCgpOwotfQotCi1TY3JvbGxBbmltYXRvck5vbmU6OlBhcmFtZXRl
cnMgU2Nyb2xsQW5pbWF0b3JOb25lOjpwYXJhbWV0ZXJzRm9yU2Nyb2xsR3JhbnVsYXJpdHkoU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChncmFudWxh
cml0eSkgewotICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoKLSAgICAgICAgcmV0dXJuIFBhcmFt
ZXRlcnModHJ1ZSwgMjAgKiBrVGlja1RpbWUsIDEwICoga1RpY2tUaW1lLCBDdWJpYywgMTAgKiBr
VGlja1RpbWUsIEN1YmljLCAxMCAqIGtUaWNrVGltZSwgTGluZWFyLCAxKTsKLSAgICBjYXNlIFNj
cm9sbEJ5TGluZToKLSAgICAgICAgcmV0dXJuIFBhcmFtZXRlcnModHJ1ZSwgMTAgKiBrVGlja1Rp
bWUsIDcgKiBrVGlja1RpbWUsIEN1YmljLCAzICoga1RpY2tUaW1lLCBDdWJpYywgMyAqIGtUaWNr
VGltZSwgTGluZWFyLCAxKTsKLSAgICBjYXNlIFNjcm9sbEJ5UGFnZToKLSAgICAgICAgcmV0dXJu
IFBhcmFtZXRlcnModHJ1ZSwgMTUgKiBrVGlja1RpbWUsIDEwICoga1RpY2tUaW1lLCBDdWJpYywg
NSAqIGtUaWNrVGltZSwgQ3ViaWMsIDUgKiBrVGlja1RpbWUsIExpbmVhciwgMSk7Ci0gICAgY2Fz
ZSBTY3JvbGxCeVBpeGVsOgotICAgICAgICByZXR1cm4gUGFyYW1ldGVycyh0cnVlLCAxMSAqIGtU
aWNrVGltZSwgMiAqIGtUaWNrVGltZSwgQ3ViaWMsIDMgKiBrVGlja1RpbWUsIEN1YmljLCAzICog
a1RpY2tUaW1lLCBRdWFkcmF0aWMsIDEuMjUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gUGFyYW1ldGVycygpOwotfQotCi1i
b29sIFNjcm9sbEFuaW1hdG9yTm9uZTo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQg
bXVsdGlwbGllcikKLXsKLSAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEuc2Nyb2xsQW5pbWF0b3JF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0
aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Ci0KLSAgICAvLyBGSVhNRTogZ2V0
IHRoZSB0eXBlIHBhc3NlZCBpbi4gTW91c2VXaGVlbCBjb3VsZCBhbHNvIGJlIGJ5IGxpbmUsIGJ1
dCBzaG91bGQgc3RpbGwgaGF2ZSBkaWZmZXJlbnQKLSAgICAvLyBhbmltYXRpb24gcGFyYW1ldGVy
cyB0aGFuIHRoZSBrZXlib2FyZC4KLSAgICBQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgc3dp
dGNoIChncmFudWxhcml0eSkgewotICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoKLSAgICBjYXNl
IFNjcm9sbEJ5TGluZToKLSAgICBjYXNlIFNjcm9sbEJ5UGFnZToKLSAgICBjYXNlIFNjcm9sbEJ5
UGl4ZWw6Ci0gICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzRm9yU2Nyb2xsR3JhbnVsYXJp
dHkoZ3JhbnVsYXJpdHkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5UHJlY2lz
ZVBpeGVsOgotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlv
biwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotICAgIH0KLQotICAgIC8vIElmIHRo
ZSBpbmRpdmlkdWFsIGlucHV0IHNldHRpbmcgaXMgZGlzYWJsZWQsIGJhaWwuCi0gICAgaWYgKCFw
YXJhbWV0ZXJzLm1faXNFbmFibGVkKQotICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNj
cm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotCi0gICAg
Ly8gVGhpcyBpcyBhbiBhbmltYXRhYmxlIHNjcm9sbC4gU2V0IHRoZSBhbmltYXRpb24gaW4gbW90
aW9uIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBwYXJhbWV0ZXJzLgotICAgIGZsb2F0IG1pblNjcm9s
bFBvc2l0aW9uOwotICAgIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uOwotICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1pblNjcm9sbFBvc2l0aW9u
ID0gbV9zY3JvbGxhYmxlQXJlYS5taW5pbXVtU2Nyb2xsUG9zaXRpb24oKS54KCk7Ci0gICAgICAg
IG1heFNjcm9sbFBvc2l0aW9uID0gbV9zY3JvbGxhYmxlQXJlYS5tYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKS54KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24gPSBtX3Nj
cm9sbGFibGVBcmVhLm1pbmltdW1TY3JvbGxQb3NpdGlvbigpLnkoKTsKLSAgICAgICAgbWF4U2Ny
b2xsUG9zaXRpb24gPSBtX3Njcm9sbGFibGVBcmVhLm1heGltdW1TY3JvbGxQb3NpdGlvbigpLnko
KTsKLSAgICB9Ci0KLSAgICBQZXJBeGlzRGF0YSYgZGF0YSA9IChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikgPyBtX3ZlcnRpY2FsRGF0YSA6IG1faG9yaXpvbnRhbERhdGE7Ci0gICAg
Ym9vbCBuZWVkVG9TY3JvbGwgPSBkYXRhLnVwZGF0ZURhdGFGcm9tUGFyYW1ldGVycyhzdGVwLCBt
dWx0aXBsaWVyLCBtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24sIG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpLCAmcGFyYW1ldGVycyk7Ci0gICAgaWYgKG5lZWRUb1Njcm9s
bCAmJiAhYW5pbWF0aW9uVGltZXJBY3RpdmUoKSkgewotICAgICAgICBtX3N0YXJ0VGltZSA9IGRh
dGEubV9zdGFydFRpbWU7Ci0gICAgICAgIGFuaW1hdGlvbldpbGxTdGFydCgpOwotICAgICAgICBh
bmltYXRpb25UaW1lckZpcmVkKCk7Ci0gICAgfQotICAgIHJldHVybiBuZWVkVG9TY3JvbGw7Ci19
Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQotewotICAgIHN0b3BBbmltYXRpb25UaW1lcklm
TmVlZGVkKCk7Ci0gICAgCi0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0LCB0b0Zsb2F0U2l6ZShtX3Njcm9sbGFi
bGVBcmVhLnNjcm9sbE9yaWdpbigpKSk7Ci0gICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24g
LSBGbG9hdFBvaW50KCptX2hvcml6b250YWxEYXRhLm1fY3VycmVudFBvc2l0aW9uLCAqbV92ZXJ0
aWNhbERhdGEubV9jdXJyZW50UG9zaXRpb24pOwotCi0gICAgbV9ob3Jpem9udGFsRGF0YS5yZXNl
dCgpOwotICAgICptX2hvcml6b250YWxEYXRhLm1fY3VycmVudFBvc2l0aW9uID0gcG9zaXRpb24u
eCgpOwotICAgIG1faG9yaXpvbnRhbERhdGEubV9kZXNpcmVkUG9zaXRpb24gPSBwb3NpdGlvbi54
KCk7Ci0KLSAgICBtX3ZlcnRpY2FsRGF0YS5yZXNldCgpOwotICAgICptX3ZlcnRpY2FsRGF0YS5t
X2N1cnJlbnRQb3NpdGlvbiA9IHBvc2l0aW9uLnkoKTsKLSAgICBtX3ZlcnRpY2FsRGF0YS5tX2Rl
c2lyZWRQb3NpdGlvbiA9IHBvc2l0aW9uLnkoKTsKLQotICAgIG5vdGlmeVBvc2l0aW9uQ2hhbmdl
ZChkZWx0YSk7Ci19Ci0KLSNpZiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQot
dm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OmNhbmNlbEFuaW1hdGlvbnMoKQotewotICAgIG1fYW5p
bWF0aW9uQWN0aXZlID0gZmFsc2U7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JOb25lOjpzZXJ2
aWNlU2Nyb2xsQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKG1fYW5pbWF0aW9uQWN0aXZlKQotICAg
ICAgICBhbmltYXRpb25UaW1lckZpcmVkKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxBbmlt
YXRvck5vbmU6OndpbGxFbmRMaXZlUmVzaXplKCkKLXsKLSAgICB1cGRhdGVWaXNpYmxlTGVuZ3Ro
cygpOwotfQotCi12b2lkIFNjcm9sbEFuaW1hdG9yTm9uZTo6ZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIoU2Nyb2xsYmFyKikKLXsKLSAgICB1cGRhdGVWaXNpYmxlTGVuZ3RocygpOwotfQotCi12b2lk
IFNjcm9sbEFuaW1hdG9yTm9uZTo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIq
KQotewotICAgIHVwZGF0ZVZpc2libGVMZW5ndGhzKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0
b3JOb25lOjp1cGRhdGVWaXNpYmxlTGVuZ3RocygpCi17Ci0gICAgbV9ob3Jpem9udGFsRGF0YS51
cGRhdGVWaXNpYmxlTGVuZ3RoKHNjcm9sbGFibGVBcmVhKCkudmlzaWJsZVdpZHRoKCkpOwotICAg
IG1fdmVydGljYWxEYXRhLnVwZGF0ZVZpc2libGVMZW5ndGgoc2Nyb2xsYWJsZUFyZWEoKS52aXNp
YmxlSGVpZ2h0KCkpOwotfQotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVS
KQotdm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnJlcXVlc3RBbmltYXRpb25UaW1lckZpcmVkKCkK
LXsKLSAgICBhbmltYXRpb25UaW1lckZpcmVkKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTY3JvbGxB
bmltYXRvck5vbmU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIGRvdWJsZSBjdXJyZW50
VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIGRvdWJsZSBkZWx0YVRv
TmV4dEZyYW1lID0gY2VpbCgoY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZSkgKiBrRnJhbWVSYXRl
KSAvIGtGcmFtZVJhdGUgLSAoY3VycmVudFRpbWUgLSBtX3N0YXJ0VGltZSk7Ci0gICAgY3VycmVu
dFRpbWUgKz0gZGVsdGFUb05leHRGcmFtZTsKLQotICAgIGJvb2wgY29udGludWVBbmltYXRpb24g
PSBmYWxzZTsKLSAgICBpZiAobV9ob3Jpem9udGFsRGF0YS5tX3N0YXJ0VGltZSAmJiBtX2hvcml6
b250YWxEYXRhLmFuaW1hdGVTY3JvbGwoY3VycmVudFRpbWUpKQotICAgICAgICBjb250aW51ZUFu
aW1hdGlvbiA9IHRydWU7Ci0gICAgaWYgKG1fdmVydGljYWxEYXRhLm1fc3RhcnRUaW1lICYmIG1f
dmVydGljYWxEYXRhLmFuaW1hdGVTY3JvbGwoY3VycmVudFRpbWUpKQotICAgICAgICBjb250aW51
ZUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICBpZiAoY29udGludWVBbmltYXRpb24pCi0jaWYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQotICAgICAgICBzdGFydE5leHRUaW1lciht
YXgoa01pbmltdW1UaW1lckludGVydmFsLCBkZWx0YVRvTmV4dEZyYW1lKSk7Ci0jZWxzZQotICAg
ICAgICBzdGFydE5leHRUaW1lcigpOwotICAgIGVsc2UKLSAgICAgICAgbV9hbmltYXRpb25BY3Rp
dmUgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKEZsb2F0U2l6
ZSgpKTsKLQotICAgIGlmICghY29udGludWVBbmltYXRpb24pCi0gICAgICAgIGFuaW1hdGlvbkRp
ZEZpbmlzaCgpOwotfQotCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQot
dm9pZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKGRvdWJsZSBkZWxheSkKLXsK
LSAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChkZWxheSk7Ci19Ci0jZWxzZQotdm9p
ZCBTY3JvbGxBbmltYXRvck5vbmU6OnN0YXJ0TmV4dFRpbWVyKCkKLXsKLSAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEoKS5zY2hlZHVsZUFuaW1hdGlvbigpKQotICAgICAgICBtX2FuaW1hdGlvbkFjdGl2
ZSA9IHRydWU7Ci19Ci0jZW5kaWYKLQotYm9vbCBTY3JvbGxBbmltYXRvck5vbmU6OmFuaW1hdGlv
blRpbWVyQWN0aXZlKCkKLXsKLSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIp
Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKTsKLSNlbHNlCi0gICAgcmV0
dXJuIG1fYW5pbWF0aW9uQWN0aXZlOwotI2VuZGlmCi19Ci0KLXZvaWQgU2Nyb2xsQW5pbWF0b3JO
b25lOjpzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgpCi17Ci0gICAgaWYgKGFuaW1hdGlvblRp
bWVyQWN0aXZlKCkpCi0jaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQotICAg
ICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSNlbHNlCi0gICAgICAgIG1fYW5pbWF0aW9u
QWN0aXZlID0gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvck5vbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yTm9uZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
MTMyZmE4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yTm9uZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9s
bEFuaW1hdG9yTm9uZV9oCi0jZGVmaW5lIFNjcm9sbEFuaW1hdG9yTm9uZV9oCi0KLSNpZiBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKLQotI2lmICFFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCi0jZXJyb3IgIlNNT09USF9TQ1JPTExJTkcgcmVxdWlyZXMgUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUgdG8gYmUgZW5hYmxlZC4iCi0jZW5kaWYKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
LSNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0KLWNsYXNz
IFNjcm9sbEFuaW1hdG9yTm9uZVRlc3Q7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBBY3RpdmVQbGF0Zm9ybUdlc3R1cmVBbmltYXRpb247Ci1zdHJ1Y3Qg
U2Nyb2xsQW5pbWF0b3JQYXJhbWV0ZXJzOwotCi1jbGFzcyBTY3JvbGxBbmltYXRvck5vbmUgOiBw
dWJsaWMgU2Nyb2xsQW5pbWF0b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEFuaW1h
dG9yTm9uZShTY3JvbGxhYmxlQXJlYSYpOwotICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTm9u
ZSgpOwotCi0gICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1
YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYp
OwotCi0jaWYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLSAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsQW5pbWF0aW9ucygpOwotICAgIHZpcnR1YWwgdm9pZCBzZXJ2aWNlU2Nyb2xs
QW5pbWF0aW9ucygpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNp
emUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFy
Kik7Ci0KLSAgICBlbnVtIEN1cnZlIHsKLSAgICAgICAgTGluZWFyLAotICAgICAgICBRdWFkcmF0
aWMsCi0gICAgICAgIEN1YmljLAotICAgICAgICBRdWFydGljLAotICAgICAgICBCb3VuY2UKLSAg
ICB9OwotCi0gICAgc3RydWN0IFBhcmFtZXRlcnMgewotICAgICAgICBQYXJhbWV0ZXJzKCk7Ci0g
ICAgICAgIFBhcmFtZXRlcnMoYm9vbCBpc0VuYWJsZWQsIGRvdWJsZSBhbmltYXRpb25UaW1lLCBk
b3VibGUgcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lLCBDdXJ2ZSBhdHRhY2tDdXJ2ZSwgZG91Ymxl
IGF0dGFja1RpbWUsIEN1cnZlIHJlbGVhc2VDdXJ2ZSwgZG91YmxlIHJlbGVhc2VUaW1lLCBDdXJ2
ZSBjb2FzdFRpbWVDdXJ2ZSwgZG91YmxlIG1heGltdW1Db2FzdFRpbWUpOwotCi0gICAgICAgIC8v
IE5vdGUgdGhhdCB0aGUgdGltZXMgY2FuIGJlIG92ZXJzcGVjaWZpZWQgc3VjaCB0aGF0IHJlbGVh
c2VUaW1lIG9yIHJlbGVhc2VUaW1lIGFuZCBhdHRhY2tUaW1lIGFyZSBncmVhdGVyCi0gICAgICAg
IC8vIHRoYW4gYW5pbWF0aW9uVGltZS4gYW5pbWF0aW9uVGltZSB0YWtlcyBwcmlvcml0eSBvdmVy
IHJlbGVhc2VUaW1lLCBjYXBwaW5nIGl0LiBhdHRhY2tUaW1lIGlzIGNhcHBlZCBhdAotICAgICAg
ICAvLyB3aGF0ZXZlciB0aW1lIHJlbWFpbnMsIG9yIHplcm8gaWYgbm9uZS4KLSAgICAgICAgYm9v
bCBtX2lzRW5hYmxlZDsKLSAgICAgICAgZG91YmxlIG1fYW5pbWF0aW9uVGltZTsKLSAgICAgICAg
ZG91YmxlIG1fcmVwZWF0TWluaW11bVN1c3RhaW5UaW1lOwotCi0gICAgICAgIEN1cnZlIG1fYXR0
YWNrQ3VydmU7Ci0gICAgICAgIGRvdWJsZSBtX2F0dGFja1RpbWU7Ci0KLSAgICAgICAgQ3VydmUg
bV9yZWxlYXNlQ3VydmU7Ci0gICAgICAgIGRvdWJsZSBtX3JlbGVhc2VUaW1lOwotCi0gICAgICAg
IEN1cnZlIG1fY29hc3RUaW1lQ3VydmU7Ci0gICAgICAgIGRvdWJsZSBtX21heGltdW1Db2FzdFRp
bWU7Ci0gICAgfTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25XaWxs
U3RhcnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uRGlkRmluaXNoKCkgeyB9Ci0K
LSAgICBQYXJhbWV0ZXJzIHBhcmFtZXRlcnNGb3JTY3JvbGxHcmFudWxhcml0eShTY3JvbGxHcmFu
dWxhcml0eSkgY29uc3Q7Ci0KLSAgICBmcmllbmQgY2xhc3MgOjpTY3JvbGxBbmltYXRvck5vbmVU
ZXN0OwotCi0gICAgc3RydWN0IFBlckF4aXNEYXRhIHsKLSAgICAgICAgUGVyQXhpc0RhdGEoU2Ny
b2xsQW5pbWF0b3JOb25lKiBwYXJlbnQsIGZsb2F0KiBjdXJyZW50UG9zLCBpbnQgdmlzaWJsZUxl
bmd0aCk7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgYm9vbCB1cGRhdGVEYXRhRnJv
bVBhcmFtZXRlcnMoZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllciwgZmxvYXQgbWluU2Nyb2xs
UG9zaXRpb24sIGZsb2F0IG1heFNjcm9sbFBvc2l0aW9uLCBkb3VibGUgY3VycmVudFRpbWUsIFBh
cmFtZXRlcnMqKTsKLSAgICAgICAgYm9vbCBhbmltYXRlU2Nyb2xsKGRvdWJsZSBjdXJyZW50VGlt
ZSk7Ci0gICAgICAgIHZvaWQgdXBkYXRlVmlzaWJsZUxlbmd0aChpbnQgdmlzaWJsZUxlbmd0aCk7
Ci0KLSAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJ2ZUF0KEN1cnZlLCBkb3VibGUgdCk7Ci0gICAg
ICAgIHN0YXRpYyBkb3VibGUgYXR0YWNrQ3VydmUoQ3VydmUsIGRvdWJsZSBkZWx0YVQsIGRvdWJs
ZSBjdXJ2ZVQsIGRvdWJsZSBzdGFydFBvcywgZG91YmxlIGF0dGFja1Bvcyk7Ci0gICAgICAgIHN0
YXRpYyBkb3VibGUgcmVsZWFzZUN1cnZlKEN1cnZlLCBkb3VibGUgZGVsdGFULCBkb3VibGUgY3Vy
dmVULCBkb3VibGUgcmVsZWFzZVBvcywgZG91YmxlIGRlc2lyZWRQb3MpOwotICAgICAgICBzdGF0
aWMgZG91YmxlIGNvYXN0Q3VydmUoQ3VydmUsIGRvdWJsZSBmYWN0b3IpOwotCi0gICAgICAgIHN0
YXRpYyBkb3VibGUgY3VydmVJbnRlZ3JhbEF0KEN1cnZlLCBkb3VibGUgdCk7Ci0gICAgICAgIHN0
YXRpYyBkb3VibGUgYXR0YWNrQXJlYShDdXJ2ZSwgZG91YmxlIHN0YXJ0VCwgZG91YmxlIGVuZFQp
OwotICAgICAgICBzdGF0aWMgZG91YmxlIHJlbGVhc2VBcmVhKEN1cnZlLCBkb3VibGUgc3RhcnRU
LCBkb3VibGUgZW5kVCk7Ci0KLSAgICAgICAgZmxvYXQqIG1fY3VycmVudFBvc2l0aW9uOwotICAg
ICAgICBkb3VibGUgbV9jdXJyZW50VmVsb2NpdHk7Ci0KLSAgICAgICAgZG91YmxlIG1fZGVzaXJl
ZFBvc2l0aW9uOwotICAgICAgICBkb3VibGUgbV9kZXNpcmVkVmVsb2NpdHk7Ci0KLSAgICAgICAg
ZG91YmxlIG1fc3RhcnRQb3NpdGlvbjsKLSAgICAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwotICAg
ICAgICBkb3VibGUgbV9zdGFydFZlbG9jaXR5OwotCi0gICAgICAgIGRvdWJsZSBtX2FuaW1hdGlv
blRpbWU7Ci0gICAgICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25UaW1lOwotCi0gICAgICAgIGRv
dWJsZSBtX2F0dGFja1Bvc2l0aW9uOwotICAgICAgICBkb3VibGUgbV9hdHRhY2tUaW1lOwotICAg
ICAgICBDdXJ2ZSBtX2F0dGFja0N1cnZlOwotCi0gICAgICAgIGRvdWJsZSBtX3JlbGVhc2VQb3Np
dGlvbjsKLSAgICAgICAgZG91YmxlIG1fcmVsZWFzZVRpbWU7Ci0gICAgICAgIEN1cnZlIG1fcmVs
ZWFzZUN1cnZlOwotCi0gICAgICAgIGludCBtX3Zpc2libGVMZW5ndGg7Ci0gICAgfTsKLQotI2lm
IFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKLSAgICB2b2lkIHJlcXVlc3RBbmlt
YXRpb25UaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBzdGFydE5leHRUaW1lcihkb3VibGUgZGVsYXkp
OwotI2Vsc2UKLSAgICB2b2lkIHN0YXJ0TmV4dFRpbWVyKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGFu
aW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVk
ZWQoKTsKLSAgICBib29sIGFuaW1hdGlvblRpbWVyQWN0aXZlKCk7Ci0gICAgdm9pZCB1cGRhdGVW
aXNpYmxlTGVuZ3RocygpOwotCi0gICAgUGVyQXhpc0RhdGEgbV9ob3Jpem9udGFsRGF0YTsKLSAg
ICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2FsRGF0YTsKLQotICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsK
LSNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCi0gICAgVGltZXIgbV9hbmlt
YXRpb25UaW1lcjsKLSNlbHNlCi0gICAgYm9vbCBtX2FuaW1hdGlvbkFjdGl2ZTsKLSNlbmRpZgot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNNT09USF9T
Q1JPTExJTkcpCi0KLSNlbmRpZiAvLyBTY3JvbGxBbmltYXRvck5vbmVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JTbW9vdGguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JTbW9vdGguY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZmQ3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvclNtb290aC5jcHAKQEAgLTAsMCArMSwxMTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JTbW9vdGguaCIK
KworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
aW9uU21vb3RoLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEmIHNjcm9sbGFibGVBcmVhKQoreworICAgIGlmIChzY3Jv
bGxhYmxlQXJlYS5zY3JvbGxBbmltYXRvckVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8U2Nyb2xsQW5pbWF0b3JTbW9vdGg+KHNjcm9sbGFibGVBcmVhKTsKKyAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxBbmltYXRvcj4oc2Nyb2xsYWJsZUFyZWEpOwor
fQorCitTY3JvbGxBbmltYXRvclNtb290aDo6U2Nyb2xsQW5pbWF0b3JTbW9vdGgoU2Nyb2xsYWJs
ZUFyZWEmIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xsYWJsZUFy
ZWEpCisgICAgLCBtX2FuaW1hdGlvbihzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEFuaW1hdGlvblNt
b290aD4oc2Nyb2xsYWJsZUFyZWEsIFt0aGlzXShGbG9hdFBvaW50JiYgcG9zaXRpb24pIHsKKyAg
ICAgICAgRmxvYXRTaXplIGRlbHRhID0gcG9zaXRpb24gLSBtX2N1cnJlbnRQb3NpdGlvbjsKKyAg
ICAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBXVEZNb3ZlKHBvc2l0aW9uKTsKKyAgICAgICAgbm90
aWZ5UG9zaXRpb25DaGFuZ2VkKGRlbHRhKTsKKyAgICB9KSkKK3sKK30KKworU2Nyb2xsQW5pbWF0
b3JTbW9vdGg6On5TY3JvbGxBbmltYXRvclNtb290aCgpCit7Cit9CisKK2Jvb2wgU2Nyb2xsQW5p
bWF0b3JTbW9vdGg6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
Cit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhLnNjcm9sbEFuaW1hdG9yRW5hYmxlZCgpIHx8
IGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UHJlY2lzZVBpeGVsKQorICAgICAgICByZXR1cm4gU2Ny
b2xsQW5pbWF0b3I6OnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRp
cGxpZXIpOworCisgICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5zY3JvbGwob3JpZW50YXRpb24sIGdy
YW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvclNt
b290aDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQsIHRvRmxvYXRTaXplKG1fc2Nyb2xsYWJsZUFyZWEu
c2Nyb2xsT3JpZ2luKCkpKTsKKyAgICBtX2FuaW1hdGlvbi0+c2V0Q3VycmVudFBvc2l0aW9uKHBv
c2l0aW9uKTsKKworICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHBvc2l0aW9uIC0gbV9jdXJyZW50UG9z
aXRpb247CisgICAgbV9jdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBub3RpZnlQb3Np
dGlvbkNoYW5nZWQoZGVsdGEpOworfQorCisjaWYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RV9USU1FUikKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JTbW9vdGg6OmNhbmNlbEFuaW1hdGlvbnMoKQor
eworICAgIG1fYW5pbWF0aW9uLT5zdG9wKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JTbW9v
dGg6OnNlcnZpY2VTY3JvbGxBbmltYXRpb25zKCkKK3sKKyAgICBtX2FuaW1hdGlvbi0+c2Vydmlj
ZUFuaW1hdGlvbigpOworfQorI2VuZGlmCisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JTbW9vdGg6Ondp
bGxFbmRMaXZlUmVzaXplKCkKK3sKKyAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0
aHMoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvclNtb290aDo6ZGlkQWRkVmVydGljYWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikKK3sKKyAgICBtX2FuaW1hdGlvbi0+dXBkYXRlVmlzaWJsZUxlbmd0
aHMoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvclNtb290aDo6ZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcihTY3JvbGxiYXIqKQoreworICAgIG1fYW5pbWF0aW9uLT51cGRhdGVWaXNpYmxlTGVu
Z3RocygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
U01PT1RIX1NDUk9MTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbEFuaW1hdG9yU21vb3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvclNtb290aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTE4NmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
clNtb290aC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbEFuaW1hdG9yU21vb3RoX2gK
KyNkZWZpbmUgU2Nyb2xsQW5pbWF0b3JTbW9vdGhfaAorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
b3IuaCIKKworI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFNjcm9sbEFuaW1hdGlvbjsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JTbW9v
dGggZmluYWwgOiBwdWJsaWMgU2Nyb2xsQW5pbWF0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0
IFNjcm9sbEFuaW1hdG9yU21vb3RoKFNjcm9sbGFibGVBcmVhJik7CisgICAgdmlydHVhbCB+U2Ny
b2xsQW5pbWF0b3JTbW9vdGgoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFy
T3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKworI2lmICFVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfVElNRVIpCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1hdGlvbnMo
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKSBv
dmVycmlkZTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHdpbGxFbmRMaXZlUmVzaXplKCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKFNjcm9sbGJhciopIG92ZXJyaWRlOworCitwcml2YXRlOgorCisgICAgc3RkOjp1bmlxdWVf
cHRyPFNjcm9sbEFuaW1hdGlvbj4gbV9hbmltYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKKworI2VuZGlmIC8v
IFNjcm9sbEFuaW1hdG9yU21vb3RoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxBbmltYXRvck1hYy5tbQppbmRleCBkOTg4MTdmLi5mMjc0NzE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCkBAIC03NjMs
NyArNzYzLDcgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRmxvYXRTaXplIGRlbHRhID0gYWRqdXN0ZWRQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsK
LSAgICBzZXRDdXJyZW50UG9zaXRpb25JbnRlcm5hbChhZGp1c3RlZFBvc2l0aW9uKTsKKyAgICBt
X2N1cnJlbnRQb3NpdGlvbiA9IGFkanVzdGVkUG9zaXRpb247CiAgICAgbm90aWZ5UG9zaXRpb25D
aGFuZ2VkKGRlbHRhKTsKICAgICB1cGRhdGVBY3RpdmVTY3JvbGxTbmFwSW5kZXhGb3JPZmZzZXQo
KTsKIH0KQEAgLTEzMDQsNyArMTMwNCw3IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVk
aWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEZsb2F0U2l6ZSBhZGp1c3RlZERlbHRhID0gbmV3UG9zaXRpb24gLSBjdXJyZW50UG9zaXRp
b247Ci0gICAgc2V0Q3VycmVudFBvc2l0aW9uSW50ZXJuYWwobmV3UG9zaXRpb24pOworICAgIG1f
Y3VycmVudFBvc2l0aW9uID0gbmV3UG9zaXRpb247CiAgICAgbm90aWZ5UG9zaXRpb25DaGFuZ2Vk
KGFkanVzdGVkRGVsdGEpOwogICAgIHVwZGF0ZUFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvck9mZnNl
dCgpOwogfQo=
</data>
<flag name="review"
          id="294746"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>