<?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>187385</bug_id>
          
          <creation_ts>2018-07-06 04:33:41 -0700</creation_ts>
          <short_desc>[Nicosia] Add a platform layer concept</short_desc>
          <delta_ts>2019-08-23 04:02:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>187514</dependson>
    
    <dependson>187693</dependson>
    
    <dependson>187749</dependson>
    
    <dependson>187751</dependson>
    
    <dependson>187899</dependson>
    
    <dependson>187901</dependson>
    
    <dependson>187941</dependson>
    
    <dependson>187946</dependson>
    
    <dependson>188158</dependson>
    
    <dependson>188340</dependson>
    
    <dependson>188341</dependson>
    
    <dependson>188344</dependson>
    
    <dependson>188348</dependson>
    
    <dependson>188405</dependson>
    
    <dependson>188548</dependson>
    
    <dependson>188550</dependson>
    
    <dependson>188693</dependson>
    
    <dependson>188847</dependson>
    
    <dependson>188849</dependson>
    
    <dependson>188850</dependson>
    
    <dependson>188881</dependson>
          <blocked>198475</blocked>
    
    <blocked>184143</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>aperez</cc>
    
    <cc>basuke</cc>
    
    <cc>cadubentzen</cc>
    
    <cc>jonasvdb_5</cc>
    
    <cc>magomez</cc>
    
    <cc>yoshiaki.jitsukawa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1439763</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-07-06 04:33:41 -0700</bug_when>
    <thetext>Platform layer objects should be used to back GraphicsLayer objects for the ports leveraging the Nicosia facilities. These facilities are currently used exclusively through CoordinatedGraphics, which means CoordinatedGraphicsLayer implementation would start using a platform layer for all its state management before applying it to the rendering pipeline, compared to the current way where all this state is being managed through CoordinatedGraphicsState objects that are then combined-and-applied in CoordinatedGraphicsScene and applied to the rendering pipeline.

When the state mutations are made thread-safe, this can be further extended to integrate with features like asynchronous scrolling or threaded painting.

Regarding applications to the rendering pipeline, while TextureMapper-specific implementations will have to exist, the platform layering work in principle shouldn&apos;t be tied to TextureMapper. It&apos;s just nothing else exists at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439764</commentid>
    <comment_count>1</comment_count>
      <attachid>344418</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-07-06 04:35:57 -0700</bug_when>
    <thetext>Created attachment 344418
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1447576</commentid>
    <comment_count>2</comment_count>
      <attachid>346471</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-08-03 03:37:11 -0700</bug_when>
    <thetext>Created attachment 346471
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1449238</commentid>
    <comment_count>3</comment_count>
      <attachid>346895</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-08-09 23:23:52 -0700</bug_when>
    <thetext>Created attachment 346895
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1450736</commentid>
    <comment_count>4</comment_count>
      <attachid>347274</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-08-16 10:50:55 -0700</bug_when>
    <thetext>Created attachment 347274
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1452656</commentid>
    <comment_count>5</comment_count>
      <attachid>347805</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-08-22 09:19:49 -0700</bug_when>
    <thetext>Created attachment 347805
WIP

Now with some more code removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1465519</commentid>
    <comment_count>6</comment_count>
      <attachid>351378</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-10-02 05:54:02 -0700</bug_when>
    <thetext>Created attachment 351378
WIP

Includes the remaining set of changes that enable asynchronous scrolling (modulo bugs). Doesn&apos;t yet add kinetic scrolling capabilities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550338</commentid>
    <comment_count>7</comment_count>
    <who name="Jonas">jonasvdb_5</who>
    <bug_when>2019-07-05 06:14:30 -0700</bug_when>
    <thetext>Is there any update about this issue ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564428</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2019-08-23 04:02:09 -0700</bug_when>
    <thetext>The platform layer structures are now in use, so this bug can be closed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344418</attachid>
            <date>2018-07-06 04:35:57 -0700</date>
            <delta_ts>2018-08-03 03:37:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>platform-layers.patch</filename>
            <type>text/plain</type>
            <size>119209</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCmluZGV4IGIzM2FhMGNkYWZlLi4wZjJkZDRjZmE5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCkBAIC0yNjMs
NyArMjYzLDYgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZVRyZWU6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jaWZuZGVmIE5ERUJVRwogdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkKIHsKICAgICBpZiAoIXRyZWUpCkBA
IC0yODcsNiArMjg2LDQgQEAgdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKICAgICBzaG93U2Nyb2xsaW5nU3RhdGVUcmVl
KCZub2RlLT5zY3JvbGxpbmdTdGF0ZVRyZWUoKSk7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLy8g
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaApp
bmRleCAzYjI1NjE1MWFkNy4uNmFlNmYzM2RiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCkBAIC05OSw5ICs5OSw3IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2lmbmRlZiBOREVCVUcKIHZvaWQg
c2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUq
KTsKIHZvaWQgc2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCmluZGV4IDgzMDM1MzY0OGNlLi5hYzNkOTk4NTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcApAQCAtODcsNiArODcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKCkKIAogICAgIGF1dG8gdHJlZVN0
YXRlID0gc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmNvbW1pdChMYXllclJlcHJlc2VudGF0aW9uOjpQ
bGF0Zm9ybUxheWVyUmVwcmVzZW50YXRpb24pOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdHJlZVN0YXRlID0gV1RGTW92ZSh0cmVlU3RhdGUp
XSgpIG11dGFibGUgeworICAgICAgICAvLyBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CiAgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRl
KFdURk1vdmUodHJlZVN0YXRlKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1N0YXRlTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCBhZWI2MjIzYzFmYy4uNmZjOTAyMjM2NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nU3RhdGVO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtMjYsMjIgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIExheWVyUmVwcmVzZW50YXRpb246OnJldGFpblBsYXRmb3JtTGF5
ZXIoUGxhdGZvcm1MYXllciopCit2b2lkIExheWVyUmVwcmVzZW50YXRpb246OnJldGFpblBsYXRm
b3JtTGF5ZXIoUGxhdGZvcm1MYXllciogbGF5ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpZiAobGF5ZXIpCisgICAgICAgIGxheWVyLT5yZWYoKTsKIH0KIAotdm9pZCBMYXllclJl
cHJlc2VudGF0aW9uOjpyZWxlYXNlUGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKikKK3ZvaWQg
TGF5ZXJSZXByZXNlbnRhdGlvbjo6cmVsZWFzZVBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciog
bGF5ZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobGF5ZXIpCisgICAgICAg
IGxheWVyLT5kZXJlZigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9s
bGluZ1RyZWVGaXhlZE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcAppbmRleCAyMmNkMWZm
NzcxOS4uODJiMWJjYjFhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMzAsNyArMzAsOSBAQAogCiAjaWYgRU5BQkxFKEFTWU5D
X1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCisjaW5jbHVkZSAiU2Ny
b2xsaW5nU3RhdGVGaXhlZE5vZGUuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlLmgiCisjaW5j
bHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC01MCwxMiArNTIsNDIgQEAgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6flNjcm9sbGluZ1RyZWVG
aXhlZE5vZGUoKQogICAgIHNjcm9sbGluZ1RyZWUoKS5maXhlZE9yU3RpY2t5Tm9kZVJlbW92ZWQo
KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjb21taXRTdGF0ZUJlZm9yZUNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpCit2b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2Rl
JiBzdGF0ZU5vZGUpCiB7CisgICAgYXV0byYgZml4ZWROb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5n
U3RhdGVGaXhlZE5vZGU+KHN0YXRlTm9kZSk7CisKKyAgICBpZiAoZml4ZWROb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkgeworICAgICAgICBO
aWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IGZpeGVkTm9kZS5sYXllcigpOworICAgICAg
ICBtX3Njcm9sbExheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5
ZXIpOworICAgIH0KKworICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlRml4ZWROb2RlOjpWaWV3cG9ydENvbnN0cmFpbnRzKSkKKyAgICAgICAgbV9jb25z
dHJhaW50cyA9IGZpeGVkTm9kZS52aWV3cG9ydENvbnN0cmFpbnRzKCk7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nVHJlZUZpeGVkTm9kZTo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25z
dCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYp
Cit2b2lkIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JD
aGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5nZWROb2RlLCBjb25zdCBGbG9hdFJl
Y3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNpemUmIGN1bXVsYXRpdmVEZWx0YSkK
IHsKKyAgICBGbG9hdFBvaW50IGxheWVyUG9zaXRpb24gPSBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25Gb3JWaWV3cG9ydFJlY3QoZml4ZWRQb3NpdGlvblJlY3QpOworICAgIGxheWVyUG9zaXRp
b24gLT0gY3VtdWxhdGl2ZURlbHRhOworCisgICAgQVNTRVJUKG1fc2Nyb2xsTGF5ZXIpOworICAg
IG1fc2Nyb2xsTGF5ZXItPmFjY2Vzc1N0YXRlKAorICAgICAgICBbdGhpcywgJmxheWVyUG9zaXRp
b25dKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvJiBhbmNob3JQb2ludCA9IHN0YXRlLmFuY2hvclBvaW50Owor
ICAgICAgICAgICAgYXV0byYgc2l6ZSA9IHN0YXRlLnNpemU7CisKKyAgICAgICAgICAgIEZsb2F0
UG9pbnQgcG9zaXRpb24gPSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5hbGlnbm1lbnRP
ZmZzZXQoKQorICAgICAgICAgICAgICAgICsgRmxvYXRQb2ludChhbmNob3JQb2ludC54KCkgKiBz
aXplLndpZHRoKCksIGFuY2hvclBvaW50LnkoKSAqIHNpemUuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgc3RhdGUucG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIHN0YXRlLmRlbHRhLnBv
c2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgaWYgKG1fY2hpbGRyZW4p
IHsKKyAgICAgICAgRmxvYXRTaXplIG5ld0RlbHRhID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29uc3Ry
YWludHMubGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dCgpICsgY3VtdWxhdGl2ZURlbHRhOworICAg
ICAgICBmb3IgKGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCisgICAgICAgICAgICBjaGlsZC0+
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlv
blJlY3QsIG5ld0RlbHRhKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhp
Y3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmgKaW5kZXggZDBh
YTg3OTI0MjIuLjQ3ODRkNTk3N2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9s
bGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMzEsNiArMzEsOSBAQAogCiAjaW5jbHVkZSAiU2Nyb2xs
aW5nVHJlZU5vZGUuaCIKIAorI2luY2x1ZGUgIlNjcm9sbGluZ0NvbnN0cmFpbnRzLmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9s
bGluZ1RyZWVGaXhlZE5vZGUgZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgewpAQCAt
NDMsNiArNDYsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRn
cmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHAKaW5kZXggZWNjNmYzMTczMDYuLjcxNGQyMmI3ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtMzAsNiArMzAsOSBAQAog
CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQogCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8U2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZT4gU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3Jh
cGhpY3M6OmNyZWF0ZShTY3JvbGxpbmdUcmVlJiBzY3JvbGxpbmdUcmVlLCBTY3JvbGxpbmdOb2Rl
VHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkKQEAgLTQ0LDI1ICs0NywxNDAg
QEAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ04KIAogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6On5TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
Q29vcmRpbmF0ZWRHcmFwaGljcygpID0gZGVmYXVsdDsKIAotdm9pZCBTY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKK3sKKyAgICAvL2ZwcmludGYoc3RkZXJyLCAi
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1p
dFN0YXRlQmVmb3JlQ2hpbGRyZW4oKSBjaGFuZ2VkIHByb3BlcnRpZXMgJWRcbiIsCisgICAgLy8g
ICAgc3RhdGVOb2RlLmNoYW5nZWRQcm9wZXJ0aWVzKCkpOworICAgIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGU6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oc3RhdGVOb2RlKTsKKyAg
ICBjb25zdCBhdXRvJiBzY3JvbGxpbmdTdGF0ZU5vZGUgPSBkb3duY2FzdDxTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZT4oc3RhdGVOb2RlKTsKKworICAgIGlmIChzY3JvbGxpbmdTdGF0
ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIp
KSB7CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLmxheWVyKCk7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lh
OjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJc
dGNoYW5nZWQgcHJvcGVydHk6IFNjcm9sbExheWVyICVwIGlkICVsdVxuIiwgbV9zY3JvbGxMYXll
ci5nZXQoKSwgbV9zY3JvbGxMYXllciA/IG1fc2Nyb2xsTGF5ZXItPmlkKCkgOiAwKTsKKyAgICB9
CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpTY3JvbGxlZENvbnRlbnRzTGF5ZXIpKSB7CisgICAgICAgIE5p
Y29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLnNjcm9sbGVk
Q29udGVudHNMYXllcigpOworICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllciA9IGRvd25j
YXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJpbnRm
KHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogU2Nyb2xsZWRDb250ZW50c0xheWVyICVwIGlk
ICVsdVxuIiwgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIuZ2V0KCksIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyID8gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmlkKCkgOiAwKTsKKyAgICB9CisgICAg
aWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU6OkNvdW50ZXJTY3JvbGxpbmdMYXllcikpIHsKKyAgICAgICAgTmlj
b3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuY291bnRlclNj
cm9sbGluZ0xheWVyKCk7CisgICAgICAgIG1fY291bnRlclNjcm9sbGluZ0xheWVyID0gZG93bmNh
c3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2ZwcmludGYo
c3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBDb3VudGVyU2Nyb2xsaW5nTGF5ZXIgJXBcbiIs
IG1fY291bnRlclNjcm9sbGluZ0xheWVyLmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNjcm9sbGlu
Z1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGlu
Z05vZGU6Okluc2V0Q2xpcExheWVyKSkgeworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVy
KiBsYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5pbnNldENsaXBMYXllcigpOworICAgICAgICBt
X2luc2V0Q2xpcExheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5
ZXIpOworICAgICAgICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBJbnNl
dENsaXBMYXllciAlcFxuIiwgbV9pbnNldENsaXBMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlOjpDb250ZW50U2hhZG93TGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6
OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmNvbnRlbnRTaGFkb3dM
YXllcigpOworICAgICAgICBtX2NvbnRlbnRTaGFkb3dMYXllciA9IGRvd25jYXN0PE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlx0
Y2hhbmdlZCBwcm9wZXJ0eTogQ29udGVudFNoYWRvd0xheWVyICVwXG4iLCBtX2NvbnRlbnRTaGFk
b3dMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hh
bmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpIZWFkZXJMYXll
cikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdT
dGF0ZU5vZGUuaGVhZGVyTGF5ZXIoKTsKKyAgICAgICAgbV9oZWFkZXJMYXllciA9IGRvd25jYXN0
PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJpbnRmKHN0
ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogSGVhZGVyTGF5ZXIgJXBcbiIsIG1faGVhZGVyTGF5
ZXIuZ2V0KCkpOworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQ
cm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rm9vdGVyTGF5ZXIpKSB7
CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVO
b2RlLmZvb3RlckxheWVyKCk7CisgICAgICAgIG1fZm9vdGVyTGF5ZXIgPSBkb3duY2FzdDxOaWNv
c2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIs
ICJcdGNoYW5nZWQgcHJvcGVydHk6IEZvb3RlckxheWVyICVwXG4iLCBtX2Zvb3RlckxheWVyLmdl
dCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNv
b3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFN0YXRlQWZ0ZXJDaGlsZHJlbihjb25zdCBTY3JvbGxp
bmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKKyAgICAvL2ZwcmludGYoc3RkZXJyLCAiU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFN0YXRl
QWZ0ZXJDaGlsZHJlbigpIGNoYW5nZWQgcHJvcGVydGllcyAlZFxuIiwKKyAgICAvLyAgICBzdGF0
ZU5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICghY2FuSGF2ZVNjcm9s
bGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsQnkoeyB3aGVlbEV2ZW50LmRl
bHRhWCgpLCAtd2hlZWxFdmVudC5kZWx0YVkoKSB9KTsKKworICAgIC8vIFRPRE86CisgICAgLy8g
c2Nyb2xsaW5nVHJlZSgpLnNldE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBzY3JvbGxp
bmdOb2RlSUQoKSk7CisgICAgLy8gc2Nyb2xsaW5nVHJlZSgpLmhhbmRsZVdoZWVsRXZlbnRQaGFz
ZSh3aGVlbEV2ZW50LnBoYXNlKCkpOwogfQogCiBGbG9hdFBvaW50IFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHsgfTsKKyAgICBBU1NFUlQobV9zY3JvbGxMYXllcik7CisKKyAgICBG
bG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uOworICAgIG1fc2Nyb2xsTGF5ZXItPmFjY2Vzc1N0YXRl
KAorICAgICAgICBbJnNjcm9sbFBvc2l0aW9uXShjb25zdCBOaWNvc2lhOjpDb21wb3NpdGlvbkxh
eWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc2Nyb2xsUG9z
aXRpb24gPSAtc3RhdGUucG9zaXRpb247CisgICAgICAgIH0pOworICAgIHJldHVybiBzY3JvbGxQ
b3NpdGlvbjsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRp
bmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpCit2b2lk
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKKyAgICBTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbik7CiB9
CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhp
Y3M6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3Qg
RmxvYXRQb2ludCYpCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGlu
YXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFp
bnRzKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogeworICAgIHN0ZDo6b3B0aW9u
YWw8RmxvYXRQb2ludD4gbGF5b3V0Vmlld3BvcnRPcmlnaW47CisgICAgaWYgKHNjcm9sbGluZ1Ry
ZWUoKS52aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSkgeworICAgICAgICBGbG9hdFBvaW50IHZpc2li
bGVDb250ZW50T3JpZ2luID0gc2Nyb2xsUG9zaXRpb247CisgICAgICAgIEZsb2F0UmVjdCBuZXdM
YXlvdXRWaWV3cG9ydCA9IGxheW91dFZpZXdwb3J0Rm9yU2Nyb2xsUG9zaXRpb24odmlzaWJsZUNv
bnRlbnRPcmlnaW4sIGZyYW1lU2NhbGVGYWN0b3IoKSk7CisgICAgICAgIHNldExheW91dFZpZXdw
b3J0KG5ld0xheW91dFZpZXdwb3J0KTsKKyAgICAgICAgbGF5b3V0Vmlld3BvcnRPcmlnaW4gPSBu
ZXdMYXlvdXRWaWV3cG9ydC5sb2NhdGlvbigpOworICAgIH0KKworICAgIHNldFNjcm9sbExheWVy
UG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGxheW91dFZpZXdwb3J0KCkpOworICAgIHNjcm9sbGlu
Z1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbChzY3JvbGxpbmdOb2RlSUQoKSwgc2Ny
b2xsUG9zaXRpb24sIGxheW91dFZpZXdwb3J0T3JpZ2luKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsTGF5ZXJQ
b3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldFNjcm9sbExh
eWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgbGF5b3V0Vmlld3BvcnQpCiB7CisgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxMYXll
clBvc2l0aW9uKCkgcG9zaXRpb24gKCUuMmYsJS4yZikgbGF5b3V0Vmlld3BvcnQgKCUuMmYsJS4y
Zil4KCUuMmYsJS4yZilcbiIsCisgICAgLy8gICAgc2Nyb2xsUG9zaXRpb24ueCgpLCBzY3JvbGxQ
b3NpdGlvbi55KCksCisgICAgLy8gICAgbGF5b3V0Vmlld3BvcnQueCgpLCBsYXlvdXRWaWV3cG9y
dC55KCksIGxheW91dFZpZXdwb3J0LndpZHRoKCksIGxheW91dFZpZXdwb3J0LmhlaWdodCgpKTsK
KworICAgIGF1dG8gdXBkYXRlU2NvcGUgPSBtX3Njcm9sbExheWVyLT5jcmVhdGVVcGRhdGVTY29w
ZSgpOworCisgICAgQVNTRVJUKG1fc2Nyb2xsTGF5ZXIpOworICAgIG1fc2Nyb2xsTGF5ZXItPmFj
Y2Vzc1N0YXRlKAorICAgICAgICBbJnNjcm9sbFBvc2l0aW9uXShOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGUu
cG9zaXRpb24gPSAtc2Nyb2xsUG9zaXRpb247CisgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3Np
dGlvbkNoYW5nZWQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgIEZsb2F0UmVjdCB2aXNpYmxl
Q29udGVudFJlY3Qoc2Nyb2xsUG9zaXRpb24sIHNjcm9sbGFibGVBcmVhU2l6ZSgpKTsKKyAgICBG
bG9hdFJlY3QgZml4ZWRQb3NpdGlvblJlY3Q7CisgICAgU2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVs
ZW1lbnRzIGJlaGF2aW9yRm9yRml4ZWQgPSBTdGlja1RvVmlld3BvcnRCb3VuZHM7CisKKyAgICBp
ZiAoc2Nyb2xsaW5nVHJlZSgpLnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKQorICAgICAgICBmaXhl
ZFBvc2l0aW9uUmVjdCA9IGxheW91dFZpZXdwb3J0OworICAgIGVsc2UgeworICAgICAgICBiZWhh
dmlvckZvckZpeGVkID0gc2Nyb2xsQmVoYXZpb3JGb3JGaXhlZEVsZW1lbnRzKCk7CisKKyAgICAg
ICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbkZvckZpeGVkQ2hpbGRyZW4gPSBGcmFtZVZpZXc6
OnNjcm9sbFBvc2l0aW9uRm9yRml4ZWRQb3NpdGlvbihlbmNsb3NpbmdMYXlvdXRSZWN0KHZpc2li
bGVDb250ZW50UmVjdCksIExheW91dFNpemUodG90YWxDb250ZW50c1NpemUoKSksCisgICAgICAg
ICAgICBMYXlvdXRQb2ludChzY3JvbGxQb3NpdGlvbiksIHNjcm9sbE9yaWdpbigpLCBmcmFtZVNj
YWxlRmFjdG9yKCksIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSwgYmVoYXZp
b3JGb3JGaXhlZCwgaGVhZGVySGVpZ2h0KCksIGZvb3RlckhlaWdodCgpKTsKKworICAgICAgICBm
aXhlZFBvc2l0aW9uUmVjdCA9IHsgc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENoaWxkcmVuLCB2aXNp
YmxlQ29udGVudFJlY3Quc2l6ZSgpIH07CisgICAgfQorCisgICAgZmxvYXQgdG9wQ29udGVudElu
c2V0ID0gdGhpcy0+dG9wQ29udGVudEluc2V0KCk7CisgICAgaWYgKG1faW5zZXRDbGlwTGF5ZXIg
JiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgdG9wQ29udGVudEluc2V0KSB7CisgICAgICAg
IC8vIFRPRE86IC4uLgorICAgIH0KKworICAgIGlmIChtX2NoaWxkcmVuKSB7CisgICAgICAgIGZv
ciAoYXV0byYgY2hpbGQgOiAqbV9jaGlsZHJlbikKKyAgICAgICAgICAgIGNoaWxkLT51cGRhdGVM
YXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKCp0aGlzLCBmaXhlZFBvc2l0aW9uUmVjdCwgRmxvYXRT
aXplKCkpOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2Rl
Q29vcmRpbmF0ZWRHcmFwaGljczo6dXBkYXRlTGF5ZXJzQWZ0ZXJWaWV3cG9ydENoYW5nZShjb25z
dCBGbG9hdFJlY3QmLCBkb3VibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVDb29yZGluYXRlZEdyYXBoaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGlu
YXRlZEdyYXBoaWNzLmgKaW5kZXggNjUwODZjYzkyYmQuLmMyM2VmMDkxOWYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oCkBAIC0zMSw2ICszMSw4
IEBACiAKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MgZmluYWwgOiBw
dWJsaWMgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSB7CkBAIC00MSw2ICs0Myw5IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNv
b3JkaW5hdGVkR3JhcGhpY3MoU2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3Jv
bGxpbmdOb2RlSUQpOwogCisgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0
IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRl
ckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworCiAgICAgdm9p
ZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwog
CiAgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDks
NiArNTQsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB1
cGRhdGVMYXllcnNBZnRlclZpZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkg
b3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3Jv
bGxMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxl
ZENvbnRlbnRzTGF5ZXI7CisgICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1f
Y291bnRlclNjcm9sbGluZ0xheWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxh
eWVyPiBtX2luc2V0Q2xpcExheWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxh
eWVyPiBtX2NvbnRlbnRTaGFkb3dMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRp
b25MYXllcj4gbV9oZWFkZXJMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25M
YXllcj4gbV9mb290ZXJMYXllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3Mv
U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAKaW5kZXgg
MDMyMmU2NzZhNjguLmY3ZGYxZGNlZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNz
L1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmNwcApAQCAtMzAsNyArMzAsMTEgQEAKIAogI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAorI2lu
Y2x1ZGUgIlNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1Ry
ZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIk5p
Y29zaWFQbGF0Zm9ybUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTIg
KzU0LDU3IEBAIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5v
ZGUoKQogICAgIHNjcm9sbGluZ1RyZWUoKS5maXhlZE9yU3RpY2t5Tm9kZVJlbW92ZWQoKTsKIH0K
IAotdm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJl
bihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9k
ZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0
YXRlTm9kZSkKIHsKKyAgICBhdXRvJiBzdGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3Rh
dGVTdGlja3lOb2RlPihzdGF0ZU5vZGUpOworCisgICAgaWYgKHN0aWNreU5vZGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlTm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgIE5p
Y29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc3RpY2t5Tm9kZS5sYXllcigpOworICAgICAg
ICBtX3Njcm9sbExheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5
ZXIpOworICAgIH0KKworICAgIGlmIChzdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9s
bGluZ1N0YXRlU3RpY2t5Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29u
c3RyYWludHMgPSBzdGlja3lOb2RlLnZpZXdwb3J0Q29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBT
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShj
b25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6
ZSYpCit2b2lkIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2Vz
dG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxv
YXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVs
dGEpCiB7CisgICAgYm9vbCBhZGp1c3RTdGlja3lMYXllciA9IGZhbHNlOworICAgIEZsb2F0UmVj
dCBjb25zdHJhaW5pbmdSZWN0OworCisgICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU+KCpwYXJlbnQoKSkpIHsKKyAgICAgICAgY29uc3RyYWluaW5nUmVjdCA9IEZs
b2F0UmVjdChkb3duY2FzdDxTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqcGFy
ZW50KCkpLnNjcm9sbFBvc2l0aW9uKCksIG1fY29uc3RyYWludHMuY29uc3RyYWluaW5nUmVjdEF0
TGFzdExheW91dCgpLnNpemUoKSk7CisgICAgICAgIGFkanVzdFN0aWNreUxheWVyID0gdHJ1ZTsK
KyAgICB9IGVsc2UgaWYgKGlzPFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KCpwYXJl
bnQoKSkpIHsKKyAgICAgICAgY29uc3RyYWluaW5nUmVjdCA9IGZpeGVkUG9zaXRpb25SZWN0Owor
ICAgICAgICBhZGp1c3RTdGlja3lMYXllciA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRTaXpl
IGRlbHRhRm9yRGVzY2VuZGFudHMgPSBjdW11bGF0aXZlRGVsdGE7CisKKyAgICBpZiAoYWRqdXN0
U3RpY2t5TGF5ZXIpIHsKKyAgICAgICAgRmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25z
dHJhaW50cy5sYXllclBvc2l0aW9uRm9yQ29uc3RyYWluaW5nUmVjdChjb25zdHJhaW5pbmdSZWN0
KTsKKworICAgICAgICBBU1NFUlQobV9zY3JvbGxMYXllcik7CisgICAgICAgIG1fc2Nyb2xsTGF5
ZXItPmFjY2Vzc1N0YXRlKAorICAgICAgICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNv
c2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBhbmNob3JQb2ludCA9IHN0YXRlLmFuY2hvclBvaW50Owor
ICAgICAgICAgICAgICAgIGF1dG8mIHNpemUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICAg
ICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFs
aWdubWVudE9mZnNldCgpCisgICAgICAgICAgICAgICAgICAgICsgRmxvYXRQb2ludChhbmNob3JQ
b2ludC54KCkgKiBzaXplLndpZHRoKCksIGFuY2hvclBvaW50LnkoKSAqIHNpemUuaGVpZ2h0KCkp
OworICAgICAgICAgICAgICAgIHN0YXRlLnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAg
ICAgICAgc3RhdGUuZGVsdGEucG9zaXRpb25DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgIGRlbHRhRm9yRGVzY2VuZGFudHMgPSBsYXllclBvc2l0aW9uIC0gbV9jb25z
dHJhaW50cy5sYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KCkgKyBjdW11bGF0aXZlRGVsdGE7Cisg
ICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4pIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6
ICptX2NoaWxkcmVuKQorICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0
b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBkZWx0YUZvckRlc2NlbmRh
bnRzKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZVN0aWNreU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaAppbmRleCBmMzEzM2E3MDhjNy4u
MjQxN2U1NjFjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nv
b3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVT
dGlja3lOb2RlLmgKQEAgLTMxLDYgKzMxLDkgQEAKIAogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVO
b2RlLmgiCiAKKyNpbmNsdWRlICJTY3JvbGxpbmdDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdUcmVl
U3RpY2t5Tm9kZSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00Myw2ICs0
Niw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29u
c3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB1cGRhdGVMYXllcnNB
ZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8Tmljb3NpYTo6
Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBTdGlja3lQb3NpdGlvblZpZXdw
b3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDZl
YWI2YTBhMTg5Li42MGRmN2RlZDYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0
dXJlTWFwcGVyLmNtYWtlCkBAIC00NiwxMCArNDYsMTQgQEAgaWYgKFVTRV9DT09SRElOQVRFRF9H
UkFQSElDUykKICAgICApCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYUJ1ZmZlci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhR0MzRExheWVyLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0NvbnRleHQuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZUJhc2lj
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQYWludGluZ0Vu
Z2luZVRocmVhZGVkLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFQbGF0Zm9ybUxheWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05p
Y29zaWFTY2VuZUludGVncmF0aW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL05pY29zaWFUZXh0dXJlTWFwcGVyUHJveHlMYXllci5jcHAKIAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGlu
Z0NvbnRleHRDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGFlMDVhZTk1NDFjLi4wYmNiYmQ4Y2E0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCkBAIC04NCw2ICs4NCwxMiBAQCB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhp
Y3NTdXJmYWNlM0Q7CiBjb25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEID0gMDsKIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRm
b3JtM0RPYmplY3QgPSAwOwogCisjaWYgUExBVEZPUk0oV1BFKQorbmFtZXNwYWNlIE5pY29zaWEg
eworY2xhc3MgR0MzRExheWVyOworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEV4dGVuc2lvbnMzRDsKICNpZiAhUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMp
CkBAIC0xNDc2LDcgKzE0ODIsMTAgQEAgcHJpdmF0ZToKICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5
IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhl
dGljRXJyb3JzOwogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorI2lmIFBMQVRGT1JNKFdQRSkK
KyAgICBmcmllbmQgY2xhc3MgTmljb3NpYTo6R0MzRExheWVyOworICAgIFJlZlB0cjxOaWNvc2lh
OjpHQzNETGF5ZXI+IG1fY29udGVudExheWVyOworI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQog
ICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXll
cjsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUxheWVyLmgKaW5kZXggMTBmY2YxNDg1ZWMuLjBlOThhZGE0ZDJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCkBAIC0zMCw2ICszMCwx
MSBAQCBPQkpDX0NMQVNTIENBTGF5ZXI7CiB0eXBlZGVmIENBTGF5ZXIgUGxhdGZvcm1MYXllcjsK
ICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENBKQogdHlwZWRlZiBzdHJ1Y3QgX0NBQ0ZMYXll
ciBQbGF0Zm9ybUxheWVyOworI2VsaWYgUExBVEZPUk0oV1BFKQorbmFtZXNwYWNlIE5pY29zaWEg
eworY2xhc3MgUGxhdGZvcm1MYXllcjsKK30KK3R5cGVkZWYgTmljb3NpYTo6UGxhdGZvcm1MYXll
ciBQbGF0Zm9ybUxheWVyOwogI2VsaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVE
KQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eVByb3ZpZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAppbmRleCA4OWE0MWYxZjU3OC4uZWNl
NGNiMWRhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCkBAIC05MCwxMCArOTAsMTUgQEAgSW1h
Z2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2QKICAgICAsIG1fdGV4dHVyZSgwKQogI2VuZGlmCiB7CisgICAg
aWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewogI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKQorI2lmIFBMQVRGT1JNKFdQRSkKKyAgICAgICAgbV9jb250ZW50TGF5ZXIgPSBh
ZG9wdFJlZigqbmV3IE5pY29zaWE6OlRleHR1cmVNYXBwZXJQcm94eUxheWVyKCp0aGlzKSk7Cisj
ZWxzZQogICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKICNlbmRpZgorI2VuZGlmCisgICAgfQogfQogCiBJ
bWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQpAQCAtMTM5LDYgKzE0NCwzMSBAQCB2
b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCiAgICAgY2Fpcm9f
c2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUp
OwogfQogCisjaWYgUExBVEZPUk0oV1BFKQordm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsK
KyAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8mIHByb3h5
ID0gKm1fY29udGVudExheWVyLT5wcm94eSgpOworCisgICAgICAgIExvY2tIb2xkZXIgaG9sZGVy
KHByb3h5LmxvY2soKSk7CisgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKHN0ZDo6bWFrZV91
bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1
cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOworICAg
IH0KKworICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUg
YnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2Fz
ZXMKKyAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRl
cmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Cisg
ICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAg
IGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKKyAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBp
ZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorI2Vsc2UKIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwpAQCAtMTY1LDYgKzE5NSw3IEBA
IHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKICAgICAgICAgcHJl
dmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KICNlbmRpZgorI2Vu
ZGlmCiAKIHZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKIHsKQEAg
LTY3MSw4ICs3MDIsMTMgQEAgdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJlTWFw
cGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEYKIFBsYXRmb3JtTGF5ZXIq
IEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorI2lmIFBMQVRGT1JNKFdQRSkKKyAgICBpZiAobV9kYXRhLm1fcmVu
ZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAgICAgcmV0dXJu
IG1fZGF0YS5tX2NvbnRlbnRMYXllci5nZXQoKTsKKyNlbHNlCiAgICAgaWYgKG1fZGF0YS5tX3Rl
eHR1cmUpCiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2Rh
dGEpOworI2VuZGlmCiAjZW5kaWYKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFD
YWlyby5oCmluZGV4IDEyMDUyOGZkNGEwLi4xYTkxOTliZjY5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRh
dGFDYWlyby5oCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSAmJiBQTEFURk9STShXUEUpCisjaW5jbHVkZSAiTmljb3NpYVRleHR1cmVN
YXBwZXJQcm94eUxheWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBJbnRTaXplOwpAQCAtNDUsOCArNDksMTIgQEAgY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eTsKIAogY2xhc3MgSW1hZ2VCdWZmZXJEYXRhCiAjaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKKyNpZiBQTEFURk9STShXUEUpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6
VGV4dHVyZU1hcHBlclByb3h5TGF5ZXI6OkNsaWVudAorI2Vsc2UKICAgICA6IHB1YmxpYyBQbGF0
Zm9ybUxheWVyCiAjZW5kaWYKKyNlbmRpZgogewogcHVibGljOgogICAgIEltYWdlQnVmZmVyRGF0
YShjb25zdCBJbnRTaXplJiwgUmVuZGVyaW5nTW9kZSk7CkBAIC02MiwxNCArNzAsMjMgQEAgcHVi
bGljOgogICAgIHZvaWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKIAogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19USFJFQURFRCkKKyNpZiBQTEFURk9STShXUEUpCisgICAgdm9pZCBzd2Fw
QnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjZWxzZQogICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBjcmVhdGVD
b21wb3NpdG9yQnVmZmVyKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKICAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJl
OwogICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKKworI2lmIFBMQVRGT1JNKFdQ
RSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6VGV4dHVyZU1hcHBlclByb3h5TGF5ZXI+IG1fY29udGVu
dExheWVyOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKICNlbHNlCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
Y3BwCmluZGV4IGI2MTQ3MWJjYjNkLi5mYTAwNGJmZmNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcApAQCAtMjg0LDEzICsyODQs
MjEgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZShNZWRpYVBsYXllciogcGwKICAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlh
UGxheWVyOjpFbXB0eSkKICAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
Jk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnQpCiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQorI2lmIFBMQVRGT1JNKFdQRSkKKyAgICAsIG1fY29udGVudExheWVyKGFk
b3B0UmVmKCpuZXcgTmljb3NpYTo6VGV4dHVyZU1hcHBlclByb3h5TGF5ZXIoKnRoaXMpKSkKKyNl
bHNlCiAgICAgLCBtX3BsYXRmb3JtTGF5ZXJQcm94eShhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eSgpKSkKICNlbmRpZgorI2VuZGlmCiB7CiB9CiAKIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
KCkKIHsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFBMQVRGT1JNKFdQRSkKKyAgICBt
X2NvbnRlbnRMYXllci0+aW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKQogICAgIG1fcHJvdGVjdGlvbkNvbmRpdGlvbi5ub3RpZnlBbGwoKTsK
ICNlbmRpZgpAQCAtNzM2LDYgKzc0NCwyMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIH0KIAogI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKFdQRSkK
KyAgICByZXR1cm4gbV9jb250ZW50TGF5ZXIucHRyKCk7CisjZWxzZQorICAgIHJldHVybiBjb25z
dF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqPih0aGlzKTsKKyNlbmRpZgor
fQorCisjaWYgUExBVEZPUk0oV1BFKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKK30KKyNlbHNlCiBSZWZQdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6
cHJveHkoKSBjb25zdAogewogICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVm
KCk7CkBAIC03NDQsNiArNzY2LDcgQEAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnByb3h5KCkKIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiB7CiB9
CisjZW5kaWYKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoVGV4
dHVyZVRvQ29tcG9zaXRvcigpCiB7CkBAIC03NTEsMzIgKzc3NCw0MiBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCkKICAgICBp
ZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBMb2NrSG9sZGVyIGhvbGRlcihtX3BsYXRmb3JtTGF5ZXJQcm94eS0+bG9jaygpKTsKKyAgICBh
dXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgWyZdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkmIHByb3h5KQorICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRl
cihwcm94eS5sb2NrKCkpOwogCi0gICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXJQcm94eS0+aXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRl
b0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IHN0ZDo6bWFrZV91bmlxdWU8R3N0VmlkZW9GcmFt
ZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIHRleE1hcEZsYWdGcm9tT3JpZW50YXRpb24obV92aWRl
b1NvdXJjZU9yaWVudGF0aW9uKSwgIW1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayk7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEdzdFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCB0ZXhN
YXBGbGFnRnJvbU9yaWVudGF0aW9uKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiksICFtX3VzaW5n
RmFsbGJhY2tWaWRlb1NpbmspOwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHTHVpbnQg
dGV4dHVyZUlEID0gZnJhbWVIb2xkZXItPnRleHR1cmVJRCgpOwotICAgIGlmICh0ZXh0dXJlSUQp
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyPiBsYXllckJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXI+KHRleHR1cmVJRCwgZnJhbWVIb2xkZXItPnNpemUoKSwgZnJhbWVIb2xkZXIt
PmZsYWdzKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKLSAgICAgICAgbGF5ZXJCdWZmZXIt
PnNldFVubWFuYWdlZEJ1ZmZlckRhdGFIb2xkZXIoV1RGTW92ZShmcmFtZUhvbGRlcikpOwotICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eS0+cHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1
ZmZlcikpOwotICAgIH0gZWxzZQorICAgICAgICAgICAgR0x1aW50IHRleHR1cmVJRCA9IGZyYW1l
SG9sZGVyLT50ZXh0dXJlSUQoKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlSUQpIHsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXI+IGxheWVyQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlcj4odGV4dHVyZUlELCBmcmFtZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+
ZmxhZ3MoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworICAgICAgICAgICAgICAgIGxheWVy
QnVmZmVyLT5zZXRVbm1hbmFnZWRCdWZmZXJEYXRhSG9sZGVyKFdURk1vdmUoZnJhbWVIb2xkZXIp
KTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVm
ZmVyKSk7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
cj4gYnVmZmVyID0gcHJveHkuZ2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5zaXplKCks
IEdMX0RPTlRfQ0FSRSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRleHR1cmVHTDo6Y3Jl
YXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5yZXNldChmcmFtZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+
aGFzQWxwaGFDaGFubmVsKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFw
VGV4dHVyZTo6Tm9GbGFnKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gc3RkOjptYWtl
X3VuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJl
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZyYW1lSG9sZGVyLT51cGRh
dGVUZXh0dXJlKGJ1ZmZlci0+dGV4dHVyZUdMKCkpOworICAgICAgICAgICAgICAgIGJ1ZmZlci0+
c2V0RXh0cmFGbGFncyh0ZXhNYXBGbGFnRnJvbU9yaWVudGF0aW9uKG1fdmlkZW9Tb3VyY2VPcmll
bnRhdGlvbikgfCAoZnJhbWVIb2xkZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZCA6IDApKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1
ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisjaWYg
UExBVEZPUk0oV1BFKQorICAgIHByb3h5T3BlcmF0aW9uKCptX2NvbnRlbnRMYXllci0+cHJveHko
KSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7CiAj
ZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcj4gYnVmZmVyID0gbV9wbGF0Zm9ybUxheWVyUHJveHktPmdldEF2YWlsYWJs
ZUJ1ZmZlcihmcmFtZUhvbGRlci0+c2l6ZSgpLCBHTF9ET05UX0NBUkUpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoIWJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRl
eHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOwot
ICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQoZnJhbWVIb2xkZXItPnNpemUoKSwgZnJhbWVIb2xk
ZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IEJp
dG1hcFRleHR1cmU6Ok5vRmxhZyk7Ci0gICAgICAgICAgICBidWZmZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsK
LSAgICAgICAgfQotICAgICAgICBmcmFtZUhvbGRlci0+dXBkYXRlVGV4dHVyZShidWZmZXItPnRl
eHR1cmVHTCgpKTsKLSAgICAgICAgYnVmZmVyLT5zZXRFeHRyYUZsYWdzKHRleE1hcEZsYWdGcm9t
T3JpZW50YXRpb24obV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKSB8IChmcmFtZUhvbGRlci0+aGFz
QWxwaGFDaGFubmVsKCkgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCkpOwotICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eS0+cHVzaE5leHRCdWZmZXIoV1RGTW92ZShidWZmZXIp
KTsKLSAgICB9CiB9CiAjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogCkBAIC04MTcs
MTQgKzg1MCwyOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnRyaWdn
ZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQogICAgIH0KIAogI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKSB7Ci0gICAgICAgIExv
Y2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7Ci0gICAgICAgIGlmICghbV9wbGF0Zm9ybUxheWVy
UHJveHktPnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlzXSB7IHRoaXMtPnB1
c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7IH0pKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgbV9kcmF3Q29uZGl0aW9u
LndhaXQobV9kcmF3TXV0ZXgpOwotICAgIH0gZWxzZQotICAgICAgICBwdXNoVGV4dHVyZVRvQ29t
cG9zaXRvcigpOworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgcHVzaFRleHR1cmVUb0NvbXBv
c2l0b3IoKTsKKyNlbHNlCisgICAgeworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAg
ICAgICAgICAgIFsmXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0ZXgp
OworICAgICAgICAgICAgICAgIGlmICghcHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JU
aHJlYWQoW3RoaXNdIHsgdGhpcy0+cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKTsgfSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBtX2RyYXdDb25kaXRpb24u
d2FpdChtX2RyYXdNdXRleCk7CisgICAgICAgICAgICB9OworCisjaWYgMAorI2lmIFBMQVRGT1JN
KFdQRSkKKyAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fY29udGVudExheWVyLT5wcm94eSgpKTsK
KyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Cisj
ZW5kaWYKKyNlbmRpZgorICAgIH0KKyNlbmRpZgogI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKIH0KIApAQCAtODgyLDEyICs5MjksMjAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpmbHVzaEN1cnJlbnRCdWZmZXIoKQogICAgIG1fc2FtcGxlID0gYWRvcHRH
UmVmKGdzdF9zYW1wbGVfbmV3KG51bGxwdHIsIGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUu
Z2V0KCkpLAogICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwg
aW5mbyA/IGdzdF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIpKTsKIAotICAgIHsKLSAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wbGF0Zm9ybUxheWVyUHJveHktPmxvY2soKSk7Cisg
ICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgIFtdKFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihwcm94eS5sb2NrKCkpOwogCi0gICAgICAgIGlmIChtX3BsYXRmb3JtTGF5ZXJQcm94eS0+
aXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllclByb3h5LT5kcm9wQ3VycmVu
dEJ1ZmZlcldoaWxlUHJlc2VydmluZ1RleHR1cmUoKTsKLSAgICB9CisgICAgICAgICAgICBpZiAo
cHJveHkuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgICAgICBwcm94eS5kcm9wQ3VycmVudEJ1ZmZl
cldoaWxlUHJlc2VydmluZ1RleHR1cmUoKTsKKyAgICAgICAgfTsKKworI2lmIFBMQVRGT1JNKFdQ
RSkKKyAgICBwcm94eU9wZXJhdGlvbigqbV9jb250ZW50TGF5ZXItPnByb3h5KCkpOworI2Vsc2UK
KyAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlLmgKaW5kZXggMzBjYTAyZTI5ZDcuLmRiNWFhZTJjYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTM3LDggKzM3LDEyIEBA
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkK
KyNpZiBQTEFURk9STShXUEUpCisjaW5jbHVkZSAiTmljb3NpYVRleHR1cmVNYXBwZXJQcm94eUxh
eWVyLmgiCisjZWxzZQogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQ
cm92aWRlci5oIgogI2VuZGlmCisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbVZv
bHVtZSBHc3RTdHJlYW1Wb2x1bWU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9JbmZvIEdzdFZp
ZGVvSW5mbzsKQEAgLTYzLDggKzY3LDEyIEBAIHZvaWQgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJF
bGVtZW50cygpOwogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlIDogcHVi
bGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U+CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorI2lmIFBMQVRGT1JNKFdQRSkKKyAgICAsIHB1YmxpYyBOaWNvc2lhOjpUZXh0dXJlTWFwcGVy
UHJveHlMYXllcjo6Q2xpZW50CisjZWxzZQogICAgICwgcHVibGljIFBsYXRmb3JtTGF5ZXIKICNl
bmRpZgorI2VuZGlmCiB7CiAKIHB1YmxpYzoKQEAgLTEyNiw3ICsxMzQsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIG92ZXJyaWRlOwogCiAj
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UqPih0aGlzKTsgfQorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCBvdmVycmlkZTsKICNpZiBQTEFURk9STShXSU5fQ0FJUk8pCiAgICAgLy8gRklY
TUU6IEFjY2VsZXJhdGVkIHJlbmRlcmluZyBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgZm9yIFdp
bkNhaXJvIHlldC4KICAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc1LDkgKzE4MywxMyBAQCBwcm90ZWN0
ZWQ6CiAjZW5kaWYKIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2b2lkIHB1c2hU
ZXh0dXJlVG9Db21wb3NpdG9yKCk7CisjaWYgUExBVEZPUk0oV1BFKQorICAgIHZvaWQgc3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2Vsc2UKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHN3
YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hUZXh0dXJlVG9Db21w
b3NpdG9yKCk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rKCkg
Y29uc3QgeyByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7IH0KQEAgLTIzOCw4ICsyNTAsMTIgQEAg
cHJvdGVjdGVkOgogICAgIFJ1bkxvb3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U+IG1fZHJhd1RpbWVyOwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFBM
QVRGT1JNKFdQRSkKKyAgICBSZWY8Tmljb3NpYTo6VGV4dHVyZU1hcHBlclByb3h5TGF5ZXI+IG1f
Y29udGVudExheWVyOworI2Vsc2UKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgVVNF
KEdTVFJFQU1FUl9HTCkKICAgICBHUmVmUHRyPEdzdEdMQ29udGV4dD4gbV9nbENvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFHQzNETGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhR0MzRExheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZWQxODYyNDExMDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFHQzNETGF5ZXIuY3BwCkBAIC0wLDAgKzEsNjYg
QEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNvc2lhR0MzRExheWVyLmgiCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYK
KworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitHQzNETGF5ZXI6OkdDM0RMYXllcihHcmFwaGljc0NvbnRl
eHQzRCYgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxl
KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2NvbnRlbnRMYXllcihhZG9wdFJl
ZigqbmV3IFRleHR1cmVNYXBwZXJQcm94eUxheWVyKCp0aGlzKSkpCit7CisgICAgc3dpdGNoIChy
ZW5kZXJTdHlsZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVl
bjoKKyAgICAgICAgbV9nbENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRl
eHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRv
SG9zdFdpbmRvdzoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworR0MzRExheWVyOjp+R0MzRExheWVyKCkKK3sKKyAgICBtX2NvbnRlbnRM
YXllci0+aW52YWxpZGF0ZUNsaWVudCgpOworfQorCitib29sIEdDM0RMYXllcjo6bWFrZUNvbnRl
eHRDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9nbENvbnRleHQpOworICAgIHJldHVybiBtX2ds
Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgR0MzRExheWVyOjpwbGF0Zm9ybUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2dsQ29u
dGV4dCk7CisgICAgcmV0dXJuIG1fZ2xDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKK30KKwor
dm9pZCBHQzNETGF5ZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2NvbnRl
eHQubGF5ZXJDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC5w
cmVwYXJlVGV4dHVyZSgpOworICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1fY3Vy
cmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKKyAgICBUZXh0dXJlTWFwcGVy
R0w6OkZsYWdzIGZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSB8ICht
X2NvbnRleHQubV9hdHRycy5hbHBoYSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAw
KTsKKworICAgIHsKKyAgICAgICAgYXV0byYgcHJveHkgPSAqbV9jb250ZW50TGF5ZXItPnByb3h5
KCk7CisKKyAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKyAgICAgICAg
cHJveHkucHVzaE5leHRCdWZmZXIoc3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcj4obV9jb250ZXh0Lm1fY29tcG9zaXRvclRleHR1cmUsIHRleHR1cmVTaXpl
LCBmbGFncywgbV9jb250ZXh0Lm1faW50ZXJuYWxDb2xvckZvcm1hdCkpOworICAgIH0KKworICAg
IG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5p
Y29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvTmljb3NpYUdDM0RMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9OaWNvc2lhR0MzRExheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmE0ZmU4YjU1MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhR0MzRExheWVyLmgKQEAgLTAsMCArMSwz
MyBAQAorI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIk5pY29zaWFUZXh0dXJlTWFwcGVyUHJveHlMYXllci5oIgorI2luY2x1ZGUgPG1lbW9y
eT4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBHTENvbnRleHQ7CitjbGFzcyBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7Cit9
CisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKworY2xhc3MgR0MzRExheWVyIDogcHVibGljIFJlZkNv
dW50ZWQ8R0MzRExheWVyPiwgcHVibGljIFRleHR1cmVNYXBwZXJQcm94eUxheWVyOjpDbGllbnQg
eworcHVibGljOgorICAgIEdDM0RMYXllcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYsIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CisgICAgdmlydHVhbCB+R0Mz
RExheWVyKCk7CisKKyAgICBUZXh0dXJlTWFwcGVyUHJveHlMYXllciYgY29udGVudExheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXI7IH0KKyAgICBib29sIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1Db250ZXh0KCk7
CisKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCYgbV9jb250ZXh0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpHTENvbnRleHQ+IG1fZ2xDb250ZXh0OworCisgICAgUmVmPFRleHR1
cmVNYXBwZXJQcm94eUxheWVyPiBtX2NvbnRlbnRMYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkNDRiMzFhZGFhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1M
YXllci5jcHAKQEAgLTAsMCArMSw0MSBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIE5pY29zaWEg
eworCitQbGF0Zm9ybUxheWVyOjpQbGF0Zm9ybUxheWVyKHVpbnQ2NF90IGlkKQorICAgIDogbV9p
ZChpZCkKK3sKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgbV90ZXhtYXAubGF5ZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICBtX3Rl
eG1hcC5sYXllci0+c2V0SUQoaWQpOworI2VuZGlmCit9CisKK1BsYXRmb3JtTGF5ZXI6On5QbGF0
Zm9ybUxheWVyKCkKK3sKK30KKworQ29tcG9zaXRpb25MYXllcjo6Q29tcG9zaXRpb25MYXllcih1
aW50NjRfdCBpZCkKKyAgICA6IFBsYXRmb3JtTGF5ZXIoaWQpCit7Cit9CisKK0NvbXBvc2l0aW9u
TGF5ZXI6On5Db21wb3NpdGlvbkxheWVyKCkKK3sKK30KKworQ29udGVudExheWVyOjpDb250ZW50
TGF5ZXIoKQorICAgIDogUGxhdGZvcm1MYXllcigwKQoreworfQorCitDb250ZW50TGF5ZXI6On5D
b250ZW50TGF5ZXIoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9y
bUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFQbGF0Zm9ybUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjY2ODlhMDU0ZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCkBAIC0wLDAgKzEsMjM0IEBA
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmlsdGVyT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50
M0QuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNp
bmNsdWRlICJOaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMu
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSKQorY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOworY2xhc3MgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorfQorCituYW1lc3BhY2UgTmljb3Np
YSB7CisKK2NsYXNzIFBsYXRmb3JtTGF5ZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
UGxhdGZvcm1MYXllcj4geworcHVibGljOgorICAgIFBsYXRmb3JtTGF5ZXIodWludDY0X3QpOwor
ICAgIHZpcnR1YWwgflBsYXRmb3JtTGF5ZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBv
c2l0aW9uTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRlbnRMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB1aW50NjRfdCBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgc2V0U2NlbmVJbnRlZ3JhdGlv
bihSZWZQdHI8U2NlbmVJbnRlZ3JhdGlvbj4mJiBzY2VuZUludGVncmF0aW9uKQorICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgbV9zdGF0ZS5z
Y2VuZUludGVncmF0aW9uID0gV1RGTW92ZShzY2VuZUludGVncmF0aW9uKTsKKyAgICB9CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2NlbmVJbnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU+IGNyZWF0ZVVw
ZGF0ZVNjb3BlKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RhdGUubG9j
ayk7CisgICAgICAgIGlmIChtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24pCisgICAgICAgICAgICBy
ZXR1cm4gbV9zdGF0ZS5zY2VuZUludGVncmF0aW9uLT5jcmVhdGVVcGRhdGVTY29wZSgpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHJlcXVlc3RVcGRhdGUoKQor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zdGF0ZS5sb2NrKTsKKyAgICAgICAg
aWYgKG1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2NlbmVJ
bnRlZ3JhdGlvbi0+cmVxdWVzdFVwZGF0ZSgpOworICAgIH0KKworI2lmIFVTRShURVhUVVJFX01B
UFBFUikKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXImIHRleG1hcExheWVyKCkgY29u
c3QgeyByZXR1cm4gKm1fdGV4bWFwLmxheWVyOyB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAg
IHVpbnQzMl90IG1faWQ7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICBMb2NrIGxvY2s7CisgICAg
ICAgIFJlZlB0cjxTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uOworICAgIH0gbV9z
dGF0ZTsKKworcHJpdmF0ZToKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgc3RydWN0IHsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcj4gbGF5
ZXI7CisgICAgfSBtX3RleG1hcDsKKyNlbmRpZgorfTsKKworY2xhc3MgQ29udGVudExheWVyOwor
CitjbGFzcyBDb21wb3NpdGlvbkxheWVyIDogcHVibGljIFBsYXRmb3JtTGF5ZXIgeworcHVibGlj
OgorICAgIENvbXBvc2l0aW9uTGF5ZXIodWludDY0X3QpOworICAgIHZpcnR1YWwgfkNvbXBvc2l0
aW9uTGF5ZXIoKTsKKworICAgIGJvb2wgaXNDb21wb3NpdGlvbkxheWVyKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RydWN0IExheWVyU3RhdGUgeworICAgICAgICBz
dHJ1Y3QgRGVsdGEgeworICAgICAgICAgICAgRGVsdGEoKQorICAgICAgICAgICAgICAgIDogdmFs
dWUoMCkKKyAgICAgICAgICAgIHsgfQorCisgICAgICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQg
OiAxOworICAgICAgICAgICAgICAgICAgICBib29sIGFuY2hvclBvaW50Q2hhbmdlZCA6IDE7Cisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2l6ZUNoYW5nZWQgOiAxOworICAgICAgICAgICAgICAg
ICAgICBib29sIHRyYW5zZm9ybUNoYW5nZWQgOiAxOworICAgICAgICAgICAgICAgICAgICBib29s
IGNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCA6IDE7CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y29udGVudHNSZWN0Q2hhbmdlZCA6IDE7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY29udGVu
dHNUaWxpbmdDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBvcGFjaXR5Q2hh
bmdlZCA6IDE7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgc29saWRDb2xvckNoYW5nZWQgOiAx
OworICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcnNDaGFuZ2VkIDogMTsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbmltYXRpb25zQ2hhbmdlZCA6IDE7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgY2hpbGRyZW5DaGFuZ2VkIDogMTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBt
YXNrQ2hhbmdlZCA6IDE7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwbGljYUNoYW5nZWQg
OiAxOworICAgICAgICAgICAgICAgICAgICBib29sIGZsYWdzQ2hhbmdlZCA6IDE7CisKKyAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjb250ZW50TGF5ZXJDaGFuZ2VkIDogMTsKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIHVpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgfTsK
KyAgICAgICAgfSBkZWx0YTsKKworICAgICAgICBzdHJ1Y3QgRmxhZ3MgeworICAgICAgICAgICAg
RmxhZ3MoKQorICAgICAgICAgICAgICAgIDogY29udGVudHNPcGFxdWUoZmFsc2UpCisgICAgICAg
ICAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCisgICAgICAgICAgICAgICAgLCBjb250ZW50
c1Zpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICAgICAsIGJhY2tmYWNlVmlzaWJsZSh0cnVlKQor
ICAgICAgICAgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgICAgICAgICAs
IHByZXNlcnZlczNEKGZhbHNlKQorICAgICAgICAgICAgeyB9CisKKyAgICAgICAgICAgIHVuaW9u
IHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICBib29sIGNv
bnRlbnRzT3BhcXVlIDogMTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQg
OiAxOworICAgICAgICAgICAgICAgICAgICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gZmxhZ3M7CisKKyAgICAgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBwb3NpdGlvbjsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dDNEIGFuY2hvclBvaW50OworICAgICAgICBXZWJDb3JlOjpGbG9hdFNpemUgc2l6ZTsKKworICAg
ICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworCisgICAgICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb250ZW50c1JlY3Q7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBjb250ZW50c1RpbGVQaGFzZTsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRTaXplIGNvbnRl
bnRzVGlsZVNpemU7CisKKyAgICAgICAgZmxvYXQgb3BhY2l0eSB7IDAgfTsKKyAgICAgICAgV2Vi
Q29yZTo6Q29sb3Igc29saWRDb2xvcjsKKworICAgICAgICBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zIGZpbHRlcnM7CisgICAgICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJBbmltYXRpb25zIGFu
aW1hdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPj4gY2hp
bGRyZW47CisgICAgICAgIFJlZlB0cjxDb21wb3NpdGlvbkxheWVyPiByZXBsaWNhOworICAgICAg
ICBSZWZQdHI8Q29tcG9zaXRpb25MYXllcj4gbWFzazsKKworICAgICAgICBSZWZQdHI8Q29udGVu
dExheWVyPiBjb250ZW50TGF5ZXI7CisKKworICAgICAgICAvLyBUT0RPOgorICAgICAgICAvLyBp
bWFnZUlECisgICAgICAgIC8vIGRlYnVnVmlzdWFscworICAgICAgICAvLyByZXBhaW50Q291bnQK
KyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFjY2Vzc1N0YXRl
KGNvbnN0IFQmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3N0
YXRlLmxvY2spOworICAgICAgICBmdW5jdG9yKG1fbGF5ZXJTdGF0ZS5wZW5kaW5nKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYWNjZXNzU3RhdGVBbmRVcGRh
dGUoY29uc3QgVCYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
c3RhdGUubG9jayk7CisgICAgICAgIGZ1bmN0b3IobV9sYXllclN0YXRlLnBlbmRpbmcpOworCisg
ICAgICAgIGlmIChtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24pCisgICAgICAgICAgICBtX3N0YXRl
LnNjZW5lSW50ZWdyYXRpb24tPnJlcXVlc3RVcGRhdGUoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgVCYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RhdGUubG9jayk7CisgICAgICAgIGZ1
bmN0b3IobV9sYXllclN0YXRlLnBlbmRpbmcpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgdm9pZCBjb21taXRTdGF0ZShjb25zdCBUJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgY29uc3QgTGF5ZXJTdGF0ZSYgc3RhdGUgPQorICAgICAgICAgICAgW3RoaXNdIHsKKyAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgICAgICAg
ICAgICAgIG1fbGF5ZXJTdGF0ZS5jb21taXR0ZWQgPSBtX2xheWVyU3RhdGUucGVuZGluZzsKKyAg
ICAgICAgICAgICAgICBtX2xheWVyU3RhdGUucGVuZGluZy5kZWx0YSA9IHsgfTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9sYXllclN0YXRlLmNvbW1pdHRlZDsKKyAgICAgICAgICAgIH0oKTsK
KworICAgICAgICBmdW5jdG9yKHN0YXRlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0
IHsKKyAgICAgICAgTGF5ZXJTdGF0ZSBwZW5kaW5nOworICAgICAgICBMYXllclN0YXRlIGNvbW1p
dHRlZDsKKyAgICB9IG1fbGF5ZXJTdGF0ZTsKK307CisKK2NsYXNzIENvbnRlbnRMYXllciA6IHB1
YmxpYyBQbGF0Zm9ybUxheWVyIHsKK3B1YmxpYzoKKyAgICBDb250ZW50TGF5ZXIoKTsKKyAgICB2
aXJ0dWFsIH5Db250ZW50TGF5ZXIoKTsKKworICAgIGJvb2wgaXNDb250ZW50TGF5ZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1NfVEhSRUFERUQpCisgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN3
YXBCdWZmZXJzSWZOZWVkZWQoKSA9IDA7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIE5p
Y29zaWEKKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX05JQ09TSUFfUExBVEZPUk1M
QVlFUihUb0NsYXNzTmFtZSwgcHJlZGljYXRlKSBcCisgICAgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihOaWNvc2lhOjpUb0NsYXNzTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyJiBsYXllcikgeyByZXR1cm4gbGF5ZXIucHJlZGlj
YXRlOyB9IFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfTklDT1NJQV9QTEFURk9STUxBWUVSKENvbXBvc2l0aW9uTGF5ZXIsIGlzQ29t
cG9zaXRpb25MYXllcigpKTsKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTklDT1NJQV9QTEFURk9S
TUxBWUVSKENvbnRlbnRMYXllciwgaXNDb250ZW50TGF5ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVNjZW5lSW50ZWdyYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi42ODkyZTY2NGYxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uY3BwCkBAIC0wLDAg
KzEsNDkgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNvc2lhU2NlbmVJbnRl
Z3JhdGlvbi5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK1NjZW5lSW50ZWdyYXRpb246OlNj
ZW5lSW50ZWdyYXRpb24oQ2xpZW50JiBjbGllbnQpCit7CisgICAgbV9jbGllbnQub2JqZWN0ID0g
JmNsaWVudDsKK30KKworU2NlbmVJbnRlZ3JhdGlvbjo6flNjZW5lSW50ZWdyYXRpb24oKQorewor
ICAgIEFTU0VSVCghbV9jbGllbnQub2JqZWN0KTsKK30KKwordm9pZCBTY2VuZUludGVncmF0aW9u
OjppbnZhbGlkYXRlKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NsaWVudC5sb2NrKTsK
KyAgICBtX2NsaWVudC5vYmplY3QgPSBudWxscHRyOworfQorCit2b2lkIFNjZW5lSW50ZWdyYXRp
b246OnJlcXVlc3RVcGRhdGUoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY2xpZW50Lmxv
Y2spOworICAgIGlmIChtX2NsaWVudC5vYmplY3QpCisgICAgICAgIG1fY2xpZW50Lm9iamVjdC0+
cmVxdWVzdFVwZGF0ZSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8U2NlbmVJbnRlZ3JhdGlvbjo6
VXBkYXRlU2NvcGU+IFNjZW5lSW50ZWdyYXRpb246OmNyZWF0ZVVwZGF0ZVNjb3BlKCkKK3sKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxVcGRhdGVTY29wZT4obWFrZVJlZigqdGhpcykpOwor
fQorCitTY2VuZUludGVncmF0aW9uOjpDbGllbnQ6On5DbGllbnQoKSA9IGRlZmF1bHQ7CisKK1Nj
ZW5lSW50ZWdyYXRpb246OlVwZGF0ZVNjb3BlOjpVcGRhdGVTY29wZShSZWY8U2NlbmVJbnRlZ3Jh
dGlvbj4mJiBzY2VuZUludGVncmF0aW9uKQorICAgIDogbV9zY2VuZUludGVncmF0aW9uKFdURk1v
dmUoc2NlbmVJbnRlZ3JhdGlvbikpCisgICAgLCBtX2xvY2tlcihtX3NjZW5lSW50ZWdyYXRpb24t
Pm1fY2xpZW50LmxvY2spCit7Cit9CisKK1NjZW5lSW50ZWdyYXRpb246OlVwZGF0ZVNjb3BlOjp+
VXBkYXRlU2NvcGUoKQoreworICAgIGF1dG8mIHNjZW5lSW50ZWdyYXRpb25PYmogPSBtX3NjZW5l
SW50ZWdyYXRpb24uZ2V0KCk7CisgICAgaWYgKHNjZW5lSW50ZWdyYXRpb25PYmoubV9jbGllbnQu
b2JqZWN0KQorICAgICAgICBzY2VuZUludGVncmF0aW9uT2JqLm1fY2xpZW50Lm9iamVjdC0+cmVx
dWVzdFVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVn
cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFTY2VuZUludGVncmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmJmNTlmZDMzNmZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5oCkBAIC0wLDAgKzEs
NDUgQEAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIFNjZW5lSW50ZWdyYXRp
b24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2NlbmVJbnRlZ3JhdGlvbj4geworcHVi
bGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5D
bGllbnQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFVwZGF0ZSgpID0gMDsKKyAg
ICB9OworCisgICAgU2NlbmVJbnRlZ3JhdGlvbihDbGllbnQmKTsKKyAgICB+U2NlbmVJbnRlZ3Jh
dGlvbigpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RVcGRh
dGUoKTsKKworICAgIGNsYXNzIFVwZGF0ZVNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFVw
ZGF0ZVNjb3BlKFJlZjxTY2VuZUludGVncmF0aW9uPiYmKTsKKyAgICAgICAgflVwZGF0ZVNjb3Bl
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWY8U2NlbmVJbnRlZ3JhdGlvbj4gbV9zY2Vu
ZUludGVncmF0aW9uOworICAgICAgICBMb2NrSG9sZGVyIG1fbG9ja2VyOworICAgIH07CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VXBkYXRlU2NvcGU+IGNyZWF0ZVVwZGF0ZVNjb3BlKCk7CisKK3By
aXZhdGU6CisgICAgc3RydWN0IHsKKyAgICAgICAgTG9jayBsb2NrOworICAgICAgICBDbGllbnQq
IG9iamVjdCB7IG51bGxwdHIgfTsKKyAgICB9IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9OaWNvc2lhVGV4dHVyZU1hcHBlclByb3h5TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhVGV4dHVyZU1hcHBlclByb3h5TGF5
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2UwMzQzYjIw
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvTmljb3NpYVRleHR1cmVNYXBwZXJQcm94eUxheWVyLmNwcApAQCAtMCwwICsxLDQyIEBA
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmljb3NpYVRleHR1cmVNYXBwZXJQcm94
eUxheWVyLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisKK25h
bWVzcGFjZSBOaWNvc2lhIHsKKworVGV4dHVyZU1hcHBlclByb3h5TGF5ZXI6OkNsaWVudDo6fkNs
aWVudCgpID0gZGVmYXVsdDsKKworVGV4dHVyZU1hcHBlclByb3h5TGF5ZXI6OlRleHR1cmVNYXBw
ZXJQcm94eUxheWVyKFRleHR1cmVNYXBwZXJQcm94eUxheWVyOjpDbGllbnQmIGNsaWVudCkKKyAg
ICA6IG1fY2xpZW50KCZjbGllbnQpCisgICAgLCBtX3RleG1hcFByb3h5KGFkb3B0UmVmKG5ldyBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KCkpKQoreworfQorCitUZXh0
dXJlTWFwcGVyUHJveHlMYXllcjo6flRleHR1cmVNYXBwZXJQcm94eUxheWVyKCkKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgIEFTU0VSVCghbV9jbGllbnQpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJQcm94eUxheWVyOjppbnZhbGlkYXRlQ2xpZW50KCkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgIG1fY2xpZW50ID0gbnVs
bHB0cjsKK30KKworUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IFRleHR1cmVNYXBwZXJQcm94eUxheWVyOjpwcm94eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdGV4bWFwUHJveHkuY29weVJlZigpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJQcm94eUxh
eWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3N0
YXRlLmxvY2spOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnN3YXBCdWZm
ZXJzSWZOZWVkZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQorCisjZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhVGV4dHVyZU1hcHBlclByb3h5
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVRleHR1cmVNYXBwZXJQcm94eUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjAzNDdlOWYwMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhVGV4dHVyZU1hcHBlclByb3h5TGF5ZXIu
aApAQCAtMCwwICsxLDM1IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk5pY29zaWFQbGF0
Zm9ybUxheWVyLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisKK25hbWVzcGFj
ZSBOaWNvc2lhIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlclByb3h5TGF5ZXIgOiBwdWJsaWMgQ29u
dGVudExheWVyIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgdmlydHVhbCB+Q2xpZW50KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN3YXBCdWZm
ZXJzSWZOZWVkZWQoKSA9IDA7CisgICAgfTsKKworICAgIFRleHR1cmVNYXBwZXJQcm94eUxheWVy
KENsaWVudCYpOworICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJQcm94eUxheWVyKCk7CisKKyAg
ICB2b2lkIGludmFsaWRhdGVDbGllbnQoKTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIENsaWVu
dCogbV9jbGllbnQgeyBudWxscHRyIH07CisgICAgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fdGV4bWFwUHJveHk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHQzRFRleHR1cmVNYXBwZXIuY3BwCmluZGV4
IDBjMDgzZGViNmJjLi5mZDc2YTRkNDBkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dDNEVGV4dHVyZU1hcHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dDNEVGV4dHVyZU1hcHBlci5jcHAKQEAgLTUzLDYgKzUzLDggQEAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0wuaCIKICNlbmRpZgogCisjaW5jbHVkZSAiTmljb3NpYUdDM0RMYXllci5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgTWF4QWN0aXZl
Q29udGV4dHMgPSAxNjsKQEAgLTEwNSw3ICsxMDcsMTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6Okdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBI
b3MKICAgICA6IG1fYXR0cnMoYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHNoYXJl
ZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKKyNpZiBQTEFURk9STShXUEUpCisgICAgbV9jb250
ZW50TGF5ZXIgPSBhZG9wdFJlZigqbmV3IE5pY29zaWE6OkdDM0RMYXllcigqdGhpcywgcmVuZGVy
U3R5bGUpKTsKKyNlbHNlCiAgICAgbV90ZXhtYXBMYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8VGV4
dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPigqdGhpcywgcmVuZGVyU3R5bGUpOworI2VuZGlm
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMjU4LDYgKzI2NCwxMiBAQCBHcmFw
aGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIAogICAgIGF1dG8qIGFjdGl2ZUNv
bnRleHQgPSBhY3RpdmVDb250ZXh0cygpLnRha2VMYXN0KFt0aGlzXShhdXRvKiBpdCkgeyByZXR1
cm4gaXQgPT0gdGhpczsgfSk7CiAgICAgQVNTRVJUX1VOVVNFRChhY3RpdmVDb250ZXh0LCAhIWFj
dGl2ZUNvbnRleHQpOworCisjaWYgUExBVEZPUk0oV1BFKQorICAgIG1fY29udGVudExheWVyID0g
bnVsbHB0cjsKKyNlbHNlCisgICAgbV90ZXhtYXBMYXllciA9IG51bGxwdHI7CisjZW5kaWYKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhzdGQ6OnVu
aXF1ZV9wdHI8Q29udGV4dExvc3RDYWxsYmFjaz4pCkBAIC0yNzAsNyArMjgyLDExIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0ZDo6dW5pcXVlX3B0
cjxFcnJvck1lc3NhZ2VDYWxsCiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0
Q3VycmVudCgpCiB7CisjaWYgUExBVEZPUk0oV1BFKQorICAgIHJldHVybiBtX2NvbnRlbnRMYXll
ci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQogICAgIHJldHVybiBtX3RleG1hcExheWVy
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjaGVja0dQVVN0YXR1cygpCkBAIC0yNzksNyArMjk1LDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkKIAogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBH
cmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCiB7CisjaWYgUExB
VEZPUk0oV1BFKQorICAgIHJldHVybiBtX2NvbnRlbnRMYXllci0+cGxhdGZvcm1Db250ZXh0KCk7
CisjZWxzZQogICAgIHJldHVybiBtX3RleG1hcExheWVyLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNl
bmRpZgogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRl
eHR1cmUoKSBjb25zdApAQCAtMjk4LDcgKzMxOCwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIAogUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250
ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogeworI2lmIFBMQVRGT1JNKFdQRSkKKyAgICBy
ZXR1cm4gJm1fY29udGVudExheWVyLT5jb250ZW50TGF5ZXIoKTsKKyNlbHNlCiAgICAgcmV0dXJu
IG1fdGV4bWFwTGF5ZXIuZ2V0KCk7CisjZW5kaWYKIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKaW5kZXggNmM1
NjhlNDU0NGMuLmM0MjlhNjU3MzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyLmNwcApAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oIgogCi0jaWYgRU5B
QkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShURVhUVVJFX01BUFBFUikKKyNpZiBFTkFC
TEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAmJiAhUExBVEZP
Uk0oV1BFKQogCiAjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCiAjaW5jbHVkZSAiR0xDb250
ZXh0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgKaW5k
ZXggYmFiNTAzNmM4NTguLjAxYjdkMGM2ZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllci5oCkBAIC0xOSw3ICsxOSw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShURVhUVVJFX01BUFBFUikK
KyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKSAm
JiAhUExBVEZPUk0oV1BFKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCkBAIC0zMSw3ICszMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEdMQ29udGV4dDsKIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk7CiAKLWNsYXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllciA6IHB1YmxpYyBQbGF0
Zm9ybUxheWVyIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllciA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIKK3sKIHB1YmxpYzoKICAg
ICBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIoR3JhcGhpY3NDb250ZXh0M0QmLCBHcmFw
aGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJH
QzNEUGxhdGZvcm1MYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRleCAxZGM4
Mzc2MGRhZS4uNTdiNTg0YTM1OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC02
NTQsNCArNjU0LDIyIEBAIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyhN
b25vdG9uaWNUaW1lIHRpbWUpCiAgICAgcmV0dXJuIGFwcGxpY2F0aW9uUmVzdWx0cy5oYXNSdW5u
aW5nQW5pbWF0aW9uczsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmR1bXAodW5zaWdu
ZWQgaW5kZW50YXRpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudGF0
aW9uOyArK2kpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAiKTsKKyAgICBmcHJpbnRmKHN0
ZGVyciwgInwtVGV4TWFwTGF5ZXIoJXUpIHBvc2l0aW9uICglLjJmLCUuMmYpIGFuY2hvciAoJS4y
ZiwlLjJmLCUuMmYpIHNpemUgKCUuMmYsJS4yZikgb3BhY2l0eSAlLjJmXG4iLAorICAgICAgICBt
X2lkLCBtX3N0YXRlLnBvcy54KCksIG1fc3RhdGUucG9zLnkoKSwKKyAgICAgICAgbV9zdGF0ZS5h
bmNob3JQb2ludC54KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpLCBtX3N0YXRlLmFuY2hvclBv
aW50LnooKSwKKyAgICAgICAgbV9zdGF0ZS5zaXplLndpZHRoKCksIG1fc3RhdGUuc2l6ZS5oZWln
aHQoKSwgbV9zdGF0ZS5vcGFjaXR5KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bmRlbnRhdGlvbjsgKytpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIik7CisgICAgZnBy
aW50ZihzdGRlcnIsICJ8LS0tIGRyYXdzQ29udGVudCAlZCBjb250ZW50c0FyZVZpc2libGUgJWRc
biIsCisgICAgICAgIG1fc3RhdGUuZHJhd3NDb250ZW50LCBtX3N0YXRlLmNvbnRlbnRzVmlzaWJs
ZSk7CisKKyAgICBmb3IgKGF1dG8qIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgY2hpbGQt
PmR1bXAoaW5kZW50YXRpb24gKyAxKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmlu
ZGV4IGM0MDFmODM3NGY2Li5hNmExN2QyYzVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaApA
QCAtOTgsNiArOTgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZENoaWxkKFRleHR1cmVNYXBw
ZXJMYXllciopOwogCisgICAgdm9pZCBkdW1wKHVuc2lnbmVkKTsKKwogcHJpdmF0ZToKICAgICBj
b25zdCBUZXh0dXJlTWFwcGVyTGF5ZXImIHJvb3RMYXllcigpIGNvbnN0CiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKaW5kZXggYzY2
ZTQ2MzYyMDAuLjY0NTIwMmQ3YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJCdWZmZXIoUmVmUHRyPEJpdG1hcFRleHR1cmU+JiYgdGV4dHVyZSwgVGV4
dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggNDJkYzdiOTk5MTAuLjNkZmFi
ODIxNDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcApAQCAtMTQzLDEzICsxNDMsMTYgQEAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoVHlwZSBsYXllclR5cGUsIEdyYXBoaWNz
TGF5ZXIKIHsKICAgICBzdGF0aWMgQ29vcmRpbmF0ZWRMYXllcklEIG5leHRMYXllcklEID0gMTsK
ICAgICBtX2lkID0gbmV4dExheWVySUQrKzsKKworICAgIC8vIEZ1dHVyZSEKKyAgICBtX2Z1dHVy
ZS5wbGF0Zm9ybUxheWVyID0gYWRvcHRSZWYobmV3IE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXIo
bV9pZCkpOwogfQogCiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIoKQogewogICAgIGlmIChtX2Nvb3JkaW5hdG9yKSB7CiAgICAgICAgIHB1cmdlQmFj
a2luZ1N0b3JlcygpOwotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXRhY2hMYXllcih0aGlzKTsK
KyAgICAgICAgbV9jb29yZGluYXRvci0+ZGV0YWNoTGF5ZXIodGhpcywgKm1fZnV0dXJlLnBsYXRm
b3JtTGF5ZXIpOwogICAgIH0KICAgICBBU1NFUlQoIW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcp
OwogICAgIEFTU0VSVCghbV9tYWluQmFja2luZ1N0b3JlKTsKQEAgLTIxNyw5ICsyMjAsMjEgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHApCiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKICAgICBtX2xheWVy
U3RhdGUucG9zaXRpb25DaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5wb3NpdGlv
bkNoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkK
K3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFw
aGljc0xheWVyOjpzeW5jUG9zaXRpb24ocCk7CisgICAgbV9mdXR1cmUuZGVsdGEucG9zaXRpb25D
aGFuZ2VkID0gdHJ1ZTsKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKKyAgICBz
ZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQogewogICAgIGlm
IChhbmNob3JQb2ludCgpID09IHApCkBAIC0yMjcsNiArMjQyLDcgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKIAog
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOwogICAgIG1fbGF5ZXJTdGF0ZS5h
bmNob3JQb2ludENoYW5nZWQgPSB0cnVlOworICAgIG1fZnV0dXJlLmRlbHRhLmFuY2hvclBvaW50
Q2hhbmdlZCA9IHRydWU7CiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIApAQCAtMjM3LDYg
KzI1Myw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CiAgICAg
bV9sYXllclN0YXRlLnNpemVDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5zaXpl
Q2hhbmdlZCA9IHRydWU7CiAKICAgICBpZiAobWFza0xheWVyKCkpCiAgICAgICAgIG1hc2tMYXll
cigpLT5zZXRTaXplKHNpemUpOwpAQCAtMjUwLDYgKzI2Nyw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQp
CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CiAgICAgbV9sYXllclN0YXRl
LnRyYW5zZm9ybUNoYW5nZWQgPSB0cnVlOworICAgIG1fZnV0dXJlLmRlbHRhLnRyYW5zZm9ybUNo
YW5nZWQgPSB0cnVlOwogCiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KQEAgLTI2MSw2ICsy
NzksNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmCiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRD
aGlsZHJlblRyYW5zZm9ybSh0KTsKICAgICBtX2xheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm1D
aGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5jaGlsZHJlblRyYW5zZm9ybUNoYW5n
ZWQgPSB0cnVlOwogCiAgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KQEAgLTI3Myw2ICsyOTIs
NyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBi
KQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOwogICAgIG1fbGF5ZXJTdGF0
ZS5wcmVzZXJ2ZXMzRCA9IGI7CiAgICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9IHRydWU7
CisgICAgbV9mdXR1cmUuZGVsdGEuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKIAogICAgIGRpZENoYW5n
ZUdlb21ldHJ5KCk7CiB9CkBAIC0yODQsNiArMzA0LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dE1hc2tzVG9Cb3VuZHMoYik7CiAgICAgbV9sYXllclN0YXRlLm1hc2tzVG9Cb3VuZHMgPSBiOwog
ICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVlOworICAgIG1fZnV0dXJlLmRlbHRh
LmZsYWdzQ2hhbmdlZCA9IHRydWU7CiAKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQpAQCAt
Mjk1LDYgKzMxNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0Nv
bnRlbnQoYm9vbCBiKQogICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsKICAg
ICBtX2xheWVyU3RhdGUuZHJhd3NDb250ZW50ID0gYjsKICAgICBtX2xheWVyU3RhdGUuZmxhZ3ND
aGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5mbGFnc0NoYW5nZWQgPSB0cnVlOwog
CiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQpAQCAtMzA2LDYgKzMyOCw3IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQogICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShiKTsKICAgICBtX2xheWVyU3RhdGUu
Y29udGVudHNWaXNpYmxlID0gYjsKICAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1
ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5mbGFnc0NoYW5nZWQgPSB0cnVlOwogCiAgICAgaWYgKG1h
c2tMYXllcigpKQogICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0Q29udGVudHNWaXNpYmxlKGIpOwpA
QCAtMzIxLDYgKzM0NCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c09wYXF1ZShib29sIGIpCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUo
Yik7CiAgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzT3BhcXVlID0gYjsKICAgICBtX2xheWVyU3Rh
dGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5mbGFnc0NoYW5nZWQg
PSB0cnVlOwogCiAgICAgLy8gRGVtYW5kIGEgcmVwYWludCBvZiB0aGUgd2hvbGUgbGF5ZXIuCiAg
ICAgaWYgKCFtX25lZWRzRGlzcGxheS5jb21wbGV0ZUxheWVyKSB7CkBAIC0zNDEsNiArMzY1LDcg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShi
b29sIGIpCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOwogICAg
IG1fbGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUgPSBiOwogICAgIG1fbGF5ZXJTdGF0ZS5mbGFn
c0NoYW5nZWQgPSB0cnVlOworICAgIG1fZnV0dXJlLmRlbHRhLmZsYWdzQ2hhbmdlZCA9IHRydWU7
CiAKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CkBAIC0zNTMsNiArMzc4LDcgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKICAg
ICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOwogICAgIG1fbGF5ZXJTdGF0ZS5v
cGFjaXR5ID0gb3BhY2l0eTsKICAgICBtX2xheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQgPSB0cnVl
OworICAgIG1fZnV0dXJlLmRlbHRhLm9wYWNpdHlDaGFuZ2VkID0gdHJ1ZTsKIAogICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKIH0KQEAgLTM2NSw2ICszOTEsNyBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKICAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7CiAgICAgbV9sYXllclN0YXRlLmNvbnRl
bnRzUmVjdCA9IHI7CiAgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzUmVjdENoYW5nZWQgPSB0cnVl
OworICAgIG1fZnV0dXJlLmRlbHRhLmNvbnRlbnRzUmVjdENoYW5nZWQgPSB0cnVlOwogCiAgICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQpAQCAtMzc3LDYgKzQwNCw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RpbGVTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
cykKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RpbGVTaXplKHMpOwogICAgIG1fbGF5
ZXJTdGF0ZS5jb250ZW50c1RpbGVTaXplID0gczsKICAgICBtX2xheWVyU3RhdGUuY29udGVudHNU
aWxpbmdDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5jb250ZW50c1RpbGluZ0No
YW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKIH0KIApAQCAtMzg4LDYg
KzQxNiw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RpbGVQ
aGFzZShjb25zdCBGbG9hdFNpemUmIHApCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
aWxlUGhhc2UocCk7CiAgICAgbV9sYXllclN0YXRlLmNvbnRlbnRzVGlsZVBoYXNlID0gcDsKICAg
ICBtX2xheWVyU3RhdGUuY29udGVudHNUaWxpbmdDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVy
ZS5kZWx0YS5jb250ZW50c1RpbGluZ0NoYW5nZWQgPSB0cnVlOwogICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKIH0KIApAQCAtMzk4LDcgKzQyNywxMCBAQCBib29sIEdyYXBoaWNzTGF5ZXI6OnN1
cHBvcnRzQ29udGVudHNUaWxpbmcoKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKKyAgICBpZiAobV9mdXR1cmUuY29udGVudExheWVyKQorICAgICAgICBtX3No
b3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIgPSB0cnVlOworCisjaWYgMCAmJiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAgaWYgKG1fcGxhdGZvcm1MYXllcikKICAgICAgICAg
bV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyID0gdHJ1ZTsKICNlbmRpZgpAQCAtNDA5LDYgKzQ0
MSwxNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rp
c3BsYXkoKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1Bs
YXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVudHNMYXllclB1
cnBvc2UpCiB7CisgICAgYXV0byogY29udGVudExheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29u
dGVudExheWVyPihwbGF0Zm9ybUxheWVyKTsKKyAgICBpZiAobV9mdXR1cmUuY29udGVudExheWVy
ICE9IGNvbnRlbnRMYXllcikgeworICAgICAgICBtX3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVyID0g
dHJ1ZTsKKyAgICAgICAgbV9mdXR1cmUuZGVsdGEuY29udGVudExheWVyQ2hhbmdlZCA9IHRydWU7
CisgICAgfQorCisgICAgbV9mdXR1cmUuY29udGVudExheWVyID0gY29udGVudExheWVyOworICAg
IG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKKworI2lmIDAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCiAgICAgaWYgKG1fcGxhdGZvcm1MYXllciAhPSBwbGF0Zm9ybUxheWVy
KQogICAgICAgICBtX3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVyID0gdHJ1ZTsKQEAgLTQxOCw2ICs0
NjAsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1BsYXRm
b3JtTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcgogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cGxhdGZvcm1MYXllcik7CiAjZW5kaWYKKyNlbmRpZgogfQogCiBib29sIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZmlsdGVyc0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKSBjb25zdApAQCAtNDU3LDcgKzUwMCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1fbGF5ZXJTdGF0ZS5zb2xpZENvbG9yID0gY29sb3I7Cisg
ICAgbV9zb2xpZENvbG9yID0gY29sb3I7CiAgICAgbV9sYXllclN0YXRlLnNvbGlkQ29sb3JDaGFu
Z2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5zb2xpZENvbG9yQ2hhbmdlZCA9IHRydWU7
CiAKICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CiB9CkBAIC01MTYsNiArNTYxLDcgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKIAogICAgIG1fbGF5ZXJTdGF0ZS5tYXNrID0gY29vcmRpbmF0ZWRMYXllci5pZCgpOwog
ICAgIG1fbGF5ZXJTdGF0ZS5tYXNrQ2hhbmdlZCA9IHRydWU7CisgICAgbV9mdXR1cmUuZGVsdGEu
bWFza0NoYW5nZWQgPSB0cnVlOwogCiAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQpAQCAt
NTQwLDYgKzU4Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBHcmFwaGljc0xheWVyOjpzZXRS
ZXBsaWNhdGVkQnlMYXllcihsYXllcik7CiAgICAgbV9sYXllclN0YXRlLnJlcGxpY2EgPSB0b0Nv
b3JkaW5hdGVkTGF5ZXJJRChsYXllcik7CiAgICAgbV9sYXllclN0YXRlLnJlcGxpY2FDaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5yZXBsaWNhQ2hhbmdlZCA9IHRydWU7CiAgICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwogfQogCkBAIC02MDIsNiArNjQ5LDcgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IGZhbHNlOwogICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJl
bkNoYW5nZWQgPSB0cnVlOworICAgIG1fZnV0dXJlLmRlbHRhLmNoaWxkcmVuQ2hhbmdlZCA9IHRy
dWU7CiAgICAgbV9sYXllclN0YXRlLmNoaWxkcmVuLmNsZWFyKCk7CiAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuKCkpCiAgICAgICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbi5hcHBlbmQo
dG9Db29yZGluYXRlZExheWVySUQoY2hpbGQpKTsKQEAgLTYxNSw2ICs2NjMsNyBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQogCiAgICAgbV9sYXllclN0YXRl
LmZpbHRlcnMgPSBHcmFwaGljc0xheWVyOjpmaWx0ZXJzKCk7CiAgICAgbV9sYXllclN0YXRlLmZp
bHRlcnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICBtX2Z1dHVyZS5kZWx0YS5maWx0ZXJzQ2hhbmdlZCA9
IHRydWU7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNr
aW5nKCkKQEAgLTcwMCwxNSArNzQ5LDE4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jQW5pbWF0aW9ucygpCiAgICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9IGZhbHNlOwog
ICAgIG1fbGF5ZXJTdGF0ZS5hbmltYXRpb25zID0gbV9hbmltYXRpb25zLmdldEFjdGl2ZUFuaW1h
dGlvbnMoKTsKICAgICBtX2xheWVyU3RhdGUuYW5pbWF0aW9uc0NoYW5nZWQgPSB0cnVlOworICAg
IG1fZnV0dXJlLmRlbHRhLmFuaW1hdGlvbnNDaGFuZ2VkID0gdHJ1ZTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNQbGF0Zm9ybUxheWVyKCkKIHsKLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAgaWYgKCFtX3Nob3VsZFN5bmNQbGF0Zm9y
bUxheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVy
ID0gZmFsc2U7CisKKyNpZiAwICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
KyAgICBtX3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVyID0gZmFsc2U7CiAgICAgbV9sYXllclN0YXRl
LnBsYXRmb3JtTGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQog
ICAgICAgICBtX2xheWVyU3RhdGUucGxhdGZvcm1MYXllclByb3h5ID0gbV9wbGF0Zm9ybUxheWVy
LT5wcm94eSgpOwpAQCAtNzE3LDExICs3NjksMTcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNQbGF0Zm9ybUxheWVyKCkKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKQogewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19USFJFQURFRCkKICAgICBpZiAoIW1fc2hvdWxkVXBkYXRlUGxhdGZvcm1MYXllcikKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyID0gZmFsc2U7Cisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQorICAgIGlmIChtX2Z1dHVyZS5j
b250ZW50TGF5ZXIpCisgICAgICAgIG1fZnV0dXJlLmNvbnRlbnRMYXllci0+c3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpOworI2VuZGlmCisKKyNpZiAwICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19U
SFJFQURFRCkKKyAgICBtX3Nob3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIgPSBmYWxzZTsKICAgICBt
X2xheWVyU3RhdGUucGxhdGZvcm1MYXllclVwZGF0ZWQgPSB0cnVlOwogICAgIGlmIChtX3BsYXRm
b3JtTGF5ZXIpCiAgICAgICAgIG1fcGxhdGZvcm1MYXllci0+c3dhcEJ1ZmZlcnNJZk5lZWRlZCgp
OwpAQCAtNzUwLDYgKzgwOCw3NSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgLy8gT25seSB1bnNldCBt
X21vdmluZ1Zpc2libGVSZWN0IGFmdGVyIHdlIGhhdmUgdXBkYXRlZCB0aGUgdmlzaWJsZSByZWN0
IGFmdGVyIHRoZSBhbmltYXRpb24gc3RvcHBlZC4KICAgICBpZiAoIWhhc0FjdGl2ZVRyYW5zZm9y
bUFuaW1hdGlvbikKICAgICAgICAgbV9tb3ZpbmdWaXNpYmxlUmVjdCA9IGZhbHNlOworCisgICAg
Ly8gRnV0dXJlLgorICAgIHsKKyAgICAgICAgbV9mdXR1cmUucGxhdGZvcm1MYXllci0+dXBkYXRl
U3RhdGUoCisgICAgICAgICAgICBbdGhpc10oTmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5
ZXJTdGF0ZSYgc3RhdGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgbG9j
YWxEZWx0YSA9IG1fZnV0dXJlLmRlbHRhOworICAgICAgICAgICAgICAgIHN0YXRlLmRlbHRhLnZh
bHVlIHw9IGxvY2FsRGVsdGEudmFsdWU7CisKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0
YS5wb3NpdGlvbkNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBvc2l0aW9uID0g
cG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5hbmNob3JQb2ludENo
YW5nZWQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFuY2hvclBvaW50ID0gYW5jaG9yUG9p
bnQoKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5zaXplQ2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc2l6ZSA9IHNpemUoKTsKKworICAgICAgICAgICAgICAgIGlm
IChsb2NhbERlbHRhLnRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgICAgICAgICAgICAgIGlmIChsb2NhbERlbHRh
LmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hp
bGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOworCisgICAgICAgICAgICAgICAg
aWYgKGxvY2FsRGVsdGEuY29udGVudHNSZWN0Q2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGUuY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgICAgICAgICAgICAgaWYg
KGxvY2FsRGVsdGEuY29udGVudHNUaWxpbmdDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRlLmNvbnRlbnRzVGlsZVBoYXNlID0gY29udGVudHNUaWxlUGhhc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuY29udGVudHNUaWxlU2l6ZSA9IGNvbnRlbnRzVGlsZVNpemUoKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5vcGFj
aXR5Q2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUub3BhY2l0eSA9IG9wYWNpdHko
KTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc29saWRDb2xvciA9IG1fc29saWRDb2xvcjsKKworICAg
ICAgICAgICAgICAgIGlmIChsb2NhbERlbHRhLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5maWx0ZXJzID0gZmlsdGVycygpOworICAgICAgICAgICAgICAgIGlmIChs
b2NhbERlbHRhLmFuaW1hdGlvbnNDaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5h
bmltYXRpb25zID0gbV9hbmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKKworICAgICAg
ICAgICAgICAgIGlmIChsb2NhbERlbHRhLmNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuY2hpbGRyZW4gPSBXVEY6Om1hcChjaGlsZHJlbigpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgW10oYXV0byogY2hpbGQpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcj4oY2hpbGQpLT5tX2Z1dHVyZS5wbGF0Zm9ybUxheWVyOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5tYXNrQ2hh
bmdlZCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvKiBtYXNrID0gZG93bmNhc3Q8Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyPihtYXNrTGF5ZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRlLm1hc2sgPSBtYXNrID8gbWFzay0+bV9mdXR1cmUucGxhdGZvcm1MYXllciA6IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxvY2FsRGVsdGEucmVw
bGljYUNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byogcmVwbGljYSA9IGRvd25j
YXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4ocmVwbGljYUxheWVyKCkpOworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5yZXBsaWNhID0gcmVwbGljYSA/IHJlcGxpY2EtPm1fZnV0dXJlLnBs
YXRmb3JtTGF5ZXIgOiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChsb2NhbERlbHRhLmNvbnRlbnRMYXllckNoYW5nZWQpCisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLmNvbnRlbnRMYXllciA9IG1fZnV0dXJlLmNvbnRlbnRMYXllcjsKKworICAgICAg
ICAgICAgICAgIGlmIChsb2NhbERlbHRhLmZsYWdzQ2hhbmdlZCkgeworICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5mbGFncy5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncy5jb250ZW50c1Zpc2libGUgPSBjb250
ZW50c0FyZVZpc2libGUoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MuYmFja2Zh
Y2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgICAgICAgICAgICAgICAgIHN0
YXRlLmZsYWdzLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLmZsYWdzLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9mdXR1cmUuZGVsdGEgPSB7IH07
CisgICAgfQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY1BlbmRpbmdT
dGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKQpAQCAtMTIwMCw2ICsxMzI3LDExIEBAIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCgp
CiAgICAgY2xpZW50KCkubm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCAiIiwgbV9sYXN0QW5p
bWF0aW9uU3RhcnRUaW1lKTsKIH0KIAorUGxhdGZvcm1MYXllciogQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mdXR1cmUucGxh
dGZvcm1MYXllci5nZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGFkYzg2OWU3YmY2Li45ZmNiZDhl
N2Y0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKKyNpbmNsdWRlICJOaWNv
c2lhUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIK
ICNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgiCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUmVmPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqLCBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyJikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVh
bCBOaWNvc2lhOjpQYWludGluZ0VuZ2luZSYgcGFpbnRpbmdFbmdpbmUoKSA9IDA7CiAKQEAgLTc1
LDYgKzc2LDcgQEAgcHVibGljOgogICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzeW5jUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CkBAIC0xMDks
NyArMTExLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmlu
ZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCB1c2VzQ29udGVudHNMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1M
YXllciB8fCBtX2NvbXBvc2l0ZWRJbWFnZTsgfQorICAgIGJvb2wgdXNlc0NvbnRlbnRzTGF5ZXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXRmb3JtTGF5ZXIgfHwgbV9mdXR1cmUuY29u
dGVudExheWVyIHx8IG1fY29tcG9zaXRlZEltYWdlOyB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHN5bmNQZW5kaW5nU3Rh
dGVDaGFuZ2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50QnVm
ZmVyc0luY2x1ZGluZ1N1YkxheWVycygpOwpAQCAtMTg2LDYgKzE5MCw4IEBAIHByaXZhdGU6CiAg
ICAgRmxvYXRQb2ludCBtX2FkanVzdGVkUG9zaXRpb247CiAgICAgRmxvYXRQb2ludDNEIG1fYWRq
dXN0ZWRBbmNob3JQb2ludDsKIAorICAgIENvbG9yIG1fc29saWRDb2xvcjsKKwogI2lmbmRlZiBO
REVCVUcKICAgICBib29sIG1faXNQdXJnaW5nOwogI2VuZGlmCkBAIC0yMjAsNiArMjI2LDEzIEBA
IHByaXZhdGU6CiAgICAgVGltZXIgbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAgICAgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0
QW5pbWF0aW9uU3RhcnRUaW1lOworCisgICAgc3RydWN0IHsKKyAgICAgICAgUmVmUHRyPE5pY29z
aWE6OkNvbXBvc2l0aW9uTGF5ZXI+IHBsYXRmb3JtTGF5ZXI7CisgICAgICAgIE5pY29zaWE6OkNv
bXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGU6OkRlbHRhIGRlbHRhOworCisgICAgICAgIFJlZlB0
cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IGNvbnRlbnRMYXllcjsKKyAgICB9IG1fZnV0dXJlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
dGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCmluZGV4IDBjZTY1OWU2YzhiLi5hOWU2MDA3
YTM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzU3RhdGUuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3NpYUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5p
Y29zaWFQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKQEAgLTE3NCw2ICsxNzUsMTEgQEAgc3RydWN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlIHsKIH07CiAKIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgewor
ICAgIHN0cnVjdCBOaWNvc2lhU3RhdGUgeworICAgICAgICBIYXNoU2V0PFJlZlB0cjxOaWNvc2lh
OjpDb21wb3NpdGlvbkxheWVyPj4gbGF5ZXJzOworICAgICAgICBSZWZQdHI8Tmljb3NpYTo6Q29t
cG9zaXRpb25MYXllcj4gcm9vdExheWVyOworICAgIH0gbmljb3NpYTsKKwogICAgIHVpbnQzMl90
IHJvb3RDb21wb3NpdGluZ0xheWVyOwogCiAgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4g
bGF5ZXJzVG9DcmVhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCmlu
ZGV4IDNiNzA4ZjhkYWM5Li5lOGNlZjY4MTk0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHAKQEAgLTgyLDcgKzgyLDggQEAgdm9pZCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZSh1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwK
IHsKICAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5maW5kKGlkKTsKICAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQt
PnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIFdURk1vdmUoYnVmZmVy
KSwgb2Zmc2V0KTsKKyAgICBpZiAoaXQgIT0gbV90aWxlcy5lbmQoKSkKKyAgICAgICAgaXQtPnZh
bHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIFdURk1vdmUoYnVmZmVyKSwg
b2Zmc2V0KTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6c2V0U2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5j
cHAKaW5kZXggNjJkYmViNGY4NWMuLjU3ODU5YzVhN2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC02Niw2ICs2Niw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpCiAgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBmb3IgKGF1dG8mIGxheWVyIDogbV9uaWNvc2lhLmxheWVycykKKyAgICAgICAgY29tbWl0TGF5
ZXIoKmxheWVyKTsKKwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKICAg
ICBmb3IgKGF1dG8mIHByb3h5IDogbV9wbGF0Zm9ybUxheWVyUHJveGllcy52YWx1ZXMoKSkKICAg
ICAgICAgcHJveHktPnN3YXBCdWZmZXIoKTsKQEAgLTQzMSw4ICs0MzQsNDQgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRH
cmFwaGljc1N0YXRlJgogICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKIAorICAg
IG1fbmljb3NpYSA9IHN0YXRlLm5pY29zaWE7CisKICAgICBDb21taXRTY29wZSBjb21taXRTY29w
ZTsKIAorICAgIHsKKyAgICAgICAgZGVjbHR5cGUobV9iYWNraW5nU3RvcmVzKSBhY3RpdmVCYWNr
aW5nU3RvcmVzOworICAgICAgICBmb3IgKGF1dG8mIHBsYXRmb3JtTGF5ZXIgOiBtX25pY29zaWEu
bGF5ZXJzKSB7CisgICAgICAgICAgICBhdXRvIGl0ID0gbV9iYWNraW5nU3RvcmVzLmZpbmQoJnBs
YXRmb3JtTGF5ZXItPnRleG1hcExheWVyKCkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1fYmFj
a2luZ1N0b3Jlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICBhY3RpdmVCYWNraW5nU3RvcmVzLmFk
ZChpdC0+a2V5LCBpdC0+dmFsdWUpOworICAgICAgICB9CisgICAgICAgIG1fYmFja2luZ1N0b3Jl
cyA9IFdURk1vdmUoYWN0aXZlQmFja2luZ1N0b3Jlcyk7CisgICAgfQorCisgICAgaWYgKG1fbmlj
b3NpYS5yb290TGF5ZXItPnRleG1hcExheWVyKCkuaWQoKSAhPSBtX3Jvb3RMYXllcklEKSB7Cisg
ICAgICAgIG1fcm9vdExheWVySUQgPSBtX25pY29zaWEucm9vdExheWVyLT50ZXhtYXBMYXllcigp
LmlkKCk7CisgICAgICAgIEFTU0VSVChtX3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkp
OworICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoJm1fbmljb3NpYS5yb290TGF5ZXItPnRl
eG1hcExheWVyKCkpOworICAgIH0KKworICAgIHN5bmNJbWFnZUJhY2tpbmdzKHN0YXRlLCBjb21t
aXRTY29wZSk7CisKKyAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9uaWNvc2lhLmxheWVycykKKyAg
ICAgICAgY29tbWl0TGF5ZXIoKmxheWVyLCBzdGF0ZSwgY29tbWl0U2NvcGUpOworCisjaWYgMAor
ICAgIGZwcmludGYoc3RkZXJyLCAibV9yb290TGF5ZXI6ICVwXG4iLCBtX3Jvb3RMYXllci5nZXQo
KSk7CisgICAgbV9yb290TGF5ZXItPmR1bXAoMSk7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN0
YXRlLnJvb3RMYXllci0+dGV4bWFwTGF5ZXIoKTogJXBcbiIsICZzdGF0ZS5yb290TGF5ZXItPnRl
eG1hcExheWVyKCkpOworICAgIHN0YXRlLnJvb3RMYXllci0+dGV4bWFwTGF5ZXIoKS5kdW1wKDEp
OworI2VuZGlmCisKKyAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IGNvbW1pdFNjb3BlLmJh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMpCisgICAgICAgIGJhY2tpbmdTdG9yZS0+Y29t
bWl0VGlsZU9wZXJhdGlvbnMoKm1fdGV4dHVyZU1hcHBlcik7CisKKyAgICByZXR1cm47CisKICAg
ICBjcmVhdGVMYXllcnMoc3RhdGUubGF5ZXJzVG9DcmVhdGUpOwogICAgIGRlbGV0ZUxheWVycyhz
dGF0ZS5sYXllcnNUb1JlbW92ZSk7CiAKQEAgLTQ5OCw2ICs1MzcsMTgwIEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpkZXRhY2goKQogICAgIG1fY2xpZW50ID0gbnVsbHB0cjsKIH0K
IAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdExheWVyKE5pY29zaWE6OkNv
bXBvc2l0aW9uTGF5ZXImIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgYXV0byB0ZXhtYXBMYXllckNv
bW1pdCA9CisgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyTGF5ZXImIGxheWVyLCBjb25zdCBO
aWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBsYXllclN0YXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQpCisg
ICAgICAgICAgICAgICAgbGF5ZXIuc2V0UG9zaXRpb24obGF5ZXJTdGF0ZS5wb3NpdGlvbik7Cisg
ICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5hbmNob3JQb2ludENoYW5nZWQpCisgICAg
ICAgICAgICAgICAgbGF5ZXIuc2V0QW5jaG9yUG9pbnQobGF5ZXJTdGF0ZS5hbmNob3JQb2ludCk7
CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5zaXplQ2hhbmdlZCkKKyAgICAgICAg
ICAgICAgICBsYXllci5zZXRTaXplKGxheWVyU3RhdGUuc2l6ZSk7CisKKyAgICAgICAgICAgIGlm
IChsYXllclN0YXRlLmRlbHRhLnRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgICAgICAgICAgbGF5
ZXIuc2V0VHJhbnNmb3JtKGxheWVyU3RhdGUudHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGlmIChs
YXllclN0YXRlLmRlbHRhLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgICAgICAg
ICBsYXllci5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3Jt
KTsKKworICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuY29udGVudHNSZWN0Q2hhbmdl
ZCkKKyAgICAgICAgICAgICAgICBsYXllci5zZXRDb250ZW50c1JlY3QobGF5ZXJTdGF0ZS5jb250
ZW50c1JlY3QpOworICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuY29udGVudHNUaWxp
bmdDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q29udGVudHNUaWxlUGhhc2Uo
bGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVQaGFzZSk7CisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0
Q29udGVudHNUaWxlU2l6ZShsYXllclN0YXRlLmNvbnRlbnRzVGlsZVNpemUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5vcGFjaXR5Q2hhbmdlZCkK
KyAgICAgICAgICAgICAgICBsYXllci5zZXRPcGFjaXR5KGxheWVyU3RhdGUub3BhY2l0eSk7Cisg
ICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICBsYXllci5zZXRTb2xpZENvbG9yKGxheWVyU3RhdGUuc29saWRDb2xvcik7CisK
KyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmZpbHRlcnNDaGFuZ2VkKQorICAgICAg
ICAgICAgICAgIGxheWVyLnNldEZpbHRlcnMobGF5ZXJTdGF0ZS5maWx0ZXJzKTsKKyAgICAgICAg
ICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmFuaW1hdGlvbnNDaGFuZ2VkKQorICAgICAgICAgICAg
ICAgIGxheWVyLnNldEFuaW1hdGlvbnMobGF5ZXJTdGF0ZS5hbmltYXRpb25zKTsKKworICAgICAg
ICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuY2hpbGRyZW5DaGFuZ2VkKSB7CisgICAgICAgICAg
ICAgICAgVmVjdG9yPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcio+IGNoaWxkcmVuOworICAg
ICAgICAgICAgICAgIGNoaWxkcmVuLnJlc2VydmVDYXBhY2l0eShsYXllclN0YXRlLmNoaWxkcmVu
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGxheWVyU3RhdGUu
Y2hpbGRyZW4pCisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZCgm
Y2hpbGQtPnRleG1hcExheWVyKCkpOworICAgICAgICAgICAgICAgIGxheWVyLnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUu
ZGVsdGEubWFza0NoYW5nZWQpCisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0TWFza0xheWVyKGxh
eWVyU3RhdGUubWFzayA/ICZsYXllclN0YXRlLm1hc2stPnRleG1hcExheWVyKCkgOiBudWxscHRy
KTsKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLnJlcGxpY2FDaGFuZ2VkKQorICAg
ICAgICAgICAgICAgIGxheWVyLnNldFJlcGxpY2FMYXllcihsYXllclN0YXRlLnJlcGxpY2EgPyAm
bGF5ZXJTdGF0ZS5yZXBsaWNhLT50ZXhtYXBMYXllcigpIDogbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRlbnRMYXllckNoYW5nZWQpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHByb3h5ID0gbGF5ZXJTdGF0ZS5jb250ZW50TGF5ZXIgPyBsYXllclN0YXRl
LmNvbnRlbnRMYXllci0+cHJveHkoKSA6IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKHBy
b3h5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllclByb3hpZXMuc2V0KCZs
YXllciwgcHJveHkpOworICAgICAgICAgICAgICAgICAgICBwcm94eS0+YWN0aXZhdGVPbkNvbXBv
c2l0aW5nVGhyZWFkKHRoaXMsICZsYXllcik7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllclByb3hpZXMucmVtb3ZlKCZsYXllcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmZsYWdzQ2hh
bmdlZCkgeworICAgICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRzT3BhcXVlKGxheWVyU3Rh
dGUuZmxhZ3MuY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgICAgIGxheWVyLnNldERyYXdz
Q29udGVudChsYXllclN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCk7CisgICAgICAgICAgICAgICAg
bGF5ZXIuc2V0Q29udGVudHNWaXNpYmxlKGxheWVyU3RhdGUuZmxhZ3MuY29udGVudHNWaXNpYmxl
KTsKKyAgICAgICAgICAgICAgICBsYXllci5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJTdGF0
ZS5mbGFncy5iYWNrZmFjZVZpc2libGUpOworICAgICAgICAgICAgICAgIGxheWVyLnNldE1hc2tz
VG9Cb3VuZHMobGF5ZXJTdGF0ZS5mbGFncy5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgICAgICAg
ICBsYXllci5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRlLmZsYWdzLnByZXNlcnZlczNEKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIHBsYXRmb3JtTGF5ZXIuY29tbWl0U3RhdGUo
CisgICAgICAgIFt0aGlzLCAmdGV4bWFwTGF5ZXJDb21taXQsICZwbGF0Zm9ybUxheWVyXShjb25z
dCBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBsYXllclN0YXRlKQorICAg
ICAgICB7CisgICAgICAgICAgICB0ZXhtYXBMYXllckNvbW1pdChwbGF0Zm9ybUxheWVyLnRleG1h
cExheWVyKCksIGxheWVyU3RhdGUpOworICAgICAgICB9KTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNvbW1pdExheWVyKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXImIHBs
YXRmb3JtTGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUsIENvbW1p
dFNjb3BlJiBjb21taXRTY29wZSkKK3sKKyAgICBhdXRvIHRleG1hcExheWVyQ29tbWl0ID0KKyAg
ICAgICAgW3RoaXMsICZzdGF0ZSwgJmNvbW1pdFNjb3BlXShUZXh0dXJlTWFwcGVyTGF5ZXImIGxh
eWVyLCBjb25zdCBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBsYXllclN0
YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5wb3NpdGlv
bkNoYW5nZWQpCisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0UG9zaXRpb24obGF5ZXJTdGF0ZS5w
b3NpdGlvbik7CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5hbmNob3JQb2ludENo
YW5nZWQpCisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0QW5jaG9yUG9pbnQobGF5ZXJTdGF0ZS5h
bmNob3JQb2ludCk7CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5zaXplQ2hhbmdl
ZCkKKyAgICAgICAgICAgICAgICBsYXllci5zZXRTaXplKGxheWVyU3RhdGUuc2l6ZSk7CisKKyAg
ICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLnRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAg
ICAgICAgICAgbGF5ZXIuc2V0VHJhbnNmb3JtKGxheWVyU3RhdGUudHJhbnNmb3JtKTsKKyAgICAg
ICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKKyAg
ICAgICAgICAgICAgICBsYXllci5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllclN0YXRlLmNoaWxk
cmVuVHJhbnNmb3JtKTsKKworICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuY29udGVu
dHNSZWN0Q2hhbmdlZCkKKyAgICAgICAgICAgICAgICBsYXllci5zZXRDb250ZW50c1JlY3QobGF5
ZXJTdGF0ZS5jb250ZW50c1JlY3QpOworICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEu
Y29udGVudHNUaWxpbmdDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q29udGVu
dHNUaWxlUGhhc2UobGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVQaGFzZSk7CisgICAgICAgICAgICAg
ICAgbGF5ZXIuc2V0Q29udGVudHNUaWxlU2l6ZShsYXllclN0YXRlLmNvbnRlbnRzVGlsZVNpemUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5vcGFj
aXR5Q2hhbmdlZCkKKyAgICAgICAgICAgICAgICBsYXllci5zZXRPcGFjaXR5KGxheWVyU3RhdGUu
b3BhY2l0eSk7CisgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5zb2xpZENvbG9yQ2hh
bmdlZCkKKyAgICAgICAgICAgICAgICBsYXllci5zZXRTb2xpZENvbG9yKGxheWVyU3RhdGUuc29s
aWRDb2xvcik7CisKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmZpbHRlcnNDaGFu
Z2VkKQorICAgICAgICAgICAgICAgIGxheWVyLnNldEZpbHRlcnMobGF5ZXJTdGF0ZS5maWx0ZXJz
KTsKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmFuaW1hdGlvbnNDaGFuZ2VkKQor
ICAgICAgICAgICAgICAgIGxheWVyLnNldEFuaW1hdGlvbnMobGF5ZXJTdGF0ZS5hbmltYXRpb25z
KTsKKworICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuY2hpbGRyZW5DaGFuZ2VkKSB7
CisgICAgICAgICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcio+IGNo
aWxkcmVuOworICAgICAgICAgICAgICAgIGNoaWxkcmVuLnJlc2VydmVDYXBhY2l0eShsYXllclN0
YXRlLmNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6
IGxheWVyU3RhdGUuY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZCgmY2hpbGQtPnRleG1hcExheWVyKCkpOworICAgICAgICAgICAgICAgIGxheWVy
LnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGxheWVyU3RhdGUuZGVsdGEubWFza0NoYW5nZWQpCisgICAgICAgICAgICAgICAgbGF5ZXIuc2V0
TWFza0xheWVyKGxheWVyU3RhdGUubWFzayA/ICZsYXllclN0YXRlLm1hc2stPnRleG1hcExheWVy
KCkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLnJlcGxpY2FD
aGFuZ2VkKQorICAgICAgICAgICAgICAgIGxheWVyLnNldFJlcGxpY2FMYXllcihsYXllclN0YXRl
LnJlcGxpY2EgPyAmbGF5ZXJTdGF0ZS5yZXBsaWNhLT50ZXhtYXBMYXllcigpIDogbnVsbHB0cik7
CisKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRlbnRMYXllckNoYW5nZWQp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHByb3h5ID0gbGF5ZXJTdGF0ZS5jb250ZW50TGF5ZXIg
PyBsYXllclN0YXRlLmNvbnRlbnRMYXllci0+cHJveHkoKSA6IG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllclBy
b3hpZXMuc2V0KCZsYXllciwgcHJveHkpOworICAgICAgICAgICAgICAgICAgICBwcm94eS0+YWN0
aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKHRoaXMsICZsYXllcik7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fcGxhdGZvcm1MYXllclByb3hpZXMucmVtb3Zl
KCZsYXllcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRl
bHRhLmZsYWdzQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRzT3Bh
cXVlKGxheWVyU3RhdGUuZmxhZ3MuY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgICAgIGxh
eWVyLnNldERyYXdzQ29udGVudChsYXllclN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCk7CisgICAg
ICAgICAgICAgICAgbGF5ZXIuc2V0Q29udGVudHNWaXNpYmxlKGxheWVyU3RhdGUuZmxhZ3MuY29u
dGVudHNWaXNpYmxlKTsKKyAgICAgICAgICAgICAgICBsYXllci5zZXRCYWNrZmFjZVZpc2liaWxp
dHkobGF5ZXJTdGF0ZS5mbGFncy5iYWNrZmFjZVZpc2libGUpOworICAgICAgICAgICAgICAgIGxh
eWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJTdGF0ZS5mbGFncy5tYXNrc1RvQm91bmRzKTsKKyAg
ICAgICAgICAgICAgICBsYXllci5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRlLmZsYWdzLnByZXNl
cnZlczNEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChhdXRvIGl0IDogc3Rh
dGUubGF5ZXJzVG9VcGRhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXQuZmlyc3QgPT0gbGF5
ZXIuaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVy
KCZsYXllciwgaXQuc2Vjb25kLmltYWdlSUQpOworCisgICAgICAgICAgICAgICAgICAgIHByZXBh
cmVDb250ZW50QmFja2luZ1N0b3JlKCZsYXllciwgY29tbWl0U2NvcGUpOworCisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldCgmbGF5ZXIp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgIGlmICghaXQuc2Vjb25k
LnRpbGVzVG9DcmVhdGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHRpbGUgOiBpdC5zZWNvbmQudGlsZXNUb0NyZWF0ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUodGlsZS50aWxlSUQsIHRpbGUuc2Nh
bGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghaXQu
c2Vjb25kLnRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHRpbGUgOiBpdC5zZWNvbmQudGlsZXNUb1JlbW92ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpdC5zZWNvbmQudGlsZXNU
b1VwZGF0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
dGlsZSA6IGl0LnNlY29uZC50aWxlc1RvVXBkYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlLnRpbGVJRCwgdGlsZS51cGRhdGVJbmZv
LnVwZGF0ZVJlY3QsIHRpbGUudGlsZVJlY3QsIHRpbGUudXBkYXRlSW5mby5idWZmZXIuY29weVJl
ZigpLCB7IDAsIDAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWl0LnNlY29uZC50aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSB8fCAhaXQuc2Vjb25k
LnRpbGVzVG9VcGRhdGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0
U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICBwbGF0
Zm9ybUxheWVyLmNvbW1pdFN0YXRlKAorICAgICAgICBbdGhpcywgJnN0YXRlLCAmY29tbWl0U2Nv
cGUsICZ0ZXhtYXBMYXllckNvbW1pdCwgJnBsYXRmb3JtTGF5ZXJdKGNvbnN0IE5pY29zaWE6OkNv
bXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIGxheWVyU3RhdGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRleG1hcExheWVyQ29tbWl0KHBsYXRmb3JtTGF5ZXIudGV4bWFwTGF5ZXIoKSwgbGF5
ZXJTdGF0ZSk7CisgICAgICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oCmluZGV4IGM1YmNiNTA2NGVkLi4zODdkMTIwNjQ3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0xNDIsNiArMTQyLDExIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBvbk5ld0J1ZmZlckF2YWlsYWJsZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAg
ICB2b2lkIGNvbW1pdExheWVyKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXImKTsKKyAgICB2b2lk
IGNvbW1pdExheWVyKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXImLCBjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUmLCBDb21taXRTY29wZSYpOworCisgICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOjpOaWNvc2lhU3RhdGUgbV9uaWNvc2lhOworCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsK
IAogICAgIEhhc2hNYXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRy
PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPj4gbV9pbWFnZUJhY2tpbmdzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0
b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5k
ZXggNmYxZmYyYzkzZTcuLjE3ZTFkZDQxODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBv
c2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKQEAgLTIyMCw3ICsyMjAs
NyBAQCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVuZGVyTGF5ZXJUcmVlKCkKICAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHN0YXRlIDogc3RhdGVzKQogICAgICAgICAgICAgICAgICAgICBj
b29yZGluYXRlVXBkYXRlIHw9IHN0ZDo6YW55X29mKHN0YXRlLmxheWVyc1RvVXBkYXRlLmJlZ2lu
KCksIHN0YXRlLmxheWVyc1RvVXBkYXRlLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
W10oYXV0byYgaXQpIHsgcmV0dXJuIGl0LnNlY29uZC5wbGF0Zm9ybUxheWVyQ2hhbmdlZCB8fCBp
dC5zZWNvbmQucGxhdGZvcm1MYXllclVwZGF0ZWQ7IH0pOwotICAgICAgICAgICAgICAgIG1fYXR0
cmlidXRlcy5jb29yZGluYXRlVXBkYXRlQ29tcGxldGlvbldpdGhDbGllbnQgPSBjb29yZGluYXRl
VXBkYXRlOworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlcy5jb29yZGluYXRlVXBkYXRlQ29t
cGxldGlvbldpdGhDbGllbnQgPSAvKiBjb29yZGluYXRlVXBkYXRlICovIGZhbHNlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKQEAgLTI5OCw2ICsyOTgsMTEgQEAgdm9pZCBUaHJlYWRlZENv
bXBvc2l0b3I6OnVwZGF0ZVNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
JiBzdGF0ZSkKICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUoKTsKIH0K
IAordm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlcXVlc3RVcGRhdGUoKQoreworICAgIG1fY29t
cG9zaXRpbmdSdW5Mb29wLT5zY2hlZHVsZVVwZGF0ZSgpOworfQorCiAjaWYgVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5
UmVmcmVzaE1vbml0b3I+IFRocmVhZGVkQ29tcG9zaXRvcjo6ZGlzcGxheVJlZnJlc2hNb25pdG9y
KFBsYXRmb3JtRGlzcGxheUlEKQogewpAQCAtMzE0LDcgKzMxOSw3IEBAIHZvaWQgVGhyZWFkZWRD
b21wb3NpdG9yOjpyZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKCkKICAgICAgICAg
Ly8gY29tcGxldGlvbiB1bnRpbCB0aGUgRGlzcGxheVJlZnJlc2hNb25pdG9yIGlzIGZpcmVkIG9u
IHRoZSBtYWluIHRocmVhZCBhZnRlciB0aGUgY29tcG9zaXRpb24KICAgICAgICAgLy8gaXMgY29t
cGxldGVkLgogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2F0dHJpYnV0ZXMubG9jayk7Ci0g
ICAgICAgIG1fYXR0cmlidXRlcy5jb29yZGluYXRlVXBkYXRlQ29tcGxldGlvbldpdGhDbGllbnQg
PSB0cnVlOworICAgICAgICBtX2F0dHJpYnV0ZXMuY29vcmRpbmF0ZVVwZGF0ZUNvbXBsZXRpb25X
aXRoQ2xpZW50ID0gLyogdHJ1ZSAqLyBmYWxzZTsKICAgICB9CiAgICAgbV9jb21wb3NpdGluZ1J1
bkxvb3AtPnNjaGVkdWxlVXBkYXRlKHN0YXRlTG9ja2VyKTsKIH0KQEAgLTM0Nyw3ICszNTIsNyBA
QCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6aGFuZGxlRGlzcGxheVJlZnJlc2hNb25pdG9yVXBk
YXRlKGJvb2wgaGFzQmVlblJlc2NoZWR1bAogICAgIGlmIChoYXNCZWVuUmVzY2hlZHVsZWQpIHsK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9hdHRyaWJ1dGVzLmxv
Y2spOwotICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLmNvb3JkaW5hdGVVcGRhdGVDb21wbGV0aW9u
V2l0aENsaWVudCA9IHRydWU7CisgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuY29vcmRpbmF0ZVVw
ZGF0ZUNvbXBsZXRpb25XaXRoQ2xpZW50ID0gLyogdHJ1ZSAqLyBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUoc3RhdGVMb2NrZXIp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFk
ZWRDb21wb3NpdG9yLmgKaW5kZXggMDM3ZmQ3NzBjNDMuLmRlMjQxYjI2ZGNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9z
aXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaApA
QCAtNzUsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9v
bCk7CiAKICAgICB2b2lkIHVwZGF0ZVNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJik7CisgICAgdm9pZCByZXF1ZXN0VXBkYXRlKCk7CiAKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBiMGZlNDMxNWJhZC4uOTNmOGE4MDQ0YjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3Bw
CkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYWdlQ2xpZW50SW1wbDo6
UGFnZUNsaWVudEltcGwoV0tXUEU6OlZpZXcmIHZpZXcpCiAgICAgOiBtX3ZpZXcodmlldykKLSAg
ICAsIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxHZXN0
dXJlQ29udHJvbGxlcj4oKSkKKyAgICAsIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIobV92aWV3
LnNjcm9sbEdlc3R1cmVDb250cm9sbGVyKCkpCiB7CiB9CiAKQEAgLTE4Nyw4ICsxODcsOCBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91
Y2hFdmVudCYgdG91Y2hFdmVudCwgYgogCiAgICAgYXV0byYgcGFnZSA9IG1fdmlldy5wYWdlKCk7
CiAKLSAgICBpZiAobV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlci0+aGFuZGxlRXZlbnQodG91Y2hQ
b2ludCkpIHsKLSAgICAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQg
PSBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyLT5heGlzRXZlbnQoKTsKKyAgICBpZiAobV9zY3Jv
bGxHZXN0dXJlQ29udHJvbGxlci5oYW5kbGVFdmVudCh0b3VjaFBvaW50KSkgeworICAgICAgICBz
dHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVudCA9IG1fc2Nyb2xsR2VzdHVyZUNv
bnRyb2xsZXIuYXhpc0V2ZW50KCk7CiAgICAgICAgIGlmIChheGlzRXZlbnQtPnR5cGUgIT0gd3Bl
X2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxsKQogICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVl
bEV2ZW50KFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudChheGlzRXZlbnQsIG1fdmlldy5wYWdl
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggYTJiYTZjNGU5
YTEuLmUxZmY0M2E1N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xMzYsOCArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb24oKSBvdmVycmlkZTsKIAogICAgIFdLV1BFOjpWaWV3JiBtX3ZpZXc7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+IG1fc2Nyb2xsR2VzdHVyZUNvbnRy
b2xsZXI7CisgICAgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXImIG1fc2Nyb2xsR2VzdHVyZUNvbnRy
b2xsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHAK
aW5kZXggZGExMmM4ZWIzNTEuLmEzMTNjZTdhMmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmNwcApA
QCAtMjcsMTkgKzI3LDM4IEBACiAjaW5jbHVkZSAiU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaCIK
IAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPG51bWVyaWM+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcjo6Q2xpZW50Ojp+Q2xpZW50KCkgPSBkZWZhdWx0OworCitTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcjo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoQ2xpZW50JiBjbGllbnQpCisgICAgOiBt
X2NsaWVudChjbGllbnQpCit7CisgICAgbV9raW5ldGljcy50aW1lciA9IHN0ZDo6bWFrZV91bmlx
dWU8UnVuTG9vcDo6VGltZXI8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+PihSdW5Mb29wOjptYWlu
KCksIHRoaXMsICZTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hDYWxsYmFjayk7Cit9
CisKK1Njcm9sbEdlc3R1cmVDb250cm9sbGVyOjp+U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKQor
eworfQorCiBib29sIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBz
dHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdyogdG91Y2hQb2ludCkKIHsKICAgICBzd2l0
Y2ggKHRvdWNoUG9pbnQtPnR5cGUpIHsKICAgICBjYXNlIHdwZV9pbnB1dF90b3VjaF9ldmVudF90
eXBlX2Rvd246Ci0gICAgICAgIG1fc3RhcnQudGltZSA9IHRvdWNoUG9pbnQtPnRpbWU7Ci0gICAg
ICAgIG1fc3RhcnQueCA9IHRvdWNoUG9pbnQtPng7Ci0gICAgICAgIG1fc3RhcnQueSA9IHRvdWNo
UG9pbnQtPnk7Ci0gICAgICAgIG1fb2Zmc2V0LnggPSB0b3VjaFBvaW50LT54OwotICAgICAgICBt
X29mZnNldC55ID0gdG91Y2hQb2ludC0+eTsKKyAgICB7CisgICAgICAgIGludDMyX3QgeCA9IHRv
dWNoUG9pbnQtPng7CisgICAgICAgIGludDMyX3QgeSA9IHRvdWNoUG9pbnQtPnk7CisgICAgICAg
IG1fc3RhcnQgPSB7IHRvdWNoUG9pbnQtPnRpbWUsIHgsIHkgfTsKKyAgICAgICAgbV9vZmZzZXQg
PSB7IHgsIHkgfTsKKyAgICAgICAgbV9raW5ldGljcy5sYXN0ID0geyB0b3VjaFBvaW50LT50aW1l
LCB4LCB5IH07CisgICAgICAgIG1fa2luZXRpY3MudmVsb2NpdHkgPSB7IH07CisgICAgICAgIG1f
a2luZXRpY3MuYXBwbGljYXRpb24gPSB7IH07CisgICAgICAgIG1fa2luZXRpY3MudGltZXItPnN0
b3AoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBjYXNlIHdwZV9pbnB1dF90
b3VjaF9ldmVudF90eXBlX21vdGlvbjoKICAgICAgICAgaWYgKCFtX2hhbmRsaW5nKSB7CiAgICAg
ICAgICAgICBpbnQzMl90IGRlbHRhWCA9IHRvdWNoUG9pbnQtPnggLSBtX3N0YXJ0Lng7CkBAIC00
OSw3ICs2OCw3IEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNv
bnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAgICAgICAgICAgICBpbnQgcGl4
ZWxzUGVyTGluZVN0ZXAgPSBXZWJDb3JlOjpTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7
CiAgICAgICAgICAgICBtX2hhbmRsaW5nID0gc3RkOjphYnMoZGVsdGFYKSA+PSBwaXhlbHNQZXJM
aW5lU3RlcAogICAgICAgICAgICAgICAgIHx8IHN0ZDo6YWJzKGRlbHRhWSkgPj0gcGl4ZWxzUGVy
TGluZVN0ZXAKLSAgICAgICAgICAgICAgICB8fCBkZWx0YVRpbWUgPj0gMjAwOworICAgICAgICAg
ICAgICAgIHx8IGRlbHRhVGltZSA+PSA2NDsKICAgICAgICAgfQogICAgICAgICBpZiAobV9oYW5k
bGluZykgewogICAgICAgICAgICAgbV9heGlzRXZlbnQgPSB7CkBAIC01OSw4ICs3OCwyNSBAQCBi
b29sIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3Bl
X2lucHV0X3RvdWNoX2V2ZW50X3JhdwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIG1fb2Zm
c2V0LnggPSB0b3VjaFBvaW50LT54OwogICAgICAgICAgICAgbV9vZmZzZXQueSA9IHRvdWNoUG9p
bnQtPnk7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBsYXN0ID0gbV9r
aW5ldGljcy5sYXN0OworICAgICAgICAgICAgICAgIGF1dG8mIHZlbG9jaXR5ID0gbV9raW5ldGlj
cy52ZWxvY2l0eTsKKyAgICAgICAgICAgICAgICBzdGQ6OnJvdGF0ZSh2ZWxvY2l0eS54LmJlZ2lu
KCksIHZlbG9jaXR5LnguYmVnaW4oKSArIDEsIHZlbG9jaXR5LnguZW5kKCkpOworICAgICAgICAg
ICAgICAgIHN0ZDo6cm90YXRlKHZlbG9jaXR5LnkuYmVnaW4oKSwgdmVsb2NpdHkueS5iZWdpbigp
ICsgMSwgdmVsb2NpdHkueS5lbmQoKSk7CisgICAgICAgICAgICAgICAgc3RkOjpyb3RhdGUodmVs
b2NpdHkudGltZS5iZWdpbigpLCB2ZWxvY2l0eS50aW1lLmJlZ2luKCkgKyAxLCB2ZWxvY2l0eS50
aW1lLmVuZCgpKTsKKworICAgICAgICAgICAgICAgIHZlbG9jaXR5LnguYmFjaygpID0gdG91Y2hQ
b2ludC0+eCAtIGxhc3QueDsKKyAgICAgICAgICAgICAgICB2ZWxvY2l0eS55LmJhY2soKSA9IHRv
dWNoUG9pbnQtPnkgLSBsYXN0Lnk7CisgICAgICAgICAgICAgICAgdmVsb2NpdHkudGltZS5iYWNr
KCkgPSB0b3VjaFBvaW50LT50aW1lIC0gbGFzdC50aW1lOworCisgICAgICAgICAgICAgICAgbGFz
dCA9IHsgdG91Y2hQb2ludC0+dGltZSwgdG91Y2hQb2ludC0+eCwgdG91Y2hQb2ludC0+eSB9Owor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorCisg
ICAgICAgIG1fa2luZXRpY3MubGFzdCA9IHsgdG91Y2hQb2ludC0+dGltZSwgdG91Y2hQb2ludC0+
eCwgdG91Y2hQb2ludC0+eSB9OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSB3cGVf
aW5wdXRfdG91Y2hfZXZlbnRfdHlwZV91cDoKICAgICAgICAgaWYgKG1faGFuZGxpbmcpIHsKQEAg
LTY5LDYgKzEwNSwyMCBAQCBib29sIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVu
dChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdwogICAgICAgICAgICAgICAg
IHdwZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVfbnVsbCwKICAgICAgICAgICAgICAgICAwLCAwLCAw
LCAwLCAwCiAgICAgICAgICAgICB9OworCisgICAgICAgICAgICBhdXRvJiB2ZWxvY2l0eSA9IG1f
a2luZXRpY3MudmVsb2NpdHk7CisgICAgICAgICAgICB1aW50MzJfdCBhY2N1bXVsYXRlZFRpbWUg
PSBzdGQ6OmFjY3VtdWxhdGUodmVsb2NpdHkudGltZS5iZWdpbigpLCB2ZWxvY2l0eS50aW1lLmVu
ZCgpLCAwKTsKKyAgICAgICAgICAgIGludDMyX3QgYWNjdW11bGF0ZWRYID0gc3RkOjphY2N1bXVs
YXRlKHZlbG9jaXR5LnguYmVnaW4oKSwgdmVsb2NpdHkueC5lbmQoKSwgMCk7CisgICAgICAgICAg
ICBpbnQzMl90IGFjY3VtdWxhdGVkWSA9IHN0ZDo6YWNjdW11bGF0ZSh2ZWxvY2l0eS55LmJlZ2lu
KCksIHZlbG9jaXR5LnkuZW5kKCksIDApOworICAgICAgICAgICAgZG91YmxlIHRyYWplY3RvcnlY
ID0gMTAwMC4wICogYWNjdW11bGF0ZWRYIC8gYWNjdW11bGF0ZWRUaW1lOworICAgICAgICAgICAg
ZG91YmxlIHRyYWplY3RvcnlZID0gMTAwMC4wICogYWNjdW11bGF0ZWRZIC8gYWNjdW11bGF0ZWRU
aW1lOworCisgICAgICAgICAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uID0geworICAgICAgICAg
ICAgICAgICAgICBnX2dldF9tb25vdG9uaWNfdGltZSgpLCB0b3VjaFBvaW50LT50aW1lLCB0b3Vj
aFBvaW50LT50aW1lLAorICAgICAgICAgICAgICAgICAgICB7IG1fc3RhcnQueCwgdHJhamVjdG9y
eVgsIHN0ZDo6YWJzKHRyYWplY3RvcnlYICogMC4yKSB9LAorICAgICAgICAgICAgICAgICAgICB7
IG1fc3RhcnQueSwgdHJhamVjdG9yeVksIHN0ZDo6YWJzKHRyYWplY3RvcnlZICogMC4yKSB9Cisg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIG1fa2luZXRpY3MudGltZXItPnN0YXJ0T25l
U2hvdChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKDE1KSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03Nyw0ICsxMjcsNDIg
QEAgYm9vbCBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0
IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcKICAgICB9CiB9CiAKK3ZvaWQgU2Nyb2xsR2VzdHVy
ZUNvbnRyb2xsZXI6OmRpc3BhdGNoQ2FsbGJhY2soKQoreworICAgIHVpbnQzMl90IHRpbWVPZmZz
ZXQgPSAoZ19nZXRfbW9ub3RvbmljX3RpbWUoKSAtIG1fa2luZXRpY3MuYXBwbGljYXRpb24uYmFz
ZU1vbm90b25pY1RpbWUpIC8gMTAwMDsKKyAgICB1aW50MzJfdCB0aW1lID0gbV9raW5ldGljcy5h
cHBsaWNhdGlvbi5iYXNlVGltZSArIHRpbWVPZmZzZXQ7CisgICAgdWludDMyX3QgdGltZURlbHRh
ID0gdGltZSAtIG1fa2luZXRpY3MuYXBwbGljYXRpb24ubGFzdFRpbWU7CisgICAgbV9raW5ldGlj
cy5hcHBsaWNhdGlvbi5sYXN0VGltZSA9IHRpbWU7CisKKyAgICBkb3VibGUgdHJhamVjdG9yeVhW
YWx1ZSA9IDA7CisgICAgaWYgKHRpbWVPZmZzZXQgPCBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLngu
ZHVyYXRpb24pIHsKKyAgICAgICAgdHJhamVjdG9yeVhWYWx1ZSA9IC1zdGQ6OnBvdyhkb3VibGUo
dGltZU9mZnNldCkgLyBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnguZHVyYXRpb24sIDIpICsgMTsK
KyAgICAgICAgdHJhamVjdG9yeVhWYWx1ZSA9IHN0ZDo6bWF4PGRvdWJsZT4odHJhamVjdG9yeVhW
YWx1ZSwgMCk7CisgICAgfQorCisgICAgZG91YmxlIHRyYWplY3RvcnlZVmFsdWUgPSAwOworICAg
IGlmICh0aW1lT2Zmc2V0IDwgbV9raW5ldGljcy5hcHBsaWNhdGlvbi55LmR1cmF0aW9uKSB7Cisg
ICAgICAgIHRyYWplY3RvcnlZVmFsdWUgPSAtc3RkOjpwb3coZG91YmxlKHRpbWVPZmZzZXQpIC8g
bV9raW5ldGljcy5hcHBsaWNhdGlvbi55LmR1cmF0aW9uLCAyKSArIDE7CisgICAgICAgIHRyYWpl
Y3RvcnlZVmFsdWUgPSBzdGQ6Om1heDxkb3VibGU+KHRyYWplY3RvcnlZVmFsdWUsIDApOworICAg
IH0KKworICAgIGJvb2wgYWN0aXZlVHJhamVjdG9yaWVzID0gISF0cmFqZWN0b3J5WFZhbHVlIHx8
ICEhdHJhamVjdG9yeVlWYWx1ZTsKKworICAgIGludDMyX3QgdHJhamVjdG9yeVlDaGFuZ2UgPSBt
X2tpbmV0aWNzLmFwcGxpY2F0aW9uLnkudHJhamVjdG9yeSAqIHRyYWplY3RvcnlZVmFsdWUgKiB0
aW1lRGVsdGEgLyAxMDAwLjA7CisgICAgaWYgKHRyYWplY3RvcnlZQ2hhbmdlKSB7CisgICAgICAg
IHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCBheGlzRXZlbnQgPSB7CisgICAgICAgICAgICB3
cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX21vdGlvbiwKKyAgICAgICAgICAgIG1fa2luZXRpY3Mu
YXBwbGljYXRpb24uYmFzZVRpbWUgKyB0aW1lT2Zmc2V0LAorICAgICAgICAgICAgbV9raW5ldGlj
cy5hcHBsaWNhdGlvbi54LmNvb3JkaW5hdGUsIG1fa2luZXRpY3MuYXBwbGljYXRpb24ueS5jb29y
ZGluYXRlLAorICAgICAgICAgICAgMiwgdHJhamVjdG9yeVlDaGFuZ2UKKyAgICAgICAgfTsKKyAg
ICAgICAgbV9jbGllbnQuZGlzcGF0Y2hBeGlzRXZlbnQoJmF4aXNFdmVudCk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IEFsc28gaGFuZGxlIGNoYW5nZSBpbiB0aGUgaG9yaXpvbnRhbCB0cmFqZWN0
b3J5LgorCisgICAgaWYgKGFjdGl2ZVRyYWplY3RvcmllcykKKyAgICAgICAgbV9raW5ldGljcy50
aW1lci0+c3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMTUpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgKaW5kZXggOWM5ZjZlOWUzYjEu
LjYyNmUxMThhZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oCkBAIC0yNSwxOSArMjUsMzQgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDx3cGUvd3BlLmg+Cisj
aW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNj
cm9sbEdlc3R1cmVDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBTY3JvbGxHZXN0dXJlQ29udHJv
bGxlcigpID0gZGVmYXVsdDsKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+Q2xpZW50KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQXhp
c0V2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCopID0gMDsKKyAgICB9OworCisgICAg
U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoQ2xpZW50Jik7CisgICAgflNjcm9sbEdlc3R1cmVDb250
cm9sbGVyKCk7CiAKICAgICBzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVudCgp
IHsgcmV0dXJuICZtX2F4aXNFdmVudDsgfQogCisgICAgYm9vbCBpc0hhbmRsaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9oYW5kbGluZzsgfQogICAgIGJvb2wgaGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0
IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcqKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpc3Bh
dGNoQ2FsbGJhY2soKTsKKworICAgIENsaWVudCYgbV9jbGllbnQ7CisKICAgICBzdHJ1Y3Qgewog
ICAgICAgICB1aW50MzJfdCB0aW1lIHsgMCB9OwogICAgICAgICBpbnQzMl90IHggeyAwIH07CkBA
IC00OSw2ICs2NCwzMiBAQCBwcml2YXRlOgogICAgICAgICBpbnQzMl90IHkgeyAwIH07CiAgICAg
fSBtX29mZnNldDsKIAorICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICB1aW50MzJfdCB0aW1lIHsgMCB9OworICAgICAgICAgICAgaW50MzJfdCB4IHsgMCB9OworICAg
ICAgICAgICAgaW50MzJfdCB5IHsgMCB9OworICAgICAgICB9IGxhc3Q7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PGludDMyX3QsIDQ+IHg7CisgICAgICAgICAgICBz
dGQ6OmFycmF5PGludDMyX3QsIDQ+IHk7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQzMl90
LCA0PiB0aW1lOworICAgICAgICB9IHZlbG9jaXR5OworCisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBpbnQ2NF90IGJhc2VNb25vdG9uaWNUaW1lIHsgMCB9OworICAgICAgICAgICAgdWlu
dDMyX3QgYmFzZVRpbWUgeyAwIH07CisgICAgICAgICAgICB1aW50MzJfdCBsYXN0VGltZSB7IDAg
fTsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBjb29yZGlu
YXRlIHsgMCB9OworICAgICAgICAgICAgICAgIGRvdWJsZSB0cmFqZWN0b3J5IHsgMCB9OworICAg
ICAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlvbiB7IDAgfTsKKyAgICAgICAgICAgIH0geCwgeTsK
KyAgICAgICAgfSBhcHBsaWNhdGlvbjsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuTG9v
cDo6VGltZXI8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+PiB0aW1lcjsKKyAgICB9IG1fa2luZXRp
Y3M7CisKICAgICBib29sIG1faGFuZGxpbmcgeyBmYWxzZSB9OwogICAgIHN0cnVjdCB3cGVfaW5w
dXRfYXhpc19ldmVudCBtX2F4aXNFdmVudDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmNwcAppbmRleCA0OGQ4MDQ0MTM1Zi4uOTRiYTJjODJiNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcApAQCAtNDMsNiArNDMs
NyBAQCBuYW1lc3BhY2UgV0tXUEUgewogCiBWaWV3OjpWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNr
ZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiBiYXNlQ29uZmlndXJh
dGlvbikKICAgICA6IG1fY2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpWaWV3Q2xpZW50Pigp
KQorICAgICwgbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPFNjcm9s
bEdlc3R1cmVDb250cm9sbGVyPigqdGhpcykpCiAgICAgLCBtX3BhZ2VDbGllbnQoc3RkOjptYWtl
X3VuaXF1ZTxQYWdlQ2xpZW50SW1wbD4oKnRoaXMpKQogICAgICwgbV9zaXplIHsgODAwLCA2MDAg
fQogICAgICwgbV92aWV3U3RhdGVGbGFncyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpXaW5kb3dJ
c0FjdGl2ZSB8IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCB8IFdlYkNvcmU6OkFj
dGl2aXR5U3RhdGU6OklzVmlzaWJsZSB8IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzSW5XaW5k
b3cpCkBAIC0xMjYsOCArMTI3LDI3IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tl
bmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAgICAg
IC8vIGhhbmRsZV90b3VjaF9ldmVudAogICAgICAgICBbXSh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd3Bl
X2lucHV0X3RvdWNoX2V2ZW50KiBldmVudCkKICAgICAgICAgewotICAgICAgICAgICAgYXV0byYg
cGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vmlldyo+KGRhdGEpLT5wYWdlKCk7Ci0gICAgICAgICAg
ICBwYWdlLmhhbmRsZVRvdWNoRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJUb3VjaEV2ZW50KGV2ZW50
LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgICAgIGF1dG8mIHZpZXcgPSAq
cmVpbnRlcnByZXRfY2FzdDxWaWV3Kj4oZGF0YSk7CisgICAgICAgICAgICBhdXRvJiBwYWdlID0g
dmlldy5wYWdlKCk7CisKKyAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAg
ICAgICAgICBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQgbmF0aXZlRXZlbnQoZXZlbnQsIHBh
Z2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICAgICAgICAgIGF1dG8mIHNjcm9sbEdlc3R1
cmVDb250cm9sbGVyID0gKnZpZXcubV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcjsKKyAgICAgICAg
ICAgIGlmIChzY3JvbGxHZXN0dXJlQ29udHJvbGxlci5pc0hhbmRsaW5nKCkpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdyogdG91Y2hQb2lu
dCA9IG5hdGl2ZUV2ZW50Lm5hdGl2ZUZhbGxiYWNrVG91Y2hQb2ludCgpOworICAgICAgICAgICAg
ICAgIGlmICh0b3VjaFBvaW50LT50eXBlICE9IHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX251
bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxl
RXZlbnQodG91Y2hQb2ludCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogYXhpc0V2
ZW50ID0gc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChheGlzRXZlbnQtPnR5cGUgIT0gd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9u
dWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktp
dDo6TmF0aXZlV2ViV2hlZWxFdmVudChheGlzRXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3Io
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFoYW5kbGVkKQorICAgICAgICAgICAgICAgIHBhZ2UuaGFuZGxlVG91Y2hFdmVudChuYXRpdmVF
dmVudCk7CiAgICAgICAgIH0sCiAgICAgICAgIC8vIHBhZGRpbmcKICAgICAgICAgbnVsbHB0ciwK
QEAgLTE4OCw0ICsyMDgsMTAgQEAgdm9pZCBWaWV3OjpjbG9zZSgpCiAgICAgbV9wYWdlUHJveHkt
PmNsb3NlKCk7CiB9CiAKK3ZvaWQgVmlldzo6ZGlzcGF0Y2hBeGlzRXZlbnQoc3RydWN0IHdwZV9p
bnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQpCit7CisgICAgYXV0byYgcGFnZSA9IHRoaXMtPnBh
Z2UoKTsKKyAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2
ZW50KGF4aXNFdmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdLV1BFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dQRVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCmlu
ZGV4IDJhZDE4ZmZmNzQyLi4yNDZkMGM2OGFkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmgKQEAgLTI4LDEyICsyOCwxNCBAQAogI2luY2x1ZGUgIkFQSU9iamVj
dC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW5nTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUGFn
ZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJTY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5o
PgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIHR5cGVkZWYg
c3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNHbG9iYWxDb250ZXh0UmVmOworc3RydWN0IHdwZV9p
bnB1dF9heGlzX2V2ZW50Owogc3RydWN0IHdwZV92aWV3X2JhY2tlbmQ7CiAKIG5hbWVzcGFjZSBB
UEkgewpAQCAtNDIsMTMgKzQ0LDE0IEBAIGNsYXNzIFZpZXdDbGllbnQ7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94eTsKK2NsYXNzIFNjcm9sbEdlc3R1cmVDb250cm9s
bGVyOwogY2xhc3MgV2ViUGFnZUdyb3VwOwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiB9CiAKIG5h
bWVzcGFjZSBXS1dQRSB7CiAKLWNsYXNzIFZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpWaWV3PiB7CitjbGFzcyBWaWV3IDogcHVibGljIEFQSTo6T2JqZWN0
SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Vmlldz4sIHB1YmxpYyBXZWJLaXQ6OlNjcm9sbEdlc3R1
cmVDb250cm9sbGVyOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBWaWV3KiBjcmVhdGUo
c3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAgewpAQCAtNzcsMTMgKzgwLDE5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEZ1bGxTY3JlZW4oYm9vbCBmdWxsU2NyZWVuU3RhdGUpIHsgbV9mdWxsU2Ny
ZWVuTW9kZUFjdGl2ZSA9IGZ1bGxTY3JlZW5TdGF0ZTsgfTsKICNlbmRpZgogCisgICAgV2ViS2l0
OjpTY3JvbGxHZXN0dXJlQ29udHJvbGxlciYgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKSBjb25z
dCB7IHJldHVybiAqbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcjsgfQorCiBwcml2YXRlOgogICAg
IFZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0
aW9uJik7CiAKICAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCisg
ICAgLy8gU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OkNsaWVudAorICAgIHZvaWQgZGlzcGF0Y2hB
eGlzRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50Kikgb3ZlcnJpZGU7CisKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiBtX2NsaWVudDsKIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyPiBtX3Njcm9sbEdlc3R1cmVD
b250cm9sbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsPiBt
X3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94
eTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5k
ZXggNWNlZDhiZTBlN2YuLjUyYTNkZGYyYTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAt
MTUxLDcgKzE1MSw5IEBAIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c2V0UGFpbnRpbmdF
bmFibGVkKGJvb2wgcGFpbnRpbmdFbmFibGVkKQogCiB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWE6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQog
ewotICAgIG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLnNldEZvcmNlQ29tcG9zaXRp
bmdNb2RlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6Zm9yY2VD
b21wb3NpdGluZ01vZGVLZXkoKSkpOworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fd2ViUGFn
ZS5jb3JlUGFnZSgpLT5zZXR0aW5ncygpOworICAgIHNldHRpbmdzLnNldEZvcmNlQ29tcG9zaXRp
bmdNb2RlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6Zm9yY2VD
b21wb3NpdGluZ01vZGVLZXkoKSkpOworICAgIHNldHRpbmdzLnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCh0cnVlKTsKICAgICBpZiAoIW1fbGF5ZXJUcmVl
SG9zdCkKICAgICAgICAgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShudWxscHRyKTsK
IH0KQEAgLTE2OCw2ICsxNzAsMTEgQEAgdm9pZCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjptYWlu
RnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICNlbmRpZgogfQog
Citib29sIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OnN1cHBvcnRzQXN5bmNTY3JvbGxpbmcoKQor
eworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6Omxh
eWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKIHsKICAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVk
RHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWEuaAppbmRleCBlZmM2NTBlOWRiMS4uN2U5YmRjNGY5YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0Fy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERy
YXdpbmdBcmVhLmgKQEAgLTU0LDYgKzU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBkYXRl
UHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYpIG92ZXJyaWRlOwogICAgIHZv
aWQgbWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBv
dmVycmlkZTsKIAorICAgIGJvb2wgc3VwcG9ydHNBc3luY1Njcm9sbGluZygpIG92ZXJyaWRlOwor
CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5
ZXJGbHVzaCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggYmFhZTE0MWVkNjAuLjcwM2RlMmNhN2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5jcHAKQEAgLTEwMiw2ICsxMDIsMzYgQEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpz
aXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAgICAgbm90aWZ5Rmx1c2hSZXF1
aXJlZChtX3Jvb3RMYXllci5nZXQoKSk7CiB9CiAKK3ZvaWQgZHVtcFBsYXRmb3JtTGF5ZXIoTmlj
b3NpYTo6Q29tcG9zaXRpb25MYXllciYgbGF5ZXIsIHVuc2lnbmVkIGluZGVudGF0aW9uKQorewor
ICAgIGF1dG8gd3JpdGVJbmRlbnRhdGlvbiA9CisgICAgICAgIFtdKHVuc2lnbmVkIGlkKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaWQ7ICsraSkKKyAg
ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICB8Iik7CisgICAgICAgIH07CisKKyAg
ICBsYXllci5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgWyZsYXllciwgJndyaXRlSW5kZW50YXRpb24s
IGluZGVudGF0aW9uXShjb25zdCBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRl
JiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgd3JpdGVJbmRlbnRhdGlvbihpbmRlbnRh
dGlvbik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxheWVyKCVwKTogaWQgJWx1IHBv
c2l0aW9uICglLjJmLCUuMmYpIGFuY2hvclBvaW50ICglLjJmLCUuMmYsJS4yZikgc2l6ZSAoJS4y
ZiwlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAmbGF5ZXIsIGxheWVyLmlkKCksIHN0YXRlLnBv
c2l0aW9uLngoKSwgc3RhdGUucG9zaXRpb24ueSgpLAorICAgICAgICAgICAgICAgIHN0YXRlLmFu
Y2hvclBvaW50LngoKSwgc3RhdGUuYW5jaG9yUG9pbnQueSgpLCBzdGF0ZS5hbmNob3JQb2ludC56
KCksCisgICAgICAgICAgICAgICAgc3RhdGUuc2l6ZS53aWR0aCgpLCBzdGF0ZS5zaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIHdyaXRlSW5kZW50YXRpb24oaW5kZW50YXRpb24pOworICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIgIGNoaWxkcmVuWyV6dV0gcmVwbGljYSAlcCBtYXNrICVw
XG4iLAorICAgICAgICAgICAgICAgIHN0YXRlLmNoaWxkcmVuLnNpemUoKSwgc3RhdGUucmVwbGlj
YS5nZXQoKSwgc3RhdGUubWFzay5nZXQoKSk7CisgICAgICAgICAgICB3cml0ZUluZGVudGF0aW9u
KGluZGVudGF0aW9uKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBmbGFncyB7ICVk
LCAlZCwgJWQsICVkLCAlZCwgJWQgfVxuIiwKKyAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncy5j
b250ZW50c09wYXF1ZSwgc3RhdGUuZmxhZ3MuZHJhd3NDb250ZW50LCBzdGF0ZS5mbGFncy5jb250
ZW50c1Zpc2libGUsCisgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MuYmFja2ZhY2VWaXNpYmxl
LCBzdGF0ZS5mbGFncy5tYXNrc1RvQm91bmRzLCBzdGF0ZS5mbGFncy5wcmVzZXJ2ZXMzRCk7CisK
KyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBzdGF0ZS5jaGlsZHJlbikKKyAgICAgICAg
ICAgICAgICBkdW1wUGxhdGZvcm1MYXllcigqY2hpbGQsIGluZGVudGF0aW9uICsgMSk7CisgICAg
ICAgIH0pOworfQorCiBib29sIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcygpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVz
aGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7CkBAIC0xMjIsNiArMTUyLDEzIEBAIGJvb2wgQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIAogICAgIGZsdXNo
UGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKIAorI2lmIDAKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpXG4i
KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0bV9yb290TGF5ZXIgJXAsIG1fcm9vdExheWVyLnBs
YXRmb3JtTGF5ZXIoKSAlcFxuIiwKKyAgICAgICAgbV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdExh
eWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIGR1bXBQbGF0Zm9ybUxheWVyKCptX3Jvb3RMYXll
ci0+cGxhdGZvcm1MYXllcigpLCAxKTsKKyNlbmRpZgorCiAgICAgaWYgKG1fc2hvdWxkU3luY0Zy
YW1lKSB7CiAgICAgICAgIGRpZFN5bmMgPSB0cnVlOwogCkBAIC0xNzEsNyArMjA4LDkgQEAgdm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjppbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJ
Zk5lZWRlZCgpCiAgICAgaWYgKG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gZG93
bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPigqbV9yb290TGF5ZXIpLmlkKCk7CisgICAg
YXV0byYgcm9vdExheWVyID0gZG93bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPigqbV9y
b290TGF5ZXIpOworICAgIG1fc3RhdGUubmljb3NpYS5yb290TGF5ZXIgPSBkb3duY2FzdDxOaWNv
c2lhOjpDb21wb3NpdGlvbkxheWVyPihyb290TGF5ZXIucGxhdGZvcm1MYXllcigpKTsKKyAgICBt
X3N0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyID0gcm9vdExheWVyLmlkKCk7CiAgICAgbV9kaWRJ
bml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwogICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKIH0KQEAgLTI2MSw2ICszMDAsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzTGF5ZXI+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3Jh
cGgKIHsKICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihsYXllclR5cGUsIGNsaWVudCk7CiAgICAgbGF5ZXItPnNldENvb3Jk
aW5hdG9yKHRoaXMpOworICAgIHsKKyAgICAgICAgYXV0byogcGxhdGZvcm1MYXllciA9IGxheWVy
LT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzPE5pY29zaWE6OkNv
bXBvc2l0aW9uTGF5ZXI+KHBsYXRmb3JtTGF5ZXIpKTsKKyAgICAgICAgbV9zdGF0ZS5uaWNvc2lh
LmxheWVycy5hZGQoZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4ocGxhdGZvcm1M
YXllcikpOworICAgICAgICBwbGF0Zm9ybUxheWVyLT5zZXRTY2VuZUludGVncmF0aW9uKG1fY2xp
ZW50LnNjZW5lSW50ZWdyYXRpb24oKSk7CisgICAgfQogICAgIG1fcmVnaXN0ZXJlZExheWVycy5h
ZGQobGF5ZXItPmlkKCksIGxheWVyKTsKICAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmFwcGVu
ZChsYXllci0+aWQoKSk7CiAgICAgbGF5ZXItPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50
KCk7CkBAIC0yOTYsMTIgKzM0MSwxMyBAQCB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRl
dmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCiAgICAgbV9yb290TGF5ZXItPmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQogCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit2b2lkIENv
bXBvc2l0aW5nQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogbGF5ZXIsIE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXImIHBsYXRmb3JtTGF5ZXIpCiB7CiAg
ICAgaWYgKG1faXNQdXJnaW5nKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3JlZ2lzdGVyZWRM
YXllcnMucmVtb3ZlKGxheWVyLT5pZCgpKTsKKyAgICBtX3N0YXRlLm5pY29zaWEubGF5ZXJzLnJl
bW92ZSgmcGxhdGZvcm1MYXllcik7CiAKICAgICBzaXplX3QgaW5kZXggPSBtX3N0YXRlLmxheWVy
c1RvQ3JlYXRlLmZpbmQobGF5ZXItPmlkKCkpOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aAppbmRleCA0NjRlYjllZTQ1Zi4uYWJlN2M5OTkxNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC00MCw2ICs0MCw3IEBACiAK
IG5hbWVzcGFjZSBOaWNvc2lhIHsKIGNsYXNzIFBhaW50aW5nRW5naW5lOworY2xhc3MgU2NlbmVJ
bnRlZ3JhdGlvbjsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsNiArNjIsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgPSAwOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGNv
bW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikg
PSAwOworICAgICAgICB2aXJ0dWFsIFJlZlB0cjxOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBz
Y2VuZUludGVncmF0aW9uKCkgPSAwOwogICAgIH07CiAKICAgICBDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yKFdlYkNvcmU6OlBhZ2UqLCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQmKTsKQEAg
LTEwNSw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdl
cygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQog
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgUmVmPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGV0
YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqLCBO
aWNvc2lhOjpDb21wb3NpdGlvbkxheWVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhdHRhY2hMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICBOaWNv
c2lhOjpQYWludGluZ0VuZ2luZSYgcGFpbnRpbmdFbmdpbmUoKSBvdmVycmlkZTsKICAgICB2b2lk
IHN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDUwNjFiNzVk
ZGE5Li4yOTY5Nzk1ZDc3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC03MCw2ICs3MCw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJs
ZUNvbnRlbnRSZWN0KSBvdmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBv
dmVycmlkZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OwogICAgIHZvaWQgY29tbWl0U2NlbmVT
dGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsK
KyAgICBSZWZQdHI8Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlvbigp
IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIGxheWVy
Rmx1c2hUaW1lckZpcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDU0MTk4NTFl
MTEyLi5mZGZlZTMwNzYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDYgKzM1
LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lh
U2NlbmVJbnRlZ3JhdGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNTksNiArNjAsNyBAQCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUAogICAg
IDogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2NvbXBvc2l0b3JD
bGllbnQoKnRoaXMpCiAgICAgLCBtX3N1cmZhY2UoQWNjZWxlcmF0ZWRTdXJmYWNlOjpjcmVhdGUo
d2ViUGFnZSwgKnRoaXMpKQorICAgICwgbV9zY2VuZUludGVncmF0aW9uKGFkb3B0UmVmKCpuZXcg
Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbigqdGhpcykpKQogICAgICwgbV92aWV3cG9ydENvbnRy
b2xsZXIod2ViUGFnZS5zaXplKCkpCiB7CiAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKSkgewpAQCAtMTA1LDYgKzEwNywxMSBAQCB2b2lkIFRo
cmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmcmFtZUNvbXBsZXRlKCkKICAgICBtX2Nv
bXBvc2l0b3ItPmZyYW1lQ29tcGxldGUoKTsKIH0KIAorUmVmUHRyPE5pY29zaWE6OlNjZW5lSW50
ZWdyYXRpb24+IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2VuZUludGVncmF0
aW9uKCkKK3sKKyAgICByZXR1cm4gbV9zY2VuZUludGVncmF0aW9uLmNvcHlSZWYoKTsKK30KKwog
dWludDY0X3QgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VI
YW5kbGVGb3JDb21wb3NpdGluZygpCiB7CiAgICAgaWYgKCFtX3N1cmZhY2UpCkBAIC0yNTcsNiAr
MjY0LDExIEBAIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNj
ZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljCiAgICAgbV9jb21wb3NpdG9yLT51cGRh
dGVTY2VuZVN0YXRlKHN0YXRlKTsKIH0KIAordm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6cmVxdWVzdFVwZGF0ZSgpCit7CisgICAgbV9jb21wb3NpdG9yLT5yZXF1ZXN0VXBk
YXRlKCk7Cit9CisKIHZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldElz
RGlzY2FyZGFibGUoYm9vbCBkaXNjYXJkYWJsZSkKIHsKICAgICBtX2lzRGlzY2FyZGFibGUgPSBk
aXNjYXJkYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCA2MjlkZGFmNjFhNy4uYmFhODVm
MTJmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJTaW1wbGVWaWV3cG9ydENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaHJlYWRlZENvbXBvc2l0b3IuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL05pY29zaWFTY2VuZUludGVncmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw3ICs0NiwxMCBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QgZmluYWwgOiBwdWJsaWMgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LCBwdWJs
aWMgQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQgeworY2xhc3MgVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QgZmluYWwKKyAgICA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhv
c3QKKyAgICAsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudAorICAgICwgcHVibGlj
IE5pY29zaWE6OlNjZW5lSW50ZWdyYXRpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UmKTsK
ICAgICB2aXJ0dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwpAQCAtMTE0
LDYgKzExOCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGNvbW1pdFNjZW5lU3Rh
dGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7CiAK
KyAgICAvLyBOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uOjpDbGllbnQKKyAgICB2b2lkIHJlcXVl
c3RVcGRhdGUoKSBvdmVycmlkZTsKKwogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9E
SVNQTEFZX01PTklUT1IpCiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlE
KSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIxLDYgKzEyOCw5IEBAIHByaXZhdGU6CiAgICAgLy8g
QWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKICAgICB2b2lkIGZyYW1lQ29tcGxldGUoKSBvdmVy
cmlkZTsKIAorICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAorICAgIFJlZlB0
cjxOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgb3ZlcnJpZGU7
CisKICAgICB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsKICAg
ICB2b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKTsKICAgICB2b2lkIHdpbGxSZW5kZXJGcmFtZSgp
OwpAQCAtMTM2LDYgKzE0Niw3IEBAIHByaXZhdGU6CiAgICAgQ29tcG9zaXRvckNsaWVudCBtX2Nv
bXBvc2l0b3JDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3VyZmFjZT4g
bV9zdXJmYWNlOwogICAgIFJlZlB0cjxUaHJlYWRlZENvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsK
KyAgICBSZWY8Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gbV9zY2VuZUludGVncmF0aW9uOwog
ICAgIFNpbXBsZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKICAgICBm
bG9hdCBtX2xhc3RQYWdlU2NhbGVGYWN0b3IgeyAxIH07CiAgICAgV2ViQ29yZTo6SW50UG9pbnQg
bV9sYXN0U2Nyb2xsUG9zaXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346471</attachid>
            <date>2018-08-03 03:37:11 -0700</date>
            <delta_ts>2018-08-09 23:23:52 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>platform-layers.patch</filename>
            <type>text/plain</type>
            <size>162058</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCmluZGV4IGIzM2FhMGNkYWZlLi4wZjJkZDRjZmE5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCkBAIC0yNjMs
NyArMjYzLDYgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZVRyZWU6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jaWZuZGVmIE5ERUJVRwogdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkKIHsKICAgICBpZiAoIXRyZWUpCkBA
IC0yODcsNiArMjg2LDQgQEAgdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKICAgICBzaG93U2Nyb2xsaW5nU3RhdGVUcmVl
KCZub2RlLT5zY3JvbGxpbmdTdGF0ZVRyZWUoKSk7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLy8g
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaApp
bmRleCAzYjI1NjE1MWFkNy4uNmFlNmYzM2RiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCkBAIC05OSw5ICs5OSw3IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2lmbmRlZiBOREVCVUcKIHZvaWQg
c2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUq
KTsKIHZvaWQgc2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCmluZGV4IDgzMDM1MzY0OGNlLi5hYzNkOTk4NTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcApAQCAtODcsNiArODcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKCkKIAogICAgIGF1dG8gdHJlZVN0
YXRlID0gc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmNvbW1pdChMYXllclJlcHJlc2VudGF0aW9uOjpQ
bGF0Zm9ybUxheWVyUmVwcmVzZW50YXRpb24pOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdHJlZVN0YXRlID0gV1RGTW92ZSh0cmVlU3RhdGUp
XSgpIG11dGFibGUgeworICAgICAgICAvLyBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CiAgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRl
KFdURk1vdmUodHJlZVN0YXRlKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1N0YXRlTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAzZDY4YWU2NmE4Zi4uMTkwZTU4YWFlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nU3RhdGVO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtMjYsMjIgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6
cmV0YWluUGxhdGZvcm1MYXllcih2b2lkKikKK3ZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6cmV0
YWluUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5ZXJUeXBlZCh0eXBl
bGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPnJlZigpOwogfQogCi12b2lkIExheWVyUmVwcmVz
ZW50YXRpb246OnJlbGVhc2VQbGF0Zm9ybUxheWVyKHZvaWQqKQordm9pZCBMYXllclJlcHJlc2Vu
dGF0aW9uOjpyZWxlYXNlUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5
ZXJUeXBlZCh0eXBlbGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPmRlcmVmKCk7CiB9CiAKIFBs
YXRmb3JtTGF5ZXIqIExheWVyUmVwcmVzZW50YXRpb246Om1ha2VQbGF0Zm9ybUxheWVyVHlwZWQo
dm9pZCogdHlwZWxlc3NMYXllcikKQEAgLTU2LDQgKzU3LDQgQEAgdm9pZCogTGF5ZXJSZXByZXNl
bnRhdGlvbjo6bWFrZVBsYXRmb3JtTGF5ZXJUeXBlbGVzcyhQbGF0Zm9ybUxheWVyKiBsYXllcikK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZi
ZmNhNGRmZDUxLi4wNDEyYTY3OTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFw
aGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRn
cmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oIgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKQEAgLTY2LDQgKzY2LDQgQEAgUmVmPFNjcm9sbGlu
Z1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y3JlYXRlU2Nyb2xs
aW5nVHJlZU5vZGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8v
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmNwcAppbmRleCAyMmNkMWZmNzcxOS4uNTVkMzNkZTA3YTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMjgsOSArMjgs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQ
bGF0Zm9ybUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzUyLDQ0
IEBAIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCkKICAg
ICBzY3JvbGxpbmdUcmVlKCkuZml4ZWRPclN0aWNreU5vZGVSZW1vdmVkKCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQog
eworICAgIGF1dG8mIGZpeGVkTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
PihzdGF0ZU5vZGUpOworCisgICAgaWYgKGZpeGVkTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZv
cm1MYXllciogbGF5ZXIgPSBmaXhlZE5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXll
ciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBmaXhl
ZE5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJl
ZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQordm9pZCBTY3JvbGxp
bmdUcmVlRml4ZWROb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgRmxvYXRQ
b2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9yVmlld3Bv
cnRSZWN0KGZpeGVkUG9zaXRpb25SZWN0KTsKKyAgICBsYXllclBvc2l0aW9uIC09IGN1bXVsYXRp
dmVEZWx0YTsKKworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbExheWVy
LT5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgYW5jaG9yUG9pbnQgPSBzdGF0ZS5hbmNob3JQb2ludDsKKyAgICAgICAgICAgIGF1
dG8mIHNpemUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkKKyAgICAg
ICAgICAgICAgICArIEZsb2F0UG9pbnQoYW5jaG9yUG9pbnQueCgpICogc2l6ZS53aWR0aCgpLCBh
bmNob3JQb2ludC55KCkgKiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9KTsKKworICAgIGlmIChtX2NoaWxkcmVuKSB7CisgICAgICAgIEZs
b2F0U2l6ZSBuZXdEZWx0YSA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25BdExhc3RMYXlvdXQoKSArIGN1bXVsYXRpdmVEZWx0YTsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0Fm
dGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBuZXdEZWx0
YSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmgKaW5kZXggZDBhYTg3OTI0MjIuLjNkNWRiYjUxMDkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlTm9kZS5oIgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00
Myw4ICs0NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCBlY2M2ZjMxNzMwNi4u
ODNjM2YyNTYzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nv
b3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCkBAIC0yOCw3ICsyOCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKworI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVy
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsMjUgKzQ3LDE0MCBAQCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0
ZWRHcmFwaGljczo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTgogCiBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6flNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzKCkgPSBkZWZhdWx0OwogCi12b2lkIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRTdGF0ZUJlZm9yZUNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIC8vZnBy
aW50ZihzdGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRH
cmFwaGljczo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbigpIGNoYW5nZWQgcHJvcGVydGllcyAl
ZFxuIiwKKyAgICAvLyAgICBzdGF0ZU5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKSk7CisgICAgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihz
dGF0ZU5vZGUpOworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOworCisgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIg
PSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXllciA9IGRv
d25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJp
bnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogU2Nyb2xsTGF5ZXIgJXAgaWQgJWx1XG4i
LCBtX3Njcm9sbExheWVyLmdldCgpLCBtX3Njcm9sbExheWVyID8gbV9zY3JvbGxMYXllci0+aWQo
KSA6IDApOworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikp
IHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAg
ICAgICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBTY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJXAgaWQgJWx1XG4iLCBtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSwgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgPyBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+aWQoKSA6IDAp
OworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkg
eworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKTsKKyAgICAgICAgbV9jb3VudGVyU2Nyb2xsaW5n
TGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAg
ICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQgcHJvcGVydHk6IENvdW50ZXJTY3JvbGxp
bmdMYXllciAlcFxuIiwgbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOworICAgIH0KKyAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6
OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmluc2V0Q2xpcExheWVy
KCk7CisgICAgICAgIG1faW5zZXRDbGlwTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3Np
dGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQg
cHJvcGVydHk6IEluc2V0Q2xpcExheWVyICVwXG4iLCBtX2luc2V0Q2xpcExheWVyLmdldCgpKTsK
KyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpIHsKKyAg
ICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUu
Y29udGVudFNoYWRvd0xheWVyKCk7CisgICAgICAgIG1fY29udGVudFNoYWRvd0xheWVyID0gZG93
bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2Zwcmlu
dGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBDb250ZW50U2hhZG93TGF5ZXIgJXBcbiIs
IG1fY29udGVudFNoYWRvd0xheWVyLmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkhlYWRlckxheWVyKSkgeworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oZWFkZXJMYXllcigpOworICAgICAgICBtX2hlYWRlckxh
eWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAg
ICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBIZWFkZXJMYXllciAlcFxu
IiwgbV9oZWFkZXJMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpG
b290ZXJMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKTsKKyAgICAgICAgbV9mb290ZXJMYXllciA9
IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9m
cHJpbnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogRm9vdGVyTGF5ZXIgJXBcbiIsIG1f
Zm9vdGVyTGF5ZXIuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogeworICAgIC8vZnByaW50Zihz
dGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKCkgY2hhbmdlZCBwcm9wZXJ0aWVzICVkXG4iLAor
ICAgIC8vICAgIHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYg
KCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxCeSh7
IHdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworCisgICAgLy8g
VE9ETzoKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVs
RXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuaGFuZGxl
V2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyB9OworICAgIEFTU0VSVChtX3Njcm9sbExh
eWVyKTsKKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb247CisgICAgbV9zY3JvbGxMYXll
ci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKGNvbnN0IE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICBzY3JvbGxQb3NpdGlvbiA9IC1zdGF0ZS5wb3NpdGlvbjsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIHNjcm9sbFBvc2l0aW9uOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQog
eworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29v
cmRpbmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBGbG9hdFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRl
bnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7Cisg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBsYXlvdXRWaWV3cG9ydE9yaWdpbjsKKyAgICBp
ZiAoc2Nyb2xsaW5nVHJlZSgpLnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKSB7CisgICAgICAgIEZs
b2F0UG9pbnQgdmlzaWJsZUNvbnRlbnRPcmlnaW4gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICAgICAg
RmxvYXRSZWN0IG5ld0xheW91dFZpZXdwb3J0ID0gbGF5b3V0Vmlld3BvcnRGb3JTY3JvbGxQb3Np
dGlvbih2aXNpYmxlQ29udGVudE9yaWdpbiwgZnJhbWVTY2FsZUZhY3RvcigpKTsKKyAgICAgICAg
c2V0TGF5b3V0Vmlld3BvcnQobmV3TGF5b3V0Vmlld3BvcnQpOworICAgICAgICBsYXlvdXRWaWV3
cG9ydE9yaWdpbiA9IG5ld0xheW91dFZpZXdwb3J0LmxvY2F0aW9uKCk7CisgICAgfQorCisgICAg
c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnQoKSk7
CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGlu
Z05vZGVJRCgpLCBzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmlnaW4pOwogfQogCi12
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkKIHsKKyAgICAvL2ZwcmludGYoc3Rk
ZXJyLCAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldFNjcm9sbExheWVyUG9zaXRpb24oKSBwb3NpdGlvbiAoJS4yZiwlLjJmKSBsYXlvdXRWaWV3
cG9ydCAoJS4yZiwlLjJmKXgoJS4yZiwlLjJmKVxuIiwKKyAgICAvLyAgICBzY3JvbGxQb3NpdGlv
bi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSwKKyAgICAvLyAgICBsYXlvdXRWaWV3cG9ydC54KCks
IGxheW91dFZpZXdwb3J0LnkoKSwgbGF5b3V0Vmlld3BvcnQud2lkdGgoKSwgbGF5b3V0Vmlld3Bv
cnQuaGVpZ2h0KCkpOworCisgICAgYXV0byB1cGRhdGVTY29wZSA9IG1fc2Nyb2xsTGF5ZXItPmNy
ZWF0ZVVwZGF0ZVNjb3BlKCk7CisKKyAgICBBU1NFUlQobV9zY3JvbGxMYXllcik7CisgICAgbV9z
Y3JvbGxMYXllci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKE5pY29z
aWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKKyAgICAgICAgICAgIHN0
YXRlLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgRmxv
YXRSZWN0IHZpc2libGVDb250ZW50UmVjdChzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsYWJsZUFyZWFT
aXplKCkpOworICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdDsKKyAgICBTY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCA9IFN0aWNrVG9WaWV3cG9ydEJv
dW5kczsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkudmlzdWFsVmlld3BvcnRFbmFibGVkKCkp
CisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0gbGF5b3V0Vmlld3BvcnQ7CisgICAgZWxzZSB7
CisgICAgICAgIGJlaGF2aW9yRm9yRml4ZWQgPSBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMoKTsKKworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJl
biA9IEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKGVuY2xvc2luZ0xh
eW91dFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KSwgTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6
ZSgpKSwKKyAgICAgICAgICAgIExheW91dFBvaW50KHNjcm9sbFBvc2l0aW9uKSwgc2Nyb2xsT3Jp
Z2luKCksIGZyYW1lU2NhbGVGYWN0b3IoKSwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9G
cmFtZSgpLCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkp
OworCisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0geyBzY3JvbGxQb3NpdGlvbkZvckZpeGVk
Q2hpbGRyZW4sIHZpc2libGVDb250ZW50UmVjdC5zaXplKCkgfTsKKyAgICB9CisKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQgPSB0aGlzLT50b3BDb250ZW50SW5zZXQoKTsKKyAgICBpZiAobV9p
bnNldENsaXBMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiB0b3BDb250ZW50SW5z
ZXQpIHsKKyAgICAgICAgLy8gVE9ETzogLi4uCisgICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4p
IHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAg
Y2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRp
b25SZWN0LCBGbG9hdFNpemUoKSk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjp1cGRhdGVMYXllcnNBZnRlclZpZXdw
b3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKQEAgLTcxLDQgKzE4OSw0IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnVw
ZGF0ZUxheWVyc0FmdGVyVmlld3BvCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oCmluZGV4IDY1MDg2Y2M5MmJkLi5iZTdiZDY3NmFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaApAQCAtMjcsMTAgKzI3
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MgZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZSB7CkBAIC00MSw2ICs0Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3Mo
U2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpOwogCisg
ICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9k
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNj
cm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgRmxvYXRQb2ludCBz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDksOCArNTQsMTYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlclZp
ZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Cisg
ICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2luc2V0Q2xpcExh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFk
b3dMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJM
YXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRp
bmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmNwcAppbmRleCAwMzIyZTY3NmE2OC4uOWVkNThlYTBiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCkBAIC0yOCw5ICsyOCwx
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzU0LDU5IEBAIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKQogICAgIHNjcm9sbGluZ1RyZWUo
KS5maXhlZE9yU3RpY2t5Tm9kZVJlbW92ZWQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGls
ZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKKyAgICBhdXRvJiBz
dGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlPihzdGF0ZU5vZGUp
OworCisgICAgaWYgKHN0aWNreU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
Tm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxh
eWVyID0gc3RpY2t5Tm9kZS5sYXllcigpOworICAgICAgICBtX3Njcm9sbExheWVyID0gZG93bmNh
c3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgIH0KKworICAgIGlmIChz
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZTo6Vmll
d3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBzdGlja3lOb2RlLnZp
ZXdwb3J0Q29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpCit2b2lkIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGlu
Z1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVj
dCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgYm9vbCBhZGp1c3RT
dGlja3lMYXllciA9IGZhbHNlOworICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0OworCisg
ICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkp
IHsKKyAgICAgICAgY29uc3RyYWluaW5nUmVjdCA9IEZsb2F0UmVjdChkb3duY2FzdDxTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqcGFyZW50KCkpLnNjcm9sbFBvc2l0aW9uKCks
IG1fY29uc3RyYWludHMuY29uc3RyYWluaW5nUmVjdEF0TGFzdExheW91dCgpLnNpemUoKSk7Cisg
ICAgICAgIGFkanVzdFN0aWNreUxheWVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGlzPFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkpIHsKKyAgICAgICAgY29uc3Ry
YWluaW5nUmVjdCA9IGZpeGVkUG9zaXRpb25SZWN0OworICAgICAgICBhZGp1c3RTdGlja3lMYXll
ciA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRTaXplIGRlbHRhRm9yRGVzY2VuZGFudHMgPSBj
dW11bGF0aXZlRGVsdGE7CisKKyAgICBpZiAoYWRqdXN0U3RpY2t5TGF5ZXIpIHsKKyAgICAgICAg
RmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9y
Q29uc3RyYWluaW5nUmVjdChjb25zdHJhaW5pbmdSZWN0KTsKKworICAgICAgICBBU1NFUlQobV9z
Y3JvbGxMYXllcik7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFjY2Vzc1N0YXRlKAorICAgICAg
ICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpM
YXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBh
bmNob3JQb2ludCA9IHN0YXRlLmFuY2hvclBvaW50OworICAgICAgICAgICAgICAgIGF1dG8mIHNp
emUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9
IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpCisgICAgICAg
ICAgICAgICAgICAgICsgRmxvYXRQb2ludChhbmNob3JQb2ludC54KCkgKiBzaXplLndpZHRoKCks
IGFuY2hvclBvaW50LnkoKSAqIHNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHN0YXRl
LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgc3RhdGUuZGVsdGEucG9zaXRp
b25DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGRlbHRhRm9yRGVz
Y2VuZGFudHMgPSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRM
YXN0TGF5b3V0KCkgKyBjdW11bGF0aXZlRGVsdGE7CisgICAgfQorCisgICAgaWYgKG1fY2hpbGRy
ZW4pIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAg
ICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZp
eGVkUG9zaXRpb25SZWN0LCBkZWx0YUZvckRlc2NlbmRhbnRzKTsKKyAgICB9CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCmluZGV4IGYzMTMz
YTcwOGM3Li5lYjE4ZjRjZWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgogCisj
aW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUg
ZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgewpAQCAtNDMsOCArNDYsMTEgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
bmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0
b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJh
aW50cyBtX2NvbnN0cmFpbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZQppbmRleCA4NjEwODVmODI5ZS4uNGRhZGI4ZGY1NDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtNDQsMTcgKzQ0LDI2IEBA
IGlmIChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlybyIKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwIgogICAgICkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhQnVmZmVyLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFHQzNETGF5ZXIuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nQ29udGV4dC5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdFbmdpbmUu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5n
aW5lQmFzaWMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBh
aW50aW5nRW5naW5lVGhyZWFkZWQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvTmljb3NpYVNjZW5lLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFTY2VuZUludGVncmF0aW9uLmNwcAogCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENh
aXJvLmNwcAorCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbXBvc2l0aW9uTGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGwu
Y3BwCiAgICAgKQogZWxzZSAoKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKaW5kZXggNDMwOGFjZjE0MjUuLjhlNDcyNDU3YWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTg0LDYgKzg0
LDEyIEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc1N1cmZhY2UzRDsKIGNvbnN0IFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAw
OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CiAKKyNp
ZiBVU0UoTklDT1NJQSkKK25hbWVzcGFjZSBOaWNvc2lhIHsKK2NsYXNzIEdDM0RMYXllcjsKK30K
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFeHRlbnNpb25zM0Q7CiAjaWYg
IVBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQpAQCAtMTQ4MSw3ICsxNDg3LDEwIEBA
IHByaXZhdGU6CiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgog
ICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKIAotI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBmcmllbmQgY2xhc3MgTmljb3Np
YTo6R0MzRExheWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpHQzNETGF5ZXI+IG1fY29udGVudExh
eWVyOworI2VsaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJHQzNEUGxhdGZvcm1MYXllcj4gbV90ZXhtYXBMYXllcjsKICNlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKaW5kZXggMTBmY2YxNDg1
ZWMuLjkyYmEzMmQxMDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1MYXllci5oCkBAIC0zMCw2ICszMCwxMSBAQCBPQkpDX0NMQVNTIENBTGF5ZXI7
CiB0eXBlZGVmIENBTGF5ZXIgUGxhdGZvcm1MYXllcjsKICNlbGlmIFBMQVRGT1JNKFdJTikgJiYg
VVNFKENBKQogdHlwZWRlZiBzdHJ1Y3QgX0NBQ0ZMYXllciBQbGF0Zm9ybUxheWVyOworI2VsaWYg
VVNFKE5JQ09TSUEpCituYW1lc3BhY2UgTmljb3NpYSB7CitjbGFzcyBQbGF0Zm9ybUxheWVyOwor
fQordHlwZWRlZiBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyIFBsYXRmb3JtTGF5ZXI7CiAjZWxpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCmluZGV4IDg5YTQxZjFmNTc4Li4zMzY2M2RkM2Y1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKQEAgLTkwLDEwICs5MCwxNSBAQCBJbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVy
RGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZAogICAg
ICwgbV90ZXh0dXJlKDApCiAjZW5kaWYKIHsKKyAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIGlmIChtX3Jl
bmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgICAgIG1fY29udGVudExheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVh
dGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3Rvcnko
KnRoaXMpKTsKKyNlbHNlCiAgICAgICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOwogI2VuZGlmCisjZW5kaWYKKyAg
ICB9CiB9CiAKIEltYWdlQnVmZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCkBAIC0xMzksNiAr
MTQ0LDMxIEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkK
ICAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJ
QUxJQVNfTk9ORSk7CiB9CiAKKyNpZiBVU0UoTklDT1NJQSkKK3ZvaWQgSW1hZ2VCdWZmZXJEYXRh
Ojpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZl
Q29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JU
ZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKworICAgICAgICBh
dXRvJiBwcm94eSA9ICpkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbD4obV9jb250ZW50TGF5ZXItPmltcGwoKSkucHJveHkoKTsKKworICAgICAgICBMb2NrSG9s
ZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihz
dGQ6Om1ha2VfdW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBv
c2l0b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JH
QkEpKTsKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0
IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVh
a3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxy
ZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUg
Y29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgorICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAw
LCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkp
OworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3Rp
dmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCiBSZWZQdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gSW1hZ2VCdWZmZXJEYXRhOjpwcm94eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKQEAgLTE2NSw2
ICsxOTUsNyBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAg
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAj
ZW5kaWYKKyNlbmRpZgogCiB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UpCiB7CkBAIC02NzEsOCArNzAyLDEzIEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGCiBQbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CiAjaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKKyAgICAg
ICAgcmV0dXJuIG1fZGF0YS5tX2NvbnRlbnRMYXllci5nZXQoKTsKKyNlbHNlCiAgICAgaWYgKG1f
ZGF0YS5tX3RleHR1cmUpCiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0
YSo+KCZtX2RhdGEpOworI2VuZGlmCiAjZW5kaWYKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0
YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckRhdGFDYWlyby5oCmluZGV4IDEyMDUyOGZkNGEwLi43NzhiMzQ5NGMwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oCkBAIC0zOCw2ICszOCwxMCBAQAogI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lh
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEludFNpemU7CkBAIC00NSw4ICs0OSwxMiBAQCBjbGFzcyBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwogCiBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEKICNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIDogcHVi
bGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKKyNlbHNl
CiAgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgogI2VuZGlmCisjZW5kaWYKIHsKIHB1YmxpYzoK
ICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwpAQCAt
NjIsMTQgKzcwLDIzIEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7
CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjZWxzZQogICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2VuZGlm
CiAgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CiAgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKICAgICB1aW50MzJfdCBt
X2NvbXBvc2l0b3JUZXh0dXJlOwogICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsK
KworI2lmIFVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1f
Y29udGVudExheWVyOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKICNlbHNlCiAgICAgdmlydHVh
bCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwCmluZGV4IGUzNjM1ZDIyMWY5Li5hOTU3MTY3ZTc0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcApAQCAtMjg0LDEz
ICsyODQsMjEgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBsYXllciogcGwKICAgICAsIG1fbmV0d29ya1N0YXRl
KE1lZGlhUGxheWVyOjpFbXB0eSkKICAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwg
dGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnQpCiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFVTRShOSUNPU0lBKQorICAgICwgbV9jb250ZW50TGF5
ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKKyNlbHNlCiAgICAgLCBtX3Bs
YXRmb3JtTGF5ZXJQcm94eShhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSgpKSkKICNlbmRpZgorI2VuZGlmCiB7CiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKCkKIHsKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5p
bnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEp
CiAgICAgbV9wcm90ZWN0aW9uQ29uZGl0aW9uLm5vdGlmeUFsbCgpOwogI2VuZGlmCkBAIC03MzUs
NiArNzQzLDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6YWNjZWxl
cmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQogfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cGxh
dGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fY29u
dGVudExheWVyLnB0cigpOworI2Vsc2UKKyAgICByZXR1cm4gY29uc3RfY2FzdDxNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlKj4odGhpcyk7CisjZW5kaWYKK30KKworI2lmIFVTRShOSUNP
U0lBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKCkKK3sKK30KKyNlbHNlCiBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cHJveHkoKSBjb25zdAogewog
ICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7CkBAIC03NDMsNiArNzY1
LDcgQEAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnByb3h5KCkKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiB7CiB9CisjZW5kaWYKIAogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigp
CiB7CkBAIC03NTAsMzIgKzc3Myw0MiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OnB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCkKICAgICBpZiAoIUdTVF9JU19TQU1QTEUo
bV9zYW1wbGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBMb2NrSG9sZGVyIGhvbGRl
cihtX3BsYXRmb3JtTGF5ZXJQcm94eS0+bG9jaygpKTsKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9u
ID0KKyAgICAgICAgWyZdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQor
ICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwog
Ci0gICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXJQcm94eS0+aXNBY3RpdmUoKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFt
ZUhvbGRlciA9IHN0ZDo6bWFrZV91bmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUu
Z2V0KCksIHRleE1hcEZsYWdGcm9tT3JpZW50YXRpb24obV92aWRlb1NvdXJjZU9yaWVudGF0aW9u
KSwgIW1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEdz
dFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCB0ZXhNYXBGbGFnRnJvbU9yaWVudGF0
aW9uKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiksICFtX3VzaW5nRmFsbGJhY2tWaWRlb1Npbmsp
OwogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHTHVpbnQgdGV4dHVyZUlEID0gZnJhbWVI
b2xkZXItPnRleHR1cmVJRCgpOwotICAgIGlmICh0ZXh0dXJlSUQpIHsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9
IHN0ZDo6bWFrZV91bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KHRleHR1
cmVJRCwgZnJhbWVIb2xkZXItPnNpemUoKSwgZnJhbWVIb2xkZXItPmZsYWdzKCksIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBKTsKLSAgICAgICAgbGF5ZXJCdWZmZXItPnNldFVubWFuYWdlZEJ1ZmZl
ckRhdGFIb2xkZXIoV1RGTW92ZShmcmFtZUhvbGRlcikpOwotICAgICAgICBtX3BsYXRmb3JtTGF5
ZXJQcm94eS0+cHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOwotICAgIH0gZWxz
ZQorICAgICAgICAgICAgR0x1aW50IHRleHR1cmVJRCA9IGZyYW1lSG9sZGVyLT50ZXh0dXJlSUQo
KTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlSUQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0g
c3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4odGV4dHVy
ZUlELCBmcmFtZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+ZmxhZ3MoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRVbm1hbmFn
ZWRCdWZmZXJEYXRhSG9sZGVyKFdURk1vdmUoZnJhbWVIb2xkZXIpKTsKKyAgICAgICAgICAgICAg
ICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7CisgICAgICAgICAg
ICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gYnVmZmVyID0gcHJveHku
Z2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5zaXplKCksIEdMX0RPTlRfQ0FSRSk7Cisg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJD
b250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5y
ZXNldChmcmFtZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+aGFzQWxwaGFDaGFubmVsKCkg
PyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsK
KyAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGZyYW1lSG9sZGVyLT51cGRhdGVUZXh0dXJlKGJ1ZmZlci0+
dGV4dHVyZUdMKCkpOworICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0RXh0cmFGbGFncyh0ZXhN
YXBGbGFnRnJvbU9yaWVudGF0aW9uKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikgfCAoZnJhbWVI
b2xkZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6
IDApKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGJ1ZmZl
cikpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
cHJveHlPcGVyYXRpb24oKmRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX2NvbnRlbnRMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgcHJv
eHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKICNlbmRpZgotICAgIHsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBidWZm
ZXIgPSBtX3BsYXRmb3JtTGF5ZXJQcm94eS0+Z2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVy
LT5zaXplKCksIEdMX0RPTlRfQ0FSRSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkg
ewotICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoVGV4
dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJl
LT5yZXNldChmcmFtZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+aGFzQWxwaGFDaGFubmVs
KCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFn
KTsKLSAgICAgICAgICAgIGJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOwotICAgICAgICB9Ci0gICAgICAg
IGZyYW1lSG9sZGVyLT51cGRhdGVUZXh0dXJlKGJ1ZmZlci0+dGV4dHVyZUdMKCkpOwotICAgICAg
ICBidWZmZXItPnNldEV4dHJhRmxhZ3ModGV4TWFwRmxhZ0Zyb21PcmllbnRhdGlvbihtX3ZpZGVv
U291cmNlT3JpZW50YXRpb24pIHwgKGZyYW1lSG9sZGVyLT5oYXNBbHBoYUNoYW5uZWwoKSA/IFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKSk7Ci0gICAgICAgIG1fcGxhdGZvcm1MYXll
clByb3h5LT5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlcikpOwotICAgIH0KIH0KICNlbmRp
ZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKQEAgLTgxNiwxNCArODQ5LDI4IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxl
KiBzYW1wbGUpCiAgICAgfQogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIGlmICht
X3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fZHJh
d011dGV4KTsKLSAgICAgICAgaWYgKCFtX3BsYXRmb3JtTGF5ZXJQcm94eS0+c2NoZWR1bGVVcGRh
dGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdIHsgdGhpcy0+cHVzaFRleHR1cmVUb0NvbXBvc2l0
b3IoKTsgfSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZHJhd1RpbWVyLnN0YXJ0
T25lU2hvdCgwX3MpOwotICAgICAgICBtX2RyYXdDb25kaXRpb24ud2FpdChtX2RyYXdNdXRleCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7CisjaWYgVVNF
KEdTVFJFQU1FUl9HTCkKKyAgICBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOworI2Vsc2UKKyAg
ICB7CisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICAgICAgWyZdKFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7CisgICAgICAgICAgICAgICAg
aWYgKCFwcm94eS5zY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZChbdGhpc10geyB0aGlz
LT5wdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOyB9KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd011dGV4KTsK
KyAgICAgICAgICAgIH07CisKKyNpZiAwCisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5
T3BlcmF0aW9uKCptX2NvbnRlbnRMYXllci0+cHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94
eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKKyAgICB9
CisjZW5kaWYKICNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiB9CiAKQEAgLTg4MSwx
MiArOTI4LDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Zmx1c2hD
dXJyZW50QnVmZmVyKCkKICAgICBtX3NhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhu
dWxscHRyLCBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKSwKICAgICAgICAgZ3N0
X3NhbXBsZV9nZXRfc2VnbWVudChtX3NhbXBsZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJl
X2NvcHkoaW5mbykgOiBudWxscHRyKSk7CiAKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcGxhdGZvcm1MYXllclByb3h5LT5sb2NrKCkpOworICAgIGF1dG8gcHJveHlPcGVyYXRp
b24gPQorICAgICAgICBbXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkK
KyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIocHJveHkubG9jaygpKTsK
IAotICAgICAgICBpZiAobV9wbGF0Zm9ybUxheWVyUHJveHktPmlzQWN0aXZlKCkpCi0gICAgICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eS0+ZHJvcEN1cnJlbnRCdWZmZXJXaGlsZVByZXNlcnZp
bmdUZXh0dXJlKCk7Ci0gICAgfQorICAgICAgICAgICAgaWYgKHByb3h5LmlzQWN0aXZlKCkpCisg
ICAgICAgICAgICAgICAgcHJveHkuZHJvcEN1cnJlbnRCdWZmZXJXaGlsZVByZXNlcnZpbmdUZXh0
dXJlKCk7CisgICAgICAgIH07CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJhdGlv
bigqZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fY29u
dGVudExheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICBwcm94eU9wZXJhdGlvbigq
bV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKaW5kZXggMzBjYTAyZTI5
ZDcuLjU4ZjZiMTkwODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmgKQEAgLTM3LDggKzM3LDEyIEBACiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAogI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJQSkKKyNp
bmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCiAjZW5k
aWYKKyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZv
bHVtZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwpAQCAtNjMs
OCArNjcsMTIgQEAgdm9pZCByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CiAKIGNs
YXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQ
cml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZT4KICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgLCBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6
OkNsaWVudAorI2Vsc2UKICAgICAsIHB1YmxpYyBQbGF0Zm9ybUxheWVyCiAjZW5kaWYKKyNlbmRp
ZgogewogCiBwdWJsaWM6CkBAIC0xMjYsNyArMTM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWNj
ZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKIAogI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gY29uc3RfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKj4odGhpcyk7IH0KKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
b3ZlcnJpZGU7CiAjaWYgUExBVEZPUk0oV0lOX0NBSVJPKQogICAgIC8vIEZJWE1FOiBBY2NlbGVy
YXRlZCByZW5kZXJpbmcgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGZvciBXaW5DYWlybyB5ZXQu
CiAgICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3NSw5ICsxODMsMTMgQEAgcHJvdGVjdGVkOgogI2VuZGlm
CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgdm9pZCBwdXNoVGV4dHVyZVRvQ29t
cG9zaXRvcigpOworI2lmIFVTRShOSUNPU0lBKQorICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRl
ZCgpIG92ZXJyaWRlOworI2Vsc2UKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7Cisj
ZW5kaWYKICNlbmRpZgogCiAgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rKCkgY29uc3QgeyByZXR1
cm4gbV92aWRlb1NpbmsuZ2V0KCk7IH0KQEAgLTIzOCw4ICsyNTAsMTIgQEAgcHJvdGVjdGVkOgog
ICAgIFJ1bkxvb3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U+IG1fZHJh
d1RpbWVyOwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFVTRShOSUNPU0lBKQor
ICAgIFJlZjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fY29udGVudExheWVyOworI2Vsc2UKICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVy
UHJveHk7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgVVNFKEdTVFJFQU1FUl9HTCkKICAgICBHUmVm
UHRyPEdzdEdMQ29udGV4dD4gbV9nbENvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFHQzNETGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhR0MzRExheWVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGQ2YjVmYzBhZjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05p
Y29zaWFHQzNETGF5ZXIuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJOaWNvc2lhR0MzRExheWVyLmgiCisKKyNpZiBVU0UoTklDT1NJQSkKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCisj
aW5jbHVkZSAiR0xDb250ZXh0LmgiCisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0dDM0RMYXllcjo6R0MzRExheWVyKEdyYXBoaWNzQ29udGV4dDNE
JiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCisg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fY29udGVudExheWVyKE5pY29zaWE6OkNv
bnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
OjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCit7CisgICAgc3dpdGNoIChyZW5kZXJTdHlsZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlck9mZnNjcmVlbjoKKyAgICAgICAgbV9n
bENvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdzoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
R0MzRExheWVyOjp+R0MzRExheWVyKCkKK3sKKyAgICBkb3duY2FzdDxDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbD4obV9jb250ZW50TGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgp
OworfQorCitib29sIEdDM0RMYXllcjo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBBU1NF
UlQobV9nbENvbnRleHQpOworICAgIHJldHVybiBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR0MzRExheWVyOjpwbGF0Zm9y
bUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2dsQ29udGV4dCk7CisgICAgcmV0dXJuIG1fZ2xD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKK30KKwordm9pZCBHQzNETGF5ZXI6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQoKQoreworICAgIGlmIChtX2NvbnRleHQubGF5ZXJDb21wb3NpdGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC5wcmVwYXJlVGV4dHVyZSgpOworICAgIElu
dFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9j
dXJyZW50SGVpZ2h0KTsKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gVGV4dHVy
ZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSB8IChtX2NvbnRleHQubV9hdHRycy5hbHBoYSA/
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKTsKKworICAgIHsKKyAgICAgICAgYXV0
byYgcHJveHkgPSAqZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw+KG1fY29udGVudExheWVyLT5pbXBsKCkpLnByb3h5KCk7CisKKyAgICAgICAgTG9ja0hvbGRl
ciBob2xkZXIocHJveHkubG9jaygpKTsKKyAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoc3Rk
OjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb250ZXh0
Lm1fY29tcG9zaXRvclRleHR1cmUsIHRleHR1cmVTaXplLCBmbGFncywgbV9jb250ZXh0Lm1faW50
ZXJuYWxDb2xvckZvcm1hdCkpOworICAgIH0KKworICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21w
b3NpdGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworI2VuZGlmIC8vIFVTRShO
SUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhR0MzRExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFHQzNETGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uN2NlYjhiNjgzMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFHQzNETGF5ZXIuaApAQCAtMCwwICsx
LDM2IEBACisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShOSUNPU0lBKQorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGwuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR0xDb250ZXh0OworfQorCituYW1lc3Bh
Y2UgTmljb3NpYSB7CisKK2NsYXNzIEdDM0RMYXllciA6IHB1YmxpYyBSZWZDb3VudGVkPEdDM0RM
YXllcj4sIHB1YmxpYyBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50IHsKK3B1
YmxpYzoKKyAgICBHQzNETGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUpOworICAgIHZpcnR1YWwgfkdDM0RMYXll
cigpOworCisgICAgQ29udGVudExheWVyJiBjb250ZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRMYXllcjsgfQorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIHZvaWQgc3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEJiBtX2NvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OkdMQ29udGV4dD4gbV9nbENvbnRleHQ7CisKKyAgICBSZWY8Q29udGVudExheWVyPiBtX2NvbnRl
bnRMYXllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworI2VuZGlmIC8vIFVTRShO
SUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmNwcAppbmRleCA5YjMyODIzMmM5
NC4uZjgwOGVkZDkzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuY3BwCkBAIC0z
OCwxMSArMzgsNDIgQEAgUGxhdGZvcm1MYXllcjo6UGxhdGZvcm1MYXllcih1aW50NjRfdCBpZCkK
IAogUGxhdGZvcm1MYXllcjo6flBsYXRmb3JtTGF5ZXIoKSA9IGRlZmF1bHQ7CiAKLUNvbXBvc2l0
aW9uTGF5ZXI6OkNvbXBvc2l0aW9uTGF5ZXIodWludDY0X3QgaWQpCisKK0NvbXBvc2l0aW9uTGF5
ZXI6OkNvbXBvc2l0aW9uTGF5ZXIodWludDY0X3QgaWQsIGNvbnN0IEltcGw6OkZhY3RvcnkmIGZh
Y3RvcnkpCiAgICAgOiBQbGF0Zm9ybUxheWVyKGlkKQorICAgICwgbV9pbXBsKGZhY3RvcnkoaWQs
ICp0aGlzKSkKIHsKIH0KIAogQ29tcG9zaXRpb25MYXllcjo6fkNvbXBvc2l0aW9uTGF5ZXIoKSA9
IGRlZmF1bHQ7CitDb21wb3NpdGlvbkxheWVyOjpJbXBsOjp+SW1wbCgpID0gZGVmYXVsdDsKKwor
CitCYWNraW5nU3RvcmU6OkJhY2tpbmdTdG9yZShjb25zdCBJbXBsOjpGYWN0b3J5JiBmYWN0b3J5
KQorICAgIDogbV9pbXBsKGZhY3RvcnkoKnRoaXMpKQoreworfQorCitCYWNraW5nU3RvcmU6On5C
YWNraW5nU3RvcmUoKSA9IGRlZmF1bHQ7CitCYWNraW5nU3RvcmU6OkltcGw6On5JbXBsKCkgPSBk
ZWZhdWx0OworCisKK0NvbnRlbnRMYXllcjo6Q29udGVudExheWVyKGNvbnN0IEltcGw6OkZhY3Rv
cnkmIGZhY3RvcnkpCisgICAgOiBQbGF0Zm9ybUxheWVyKDApCisgICAgLCBtX2ltcGwoZmFjdG9y
eSgqdGhpcykpCit7Cit9CisKK0NvbnRlbnRMYXllcjo6fkNvbnRlbnRMYXllcigpID0gZGVmYXVs
dDsKK0NvbnRlbnRMYXllcjo6SW1wbDo6fkltcGwoKSA9IGRlZmF1bHQ7CisKKworSW1hZ2VCYWNr
aW5nOjpJbWFnZUJhY2tpbmcoY29uc3QgSW1wbDo6RmFjdG9yeSYgZmFjdG9yeSkKKyAgICA6IG1f
aW1wbChmYWN0b3J5KCp0aGlzKSkKK3sKK30KKworSW1hZ2VCYWNraW5nOjp+SW1hZ2VCYWNraW5n
KCkgPSBkZWZhdWx0OworSW1hZ2VCYWNraW5nOjpJbXBsOjp+SW1wbCgpID0gZGVmYXVsdDsKIAog
fSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCmluZGV4
IGMyMDZlOWI3NDQxLi5jMTZmYjg4MTY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIu
aApAQCAtMzQsMTIgKzM0LDIwIEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiTmljb3Np
YVNjZW5lSW50ZWdyYXRpb24uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgi
CiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rp
b24uaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAorbmFtZXNwYWNlIFdlYkNv
cmUgeworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk7CisjZW5kaWYKK30KKwogbmFtZXNwYWNlIE5pY29zaWEgewogCiBjbGFzcyBQ
bGF0Zm9ybUxheWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYXRmb3JtTGF5ZXI+
IHsKQEAgLTQ3LDkgKzU1LDMxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5QbGF0Zm9ybUxheWVy
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21wb3NpdGlvbkxheWVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCiAgICAgdWludDY0X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
CiAKKyAgICB2b2lkIHNldFNjZW5lSW50ZWdyYXRpb24oUmVmUHRyPFNjZW5lSW50ZWdyYXRpb24+
JiYgc2NlbmVJbnRlZ3JhdGlvbikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
c3RhdGUubG9jayk7CisgICAgICAgIG1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbiA9IFdURk1vdmUo
c2NlbmVJbnRlZ3JhdGlvbik7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjZW5lSW50
ZWdyYXRpb246OlVwZGF0ZVNjb3BlPiBjcmVhdGVVcGRhdGVTY29wZSgpCisgICAgeworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgICAgICBpZiAobV9zdGF0ZS5z
Y2VuZUludGVncmF0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGUuc2NlbmVJbnRlZ3Jh
dGlvbi0+Y3JlYXRlVXBkYXRlU2NvcGUoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgdm9pZCByZXF1ZXN0VXBkYXRlKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fc3RhdGUubG9jayk7CisgICAgICAgIGlmIChtX3N0YXRlLnNjZW5lSW50ZWdyYXRp
b24pCisgICAgICAgICAgICBtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24tPnJlcXVlc3RVcGRhdGUo
KTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBQbGF0Zm9ybUxheWVyKHVpbnQ2
NF90KTsKIApAQCAtNTcsMTkgKzg3LDM0IEBAIHByb3RlY3RlZDoKIAogICAgIHN0cnVjdCB7CiAg
ICAgICAgIExvY2sgbG9jazsKKyAgICAgICAgUmVmUHRyPFNjZW5lSW50ZWdyYXRpb24+IHNjZW5l
SW50ZWdyYXRpb247CiAgICAgfSBtX3N0YXRlOwogfTsKIAorY2xhc3MgQ29udGVudExheWVyOwor
Y2xhc3MgQmFja2luZ1N0b3JlOworY2xhc3MgSW1hZ2VCYWNraW5nOworCiBjbGFzcyBDb21wb3Np
dGlvbkxheWVyIDogcHVibGljIFBsYXRmb3JtTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8Q29tcG9zaXRpb25MYXllcj4gY3JlYXRlKHVpbnQ2NF90IGlkKQorICAgIGNsYXNzIEltcGwg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgRmFjdG9yeSA9IFdURjo6RnVuY3Rpb248c3Rk
Ojp1bmlxdWVfcHRyPEltcGw+KHVpbnQ2NF90LCBDb21wb3NpdGlvbkxheWVyJik+OworCisgICAg
ICAgIHZpcnR1YWwgfkltcGwoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZU1hcHBl
ckltcGwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgUmVm
PENvbXBvc2l0aW9uTGF5ZXI+IGNyZWF0ZSh1aW50NjRfdCBpZCwgY29uc3QgSW1wbDo6RmFjdG9y
eSYgZmFjdG9yeSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0
aW9uTGF5ZXIoaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcG9zaXRpb25M
YXllcihpZCwgZmFjdG9yeSkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5Db21wb3NpdGlvbkxheWVy
KCk7CiAKICAgICBib29sIGlzQ29tcG9zaXRpb25MYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KIAorICAgIEltcGwmIGltcGwoKSBjb25zdCB7IHJldHVybiAqbV9pbXBsOyB9
CisKICAgICBzdHJ1Y3QgTGF5ZXJTdGF0ZSB7CiAgICAgICAgIHN0cnVjdCBEZWx0YSB7CiAgICAg
ICAgICAgICBEZWx0YSgpID0gZGVmYXVsdDsKQEAgLTkzLDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmxhZ3NDaGFuZ2VkIDogMTsKICAgICAgICAgICAgICAg
ICAgICAgYm9vbCByZXBhaW50Q291bnRlckNoYW5nZWQgOiAxOwogICAgICAgICAgICAgICAgICAg
ICBib29sIGRlYnVnQm9yZGVyQ2hhbmdlZCA6IDE7CisKKyAgICAgICAgICAgICAgICAgICAgYm9v
bCBjb250ZW50TGF5ZXJDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBiYWNr
aW5nU3RvcmVDaGFuZ2VkIDogMTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpbWFnZUJhY2tp
bmdDaGFuZ2VkIDogMTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHZhbHVlIHsgMCB9OwogICAgICAgICAgICAgfTsKQEAgLTE0OSw4ICsxOTgsMzAgQEAgcHVi
bGljOgogICAgICAgICAgICAgZmxvYXQgd2lkdGggeyAwIH07CiAgICAgICAgICAgICBib29sIHZp
c2libGUgeyBmYWxzZSB9OwogICAgICAgICB9IGRlYnVnQm9yZGVyOworCisgICAgICAgIFJlZlB0
cjxDb250ZW50TGF5ZXI+IGNvbnRlbnRMYXllcjsKKyAgICAgICAgUmVmUHRyPEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlOworICAgICAgICBSZWZQdHI8SW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tp
bmc7CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhY2Nlc3NT
dGF0ZShjb25zdCBUJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
UGxhdGZvcm1MYXllcjo6bV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLnBl
bmRpbmcpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhY2Nl
c3NTdGF0ZUFuZFVwZGF0ZShjb25zdCBUJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoUGxhdGZvcm1MYXllcjo6bV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgZnVuY3Rv
cihtX3N0YXRlLnBlbmRpbmcpOworCisgICAgICAgIGF1dG8mIHNjZW5lSW50ZWdyYXRpb24gPSBQ
bGF0Zm9ybUxheWVyOjptX3N0YXRlLnNjZW5lSW50ZWdyYXRpb247CisgICAgICAgIGlmIChzY2Vu
ZUludGVncmF0aW9uKQorICAgICAgICAgICAgc2NlbmVJbnRlZ3JhdGlvbi0+cmVxdWVzdFVwZGF0
ZSgpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBUJiBmdW5jdG9yKQogICAgIHsKQEAgLTE1OCwxNCArMjI5LDE3OCBAQCBwdWJs
aWM6CiAgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5wZW5kaW5nKTsKICAgICB9CiAKKyAgICB2b2lk
IGZsdXNoU3RhdGUoKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoUGxhdGZvcm1M
YXllcjo6bV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgYXV0byYgcGVuZGluZyA9IG1fc3RhdGUucGVu
ZGluZzsKKyAgICAgICAgYXV0byYgc3RhZ2luZyA9IG1fc3RhdGUuc3RhZ2luZzsKKworICAgICAg
ICBzdGFnaW5nLmRlbHRhLnZhbHVlIHw9IHBlbmRpbmcuZGVsdGEudmFsdWU7CisKKyAgICAgICAg
aWYgKHBlbmRpbmcuZGVsdGEucG9zaXRpb25DaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5w
b3NpdGlvbiA9IHBlbmRpbmcucG9zaXRpb247CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmFu
Y2hvclBvaW50Q2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuYW5jaG9yUG9pbnQgPSBwZW5k
aW5nLmFuY2hvclBvaW50OworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5zaXplQ2hhbmdlZCkK
KyAgICAgICAgICAgIHN0YWdpbmcuc2l6ZSA9IHBlbmRpbmcuc2l6ZTsKKworICAgICAgICBpZiAo
cGVuZGluZy5kZWx0YS50cmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy50cmFu
c2Zvcm0gPSBwZW5kaW5nLnRyYW5zZm9ybTsKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuY2hp
bGRyZW5UcmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5jaGlsZHJlblRyYW5z
Zm9ybSA9IHBlbmRpbmcuY2hpbGRyZW5UcmFuc2Zvcm07CisKKyAgICAgICAgaWYgKHBlbmRpbmcu
ZGVsdGEuY29udGVudHNSZWN0Q2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuY29udGVudHNS
ZWN0ID0gcGVuZGluZy5jb250ZW50c1JlY3Q7CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmNv
bnRlbnRzVGlsaW5nQ2hhbmdlZCkgeworICAgICAgICAgICAgc3RhZ2luZy5jb250ZW50c1RpbGVQ
aGFzZSA9IHBlbmRpbmcuY29udGVudHNUaWxlUGhhc2U7CisgICAgICAgICAgICBzdGFnaW5nLmNv
bnRlbnRzVGlsZVNpemUgPSBwZW5kaW5nLmNvbnRlbnRzVGlsZVNpemU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5vcGFjaXR5Q2hhbmdlZCkKKyAgICAgICAgICAgIHN0
YWdpbmcub3BhY2l0eSA9IHBlbmRpbmcub3BhY2l0eTsKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVs
dGEuc29saWRDb2xvckNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLnNvbGlkQ29sb3IgPSBw
ZW5kaW5nLnNvbGlkQ29sb3I7CisKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuZmlsdGVyc0No
YW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLmZpbHRlcnMgPSBwZW5kaW5nLmZpbHRlcnM7Cisg
ICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmFuaW1hdGlvbnNDaGFuZ2VkKQorICAgICAgICAgICAg
c3RhZ2luZy5hbmltYXRpb25zID0gcGVuZGluZy5hbmltYXRpb25zOworCisgICAgICAgIGlmIChw
ZW5kaW5nLmRlbHRhLmNoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuY2hpbGRy
ZW4gPSBwZW5kaW5nLmNoaWxkcmVuOworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5tYXNrQ2hh
bmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcubWFzayA9IHBlbmRpbmcubWFzazsKKyAgICAgICAg
aWYgKHBlbmRpbmcuZGVsdGEucmVwbGljYUNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLnJl
cGxpY2EgPSBwZW5kaW5nLnJlcGxpY2E7CisKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuZmxh
Z3NDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5mbGFncy52YWx1ZSA9IHBlbmRpbmcuZmxh
Z3MudmFsdWU7CisKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEucmVwYWludENvdW50ZXJDaGFu
Z2VkKQorICAgICAgICAgICAgc3RhZ2luZy5yZXBhaW50Q291bnRlciA9IHBlbmRpbmcucmVwYWlu
dENvdW50ZXI7CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmRlYnVnQm9yZGVyQ2hhbmdlZCkK
KyAgICAgICAgICAgIHN0YWdpbmcuZGVidWdCb3JkZXIgPSBwZW5kaW5nLmRlYnVnQm9yZGVyOwor
CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmNvbnRlbnRMYXllckNoYW5nZWQpCisgICAgICAg
ICAgICBzdGFnaW5nLmNvbnRlbnRMYXllciA9IHBlbmRpbmcuY29udGVudExheWVyOworICAgICAg
ICBpZiAocGVuZGluZy5kZWx0YS5iYWNraW5nU3RvcmVDaGFuZ2VkKQorICAgICAgICAgICAgc3Rh
Z2luZy5iYWNraW5nU3RvcmUgPSBwZW5kaW5nLmJhY2tpbmdTdG9yZTsKKyAgICAgICAgaWYgKHBl
bmRpbmcuZGVsdGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuaW1h
Z2VCYWNraW5nID0gcGVuZGluZy5pbWFnZUJhY2tpbmc7CisKKyAgICAgICAgcGVuZGluZy5kZWx0
YSA9IHsgfTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgY29t
bWl0U3RhdGUoY29uc3QgVCYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGNvbnN0IExheWVyU3Rh
dGUmIHN0YXRlID0KKyAgICAgICAgICAgIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIoUGxhdGZvcm1MYXllcjo6bV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLmNvbW1pdHRlZCA9IG1fc3RhdGUuc3RhZ2luZzsKKyAgICAgICAgICAgICAgICBt
X3N0YXRlLnN0YWdpbmcuZGVsdGEgPSB7IH07CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3Rh
dGUuY29tbWl0dGVkOworICAgICAgICAgICAgfSgpOworCisgICAgICAgIGZ1bmN0b3Ioc3RhdGUp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhY2Nlc3NDb21t
aXR0ZWQoY29uc3QgVCYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KFBsYXRmb3JtTGF5ZXI6Om1fc3RhdGUubG9jayk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5j
b21taXR0ZWQpOworICAgIH0KKwogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDb21wb3NpdGlvbkxh
eWVyKHVpbnQ2NF90KTsKKyAgICBleHBsaWNpdCBDb21wb3NpdGlvbkxheWVyKHVpbnQ2NF90LCBj
b25zdCBJbXBsOjpGYWN0b3J5Jik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1wbD4gbV9pbXBs
OwogCiAgICAgc3RydWN0IHsKICAgICAgICAgTGF5ZXJTdGF0ZSBwZW5kaW5nOworICAgICAgICBM
YXllclN0YXRlIHN0YWdpbmc7CisgICAgICAgIExheWVyU3RhdGUgY29tbWl0dGVkOwogICAgIH0g
bV9zdGF0ZTsKIH07CiAKK2NsYXNzIENvbnRlbnRMYXllciA6IHB1YmxpYyBQbGF0Zm9ybUxheWVy
IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBJbXBsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5n
IEZhY3RvcnkgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxJbXBsPihDb250ZW50TGF5
ZXImKT47CisKKyAgICAgICAgdmlydHVhbCB+SW1wbCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0dXJlTWFwcGVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgfTsKKwor
ICAgIHN0YXRpYyBSZWY8Q29udGVudExheWVyPiBjcmVhdGUoY29uc3QgSW1wbDo6RmFjdG9yeSYg
ZmFjdG9yeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbnRlbnRMYXll
cihmYWN0b3J5KSk7CisgICAgfQorICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllcigpOworCisgICAg
Ym9vbCBpc0NvbnRlbnRMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIEltcGwmIGltcGwoKSBjb25zdCB7IHJldHVybiAqbV9pbXBsOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBDb250ZW50TGF5ZXIoY29uc3QgSW1wbDo6RmFjdG9yeSYpOworCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBtX2ltcGw7Cit9OworCitjbGFzcyBCYWNraW5nU3RvcmUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QmFja2luZ1N0b3JlPiB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgSW1wbCB7CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBGYWN0b3J5ID0gV1RG
OjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8SW1wbD4oQmFja2luZ1N0b3JlJik+OworCisgICAg
ICAgIHZpcnR1YWwgfkltcGwoKTsKKyAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZU1hcHBl
ckltcGwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgUmVm
PEJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEltcGw6OkZhY3RvcnkmIGZhY3RvcnkpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBCYWNraW5nU3RvcmUoZmFjdG9yeSkpOwor
ICAgIH0KKyAgICB2aXJ0dWFsIH5CYWNraW5nU3RvcmUoKTsKKworICAgIEltcGwmIGltcGwoKSBj
b25zdCB7IHJldHVybiAqbV9pbXBsOyB9CisKK3Byb3RlY3RlZDoKKyAgICBCYWNraW5nU3RvcmUo
Y29uc3QgSW1wbDo6RmFjdG9yeSYpOworCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bXBsPiBtX2ltcGw7Cit9OworCitjbGFzcyBJbWFnZUJhY2tpbmcgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW1hZ2VCYWNraW5nPiB7CitwdWJsaWM6CisgICAgY2xhc3MgSW1wbCB7Cisg
ICAgcHVibGljOgorICAgICAgICB1c2luZyBGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVu
aXF1ZV9wdHI8SW1wbD4oSW1hZ2VCYWNraW5nJik+OworCisgICAgICAgIHZpcnR1YWwgfkltcGwo
KTsKKyAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZU1hcHBlckltcGwoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgUmVmPEltYWdlQmFja2luZz4gY3Jl
YXRlKGNvbnN0IEltcGw6OkZhY3RvcnkmIGZhY3RvcnkpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBJbWFnZUJhY2tpbmcoZmFjdG9yeSkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5JbWFnZUJhY2tpbmcoKTsKKworICAgIEltcGwmIGltcGwoKSBjb25zdCB7IHJldHVybiAqbV9p
bXBsOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJhY2tpbmcoY29uc3QgSW1wbDo6RmFjdG9y
eSYpOworCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbXBsPiBtX2ltcGw7Cit9Owor
CiB9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCiAKICNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19OSUNPU0lBX1BMQVRGT1JNTEFZRVIoVG9DbGFzc05hbWUsIHByZWRpY2F0ZSkgXApAQCAtMTc0
LDMgKzQwOSwyNCBAQCBwcml2YXRlOgogICAgIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
IAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19OSUNPU0lBX1BMQVRGT1JNTEFZRVIoQ29tcG9zaXRp
b25MYXllciwgaXNDb21wb3NpdGlvbkxheWVyKCkpOworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19O
SUNPU0lBX1BMQVRGT1JNTEFZRVIoQ29udGVudExheWVyLCBpc0NvbnRlbnRMYXllcigpKTsKKwor
I2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX05JQ09TSUFfQ09NUE9TSVRJT05MQVlFUl9J
TVBMKFRvQ2xhc3NOYW1lLCBwcmVkaWNhdGUpIFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKE5pY29zaWE6OlRvQ2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkltcGwmIGltcGwpIHsgcmV0dXJuIGltcGwu
cHJlZGljYXRlOyB9IFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNkZWZp
bmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19OSUNPU0lBX0NPTlRFTlRMQVlFUl9JTVBMKFRvQ2xh
c3NOYW1lLCBwcmVkaWNhdGUpIFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKE5p
Y29zaWE6OlRvQ2xhc3NOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6SW1wbCYgaW1wbCkgeyByZXR1cm4gaW1wbC5wcmVkaWNhdGU7IH0g
XAorICAgIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX05JQ09TSUFfQkFDS0lOR1NUT1JFX0lNUEwoVG9DbGFzc05hbWUsIHByZWRp
Y2F0ZSkgXAorICAgIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oTmljb3NpYTo6VG9DbGFz
c05hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgTmljb3NpYTo6QmFja2luZ1N0
b3JlOjpJbXBsJiBpbXBsKSB7IHJldHVybiBpbXBsLnByZWRpY2F0ZTsgfSBcCisgICAgU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
TklDT1NJQV9JTUFHRUJBQ0tJTkdfSU1QTChUb0NsYXNzTmFtZSwgcHJlZGljYXRlKSBcCisgICAg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihOaWNvc2lhOjpUb0NsYXNzTmFtZSkgXAorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBOaWNvc2lhOjpJbWFnZUJhY2tpbmc6OkltcGwmIGlt
cGwpIHsgcmV0dXJuIGltcGwucHJlZGljYXRlOyB9IFwKKyAgICBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFTY2VuZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjllMDBiMWQwNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmUuY3BwCkBAIC0wLDAgKzEsMTgg
QEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNvc2lhU2NlbmUuaCIKKworI2lm
IFVTRShOSUNPU0lBKQorCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKKworbmFt
ZXNwYWNlIE5pY29zaWEgeworCitTY2VuZTo6U2NlbmUoKSA9IGRlZmF1bHQ7CitTY2VuZTo6flNj
ZW5lKCkgPSBkZWZhdWx0OworCitTY2VuZTo6U3RhdGU6OlN0YXRlKCkgPSBkZWZhdWx0OworU2Nl
bmU6OlN0YXRlOjp+U3RhdGUoKSA9IGRlZmF1bHQ7CisKK30KKworI2VuZGlmIC8vIFVTRShOSUNP
U0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhU2NlbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvTmljb3NpYVNjZW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjkwOWJkODdmM2FkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmUuaApAQCAtMCwwICsxLDUwIEBACisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShOSUNPU0lBKQorCisjaW5jbHVkZSA8Y3N0ZGludD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgTmljb3NpYSB7CisKK2NsYXNzIENvbXBvc2l0aW9uTGF5ZXI7CisKK2NsYXNzIFNjZW5lIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNjZW5lPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxTY2VuZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNjZW5lKTsKKyAgICB9CisgICAgflNjZW5lKCk7CisKKyAgICBzdHJ1Y3QgU3RhdGUgeworICAg
ICAgICBTdGF0ZSgpOworICAgICAgICB+U3RhdGUoKTsKKworICAgICAgICB1aW50MzJfdCBpZCB7
IDAgfTsKKyAgICAgICAgSGFzaFNldDxSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4+
IGxheWVyczsKKyAgICAgICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IHJvb3RM
YXllcjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRj4KKyAgICB2b2lkIGFjY2Vz
c1N0YXRlKGNvbnN0IEYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3NjZW5lLmxvY2spOworICAgICAgICBmdW5jdG9yKG1fc2NlbmUuc3RhdGUpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBTY2VuZSgpOworCisgICAgc3RydWN0IHsKKyAgICAgICAgTG9jayBs
b2NrOworICAgICAgICBTdGF0ZSBzdGF0ZTsKKyAgICB9IG1fc2NlbmU7Cit9OworCit9CisKKyNl
bmRpZiAvLyBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY4OTJlNjY0ZjEwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5jcHAKQEAgLTAsMCArMSw0OSBAQAorI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFTY2VuZUludGVncmF0aW9uLmgiCisKK25hbWVz
cGFjZSBOaWNvc2lhIHsKKworU2NlbmVJbnRlZ3JhdGlvbjo6U2NlbmVJbnRlZ3JhdGlvbihDbGll
bnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudC5vYmplY3QgPSAmY2xpZW50OworfQorCitTY2Vu
ZUludGVncmF0aW9uOjp+U2NlbmVJbnRlZ3JhdGlvbigpCit7CisgICAgQVNTRVJUKCFtX2NsaWVu
dC5vYmplY3QpOworfQorCit2b2lkIFNjZW5lSW50ZWdyYXRpb246OmludmFsaWRhdGUoKQorewor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY2xpZW50LmxvY2spOworICAgIG1fY2xpZW50Lm9iamVj
dCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgU2NlbmVJbnRlZ3JhdGlvbjo6cmVxdWVzdFVwZGF0ZSgp
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jbGllbnQubG9jayk7CisgICAgaWYgKG1fY2xp
ZW50Lm9iamVjdCkKKyAgICAgICAgbV9jbGllbnQub2JqZWN0LT5yZXF1ZXN0VXBkYXRlKCk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxTY2VuZUludGVncmF0aW9uOjpVcGRhdGVTY29wZT4gU2NlbmVJ
bnRlZ3JhdGlvbjo6Y3JlYXRlVXBkYXRlU2NvcGUoKQoreworICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFVwZGF0ZVNjb3BlPihtYWtlUmVmKCp0aGlzKSk7Cit9CisKK1NjZW5lSW50ZWdyYXRp
b246OkNsaWVudDo6fkNsaWVudCgpID0gZGVmYXVsdDsKKworU2NlbmVJbnRlZ3JhdGlvbjo6VXBk
YXRlU2NvcGU6OlVwZGF0ZVNjb3BlKFJlZjxTY2VuZUludGVncmF0aW9uPiYmIHNjZW5lSW50ZWdy
YXRpb24pCisgICAgOiBtX3NjZW5lSW50ZWdyYXRpb24oV1RGTW92ZShzY2VuZUludGVncmF0aW9u
KSkKKyAgICAsIG1fbG9ja2VyKG1fc2NlbmVJbnRlZ3JhdGlvbi0+bV9jbGllbnQubG9jaykKK3sK
K30KKworU2NlbmVJbnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU6On5VcGRhdGVTY29wZSgpCit7Cisg
ICAgYXV0byYgc2NlbmVJbnRlZ3JhdGlvbk9iaiA9IG1fc2NlbmVJbnRlZ3JhdGlvbi5nZXQoKTsK
KyAgICBpZiAoc2NlbmVJbnRlZ3JhdGlvbk9iai5tX2NsaWVudC5vYmplY3QpCisgICAgICAgIHNj
ZW5lSW50ZWdyYXRpb25PYmoubV9jbGllbnQub2JqZWN0LT5yZXF1ZXN0VXBkYXRlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmY1OWZkMzM2ZmEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFTY2VuZUludGVncmF0aW9uLmgKQEAgLTAsMCArMSw0NSBAQAorI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVz
cGFjZSBOaWNvc2lhIHsKKworY2xhc3MgU2NlbmVJbnRlZ3JhdGlvbiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTY2VuZUludGVncmF0aW9uPiB7CitwdWJsaWM6CisgICAgY2xhc3MgQ2xp
ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpOworCisgICAgICAg
IHZpcnR1YWwgdm9pZCByZXF1ZXN0VXBkYXRlKCkgPSAwOworICAgIH07CisKKyAgICBTY2VuZUlu
dGVncmF0aW9uKENsaWVudCYpOworICAgIH5TY2VuZUludGVncmF0aW9uKCk7CisKKyAgICB2b2lk
IGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgcmVxdWVzdFVwZGF0ZSgpOworCisgICAgY2xhc3Mg
VXBkYXRlU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVXBkYXRlU2NvcGUoUmVmPFNjZW5l
SW50ZWdyYXRpb24+JiYpOworICAgICAgICB+VXBkYXRlU2NvcGUoKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFJlZjxTY2VuZUludGVncmF0aW9uPiBtX3NjZW5lSW50ZWdyYXRpb247CisgICAg
ICAgIExvY2tIb2xkZXIgbV9sb2NrZXI7CisgICAgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxV
cGRhdGVTY29wZT4gY3JlYXRlVXBkYXRlU2NvcGUoKTsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
eworICAgICAgICBMb2NrIGxvY2s7CisgICAgICAgIENsaWVudCogb2JqZWN0IHsgbnVsbHB0ciB9
OworICAgIH0gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUJhY2tpbmdTdG9yZVRleHR1cmVN
YXBwZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGI1
NjIyZWRiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwu
Y3BwCkBAIC0wLDAgKzEsNzcgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNv
c2lhQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwuaCIKKworI2lmIFVTRShURVhUVVJFX01B
UFBFUikKKworbmFtZXNwYWNlIE5pY29zaWEgeworCithdXRvIEJhY2tpbmdTdG9yZVRleHR1cmVN
YXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCkgLT4gRmFjdG9yeQoreworICAgIHJldHVybiBGYWN0
b3J5KAorICAgICAgICBbXShCYWNraW5nU3RvcmUmKSB7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbD4oKTsKKyAgICAgICAg
fSk7Cit9CisKK0JhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsOjpCYWNraW5nU3RvcmVUZXh0
dXJlTWFwcGVySW1wbCgpID0gZGVmYXVsdDsKK0JhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBs
Ojp+QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgQmFj
a2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGw6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1Rp
bGVDcmVhdGlvbigpCit7CisgICAgbV9sYXllclN0YXRlLmhhc1BlbmRpbmdUaWxlQ3JlYXRpb24g
PSB0cnVlOworfQorCit2b2lkIEJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVU
aWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJT
dGF0ZS5pc0ZsdXNoaW5nKTsKKyAgICBtX2xheWVyU3RhdGUudXBkYXRlLnRpbGVzVG9DcmVhdGUu
YXBwZW5kKHsgdGlsZUlELCBzY2FsZSB9KTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVUZXh0dXJl
TWFwcGVySW1wbDo6dXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1
cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxl
UmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXllclN0YXRlLmlzRmx1c2hpbmcpOworICAgIG1fbGF5
ZXJTdGF0ZS51cGRhdGUudGlsZXNUb1VwZGF0ZS5hcHBlbmQoeyB0aWxlSUQsIHRpbGVSZWN0LCB1
cGRhdGVJbmZvIH0pOworfQorCit2b2lkIEJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsOjpy
ZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKK3sKKyAgICBBU1NFUlQobV9sYXllclN0YXRlLmlz
Rmx1c2hpbmcgfHwgbV9sYXllclN0YXRlLmlzUHVyZ2luZyk7CisgICAgbV9sYXllclN0YXRlLnVw
ZGF0ZS50aWxlc1RvUmVtb3ZlLmFwcGVuZChUaWxlVXBkYXRlOjpSZW1vdmFsRGF0YSB7IHRpbGVJ
RCB9KTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6Zmx1c2hVcGRh
dGUoKQoreworICAgIEFTU0VSVChtX2xheWVyU3RhdGUuaXNGbHVzaGluZyk7CisgICAgbV9sYXll
clN0YXRlLmlzRmx1c2hpbmcgPSBmYWxzZTsKKyAgICBtX2xheWVyU3RhdGUuaGFzUGVuZGluZ1Rp
bGVDcmVhdGlvbiA9IGZhbHNlOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3VwZGF0ZS5sb2NrKTsKKyAgICAgICAgbV91cGRhdGUucGVuZGluZy50aWxlc1RvQ3JlYXRlLmFw
cGVuZFZlY3RvcihtX2xheWVyU3RhdGUudXBkYXRlLnRpbGVzVG9DcmVhdGUpOworICAgICAgICBt
X3VwZGF0ZS5wZW5kaW5nLnRpbGVzVG9VcGRhdGUuYXBwZW5kVmVjdG9yKG1fbGF5ZXJTdGF0ZS51
cGRhdGUudGlsZXNUb1VwZGF0ZSk7CisgICAgICAgIG1fdXBkYXRlLnBlbmRpbmcudGlsZXNUb1Jl
bW92ZS5hcHBlbmRWZWN0b3IobV9sYXllclN0YXRlLnVwZGF0ZS50aWxlc1RvUmVtb3ZlKTsKKyAg
ICB9CisKKyAgICBtX2xheWVyU3RhdGUudXBkYXRlID0geyB9OworfQorCit2b2lkIEJhY2tpbmdT
dG9yZVRleHR1cmVNYXBwZXJJbXBsOjphcHBseVVwZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fY29t
cG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUpOworICAgIGF1dG8mIGJhY2tpbmdTdG9yZSA9ICpt
X2NvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV91cGRhdGUubG9jayk7CisgICAgZm9yIChhdXRvJiB0aWxlIDogbV91cGRhdGUucGVuZGluZy50
aWxlc1RvQ3JlYXRlKQorICAgICAgICBiYWNraW5nU3RvcmUuY3JlYXRlVGlsZSh0aWxlLnRpbGVJ
RCwgdGlsZS5zY2FsZSk7CisgICAgZm9yIChhdXRvJiB0aWxlIDogbV91cGRhdGUucGVuZGluZy50
aWxlc1RvUmVtb3ZlKQorICAgICAgICBiYWNraW5nU3RvcmUucmVtb3ZlVGlsZSh0aWxlLnRpbGVJ
RCk7CisgICAgZm9yIChhdXRvJiB0aWxlIDogbV91cGRhdGUucGVuZGluZy50aWxlc1RvVXBkYXRl
KSB7CisgICAgICAgIGJhY2tpbmdTdG9yZS51cGRhdGVUaWxlKHRpbGUudGlsZUlELCB0aWxlLnVw
ZGF0ZUluZm8udXBkYXRlUmVjdCwKKyAgICAgICAgICAgIHRpbGUudGlsZVJlY3QsIHRpbGUudXBk
YXRlSW5mby5idWZmZXIuY29weVJlZigpLCB7IDAsIDAgfSk7CisgICAgfQorICAgIG1fdXBkYXRl
LnBlbmRpbmcgPSB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworI2VuZGlmIC8v
IFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2MzBmYTFjMGRiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUJhY2tp
bmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsLmgKQEAgLTAsMCArMSw4NCBAQAorI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAi
U3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKworY2xhc3MgQmFja2lu
Z1N0b3JlVGV4dHVyZU1hcHBlckltcGwgZmluYWwgOiBwdWJsaWMgQmFja2luZ1N0b3JlOjpJbXBs
LCBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVDbGllbnQgeworcHVibGljOgorICAg
IHN0YXRpYyBGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoKTsKKworICAgIEJhY2tpbmdTdG9yZVRleHR1
cmVNYXBwZXJJbXBsKCk7CisgICAgdmlydHVhbCB+QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlcklt
cGwoKTsKKyAgICBib29sIGlzVGV4dHVyZU1hcHBlckltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CisgICAgICAgIHN0cnVjdCBD
cmVhdGlvbkRhdGEgeworICAgICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAg
ZmxvYXQgc2NhbGU7CisgICAgICAgIH07CisgICAgICAgIFZlY3RvcjxDcmVhdGlvbkRhdGE+IHRp
bGVzVG9DcmVhdGU7CisKKyAgICAgICAgc3RydWN0IFVwZGF0ZURhdGEgeworICAgICAgICAgICAg
dWludDMyX3QgdGlsZUlEOworICAgICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdDsK
KyAgICAgICAgICAgIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAg
ICAgIH07CisgICAgICAgIFZlY3RvcjxVcGRhdGVEYXRhPiB0aWxlc1RvVXBkYXRlOworCisgICAg
ICAgIHN0cnVjdCBSZW1vdmFsRGF0YSB7CisgICAgICAgICAgICB1aW50MzJfdCB0aWxlSUQ7Cisg
ICAgICAgIH07CisgICAgICAgIFZlY3RvcjxSZW1vdmFsRGF0YT4gdGlsZXNUb1JlbW92ZTsKKyAg
ICB9OworCisgICAgc3RydWN0IExheWVyU3RhdGUgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1haW5CYWNraW5nU3RvcmU7CisgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gcHJldmlvdXNCYWNraW5n
U3RvcmU7CisKKyAgICAgICAgVGlsZVVwZGF0ZSB1cGRhdGU7CisgICAgICAgIGJvb2wgaXNGbHVz
aGluZyB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaXNQdXJnaW5nIHsgZmFsc2UgfTsKKyAgICAg
ICAgYm9vbCBoYXNQZW5kaW5nVGlsZUNyZWF0aW9uIHsgZmFsc2UgfTsKKyAgICB9OworICAgIExh
eWVyU3RhdGUmIGxheWVyU3RhdGUoKSB7IHJldHVybiBtX2xheWVyU3RhdGU7IH0KKworICAgIHZv
aWQgZmx1c2hVcGRhdGUoKTsKKworICAgIHN0cnVjdCBDb21wb3NpdGlvblN0YXRlIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CisgICAgfTsKKyAgICBDb21wb3NpdGlvblN0YXRlJiBjb21wb3NpdGlvblN0YXRlKCkgeyByZXR1
cm4gbV9jb21wb3NpdGlvblN0YXRlOyB9CisKKyAgICB2b2lkIGFwcGx5VXBkYXRlKCk7CisKKyAg
ICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVI
YXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjcmVhdGVUaWxlKHVp
bnQzMl90LCBmbG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90LCBj
b25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIExheWVyU3RhdGUgbV9sYXllclN0YXRlOworICAgIENvbXBvc2l0aW9uU3Rh
dGUgbV9jb21wb3NpdGlvblN0YXRlOworCisgICAgc3RydWN0IHsKKyAgICAgICAgTG9jayBsb2Nr
OworICAgICAgICBUaWxlVXBkYXRlIHBlbmRpbmc7CisgICAgICAgIFRpbGVVcGRhdGUgY29tbWl0
dGVkOworICAgIH0gbV91cGRhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfTklDT1NJQV9CQUNLSU5HU1RPUkVfSU1QTChCYWNraW5nU3Rv
cmVUZXh0dXJlTWFwcGVySW1wbCwgaXNUZXh0dXJlTWFwcGVySW1wbCgpKTsKKworI2VuZGlmIC8v
IFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1h
cHBlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90
ZXhtYXAvTmljb3NpYUNvbXBvc2l0aW9uTGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzZTQ2ZGU3MTdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUNvbXBvc2l0aW9uTGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKQEAgLTAsMCArMSwy
MyBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFDb21wb3NpdGlvbkxh
eWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKworI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2F1
dG8gQ29tcG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCkgLT4g
RmFjdG9yeQoreworICAgIHJldHVybiBGYWN0b3J5KAorICAgICAgICBbXSh1aW50NjRfdCwgQ29t
cG9zaXRpb25MYXllciYpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENv
bXBvc2l0aW9uTGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4oKTsKKyAgICAgICAgfSk7Cit9CisKK0Nv
bXBvc2l0aW9uTGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q29tcG9zaXRpb25MYXllclRleHR1cmVN
YXBwZXJJbXBsKCkgPSBkZWZhdWx0OworQ29tcG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBs
Ojp+Q29tcG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBsKCkgPSBkZWZhdWx0OworCit9IC8v
IG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhQ29tcG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29tcG9zaXRpb25MYXll
clRleHR1cmVNYXBwZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmNjYzNlODBjY2NhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbXBvc2l0aW9uTGF5ZXJUZXh0dXJl
TWFwcGVySW1wbC5oCkBAIC0wLDAgKzEsMzUgQEAKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNs
dWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJM
YXllcjsKK30KKworbmFtZXNwYWNlIE5pY29zaWEgeworCitjbGFzcyBDb21wb3NpdGlvbkxheWVy
VGV4dHVyZU1hcHBlckltcGwgZmluYWwgOiBwdWJsaWMgQ29tcG9zaXRpb25MYXllcjo6SW1wbCB7
CitwdWJsaWM6CisgICAgc3RhdGljIEZhY3RvcnkgY3JlYXRlRmFjdG9yeSgpOworCisgICAgQ29t
cG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBsKCk7CisgICAgdmlydHVhbCB+Q29tcG9zaXRp
b25MYXllclRleHR1cmVNYXBwZXJJbXBsKCk7CisgICAgYm9vbCBpc1RleHR1cmVNYXBwZXJJbXBs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RydWN0IENvbXBvc2l0
aW9uU3RhdGUgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckxheWVyPiBsYXllcjsKKyAgICB9OworICAgIENvbXBvc2l0aW9uU3RhdGUmIGNvbXBvc2l0aW9u
U3RhdGUoKSB7IHJldHVybiBtX2NvbXBvc2l0aW9uU3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICBD
b21wb3NpdGlvblN0YXRlIG1fY29tcG9zaXRpb25TdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IE5pY29zaWEKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19OSUNPU0lBX0NPTVBPU0lUSU9OTEFZ
RVJfSU1QTChDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1hcHBlckltcGwsIGlzVGV4dHVyZU1hcHBl
ckltcGwoKSk7CisKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjRjMTI0N2I5
YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL3RleG1hcC9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuY3BwCkBA
IC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikK
KworI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKworbmFtZXNw
YWNlIE5pY29zaWEgeworCithdXRvIENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVh
dGVGYWN0b3J5KENsaWVudCYgY2xpZW50KSAtPiBGYWN0b3J5Cit7CisgICAgcmV0dXJuIEZhY3Rv
cnkoCisgICAgICAgIFsmY2xpZW50XShDb250ZW50TGF5ZXImKSB7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4oY2xpZW50
KTsKKyAgICAgICAgfSk7Cit9CisKK0NvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbChDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fY2xpZW50
KCZjbGllbnQpCisgICAgLCBtX3Byb3h5KGFkb3B0UmVmKG5ldyBXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5KSkKK3sKK30KKworQ29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6On5Db250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbCgpCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKK30KKwordm9pZCBDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6aW52YWxpZGF0ZUNsaWVudCgpCit7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBtX2NsaWVudCA9IG51bGxwdHI7Cit9CisKK1Jl
ZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBDb250ZW50TGF5
ZXJUZXh0dXJlTWFwcGVySW1wbDo6cHJveHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3h5
LmNvcHlSZWYoKTsKK30KKwordm9pZCBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6c3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zd2FwQnVmZmVyc0lmTmVlZGVkKCk7
Cit9CisKK0NvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQ6On5DbGllbnQoKSA9
IGRlZmF1bHQ7CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKKworI2VuZGlmIC8vIFVTRShURVhU
VVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjkxOWJlM2E2OGUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsLmgKQEAgLTAsMCArMSw0NCBAQAorI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJOaWNvc2lhUGxhdGZvcm1MYXllci5oIgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7Cit9CisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKwor
Y2xhc3MgQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwgZmluYWwgOiBwdWJsaWMgQ29udGVu
dExheWVyOjpJbXBsIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSA9IDA7CisgICAgfTsKKworICAgIHN0YXRpYyBGYWN0b3J5IGNyZWF0
ZUZhY3RvcnkoQ2xpZW50Jik7CisKKyAgICBDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbChD
bGllbnQmKTsKKyAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbCgpOwor
ICAgIGJvb2wgaXNUZXh0dXJlTWFwcGVySW1wbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpOworCisgICAgUmVmUHRyPFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Q7CisgICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7
CisgICAgQ2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wcm94eTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIE5pY29zaWEKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19OSUNPU0lBX0NPTlRFTlRM
QVlFUl9JTVBMKENvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLCBpc1RleHR1cmVNYXBwZXJJ
bXBsKCkpOworCisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUltYWdl
QmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1w
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5YTAzMDllMGJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmNwcApAQCAt
MCwwICsxLDQ2IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmljb3NpYUltYWdl
QmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisK
K25hbWVzcGFjZSBOaWNvc2lhIHsKKworYXV0byBJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1w
bDo6Y3JlYXRlRmFjdG9yeSgpIC0+IEZhY3RvcnkKK3sKKyAgICByZXR1cm4gRmFjdG9yeSgKKyAg
ICAgICAgW10oSW1hZ2VCYWNraW5nJikgeworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8SW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGw+KCk7CisgICAgICAgIH0pOworfQor
CitJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbDo6SW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBl
ckltcGwoKSA9IGRlZmF1bHQ7CitJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbDo6fkltYWdl
QmFja2luZ1RleHR1cmVNYXBwZXJJbXBsKCkgPSBkZWZhdWx0OworCit2b2lkIEltYWdlQmFja2lu
Z1RleHR1cmVNYXBwZXJJbXBsOjpmbHVzaFVwZGF0ZSgpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV91cGRhdGUubG9jayk7CisgICAgbV91cGRhdGUuaXNWaXNpYmxlID0gbV9sYXllclN0YXRl
LmlzVmlzaWJsZTsKKyAgICBtX3VwZGF0ZS5idWZmZXIgPSBXVEZNb3ZlKG1fbGF5ZXJTdGF0ZS5i
dWZmZXIpOworfQorCit2b2lkIEltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsOjphcHBseVVw
ZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUpOwor
ICAgIGF1dG8mIGJhY2tpbmdTdG9yZSA9ICptX2NvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3Jl
OworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV91cGRhdGUubG9jayk7CisgICAgZnByaW50Zihz
dGRlcnIsICJJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbDo6YXBwbHlVcGRhdGUoKSBpc1Zp
c2libGUgJWQgYnVmZmVyICVwXG4iLAorICAgICAgICBtX3VwZGF0ZS5pc1Zpc2libGUsIG1fdXBk
YXRlLmJ1ZmZlci5nZXQoKSk7CisgICAgaWYgKCFtX3VwZGF0ZS5pc1Zpc2libGUgfHwgIW1fdXBk
YXRlLmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYmFja2luZ1N0b3JlLmNyZWF0ZVRp
bGUoMSwgMSk7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0IHsgeyB9LCBtX3VwZGF0ZS5idWZm
ZXItPnNpemUoKSB9OworICAgIEFTU0VSVCgyMDAwID49IHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOworICAgIGJhY2tpbmdTdG9yZS5zZXRTaXplKHJlY3Quc2l6ZSgpKTsK
KyAgICBiYWNraW5nU3RvcmUudXBkYXRlVGlsZSgxLCByZWN0LCByZWN0LCBXVEZNb3ZlKG1fdXBk
YXRlLmJ1ZmZlciksIHJlY3QubG9jYXRpb24oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5pY29z
aWEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFJ
bWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi40N2IyMGQ5NWFiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFJbWFnZUJhY2tpbmdU
ZXh0dXJlTWFwcGVySW1wbC5oCkBAIC0wLDAgKzEsNTYgQEAKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSKQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUu
aCIKKyNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3Jt
TGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBJbWFnZTsKK30KKworbmFtZXNwYWNlIE5pY29zaWEgeworCitjbGFzcyBJbWFnZUJhY2tp
bmdUZXh0dXJlTWFwcGVySW1wbCBmaW5hbCA6IHB1YmxpYyBJbWFnZUJhY2tpbmc6OkltcGwgewor
cHVibGljOgorICAgIHN0YXRpYyBGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoKTsKKworICAgIEltYWdl
QmFja2luZ1RleHR1cmVNYXBwZXJJbXBsKCk7CisgICAgdmlydHVhbCB+SW1hZ2VCYWNraW5nVGV4
dHVyZU1hcHBlckltcGwoKTsKKyAgICBib29sIGlzVGV4dHVyZU1hcHBlckltcGwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBzdHJ1Y3QgTGF5ZXJTdGF0ZSB7CisgICAg
ICAgIHVpbnRwdHJfdCBpbWFnZUlEIHsgMCB9OworICAgICAgICB1aW50cHRyX3QgbmF0aXZlSW1h
Z2VJRCB7IDAgfTsKKyAgICAgICAgYm9vbCBpc1Zpc2libGUgeyBmYWxzZSB9OworICAgICAgICBS
ZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiBidWZmZXI7CisgICAgfTsKKyAgICBMYXllclN0YXRlJiBs
YXllclN0YXRlKCkgeyByZXR1cm4gbV9sYXllclN0YXRlOyB9CisKKyAgICB2b2lkIGZsdXNoVXBk
YXRlKCk7CisKKyAgICBzdHJ1Y3QgQ29tcG9zaXRpb25TdGF0ZSB7CisgICAgICAgIFJlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOworICAgIH07Cisg
ICAgQ29tcG9zaXRpb25TdGF0ZSYgY29tcG9zaXRpb25TdGF0ZSgpIHsgcmV0dXJuIG1fY29tcG9z
aXRpb25TdGF0ZTsgfQorCisgICAgdm9pZCBhcHBseVVwZGF0ZSgpOworCitwcml2YXRlOgorICAg
IExheWVyU3RhdGUgbV9sYXllclN0YXRlOworICAgIENvbXBvc2l0aW9uU3RhdGUgbV9jb21wb3Np
dGlvblN0YXRlOworCisgICAgc3RydWN0IHsKKyAgICAgICAgTG9jayBsb2NrOworICAgICAgICBi
b29sIGlzVmlzaWJsZSB7IGZhbHNlIH07CisgICAgICAgIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+
IGJ1ZmZlcjsKKyAgICB9IG1fdXBkYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX05JQ09TSUFfSU1BR0VCQUNLSU5HX0lNUEwoSW1hZ2VC
YWNraW5nVGV4dHVyZU1hcHBlckltcGwsIGlzVGV4dHVyZU1hcHBlckltcGwoKSk7CisKKyNlbmRp
ZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0M0RUZXh0dXJlTWFwcGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHQz
RFRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGEwMjZlOGNiYmFhLi41NDdhNmY0ZmIwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29u
dGV4dDNEVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dDNEVGV4dHVyZU1hcHBlci5jcHAKQEAgLTUzLDYg
KzUzLDggQEAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNlbmRpZgogCisjaW5j
bHVkZSAiTmljb3NpYUdDM0RMYXllci5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBjb25zdCBzaXplX3QgTWF4QWN0aXZlQ29udGV4dHMgPSAxNjsKQEAgLTEwNSw3ICsxMDcsMTEg
QEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNE
QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3MKICAgICA6IG1fYXR0cnMoYXR0cmlidXRlcykKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKHNoYXJlZENvbnRleHQsICFzaGFyZWRDb250ZXh0KTsKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICBtX2NvbnRlbnRMYXllciA9IGFkb3B0UmVmKCpuZXcgTmljb3NpYTo6
R0MzRExheWVyKCp0aGlzLCByZW5kZXJTdHlsZSkpOworI2Vsc2UKICAgICBtX3RleG1hcExheWVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI+KCp0aGlz
LCByZW5kZXJTdHlsZSk7CisjZW5kaWYKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCkBA
IC0yNTgsNiArMjY0LDEyIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0Qo
KQogCiAgICAgYXV0byogYWN0aXZlQ29udGV4dCA9IGFjdGl2ZUNvbnRleHRzKCkudGFrZUxhc3Qo
W3RoaXNdKGF1dG8qIGl0KSB7IHJldHVybiBpdCA9PSB0aGlzOyB9KTsKICAgICBBU1NFUlRfVU5V
U0VEKGFjdGl2ZUNvbnRleHQsICEhYWN0aXZlQ29udGV4dCk7CisKKyNpZiBVU0UoTklDT1NJQSkK
KyAgICBtX2NvbnRlbnRMYXllciA9IG51bGxwdHI7CisjZWxzZQorICAgIG1fdGV4bWFwTGF5ZXIg
PSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soc3RkOjp1bmlxdWVfcHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQpAQCAt
MjcwLDcgKzI4MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VD
YWxsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8RXJyb3JNZXNzYWdlQ2FsbAogCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQogeworI2lmIFVTRShOSUNPU0lBKQorICAg
IHJldHVybiBtX2NvbnRlbnRMYXllci0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisjZWxzZQogICAg
IHJldHVybiBtX3RleG1hcExheWVyLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyNlbmRpZgogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0dQVVN0YXR1cygpCkBAIC0yNzksNyArMjk1
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrR1BVU3RhdHVzKCkKIAogUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpCiB7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fY29udGVudExheWVy
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyNlbHNlCiAgICAgcmV0dXJuIG1fdGV4bWFwTGF5ZXItPnBs
YXRmb3JtQ29udGV4dCgpOworI2VuZGlmCiB9CiAKIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0CkBAIC0yOTgsNyArMzE4LDExIEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogCiBQbGF0Zm9y
bUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CisjaWYg
VVNFKE5JQ09TSUEpCisgICAgcmV0dXJuICZtX2NvbnRlbnRMYXllci0+Y29udGVudExheWVyKCk7
CisjZWxzZQogICAgIHJldHVybiBtX3RleG1hcExheWVyLmdldCgpOworI2VuZGlmCiB9CiAKICNp
ZiBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXIuY3BwCmluZGV4IDZjNTY4ZTQ1NDRjLi40NWExODExMzNjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxh
dGZvcm1MYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKQEAgLTIwLDcgKzIwLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3Jt
TGF5ZXIuaCIKIAotI2lmIEVOQUJMRShHUkFQSElDU19DT05URVhUXzNEKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCisjaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVTRShURVhUVVJF
X01BUFBFUikgJiYgIVVTRShOSUNPU0lBKQogCiAjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgi
CiAjaW5jbHVkZSAiR0xDb250ZXh0LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQ
bGF0Zm9ybUxheWVyLmgKaW5kZXggYmFiNTAzNmM4NTguLmVjYjhlOWQzNjA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdD
M0RQbGF0Zm9ybUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5oCkBAIC0xOSw3ICsxOSw3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEdSQVBISUNTX0NPTlRFWFRfM0QpICYmIFVT
RShURVhUVVJFX01BUFBFUikKKyNpZiBFTkFCTEUoR1JBUEhJQ1NfQ09OVEVYVF8zRCkgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKSAmJiAhVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKQEAgLTMxLDcgKzMxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR0xDb250ZXh0OwogY2xhc3MgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxh
eWVyIDogcHVibGljIFBsYXRmb3JtTGF5ZXIgeworY2xhc3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRl
cgorewogcHVibGljOgogICAgIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGlj
c0NvbnRleHQzRCYsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSk7CiAgICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwCmluZGV4IDE5NjI5N2JkODVjLi5jNjFiN2U3NTlmYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5jcHAKQEAgLTY1NCw0ICs2NTQsMjIgQEAgYm9vbCBUZXh0dXJlTWFwcGVyTGF5ZXI6
OnN5bmNBbmltYXRpb25zKE1vbm90b25pY1RpbWUgdGltZSkKICAgICByZXR1cm4gYXBwbGljYXRp
b25SZXN1bHRzLmhhc1J1bm5pbmdBbmltYXRpb25zOwogfQogCit2b2lkIFRleHR1cmVNYXBwZXJM
YXllcjo6ZHVtcCh1bnNpZ25lZCBpbmRlbnRhdGlvbikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5kZW50YXRpb247ICsraSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICIp
OworICAgIGZwcmludGYoc3RkZXJyLCAifC1UZXhNYXBMYXllcigldSkgcG9zaXRpb24gKCUuMmYs
JS4yZikgYW5jaG9yICglLjJmLCUuMmYsJS4yZikgc2l6ZSAoJS4yZiwlLjJmKSBvcGFjaXR5ICUu
MmZcbiIsCisgICAgICAgIG1faWQsIG1fc3RhdGUucG9zLngoKSwgbV9zdGF0ZS5wb3MueSgpLAor
ICAgICAgICBtX3N0YXRlLmFuY2hvclBvaW50LngoKSwgbV9zdGF0ZS5hbmNob3JQb2ludC55KCks
IG1fc3RhdGUuYW5jaG9yUG9pbnQueigpLAorICAgICAgICBtX3N0YXRlLnNpemUud2lkdGgoKSwg
bV9zdGF0ZS5zaXplLmhlaWdodCgpLCBtX3N0YXRlLm9wYWNpdHkpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluZGVudGF0aW9uOyArK2kpCisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiICAiKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInwtLS0gZHJhd3NDb250ZW50ICVkIGNvbnRl
bnRzQXJlVmlzaWJsZSAlZFxuIiwKKyAgICAgICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQsIG1fc3Rh
dGUuY29udGVudHNWaXNpYmxlKTsKKworICAgIGZvciAoYXV0byogY2hpbGQgOiBtX2NoaWxkcmVu
KQorICAgICAgICBjaGlsZC0+ZHVtcChpbmRlbnRhdGlvbiArIDEpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmgKaW5kZXggZWEyNTliYTEwMDYuLjkyNTdhMTM5NzU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxh
eWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJMYXllci5oCkBAIC05Nyw2ICs5Nyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRk
Q2hpbGQoVGV4dHVyZU1hcHBlckxheWVyKik7CiAKKyAgICB2b2lkIGR1bXAodW5zaWduZWQpOwor
CiBwcml2YXRlOgogICAgIGNvbnN0IFRleHR1cmVNYXBwZXJMYXllciYgcm9vdExheWVyKCkgY29u
c3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmNwcAppbmRleCBjNjZlNDYzNjIwMC4uNjQ1MjAyZDdiNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcApAQCAtMzAsNiArMzAsOCBA
QAogCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcihSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4mJiB0ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCA5
ODE1OGM3NTNlNC4uZTY0MDA5NDNjOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0zMCw2ICszMCwxMSBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIk5pY29zaWFCYWNraW5n
U3RvcmVUZXh0dXJlTWFwcGVySW1wbC5oIgorI2luY2x1ZGUgIk5pY29zaWFDb21wb3NpdGlvbkxh
eWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1h
cHBlckltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiTmljb3NpYVBhaW50aW5nRW5naW5lLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAg
LTE0Nyw3ICsxNTIsOCBAQCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllcgogICAgIHN0YXRpYyBDb29y
ZGluYXRlZExheWVySUQgbmV4dExheWVySUQgPSAxOwogICAgIG1faWQgPSBuZXh0TGF5ZXJJRCsr
OwogCi0gICAgbV9uaWNvc2lhLmxheWVyID0gTmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6Y3Jl
YXRlKG1faWQpOworICAgIG1fbmljb3NpYS5sYXllciA9IE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5
ZXI6OmNyZWF0ZShtX2lkLAorICAgICAgICBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyVGV4dHVy
ZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKSk7CiB9CiAKIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6fkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpCkBAIC0xNTgsNiArMTY0LDggQEAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCkKICAgICB9
CiAgICAgQVNTRVJUKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKTsKICAgICBBU1NFUlQoIW1f
bWFpbkJhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKCFtX25pY29zaWEuaW1hZ2VCYWNraW5nKTsK
KyAgICBBU1NFUlQoIW1fbmljb3NpYS5iYWNraW5nU3RvcmUpOwogICAgIHdpbGxCZURlc3Ryb3ll
ZCgpOwogfQogCkBAIC0yMjYsNiArMjM0LDE3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQogICAgIGRpZENoYW5nZUdlb21l
dHJ5KCk7CiB9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24ocCk7CisgICAgbV9u
aWNvc2lhLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgbV9zaG91bGRTeW5jTGF5
ZXJTdGF0ZSA9IHRydWU7CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0
UG9pbnQzRCYgcCkKIHsKICAgICBpZiAoYW5jaG9yUG9pbnQoKSA9PSBwKQpAQCAtNDE5LDggKzQz
OCwxMyBAQCBib29sIEdyYXBoaWNzTGF5ZXI6OnN1cHBvcnRzQ29udGVudHNUaWxpbmcoKQogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIHsK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaWYgVVNFKE5JQ09TSUEp
CisgICAgaWYgKG1fbmljb3NpYS5jb250ZW50TGF5ZXIpCisgICAgICAgIG1fc2hvdWxkVXBkYXRl
UGxhdGZvcm1MYXllciA9IHRydWU7CisjZWxzZQogICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCiAg
ICAgICAgIG1fc2hvdWxkVXBkYXRlUGxhdGZvcm1MYXllciA9IHRydWU7CisjZW5kaWYKICNlbmRp
ZgogCiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwpAQCAtNDMwLDEwICs0NTQsMjAgQEAgdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyLCBDb250ZW50c0xheWVyUHVycG9zZSkKIHsKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaWYgVVNFKE5JQ09TSUEpCisg
ICAgYXV0byogY29udGVudExheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyPihw
bGF0Zm9ybUxheWVyKTsKKyAgICBpZiAobV9uaWNvc2lhLmNvbnRlbnRMYXllciAhPSBjb250ZW50
TGF5ZXIpIHsKKyAgICAgICAgbV9zaG91bGRTeW5jUGxhdGZvcm1MYXllciA9IHRydWU7CisgICAg
ICAgIG1fbmljb3NpYS5kZWx0YS5jb250ZW50TGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBtX25pY29zaWEuY29udGVudExheWVyID0gY29udGVudExheWVyOworI2Vsc2UKICAgICBp
ZiAobV9wbGF0Zm9ybUxheWVyICE9IHBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIG1fc2hvdWxkU3lu
Y1BsYXRmb3JtTGF5ZXIgPSB0cnVlOwogCiAgICAgbV9wbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1M
YXllcjsKKyNlbmRpZgogICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHBsYXRmb3JtTGF5ZXIpOwpAQCAtNjcyLDYgKzcwNiw3IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkKICAgICAgICAgbV9sYXllclN0
YXRlLmltYWdlQ2hhbmdlZCA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlbGVhc2VJbWFn
ZUJhY2tpbmdJZk5lZWRlZCgpOworCiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jTGF5ZXJTdGF0ZSgpCkBAIC03NDAsMjggKzc3NSwzNSBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c3luY1BsYXRmb3JtTGF5ZXIoKQogewotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDU19USFJFQURFRCkKICAgICBpZiAoIW1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIgPSBmYWxzZTsKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKKyNpZiBVU0UoTklDT1NJQSkK
KyNlbHNlCiAgICAgbV9sYXllclN0YXRlLnBsYXRmb3JtTGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKICAg
ICBpZiAobV9wbGF0Zm9ybUxheWVyKQogICAgICAgICBtX2xheWVyU3RhdGUucGxhdGZvcm1MYXll
clByb3h5ID0gbV9wbGF0Zm9ybUxheWVyLT5wcm94eSgpOwogI2VuZGlmCisjZW5kaWYKIH0KIAog
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKQogewot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKICAgICBpZiAoIW1fc2hvdWxk
VXBkYXRlUGxhdGZvcm1MYXllcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zaG91bGRVcGRh
dGVQbGF0Zm9ybUxheWVyID0gZmFsc2U7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RI
UkVBREVEKQorI2lmIFVTRShOSUNPU0lBKQorI2Vsc2UKICAgICBtX2xheWVyU3RhdGUucGxhdGZv
cm1MYXllclVwZGF0ZWQgPSB0cnVlOwogICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIpCiAgICAgICAg
IG1fcGxhdGZvcm1MYXllci0+c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpOwogI2VuZGlmCisjZW5kaWYK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKQpAQCAtNzg3LDYgKzgyOSw2NiBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAg
ICAgaWYgKCFoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCiAgICAgICAgIG1fbW92aW5nVmlz
aWJsZVJlY3QgPSBmYWxzZTsKIAorICAgIGlmIChtX25pY29zaWEuY29udGVudExheWVyKQorICAg
ICAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhLmNvbnRlbnRMYXllci0+aW1wbCgpKS5zd2FwQnVmZmVyc0lmTmVlZGVkKCk7CisKKyAg
ICBpZiAoIXNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkgeworICAgICAgICBpZiAobV9uaWNvc2lh
LmJhY2tpbmdTdG9yZSkgeworICAgICAgICAgICAgYXV0byYgbGF5ZXJTdGF0ZSA9IGRvd25jYXN0
PE5pY29zaWE6OkJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWEuYmFja2lu
Z1N0b3JlLT5pbXBsKCkpLmxheWVyU3RhdGUoKTsKKyAgICAgICAgICAgIGxheWVyU3RhdGUuaXNQ
dXJnaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSA9
IG51bGxwdHI7CisgICAgICAgICAgICBsYXllclN0YXRlLnByZXZpb3VzQmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKKworICAgICAgICAgICAgbV9uaWNvc2lhLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7
CisgICAgICAgICAgICBtX25pY29zaWEuZGVsdGEuYmFja2luZ1N0b3JlQ2hhbmdlZCA9IHRydWU7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIW1fbmljb3NpYS5iYWNraW5n
U3RvcmUpIHsKKyAgICAgICAgICAgIG1fbmljb3NpYS5iYWNraW5nU3RvcmUgPSBOaWNvc2lhOjpC
YWNraW5nU3RvcmU6OmNyZWF0ZShOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1w
bDo6Y3JlYXRlRmFjdG9yeSgpKTsKKyAgICAgICAgICAgIG1fbmljb3NpYS5kZWx0YS5iYWNraW5n
U3RvcmVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2NvbXBv
c2l0ZWROYXRpdmVJbWFnZVB0cikgeworICAgICAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2Up
OworICAgICAgICBhdXRvJiBpbWFnZSA9ICptX2NvbXBvc2l0ZWRJbWFnZTsKKyAgICAgICAgaWYg
KG1fbmljb3NpYS5pbWFnZUJhY2tpbmcpIHsKKyAgICAgICAgICAgIGF1dG8mIGltcGwgPSBkb3du
Y2FzdDxOaWNvc2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhLmlt
YWdlQmFja2luZy0+aW1wbCgpKTsKKyAgICAgICAgICAgIGlmIChpbXBsLmxheWVyU3RhdGUoKS5p
bWFnZUlEICE9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmaW1hZ2UpKQorICAgICAgICAg
ICAgICAgIG1fbmljb3NpYS5pbWFnZUJhY2tpbmcgPSBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIGlmICghbV9uaWNvc2lhLmltYWdlQmFja2luZykgeworICAgICAgICAgICAgbV9uaWNvc2lh
LmltYWdlQmFja2luZyA9IE5pY29zaWE6OkltYWdlQmFja2luZzo6Y3JlYXRlKE5pY29zaWE6Oklt
YWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCkpOworICAgICAgICAg
ICAgbV9uaWNvc2lhLmRlbHRhLmltYWdlQmFja2luZ0NoYW5nZWQgPSB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byYgaW1wbCA9IGRvd25jYXN0PE5pY29zaWE6OkltYWdlQmFja2luZ1Rl
eHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWEuaW1hZ2VCYWNraW5nLT5pbXBsKCkpOworICAgICAg
ICBhdXRvJiBsYXllclN0YXRlID0gaW1wbC5sYXllclN0YXRlKCk7CisgICAgICAgIGxheWVyU3Rh
dGUuaW1hZ2VJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigmaW1hZ2UpOworICAgICAg
ICBsYXllclN0YXRlLmlzVmlzaWJsZSA9IHRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKS5pbnRlcnNl
Y3RzKEludFJlY3QoY29udGVudHNSZWN0KCkpKTsKKyAgICAgICAgaWYgKGxheWVyU3RhdGUuaXNW
aXNpYmxlICYmIGxheWVyU3RhdGUubmF0aXZlSW1hZ2VJRCAhPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBhdXRvIGJ1ZmZlciA9IE5pY29zaWE6OkJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoaW1hZ2Uuc2l6
ZSgpKSwKKyAgICAgICAgICAgICAgICAhaW1hZ2UuY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVl
KCkgPyBOaWNvc2lhOjpCdWZmZXI6OlN1cHBvcnRzQWxwaGEgOiBOaWNvc2lhOjpCdWZmZXI6Ok5v
RmxhZ3MpOworICAgICAgICAgICAgTmljb3NpYTo6UGFpbnRpbmdDb250ZXh0OjpwYWludChidWZm
ZXIsCisgICAgICAgICAgICAgICAgWyZpbWFnZV0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgeyB9
LCBJbnRTaXplIHsgaW1hZ2Uuc2l6ZSgpIH0gfTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kcmF3SW1hZ2UoaW1hZ2UsIHJlY3QsIHJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKENvbXBv
c2l0ZUNvcHkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGxheWVyU3RhdGUu
bmF0aXZlSW1hZ2VJRCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2NvbXBvc2l0ZWRO
YXRpdmVJbWFnZVB0ci5nZXQoKSk7CisgICAgICAgICAgICBsYXllclN0YXRlLmJ1ZmZlciA9IFdU
Rk1vdmUoYnVmZmVyKTsKKyAgICAgICAgICAgIG1fbmljb3NpYS5kZWx0YS5pbWFnZUJhY2tpbmdD
aGFuZ2VkID0gdHJ1ZTsKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6OmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKSBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
ciAlcCBpbWFnZUlEICVsdSBpc1Zpc2libGUgJWQgYnVmZmVyICVwXG4iLAorICAgICAgICAgICAg
ICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyLmdldCgpLCBsYXllclN0YXRlLmltYWdlSUQs
IGxheWVyU3RhdGUuaXNWaXNpYmxlLCBsYXllclN0YXRlLmJ1ZmZlci5nZXQoKSk7CisgICAgICAg
IH0KKworICAgICAgICBpbXBsLmZsdXNoVXBkYXRlKCk7CisgICAgfSBlbHNlIGlmIChtX25pY29z
aWEuaW1hZ2VCYWNraW5nKSB7CisgICAgICAgIG1fbmljb3NpYS5pbWFnZUJhY2tpbmcgPSBudWxs
cHRyOworICAgICAgICBtX25pY29zaWEuZGVsdGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCA9IHRydWU7
CisgICAgfQorCiAgICAgewogICAgICAgICBtX25pY29zaWEubGF5ZXItPnVwZGF0ZVN0YXRlKAog
ICAgICAgICAgICAgW3RoaXNdKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUm
IHN0YXRlKQpAQCAtODQzLDYgKzk0NSwxMyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnJlcGxpY2EgPSByZXBsaWNhID8gcmVwbGljYS0+bV9uaWNvc2lhLmxheWVy
IDogbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAobG9j
YWxEZWx0YS5jb250ZW50TGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5j
b250ZW50TGF5ZXIgPSBtX25pY29zaWEuY29udGVudExheWVyOworICAgICAgICAgICAgICAgIGlm
IChsb2NhbERlbHRhLmJhY2tpbmdTdG9yZUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIHN0
YXRlLmJhY2tpbmdTdG9yZSA9IG1fbmljb3NpYS5iYWNraW5nU3RvcmU7CisgICAgICAgICAgICAg
ICAgaWYgKGxvY2FsRGVsdGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuaW1hZ2VCYWNraW5nID0gbV9uaWNvc2lhLmltYWdlQmFja2luZzsKKwogICAgICAg
ICAgICAgICAgIGlmIChsb2NhbERlbHRhLmZsYWdzQ2hhbmdlZCkgewogICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5mbGFncy5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgp
OwpAQCAtOTEyLDI3ICsxMDIxLDYgQEAgZmxvYXQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpl
ZmZlY3RpdmVDb250ZW50c1NjYWxlKCkKICAgICByZXR1cm4gc2VsZk9yQW5jZXN0b3JIYXZlTm9u
QWZmaW5lVHJhbnNmb3JtcygpID8gMSA6IGRldmljZVNjYWxlRmFjdG9yKCkgKiBwYWdlU2NhbGVG
YWN0b3IoKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRl
bnRzU2NhbGUoKQotewotICAgIEFTU0VSVChzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpOwotICAg
IGlmICghbV9tYWluQmFja2luZ1N0b3JlIHx8IG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNT
Y2FsZSgpID09IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gQmV0d2VlbiBjcmVhdGluZyB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5n
IHRoZSBjb250ZW50LAotICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIGRyb3AgdGhlIHByZXZpb3Vz
IG9uZSBhcyB0aGF0IG1pZ2h0IHJlc3VsdCBpbgotICAgIC8vIGJyaWVmbHkgc2VlaW5nIGZsaWNr
ZXJpbmcgYXMgdGhlIG9sZCB0aWxlcyBtYXkgYmUgZHJvcHBlZCBiZWZvcmUKLSAgICAvLyBzb21l
dGhpbmcgcmVwbGFjZXMgdGhlbS4KLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gV1RGTW92
ZShtX21haW5CYWNraW5nU3RvcmUpOwotCi0gICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHBy
ZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgotICAgIG1fcHJldmlv
dXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcyh0cmFuc2Zvcm1lZFZpc2li
bGVSZWN0KCksIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0b3Jl
KCkKLXsKLSAgICBtX21haW5CYWNraW5nU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbGVkQmFj
a2luZ1N0b3JlPigqdGhpcywgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLX0KLQogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVD
cmVhdGlvbigpCiB7CiAgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKQEAgLTEw
MDAsMTIgKzEwODgsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRp
bGUodWludDMyX3QgdGlsZUlEKQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0
ZUNvbnRlbnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCkKIHsKICAgICBpZiAoQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKiBtYXNrID0gZG93bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
PihtYXNrTGF5ZXIoKSkpCi0gICAgICAgIG1hc2stPnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Cisg
ICAgICAgIG1hc2stPnVwZGF0ZUNvbnRlbnRCdWZmZXJzMigpOwogCiAgICAgaWYgKENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogcmVwbGljYSA9IGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcj4ocmVwbGljYUxheWVyKCkpKQotICAgICAgICByZXBsaWNhLT51cGRhdGVDb250ZW50QnVm
ZmVycygpOworICAgICAgICByZXBsaWNhLT51cGRhdGVDb250ZW50QnVmZmVyczIoKTsKIAotICAg
IHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgLy8gdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsK
KyAgICB1cGRhdGVDb250ZW50QnVmZmVyczIoKTsKIAogICAgIGZvciAoYXV0byYgY2hpbGQgOiBj
aGlsZHJlbigpKQogICAgICAgICBkb3duY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KCpj
aGlsZCkudXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJMYXllcnMoKTsKQEAgLTEwMjAs
MTQgKzExMDksMjIgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRl
bnRCdWZmZXJzKCkKICAgICB9CiAKICAgICBpZiAobV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVz
dG1lbnQpIHsKLSAgICAgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOworICAgICAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlICYmIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpICE9
IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkgeworICAgICAgICAgICAgLy8gQmV0d2VlbiBjcmVh
dGluZyB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nIHRoZSBjb250ZW50LCAgd2Ug
ZG8gbm90CisgICAgICAgICAgICAvLyB3YW50IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9uZSBhcyB0
aGF0IG1pZ2h0IHJlc3VsdCBpbiBicmllZmx5IHNlZWluZyBmbGlja2VyaW5nCisgICAgICAgICAg
ICAvLyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZSBzb21ldGhpbmcgcmVw
bGFjZXMgdGhlbS4KKyAgICAgICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBXVEZNb3Zl
KG1fbWFpbkJhY2tpbmdTdG9yZSk7CisKKyAgICAgICAgICAgIC8vIE5vIHJlYXNvbiB0byBzYXZl
IHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZvciBub24tdmlzaWJsZSBhcmVhcy4KKyAgICAg
ICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcyh0
cmFuc2Zvcm1lZFZpc2libGVSZWN0KCksIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSkpOworICAgICAgICB9CiAgICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzU2Nh
bGVBZGp1c3RtZW50ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBw
bGFjZSB3ZSAocmUpY3JlYXRlIHRoZSBtYWluIHRpbGVkIGJhY2tpbmcgc3RvcmUsIG9uY2Ugd2UK
ICAgICAvLyBoYXZlIGEgcmVtb3RlIGNsaWVudCBhbmQgd2UgYXJlIHJlYWR5IHRvIHNlbmQgb3Vy
IGRhdGEgdG8gdGhlIFVJIHByb2Nlc3MuCiAgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUpIHsK
LSAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8VGlsZWRCYWNraW5nU3RvcmU+KCp0aGlzLCBlZmZlY3RpdmVD
b250ZW50c1NjYWxlKCkpOwogICAgICAgICBtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQg
PSB0cnVlOwogICAgIH0KIApAQCAtMTA4OSw2ICsxMTg2LDk5IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCiAgICAgICAgIG1fcHJldmlvdXNC
YWNraW5nU3RvcmUgPSBudWxscHRyOwogfQogCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMyKCkKK3sKKyAgICBpZiAoIW1fbmljb3NpYS5iYWNraW5n
U3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGltcGwgPSBkb3duY2FzdDxOaWNv
c2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhLmJhY2tpbmdTdG9y
ZS0+aW1wbCgpKTsKKyAgICBhdXRvJiBsYXllclN0YXRlID0gaW1wbC5sYXllclN0YXRlKCk7Cisg
ICAgbGF5ZXJTdGF0ZS5pc0ZsdXNoaW5nID0gdHJ1ZTsKKworICAgIGlmIChtX3BlbmRpbmdDb250
ZW50c1NjYWxlQWRqdXN0bWVudCkgeworICAgICAgICBpZiAobGF5ZXJTdGF0ZS5tYWluQmFja2lu
Z1N0b3JlICYmIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpICE9
IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkgeworICAgICAgICAgICAgLy8gQmV0d2VlbiBjcmVh
dGluZyB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nIHRoZSBjb250ZW50LCAgd2Ug
ZG8gbm90CisgICAgICAgICAgICAvLyB3YW50IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9uZSBhcyB0
aGF0IG1pZ2h0IHJlc3VsdCBpbiBicmllZmx5IHNlZWluZyBmbGlja2VyaW5nCisgICAgICAgICAg
ICAvLyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZSBzb21ldGhpbmcgcmVw
bGFjZXMgdGhlbS4KKyAgICAgICAgICAgIGxheWVyU3RhdGUucHJldmlvdXNCYWNraW5nU3RvcmUg
PSBXVEZNb3ZlKGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSk7CisKKyAgICAgICAgICAgIC8v
IE5vIHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZvciBub24tdmlz
aWJsZSBhcmVhcy4KKyAgICAgICAgICAgIGxheWVyU3RhdGUucHJldmlvdXNCYWNraW5nU3RvcmUt
PnJlbW92ZUFsbE5vblZpc2libGVUaWxlcyh0cmFuc2Zvcm1lZFZpc2libGVSZWN0KCksIEludFJl
Y3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICB9Cisg
ICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50ID0gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCFsYXllclN0YXRlLm1haW5CYWNraW5nU3RvcmUpIHsKKyAgICAgICAgbGF5ZXJT
dGF0ZS5tYWluQmFja2luZ1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxUaWxlZEJhY2tpbmdTdG9y
ZT4oaW1wbCwgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKKyAgICAgICAgbV9wZW5kaW5nVmlz
aWJsZVJlY3RBZGp1c3RtZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fcGVuZGluZ1Zp
c2libGVSZWN0QWRqdXN0bWVudCAmJiAhbV9uZWVkc0Rpc3BsYXkuY29tcGxldGVMYXllciAmJiBt
X25lZWRzRGlzcGxheS5yZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW1wbC5mbHVzaFVwZGF0
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX25lZWRzRGlzcGxheS5j
b21wbGV0ZUxheWVyKSB7CisgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IG1fbmVlZHNEaXNwbGF5
LnJlY3RzKQorICAgICAgICAgICAgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlk
YXRlKEludFJlY3QgeyByZWN0IH0pOworICAgIH0gZWxzZQorICAgICAgICBsYXllclN0YXRlLm1h
aW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoeyB7IH0sIEludFNpemUgeyBtX3NpemUgfSB9KTsK
KworICAgIG1fbmVlZHNEaXNwbGF5LmNvbXBsZXRlTGF5ZXIgPSBmYWxzZTsKKyAgICBtX25lZWRz
RGlzcGxheS5yZWN0cy5jbGVhcigpOworCisgICAgaWYgKG1fcGVuZGluZ1Zpc2libGVSZWN0QWRq
dXN0bWVudCkgeworICAgICAgICBtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQgPSBmYWxz
ZTsKKyAgICAgICAgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlc0lmTmVl
ZGVkKHRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKSwgSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3Ig
JiYgbV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKKworICAgIGF1dG8g
ZGlydHlUaWxlcyA9IGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+ZGlydHlUaWxlcygpOwor
ICAgIGlmICghZGlydHlUaWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgYm9vbCBkaWRVcGRhdGVU
aWxlcyA9IGZhbHNlOworCisgICAgICAgIGZvciAoYXV0byYgdGlsZVJlZmVyZW5jZSA6IGRpcnR5
VGlsZXMpIHsKKyAgICAgICAgICAgIGF1dG8mIHRpbGUgPSB0aWxlUmVmZXJlbmNlLmdldCgpOwor
ICAgICAgICAgICAgdGlsZS5lbnN1cmVUaWxlSUQoKTsKKworICAgICAgICAgICAgYXV0byYgdGls
ZVJlY3QgPSB0aWxlLnJlY3QoKTsKKyAgICAgICAgICAgIGF1dG8mIGRpcnR5UmVjdCA9IHRpbGUu
ZGlydHlSZWN0KCk7CisKKyAgICAgICAgICAgIGF1dG8gY29vcmRpbmF0ZWRCdWZmZXIgPSBOaWNv
c2lhOjpCdWZmZXI6OmNyZWF0ZShkaXJ0eVJlY3Quc2l6ZSgpLCBjb250ZW50c09wYXF1ZSgpID8g
Tmljb3NpYTo6QnVmZmVyOjpOb0ZsYWdzIDogTmljb3NpYTo6QnVmZmVyOjpTdXBwb3J0c0FscGhh
KTsKKyAgICAgICAgICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgICAgICAg
ICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgICAgICB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3QubW92ZSgtdGlsZVJlY3QueCgpLCAtdGlsZVJlY3QueSgpKTsKKyAgICAg
ICAgICAgIHVwZGF0ZUluZm8uYnVmZmVyID0gY29vcmRpbmF0ZWRCdWZmZXIuY29weVJlZigpOwor
CisgICAgICAgICAgICBpZiAoIW1fY29vcmRpbmF0b3ItPnBhaW50aW5nRW5naW5lKCkucGFpbnQo
KnRoaXMsIFdURk1vdmUoY29vcmRpbmF0ZWRCdWZmZXIpLAorICAgICAgICAgICAgICAgIGRpcnR5
UmVjdCwgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKGRpcnR5UmVj
dCksCisgICAgICAgICAgICAgICAgSW50UmVjdCB7IHsgMCwgMCB9LCBkaXJ0eVJlY3Quc2l6ZSgp
IH0sIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaW1wbC51cGRhdGVUaWxlKHRpbGUu
dGlsZUlEKCksIHVwZGF0ZUluZm8sIHRpbGVSZWN0KTsKKworICAgICAgICAgICAgdGlsZS5tYXJr
Q2xlYW4oKTsKKyAgICAgICAgICAgIGRpZFVwZGF0ZVRpbGVzIHw9IHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZGlkVXBkYXRlVGlsZXMpCisgICAgICAgICAgICBkaWRVcGRhdGVUaWxl
QnVmZmVycygpOworICAgIH0KKworICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlz
IGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgorICAgIC8vIHJlbW92aW5n
IHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3Qg
dGltZQorICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRo
ZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgorICAgIGlmIChsYXllclN0YXRlLnByZXZpb3VzQmFj
a2luZ1N0b3JlICYmIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+dmlzaWJsZUFyZWFJc0Nv
dmVyZWQoKSkKKyAgICAgICAgbGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CisKKyAgICBpZiAobGF5ZXJTdGF0ZS5oYXNQZW5kaW5nVGlsZUNyZWF0aW9uKSB7CisgICAg
ICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CisgICAgICAgIG5vdGlmeUZsdXNo
UmVxdWlyZWQoKTsKKyAgICB9CisgICAgaW1wbC5mbHVzaFVwZGF0ZSgpOworfQorCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICNpZm5kZWYg
TkRFQlVHCkBAIC0xMDk2LDYgKzEyODYsMTQgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAjZW5kaWYKICAgICBtX21haW5CYWNraW5nU3RvcmUg
PSBudWxscHRyOwogICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIGlm
IChtX25pY29zaWEuYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGF1dG8mIGxheWVyU3RhdGUgPSBk
b3duY2FzdDxOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lh
LmJhY2tpbmdTdG9yZS0+aW1wbCgpKS5sYXllclN0YXRlKCk7CisgICAgICAgIGxheWVyU3RhdGUu
aXNQdXJnaW5nID0gdHJ1ZTsKKyAgICAgICAgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKKyAgICAgICAgbGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CisKKyAgICAgICAgbV9uaWNvc2lhLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgfQog
CiAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKQEAgLTEzMTQsNiArMTUxMiwx
MyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVy
RmlyZWQoKQogICAgIGNsaWVudCgpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgIiIsIG1f
bGFzdEFuaW1hdGlvblN0YXJ0VGltZSk7CiB9CiAKKyNpZiBVU0UoTklDT1NJQSkKK1BsYXRmb3Jt
TGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbmljb3NpYS5sYXllci5nZXQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgK
aW5kZXggOGI5ZjlhOTIyNzguLjZiNWJkZDhkYzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC03Niw2ICs3Niw3IEBAIHB1
YmxpYzoKICAgICBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXll
ciopIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c3luY1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwpAQCAtMTEwLDcgKzExMSwxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKSBvdmVycmlkZTsKLSAgICBib29sIHVzZXNDb250ZW50
c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyIHx8IG1fY29t
cG9zaXRlZEltYWdlOyB9CisgICAgYm9vbCB1c2VzQ29udGVudHNMYXllcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllciB8fCBtX25pY29zaWEuY29udGVudExheWVyIHx8
IG1fY29tcG9zaXRlZEltYWdlOyB9CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIHZvaWQg
c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKTsKICAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CkBAIC0xNjAsOCArMTY1LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNJbWFnZUJhY2tpbmcoKTsKICAgICB2b2lkIGNvbXB1
dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVy
cygpOworICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMyKCk7CiAKLSAgICB2b2lkIGNyZWF0
ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7
CiAKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKQEAgLTE3MSw3ICsxNzYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0OwogICAgIGJv
b2wgc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdDsKICAg
ICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKLSAgICB2b2lk
IGFkanVzdENvbnRlbnRzU2NhbGUoKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QoKTsKICAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7CkBAIC0yMzEsNiAr
MjM1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6Okxh
eWVyU3RhdGU6OkRlbHRhIGRlbHRhOwogICAgICAgICBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVy
OjpMYXllclN0YXRlOjpSZXBhaW50Q291bnRlciByZXBhaW50Q291bnRlcjsKICAgICAgICAgTmlj
b3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZTo6RGVidWdCb3JkZXIgZGVidWdCb3Jk
ZXI7CisKKyAgICAgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gY29udGVudExheWVy
OworICAgICAgICBSZWZQdHI8Tmljb3NpYTo6QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7Cisg
ICAgICAgIFJlZlB0cjxOaWNvc2lhOjpJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKICAgICB9
IG1fbmljb3NpYTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUuaAppbmRleCBlNzM0NTA5MzUwZC4uMDI1YzFlYTQyZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTmljb3Np
YUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAi
Tmljb3NpYVNjZW5lLmgiCiAjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKQEAgLTE3MCwxMCArMTcxLDExIEBAIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJTdGF0ZSB7CiB9OwogCiBzdHJ1Y3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlIHsKKyNpZiBV
U0UoTklDT1NJQSkKICAgICBzdHJ1Y3QgTmljb3NpYVN0YXRlIHsKLSAgICAgICAgSGFzaFNldDxS
ZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4+IGxheWVyczsKLSAgICAgICAgUmVmUHRy
PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IHJvb3RMYXllcjsKKyAgICAgICAgUmVmUHRyPE5p
Y29zaWE6OlNjZW5lPiBzY2VuZTsKICAgICB9IG5pY29zaWE7CisjZW5kaWYKIAogICAgIHVpbnQz
Ml90IHJvb3RDb21wb3NpdGluZ0xheWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5jcHAKaW5kZXggZmVhMjhlYTBiMDYuLjljMGI2MzA3ODY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwCkBAIC0yNiw2ICsyNiwxMCBAQAogCiAjaW5j
bHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTmljb3NpYUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYUJhY2tpbmdTdG9y
ZVRleHR1cmVNYXBwZXJJbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhQ29tcG9zaXRp
b25MYXllclRleHR1cmVNYXBwZXJJbXBsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFJ
bWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVy
ZU1hcHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckdMLmg+CkBAIC01NywyMCArNjEsMTcg
QEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFwcGx5U3RhdGVDaGFuZ2VzKGNvbnN0
IFZlY3RvcjxDb29yZGluYXRlZEdyYXBoaWMKICAgICBlbnN1cmVSb290TGF5ZXIoKTsKIAogICAg
IGZvciAoYXV0byYgc3RhdGUgOiBzdGF0ZXMpCi0gICAgICAgIGNvbW1pdFNjZW5lU3RhdGUoc3Rh
dGUpOworICAgICAgICBjb21taXRTY2VuZVN0YXRlKHN0YXRlLm5pY29zaWEpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRS
ZWN0JiBjbGlwUmVjdCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgYm9vbCBkcmF3c0Jh
Y2tncm91bmQsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKIHsKKyAgICB1
cGRhdGVTY2VuZVN0YXRlKCk7CisKICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGN1cnJlbnRSb290
TGF5ZXIgPSByb290TGF5ZXIoKTsKICAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCiAgICAgICAg
IHJldHVybjsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKLSAgICBm
b3IgKGF1dG8mIHByb3h5IDogbV9wbGF0Zm9ybUxheWVyUHJveGllcy52YWx1ZXMoKSkKLSAgICAg
ICAgcHJveHktPnN3YXBCdWZmZXIoKTsKLSNlbmRpZgotCiAgICAgY3VycmVudFJvb3RMYXllci0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIGJvb2wgc2NlbmVI
YXNSdW5uaW5nQW5pbWF0aW9ucyA9IGN1cnJlbnRSb290TGF5ZXItPmFwcGx5QW5pbWF0aW9uc1Jl
Y3Vyc2l2ZWx5KE1vbm90b25pY1RpbWU6Om5vdygpKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJl
Z2luUGFpbnRpbmcoUGFpbnRGbGFncyk7CkBAIC0xMDQsMjMgKzEwNSw2IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVWaWV3cG9ydCgpCiAgICAgICAgIG1fY2xpZW50LT51
cGRhdGVWaWV3cG9ydCgpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3lu
Y1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIGlmICghc3RhdGUucGxhdGZvcm1MYXllckNoYW5n
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzdGF0ZS5wbGF0Zm9ybUxheWVyUHJveHkp
IHsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveGllcy5zZXQobGF5ZXIsIHN0YXRlLnBsYXRm
b3JtTGF5ZXJQcm94eSk7Ci0gICAgICAgIHN0YXRlLnBsYXRmb3JtTGF5ZXJQcm94eS0+YWN0aXZh
dGVPbkNvbXBvc2l0aW5nVGhyZWFkKHRoaXMsIGxheWVyKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
bV9wbGF0Zm9ybUxheWVyUHJveGllcy5yZW1vdmUobGF5ZXIpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0obGF5ZXIpOwotICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0jZW5kaWYKLX0KLQogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKIHZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpvbk5ld0J1ZmZlckF2YWlsYWJsZSgpCiB7CkBAIC0xMjgsMzIwICsxMTIsMjIy
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpvbk5ld0J1ZmZlckF2YWlsYWJsZSgp
CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hp
bGRyZW5JZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5jaGlsZHJlbkNo
YW5nZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIq
PiBjaGlsZHJlbjsKLSAgICBjaGlsZHJlbi5yZXNlcnZlQ2FwYWNpdHkoc3RhdGUuY2hpbGRyZW4u
c2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogc3RhdGUuY2hpbGRyZW4pCi0gICAgICAg
IGNoaWxkcmVuLmFwcGVuZChsYXllckJ5SUQoY2hpbGQpKTsKLQotICAgIGxheWVyLT5zZXRDaGls
ZHJlbihjaGlsZHJlbik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRM
YXllckZpbHRlcnNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5maWx0
ZXJzQ2hhbmdlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldEZpbHRlcnMoc3Rh
dGUuZmlsdGVycyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXll
clN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyU3RhdGUmIGxheWVyU3RhdGUsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKLXsKLSAgICBB
U1NFUlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLQotICAgIGlmIChsYXll
clN0YXRlLnBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVy
U3RhdGUucG9zKTsKLQotICAgIGlmIChsYXllclN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCkKLSAg
ICAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVyU3RhdGUuYW5jaG9yUG9pbnQpOwotCi0g
ICAgaWYgKGxheWVyU3RhdGUuc2l6ZUNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRTaXplKGxh
eWVyU3RhdGUuc2l6ZSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkKQot
ICAgICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVyU3RhdGUudHJhbnNmb3JtKTsKLQotICAg
IGlmIChsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXIt
PnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pOwotCi0g
ICAgaWYgKGxheWVyU3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNl
dENvbnRlbnRzUmVjdChsYXllclN0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJT
dGF0ZS5jb250ZW50c1RpbGluZ0NoYW5nZWQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRz
VGlsZVBoYXNlKGxheWVyU3RhdGUuY29udGVudHNUaWxlUGhhc2UpOwotICAgICAgICBsYXllci0+
c2V0Q29udGVudHNUaWxlU2l6ZShsYXllclN0YXRlLmNvbnRlbnRzVGlsZVNpemUpOwotICAgIH0K
LQotICAgIGlmIChsYXllclN0YXRlLm9wYWNpdHlDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0
T3BhY2l0eShsYXllclN0YXRlLm9wYWNpdHkpOwotCi0gICAgaWYgKGxheWVyU3RhdGUuc29saWRD
b2xvckNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRTb2xpZENvbG9yKGxheWVyU3RhdGUuc29s
aWRDb2xvcik7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkKQotICAg
ICAgICBsYXllci0+c2V0RGVidWdWaXN1YWxzKGxheWVyU3RhdGUuZGVidWdWaXN1YWxzLnNob3dE
ZWJ1Z0JvcmRlcnMsIGxheWVyU3RhdGUuZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyQ29sb3IsIGxh
eWVyU3RhdGUuZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGgpOwotICAgIGlmIChsYXllclN0
YXRlLnJlcGFpbnRDb3VudENoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRSZXBhaW50Q291bnRl
cihsYXllclN0YXRlLnJlcGFpbnRDb3VudC5zaG93UmVwYWludENvdW50ZXIsIGxheWVyU3RhdGUu
cmVwYWludENvdW50LmNvdW50KTsKLQotICAgIGlmIChsYXllclN0YXRlLnJlcGxpY2FDaGFuZ2Vk
KQotICAgICAgICBsYXllci0+c2V0UmVwbGljYUxheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxh
eWVyU3RhdGUucmVwbGljYSkpOwotCi0gICAgaWYgKGxheWVyU3RhdGUubWFza0NoYW5nZWQpCi0g
ICAgICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJTdGF0
ZS5tYXNrKSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5pbWFnZUNoYW5nZWQpCi0gICAgICAgIGFz
c2lnbkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVyU3RhdGUuaW1hZ2VJRCk7Ci0KLSAg
ICBpZiAobGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRl
bnRzT3BhcXVlKGxheWVyU3RhdGUuY29udGVudHNPcGFxdWUpOwotICAgICAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KGxheWVyU3RhdGUuZHJhd3NDb250ZW50KTsKLSAgICAgICAgbGF5ZXItPnNl
dENvbnRlbnRzVmlzaWJsZShsYXllclN0YXRlLmNvbnRlbnRzVmlzaWJsZSk7Ci0gICAgICAgIGxh
eWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUpOwot
Ci0gICAgICAgIC8vIE5ldmVyIGNsaXAgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIGxheWVyLT5z
ZXRNYXNrc1RvQm91bmRzKGlkID09IG1fcm9vdExheWVySUQgPyBmYWxzZSA6IGxheWVyU3RhdGUu
bWFza3NUb0JvdW5kcyk7Ci0gICAgICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRl
LnByZXNlcnZlczNEKTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBPcGVyYXRpb25zLgotICAgIHNl
dExheWVyQ2hpbGRyZW5JZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci0gICAgc2V0TGF5ZXJG
aWx0ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwotICAgIHNldExheWVyQW5pbWF0aW9u
c0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKLSAgICBwcmVwYXJlQ29udGVudEJhY2tpbmdT
dG9yZShsYXllciwgY29tbWl0U2NvcGUpOwotICAgIGNyZWF0ZVRpbGVzSWZOZWVkZWQobGF5ZXIs
IGxheWVyU3RhdGUpOwotICAgIHJlbW92ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUs
IGNvbW1pdFNjb3BlKTsKLSAgICB1cGRhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRl
LCBjb21taXRTY29wZSk7Ci0gICAgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChsYXllciwgbGF5
ZXJTdGF0ZSk7Ci19Ci0KLVRleHR1cmVNYXBwZXJMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAg
cmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKSA/IGxheWVyQnlJRChpZCkg
OiAwOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJzKGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKLXsKLSAgICBmb3IgKGF1
dG8mIGxheWVySUQgOiBsYXllcklEcykKLSAgICAgICAgY3JlYXRlTGF5ZXIobGF5ZXJJRCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcihDb29yZGluYXRl
ZExheWVySUQgaWQpCitOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1hcHBlckltcGwm
IGNvbXBvc2l0aW9uTGF5ZXJJbXBsKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXImIGNvbXBvc2l0
aW9uTGF5ZXIpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbmV3
TGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKLSAgICBuZXdM
YXllci0+c2V0SUQoaWQpOwotICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShuZXdMYXllcikp
OworICAgIHJldHVybiBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1h
cHBlckltcGw+KGNvbXBvc2l0aW9uTGF5ZXIuaW1wbCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYgbGF5ZXJJRHMpCitOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbCYg
Y29udGVudExheWVySW1wbChOaWNvc2lhOjpDb250ZW50TGF5ZXImIGNvbnRlbnRMYXllcikKIHsK
LSAgICBmb3IgKGF1dG8mIGxheWVySUQgOiBsYXllcklEcykKLSAgICAgICAgZGVsZXRlTGF5ZXIo
bGF5ZXJJRCk7CisgICAgcmV0dXJuIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsPihjb250ZW50TGF5ZXIuaW1wbCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQor
Tmljb3NpYTo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwmIGJhY2tpbmdTdG9yZUltcGwo
Tmljb3NpYTo6QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUpCiB7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQpOwot
ICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdl
dCgpKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgaWYgKGF1
dG8gcGxhdGZvcm1MYXllclByb3h5ID0gbV9wbGF0Zm9ybUxheWVyUHJveGllcy50YWtlKGxheWVy
LmdldCgpKSkKLSAgICAgICAgcGxhdGZvcm1MYXllclByb3h5LT5pbnZhbGlkYXRlKCk7Ci0jZW5k
aWYKKyAgICByZXR1cm4gZG93bmNhc3Q8Tmljb3NpYTo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBl
ckltcGw+KGJhY2tpbmdTdG9yZS5pbXBsKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCitOaWNv
c2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbCYgaW1hZ2VCYWNraW5nSW1wbChOaWNv
c2lhOjpJbWFnZUJhY2tpbmcmIGltYWdlQmFja2luZykKIHsKLSAgICBBU1NFUlQobGF5ZXJJRCAh
PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCA9
PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLQotICAgIG1fcm9vdExheWVySUQgPSBsYXll
cklEOwotCi0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklE
KTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXItPmNoaWxkcmVuKCkuaXNFbXB0eSgpKTsKLSAgICBt
X3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworICAgIHJldHVybiBkb3duY2FzdDxOaWNvc2lh
OjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbD4oaW1hZ2VCYWNraW5nLmltcGwoKSk7CiB9
CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwcmVwYXJlQ29udGVudEJhY2tpbmdT
dG9yZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUp
CitUZXh0dXJlTWFwcGVyTGF5ZXImIHRleG1hcExheWVyKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5
ZXImIGNvbXBvc2l0aW9uTGF5ZXIpCiB7Ci0gICAgaWYgKCFsYXllclNob3VsZEhhdmVCYWNraW5n
U3RvcmUobGF5ZXIpKSB7Ci0gICAgICAgIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGxheWVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGNvbXBvc2l0aW9uU3RhdGUgPSBjb21wb3Np
dGlvbkxheWVySW1wbChjb21wb3NpdGlvbkxheWVyKS5jb21wb3NpdGlvblN0YXRlKCk7CisgICAg
aWYgKCFjb21wb3NpdGlvblN0YXRlLmxheWVyKSB7CisgICAgICAgIGNvbXBvc2l0aW9uU3RhdGUu
bGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKKyAgICAgICAg
Y29tcG9zaXRpb25TdGF0ZS5sYXllci0+c2V0SUQoY29tcG9zaXRpb25MYXllci5pZCgpKTsKICAg
ICB9Ci0KLSAgICBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChsYXllcik7Ci0gICAgcmVzZXRC
YWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIsIGNvbW1pdFNjb3BlKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFRl
eHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKG1fYmFja2luZ1N0b3Jlcy5jb250
YWlucyhsYXllcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gYmFja2luZ1N0b3JlID0g
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgIG1fYmFja2luZ1N0b3Jlcy5h
ZGQobGF5ZXIsIGJhY2tpbmdTdG9yZS5jb3B5UmVmKCkpOwotICAgIGxheWVyLT5zZXRCYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlLnB0cigpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5
ZXIpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMudGFrZShsYXllcik7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNpemVU
b0xheWVyU2l6ZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb21taXRTY29wZSYgY29tbWl0
U2NvcGUpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
KTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUobGF5ZXItPnNpemUoKSk7Ci0gICAgY29tbWl0
U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQo
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
U3RhdGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0ZS50aWxlc1RvQ3JlYXRlLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFj
a2luZ1N0b3JlIHx8ICFsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUobGF5ZXIpKTsKLSAgICBp
ZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvJiB0aWxl
IDogc3RhdGUudGlsZXNUb0NyZWF0ZSkKLSAgICAgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxl
KHRpbGUudGlsZUlELCB0aWxlLnNjYWxlKTsKKyAgICByZXR1cm4gKmNvbXBvc2l0aW9uU3RhdGUu
bGF5ZXI7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lm
TmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJiBzdGF0ZSwgQ29tbWl0U2NvcGUmIGNvbW1pdFNjb3BlKQordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5
ZXImIGxheWVyLCBjb25zdCBSZWZQdHI8Tmljb3NpYTo6QmFja2luZ1N0b3JlPiYgYmFja2luZ1N0
b3JlLCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUpCiB7Ci0gICAgaWYgKHN0YXRlLnRpbGVzVG9S
ZW1vdmUuaXNFbXB0eSgpKQorICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGxheWVy
LnNldEJhY2tpbmdTdG9yZShudWxscHRyKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBh
dXRvJiBpbXBsID0gYmFja2luZ1N0b3JlSW1wbCgqYmFja2luZ1N0b3JlKTsKKyAgICBhdXRvJiBj
b21wb3NpdGlvblN0YXRlID0gaW1wbC5jb21wb3NpdGlvblN0YXRlKCk7CiAKLSAgICBSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5n
ZXQobGF5ZXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlKQorICAgIGlmICghbGF5ZXJTaG91bGRI
YXZlQmFja2luZ1N0b3JlKCZsYXllcikpIHsKKyAgICAgICAgbGF5ZXIuc2V0QmFja2luZ1N0b3Jl
KG51bGxwdHIpOworICAgICAgICBjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHRpbGUgOiBzdGF0
ZS50aWxlc1RvUmVtb3ZlKQotICAgICAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZSk7
CisgICAgaWYgKCFjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZSkKKyAgICAgICAgY29tcG9z
aXRpb25TdGF0ZS5iYWNraW5nU3RvcmUgPSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRl
KCk7CiAKLSAgICBjb21taXRTY29wZS5iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFk
ZChiYWNraW5nU3RvcmUpOworICAgIGxheWVyLnNldEJhY2tpbmdTdG9yZShjb21wb3NpdGlvblN0
YXRlLmJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3Rv
cmUtPnNldFNpemUobGF5ZXIuc2l6ZSgpKTsKKyAgICBpbXBsLmFwcGx5VXBkYXRlKCk7CisgICAg
Y29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoY29tcG9zaXRp
b25TdGF0ZS5iYWNraW5nU3RvcmUpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6dXBkYXRlVGlsZXNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUsIENvbW1pdFNjb3BlJiBjb21taXRT
Y29wZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmco
VGV4dHVyZU1hcHBlckxheWVyJiBsYXllciwgY29uc3QgUmVmUHRyPE5pY29zaWE6OkltYWdlQmFj
a2luZz4mIGltYWdlQmFja2luZywgQ29tbWl0U2NvcGUmIGNvbW1pdFNjb3BlKQogewotICAgIGlm
IChzdGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKSkKKyAgICBpZiAoIWltYWdlQmFja2luZykg
eworICAgICAgICBsYXllci5zZXRDb250ZW50c0xheWVyKG51bGxwdHIpOwogICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmUgfHwg
IWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShsYXllcikpOwotICAgIGlmICghYmFja2luZ1N0
b3JlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGF1dG8mIHRpbGUgOiBzdGF0ZS50aWxl
c1RvVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBk
YXRlSW5mbyA9IHRpbGUudXBkYXRlSW5mbzsKLQotICAgICAgICBiYWNraW5nU3RvcmUtPnVwZGF0
ZVRpbGUodGlsZS50aWxlSUQsIHN1cmZhY2VVcGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGUudGls
ZVJlY3QsIHN1cmZhY2VVcGRhdGVJbmZvLmJ1ZmZlci5jb3B5UmVmKCksIHsgMCwgMCB9KTsKLSAg
ICAgICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFj
a2luZ1N0b3JlKTsKICAgICB9Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpz
eW5jSW1hZ2VCYWNraW5ncyhjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlLCBD
b21taXRTY29wZSYgY29tbWl0U2NvcGUpCi17Ci0gICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRl
LmltYWdlc1RvUmVtb3ZlKQotICAgICAgICByZW1vdmVJbWFnZUJhY2tpbmcoaW1hZ2UsIGNvbW1p
dFNjb3BlKTsKLQotICAgIGZvciAoYXV0byYgaW1hZ2UgOiBzdGF0ZS5pbWFnZXNUb0NyZWF0ZSkK
LSAgICAgICAgY3JlYXRlSW1hZ2VCYWNraW5nKGltYWdlKTsKKyAgICBhdXRvJiBpbXBsID0gaW1h
Z2VCYWNraW5nSW1wbCgqaW1hZ2VCYWNraW5nKTsKKyAgICBhdXRvJiBjb21wb3NpdGlvblN0YXRl
ID0gaW1wbC5jb21wb3NpdGlvblN0YXRlKCk7CiAKLSAgICBmb3IgKGF1dG8mIGltYWdlIDogc3Rh
dGUuaW1hZ2VzVG9VcGRhdGUpCi0gICAgICAgIHVwZGF0ZUltYWdlQmFja2luZyhpbWFnZS5maXJz
dCwgaW1hZ2Uuc2Vjb25kLmNvcHlSZWYoKSwgY29tbWl0U2NvcGUpOworICAgIGlmICghY29tcG9z
aXRpb25TdGF0ZS5iYWNraW5nU3RvcmUpCisgICAgICAgIGNvbXBvc2l0aW9uU3RhdGUuYmFja2lu
Z1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwogCi0gICAgZm9yIChh
dXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvQ2xlYXIpCi0gICAgICAgIGNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHMoaW1hZ2UsIGNvbW1pdFNjb3BlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQpCi17Ci0gICAgQVNTRVJUKCFtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJ
RCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBpbXBsLmFwcGx5VXBkYXRlKCk7CisgICAgbGF5ZXIuc2V0
Q29udGVudHNMYXllcihjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAg
Y29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoY29tcG9zaXRp
b25TdGF0ZS5iYWNraW5nU3RvcmUpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwg
UmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4mJiBidWZmZXIsIENvbW1pdFNjb3BlJiBjb21taXRTY29w
ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVMYXllcihOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyJiBsYXllcikKIHsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNv
bnRhaW5zKGltYWdlSUQpKTsKLSAgICBhdXRvIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1h
Z2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBpdC0+dmFsdWU7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBpcyByZWFsaXpl
ZCB0byBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSB3aXRoIG9ubHkgb25lIHRpbGUgaW4gVUkgUHJv
Y2Vzcy4KLSAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUoMSAvKiBpZCAqLywgMSAvKiBzY2Fs
ZSAqLyk7Ci0gICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCksIGJ1ZmZlci0+c2l6ZSgp
KTsKLSAgICAvLyBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNv
bXBvc2l0ZUltYWdlKCkKLSAgICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkp
OwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBX
VEZNb3ZlKGJ1ZmZlciksIHJlY3QubG9jYXRpb24oKSk7Ci0KLSAgICBjb21taXRTY29wZS5iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQorICAgIGxh
eWVyLmFjY2Vzc0NvbW1pdHRlZCgKKyAgICAgICAgW10oY29uc3QgTmljb3NpYTo6Q29tcG9zaXRp
b25MYXllcjo6TGF5ZXJTdGF0ZSYgY29tbWl0dGVkKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29tbWl0dGVkLmNvbnRlbnRMYXllcikgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHBy
b3h5ID0gY29udGVudExheWVySW1wbCgqY29tbWl0dGVkLmNvbnRlbnRMYXllcikucHJveHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgcHJveHktPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0K
IAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBDb21taXRTY29wZSYgY29tbWl0
U2NvcGUpCi17Ci0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7
Ci0gICAgYXV0byBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwotICAg
IGJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsVGlsZXMoKTsKLSAgICBjb21taXRTY29wZS5iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQorICAgICAgICAg
ICAgaWYgKGNvbW1pdHRlZC5iYWNraW5nU3RvcmUpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBj
b21wb3NpdGlvblN0YXRlID0gYmFja2luZ1N0b3JlSW1wbCgqY29tbWl0dGVkLmJhY2tpbmdTdG9y
ZSkuY29tcG9zaXRpb25TdGF0ZSgpOworICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uU3RhdGUu
YmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KIAotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKLXsKLSAgICBBU1NFUlQobV9p
bWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICAgICAgICAgIGlmIChjb21taXR0
ZWQuaW1hZ2VCYWNraW5nKSB7CisgICAgICAgICAgICAgICAgYXV0byYgY29tcG9zaXRpb25TdGF0
ZSA9IGltYWdlQmFja2luZ0ltcGwoKmNvbW1pdHRlZC5pbWFnZUJhY2tpbmcpLmNvbXBvc2l0aW9u
U3RhdGUoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZSA9
IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwogCi0gICAgLy8gV2UgZG9uJ3Qg
d2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJzIGEgZGFuZ2xpbmcgcG9pbnRlci4KLSAgICBj
b21taXRTY29wZS5yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBwZW5kKG1faW1hZ2VCYWNraW5ncy50
YWtlKGltYWdlSUQpKTsKKyAgICBhdXRvJiBjb21wb3NpdGlvblN0YXRlID0gY29tcG9zaXRpb25M
YXllckltcGwobGF5ZXIpLmNvbXBvc2l0aW9uU3RhdGUoKTsKKyAgICBjb21wb3NpdGlvblN0YXRl
LmxheWVyID0gbnVsbHB0cjsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFz
c2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOjpOaWNv
c2lhU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c0xheWVyKDApOwor
ICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBhdXRvIGl0
ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1faW1h
Z2VCYWNraW5ncy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzTGF5ZXIoaXQtPnZhbHVl
LmdldCgpKTsKKyAgICBtX25pY29zaWEuc2NlbmUgPSBzdGF0ZS5zY2VuZTsKIH0KIAotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1
cGRhdGVTY2VuZVN0YXRlKCkKIHsKLSAgICBpZiAoIW1fY2xpZW50KQorICAgIGlmICghbV9uaWNv
c2lhLnNjZW5lKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX25pY29zaWEgPSBzdGF0ZS5uaWNv
c2lhOwotICAgIC8vIEZJWE1FOiBTdGFydCB1c2luZyB0aGUgTmljb3NpYSBsYXllciBzdGF0ZSBm
b3IgdXBkYXRlcy4KLQogICAgIENvbW1pdFNjb3BlIGNvbW1pdFNjb3BlOwogCi0gICAgY3JlYXRl
TGF5ZXJzKHN0YXRlLmxheWVyc1RvQ3JlYXRlKTsKLSAgICBkZWxldGVMYXllcnMoc3RhdGUubGF5
ZXJzVG9SZW1vdmUpOwotCi0gICAgaWYgKHN0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyICE9IG1f
cm9vdExheWVySUQpCi0gICAgICAgIHNldFJvb3RMYXllcklEKHN0YXRlLnJvb3RDb21wb3NpdGlu
Z0xheWVyKTsKLQotICAgIHN5bmNJbWFnZUJhY2tpbmdzKHN0YXRlLCBjb21taXRTY29wZSk7Ci0K
LSAgICBmb3IgKGF1dG8mIGxheWVyIDogc3RhdGUubGF5ZXJzVG9VcGRhdGUpCi0gICAgICAgIHNl
dExheWVyU3RhdGUobGF5ZXIuZmlyc3QsIGxheWVyLnNlY29uZCwgY29tbWl0U2NvcGUpOworICAg
IG1fbmljb3NpYS5zY2VuZS0+YWNjZXNzU3RhdGUoCisgICAgICAgIFt0aGlzLCAmY29tbWl0U2Nv
cGVdKE5pY29zaWE6OlNjZW5lOjpTdGF0ZSYgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChzdGF0ZS5pZCA9PSBtX25pY29zaWEuc3RhdGUuaWQpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgcm9vdExheWVyID0g
dGV4bWFwTGF5ZXIoKnN0YXRlLnJvb3RMYXllcik7CisgICAgICAgICAgICAgICAgaWYgKHJvb3RM
YXllci5pZCgpICE9IG1fcm9vdExheWVySUQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9yb290
TGF5ZXJJRCA9IHJvb3RMYXllci5pZCgpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAg
ICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoJnJvb3RMYXllcik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyPj4gcmVtb3ZlZExheWVyczsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
bGF5ZXIgOiBtX25pY29zaWEuc3RhdGUubGF5ZXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFz
dGF0ZS5sYXllcnMuY29udGFpbnMobGF5ZXIpKQorICAgICAgICAgICAgICAgICAgICByZW1vdmVk
TGF5ZXJzLmFkZChsYXllcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbmljb3Np
YS5zdGF0ZSA9IHN0YXRlOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogcmVtb3Zl
ZExheWVycykKKyAgICAgICAgICAgICAgICByZW1vdmVMYXllcigqbGF5ZXIpOworCisgICAgICAg
ICAgICBmb3IgKGF1dG8mIGNvbXBvc2l0aW9uTGF5ZXIgOiBtX25pY29zaWEuc3RhdGUubGF5ZXJz
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgbGF5ZXIgPSB0ZXhtYXBMYXllcigqY29tcG9zaXRp
b25MYXllcik7CisgICAgICAgICAgICAgICAgY29tcG9zaXRpb25MYXllci0+Y29tbWl0U3RhdGUo
CisgICAgICAgICAgICAgICAgICAgIFt0aGlzLCAmbGF5ZXIsICZjb21taXRTY29wZV0oY29uc3Qg
Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZSYgbGF5ZXJTdGF0ZSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUu
ZGVsdGEucG9zaXRpb25DaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVy
LnNldFBvc2l0aW9uKGxheWVyU3RhdGUucG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuYW5jaG9yUG9pbnRDaGFuZ2VkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheWVyLnNldEFuY2hvclBvaW50KGxheWVyU3RhdGUuYW5jaG9yUG9p
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuc2l6ZUNo
YW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0U2l6ZShsYXllclN0
YXRlLnNpemUpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0
YS50cmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNl
dFRyYW5zZm9ybShsYXllclN0YXRlLnRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJTdGF0
ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXll
clN0YXRlLmRlbHRhLmNvbnRlbnRzUmVjdENoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5ZXIuc2V0Q29udGVudHNSZWN0KGxheWVyU3RhdGUuY29udGVudHNSZWN0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRlbnRzVGlsaW5n
Q2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRz
VGlsZVBoYXNlKGxheWVyU3RhdGUuY29udGVudHNUaWxlUGhhc2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRzVGlsZVNpemUobGF5ZXJTdGF0ZS5jb250ZW50
c1RpbGVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEub3BhY2l0eUNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0T3BhY2l0eShsYXllclN0YXRlLm9wYWNpdHkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuc29saWRDb2xvckNo
YW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0U29saWRDb2xvcihs
YXllclN0YXRlLnNvbGlkQ29sb3IpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5
ZXJTdGF0ZS5kZWx0YS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllci5zZXRGaWx0ZXJzKGxheWVyU3RhdGUuZmlsdGVycyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5hbmltYXRpb25zQ2hhbmdlZCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRBbmltYXRpb25zKGxheWVyU3RhdGUuYW5pbWF0
aW9ucyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNo
aWxkcmVuQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENo
aWxkcmVuKFdURjo6bWFwKGxheWVyU3RhdGUuY2hpbGRyZW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtdKGF1dG8mIGNoaWxkKSB7IHJldHVybiAmdGV4bWFwTGF5ZXIoKmNoaWxk
KTsgfSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5tYXNrQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXllci5zZXRNYXNrTGF5ZXIobGF5ZXJTdGF0ZS5tYXNrID8gJnRleG1hcExh
eWVyKCpsYXllclN0YXRlLm1hc2spIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5yZXBsaWNhQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXllci5zZXRSZXBsaWNhTGF5ZXIobGF5ZXJTdGF0ZS5yZXBsaWNhID8gJnRl
eG1hcExheWVyKCpsYXllclN0YXRlLnJlcGxpY2EpIDogbnVsbHB0cik7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRlbnRMYXllckNoYW5nZWQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByb3h5ID0gbGF5ZXJTdGF0ZS5jb250
ZW50TGF5ZXIgPyBjb250ZW50TGF5ZXJJbXBsKCpsYXllclN0YXRlLmNvbnRlbnRMYXllcikucHJv
eHkoKSA6IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3h5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eS0+YWN0aXZhdGVPbkNvbXBvc2l0
aW5nVGhyZWFkKHRoaXMsICZsYXllcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmZsYWdzQ2hhbmdlZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRzT3BhcXVlKGxh
eWVyU3RhdGUuZmxhZ3MuY29udGVudHNPcGFxdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxheWVyLnNldERyYXdzQ29udGVudChsYXllclN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q29udGVudHNWaXNpYmxlKGxh
eWVyU3RhdGUuZmxhZ3MuY29udGVudHNWaXNpYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXllci5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJTdGF0ZS5mbGFncy5iYWNrZmFj
ZVZpc2libGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldE1hc2tzVG9C
b3VuZHMobGF5ZXJTdGF0ZS5mbGFncy5tYXNrc1RvQm91bmRzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXllci5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRlLmZsYWdzLnByZXNlcnZl
czNEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxheWVyU3RhdGUuY29udGVudExheWVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byYgaW1wbCA9IGNvbnRlbnRMYXllckltcGwoKmxheWVyU3RhdGUuY29udGVudExh
eWVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByb3h5ID0gaW1wbC5wcm94
eSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm94eSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29tbWl0U2NvcGUucHJveGllcy5hZGQoV1RGTW92ZShwcm94
eSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICB1cGRhdGVCYWNraW5nU3RvcmUobGF5ZXIsIGxheWVyU3RhdGUuYmFja2luZ1N0b3JlLCBjb21t
aXRTY29wZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRh
LmltYWdlQmFja2luZ0NoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRl
SW1hZ2VCYWNraW5nKGxheWVyLCBsYXllclN0YXRlLmltYWdlQmFja2luZywgY29tbWl0U2NvcGUp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAK
ICAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IGNvbW1pdFNjb3BlLmJhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMpCiAgICAgICAgIGJhY2tpbmdTdG9yZS0+Y29tbWl0VGlsZU9wZXJh
dGlvbnMoKm1fdGV4dHVyZU1hcHBlcik7CisKKyAgICBmb3IgKGF1dG8mIHByb3h5IDogY29tbWl0
U2NvcGUucHJveGllcykKKyAgICAgICAgcHJveHktPnN3YXBCdWZmZXIoKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmVuc3VyZVJvb3RMYXllcigpCkBAIC00NjUsMjYgKzM1
MSwxNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VHTFJlc291cmNlcygp
CiB7CiAgICAgQVNTRVJUKCFtX2NsaWVudCk7CiAKLSAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIo
KTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgZm9yIChhdXRv
JiBwcm94eSA6IG1fcGxhdGZvcm1MYXllclByb3hpZXMudmFsdWVzKCkpCi0gICAgICAgIHByb3h5
LT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9wbGF0Zm9ybUxheWVyUHJveGllcy5jbGVhcigpOwotI2Vu
ZGlmCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9uaWNvc2lhLnN0YXRlLmxh
eWVycykKKyAgICAgICAgICAgIHJlbW92ZUxheWVyKCpsYXllcik7CisgICAgICAgIG1fbmljb3Np
YS5zdGF0ZS5sYXllcnMgPSB7IH07CisgICAgICAgIG1fbmljb3NpYS5zdGF0ZS5yb290TGF5ZXIg
PSBudWxscHRyOworICAgICAgICBtX25pY29zaWEuc2NlbmUgPSBudWxscHRyOworICAgIH0KIAog
ICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKICAgICBtX3Jvb3RMYXllcklEID0gSW52YWxpZENv
b3JkaW5hdGVkTGF5ZXJJRDsKLSAgICBtX2xheWVycy5jbGVhcigpOwogICAgIG1fdGV4dHVyZU1h
cHBlciA9IG51bGxwdHI7Ci0gICAgbV9iYWNraW5nU3RvcmVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0
ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5hbmltYXRpb25zQ2hhbmdlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoc3RhdGUuYW5pbWF0aW9ucyk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXRhY2goKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXggMmYzYjRmMzM5NzUuLjQ1YjI0NDc5ZjUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lu
dFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L05pY29zaWFTY2VuZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KQEAgLTgxLDggKzgyLDYgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2lzQWN0aXZlOyB9CiAgICAg
dm9pZCBzZXRBY3RpdmUoYm9vbCBhY3RpdmUpIHsgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsgfQogCi0g
ICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYpOwotCiAgICAgdm9pZCBzZXRWaWV3QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNv
cmU6OkNvbG9yJiBjb2xvcikgeyBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQogICAg
IFdlYkNvcmU6OkNvbG9yIHZpZXdCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXdCYWNrZ3JvdW5kQ29sb3I7IH0KIApAQCAtOTIsNzIgKzkxLDQwIEBAIHByaXZhdGU6CiAgICAg
ICAgIENvbW1pdFNjb3BlKENvbW1pdFNjb3BlJikgPSBkZWxldGU7CiAgICAgICAgIENvbW1pdFNj
b3BlJiBvcGVyYXRvcj0oY29uc3QgQ29tbWl0U2NvcGUmKSA9IGRlbGV0ZTsKIAotICAgICAgICBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlPj4gcmVsZWFzZWRJ
bWFnZUJhY2tpbmdzOwogICAgICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZT4+IGJhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CisgICAgICAg
IEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
PiBwcm94aWVzOwogICAgIH07CiAKLSAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5
ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2b2lkIHNldExh
eWVyQ2hpbGRyZW5JZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZvaWQgdXBkYXRl
VGlsZXNJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYsIENvbW1pdFNjb3BlJik7Ci0gICAgdm9p
ZCBjcmVhdGVUaWxlc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCByZW1v
dmVUaWxlc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2
b2lkIHNldExheWVyRmlsdGVyc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcios
IGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9p
ZCBzZXRMYXllckFuaW1hdGlvbnNJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
LCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZv
aWQgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
LCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAg
dm9pZCBzeW5jSW1hZ2VCYWNraW5ncyhjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
U3RhdGUmLCBDb21taXRTY29wZSYpOwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNr
aW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxOaWNvc2lhOjpC
dWZmZXI+JiYsIENvbW1pdFNjb3BlJik7Ci0gICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIENvbW1pdFNjb3BlJik7Ci0g
ICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCwgQ29tbWl0U2NvcGUmKTsKLQotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXJCeUlEKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2xheWVycy5jb250YWlucyhpZCkpOwotICAgICAgICBBU1NFUlQoaWQgIT0gV2Vi
Q29yZTo6SW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgICAgIHJldHVybiBtX2xheWVy
cy5nZXQoaWQpOwotICAgIH0KLSAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIGdldExh
eWVyQnlJRElmRXhpc3RzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBj
b21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTo6
Tmljb3NpYVN0YXRlJik7CisgICAgdm9pZCB1cGRhdGVTY2VuZVN0YXRlKCk7CisKICAgICBXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVy
LmdldCgpOyB9CiAKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAKLSAgICB2b2lkIGNyZWF0
ZUxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBkZWxldGVMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQpOwotCi0gICAgdm9pZCBhc3NpZ25JbWFnZUJh
Y2tpbmdUb0xheWVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAKLSAg
ICB2b2lkIHByZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllciosIENvbW1pdFNjb3BlJik7Ci0gICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqKTsKLSAgICB2b2lkIHJlbW92ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciopOwotICAgIHZvaWQgcmVz
ZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
KiwgQ29tbWl0U2NvcGUmKTsKKyAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTGF5ZXImLCBjb25zdCBSZWZQdHI8Tmljb3NpYTo6QmFja2luZ1N0b3JlPiYs
IENvbW1pdFNjb3BlJik7CisgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckxheWVyJiwgY29uc3QgUmVmUHRyPE5pY29zaWE6OkltYWdlQmFja2luZz4mLCBD
b21taXRTY29wZSYpOworICAgIHZvaWQgcmVtb3ZlTGF5ZXIoTmljb3NpYTo6Q29tcG9zaXRpb25M
YXllciYpOwogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQogICAgIHZv
aWQgb25OZXdCdWZmZXJBdmFpbGFibGUoKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOjpOaWNvc2lhU3RhdGUgbV9uaWNvc2lhOworICAg
IHN0cnVjdCB7CisgICAgICAgIFJlZlB0cjxOaWNvc2lhOjpTY2VuZT4gc2NlbmU7CisgICAgICAg
IE5pY29zaWE6OlNjZW5lOjpTdGF0ZSBzdGF0ZTsKKyAgICB9IG1fbmljb3NpYTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CiAK
LSAgICBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4+IG1faW1hZ2VCYWNraW5nczsKLSAgICBI
YXNoTWFwPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIFJlZlB0cjxXZWJDb3JlOjpDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZT4+IG1fYmFja2luZ1N0b3JlczsKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDU19USFJFQURFRCkKLSAgICBIYXNoTWFwPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJMYXllciosIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
Pj4gbV9wbGF0Zm9ybUxheWVyUHJveGllczsKLSNlbmRpZgotCiAgICAgLy8gQmVsb3cgdHdvIG1l
bWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkgdGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRpbmcg
dGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVycy4K
ICAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQqIG1fY2xpZW50OwogICAgIGJvb2wg
bV9pc0FjdGl2ZSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4
dHVyZU1hcHBlckxheWVyPiBtX3Jvb3RMYXllcjsKIAotICAgIEhhc2hNYXA8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxh
eWVyPj4gbV9sYXllcnM7CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExh
eWVySUQgeyBXZWJDb3JlOjpJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEIH07CiAgICAgV2ViQ29y
ZTo6Q29sb3IgbV92aWV3QmFja2dyb3VuZENvbG9yIHsgV2ViQ29yZTo6Q29sb3I6OndoaXRlIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
dGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENv
bXBvc2l0b3IuY3BwCmluZGV4IDJjZGMxZmZiOWEzLi42ZTBiZDk5YzRhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0
b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3Bw
CkBAIC0yMjAsNyArMjIwLDcgQEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlbmRlckxheWVy
VHJlZSgpCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IHN0YXRlcykKICAgICAg
ICAgICAgICAgICAgICAgY29vcmRpbmF0ZVVwZGF0ZSB8PSBzdGQ6OmFueV9vZihzdGF0ZS5sYXll
cnNUb1VwZGF0ZS5iZWdpbigpLCBzdGF0ZS5sYXllcnNUb1VwZGF0ZS5lbmQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFtdKGF1dG8mIGl0KSB7IHJldHVybiBpdC5zZWNvbmQucGxhdGZvcm1M
YXllckNoYW5nZWQgfHwgaXQuc2Vjb25kLnBsYXRmb3JtTGF5ZXJVcGRhdGVkOyB9KTsKLSAgICAg
ICAgICAgICAgICBtX2F0dHJpYnV0ZXMuY29vcmRpbmF0ZVVwZGF0ZUNvbXBsZXRpb25XaXRoQ2xp
ZW50ID0gY29vcmRpbmF0ZVVwZGF0ZTsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZXMuY29v
cmRpbmF0ZVVwZGF0ZUNvbXBsZXRpb25XaXRoQ2xpZW50ID0gLyogY29vcmRpbmF0ZVVwZGF0ZSAq
LyBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yOTgsNiArMjk4LDExIEBA
IHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjp1cGRhdGVTY2VuZVN0YXRlKGNvbnN0IENvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiAgICAgbV9jb21wb3NpdGluZ1J1bkxvb3AtPnNjaGVk
dWxlVXBkYXRlKCk7CiB9CiAKK3ZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpyZXF1ZXN0VXBkYXRl
KCkKK3sKKyAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUoKTsKK30KKwog
I2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCiBSZWZQdHI8
V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBUaHJlYWRlZENvbXBvc2l0b3I6OmRpc3Bs
YXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1Ro
cmVhZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKaW5kZXggNDJiMjQ2
ZDJiMDYuLjEzNDg5MmMwMzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29t
cG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaApAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7CiAKICAgICB2b2lkIHVwZGF0ZVNjZW5l
U3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7CisgICAgdm9p
ZCByZXF1ZXN0VXBkYXRlKCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBk
NmQ1NmMxMGQxNS4uOWQ2NzQ4NTU1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV0tXUEU6OlZpZXcm
IHZpZXcpCiAgICAgOiBtX3ZpZXcodmlldykKLSAgICAsIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXIoc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxHZXN0dXJlQ29udHJvbGxlcj4oKSkKKyAgICAsIG1f
c2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIobV92aWV3LnNjcm9sbEdlc3R1cmVDb250cm9sbGVyKCkp
CiB7CiB9CiAKQEAgLTE4Nyw4ICsxODcsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkb25lV2l0
aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgdG91Y2hFdmVudCwgYgogCiAg
ICAgYXV0byYgcGFnZSA9IG1fdmlldy5wYWdlKCk7CiAKLSAgICBpZiAobV9zY3JvbGxHZXN0dXJl
Q29udHJvbGxlci0+aGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKLSAgICAgICAgc3RydWN0IHdw
ZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVy
LT5heGlzRXZlbnQoKTsKKyAgICBpZiAobV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oYW5kbGVF
dmVudCh0b3VjaFBvaW50KSkgeworICAgICAgICBzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQq
IGF4aXNFdmVudCA9IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50KCk7CiAgICAg
ICAgIGlmIChheGlzRXZlbnQtPnR5cGUgIT0gd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxs
KQogICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6TmF0aXZlV2ViV2hl
ZWxFdmVudChheGlzRXZlbnQsIG1fdmlldy5wYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOwog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Bh
Z2VDbGllbnRJbXBsLmgKaW5kZXggNGUwNGQzOTRkYWQuLjJmOWVhNDM2YmU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xMzgs
OCArMTM4LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNlTGF5b3V0RGly
ZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBvdmVycmlkZTsKIAogICAgIFdL
V1BFOjpWaWV3JiBtX3ZpZXc7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsR2VzdHVyZUNv
bnRyb2xsZXI+IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CisgICAgU2Nyb2xsR2VzdHVyZUNv
bnRyb2xsZXImIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Ny
b2xsR2VzdHVyZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggZGExMmM4ZWIzNTEuLmEzMTNjZTdh
MmVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdl
c3R1cmVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmNwcApAQCAtMjcsMTkgKzI3LDM4IEBACiAjaW5jbHVk
ZSAiU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
YmFyLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPG51bWVyaWM+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCitTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6Q2xpZW50Ojp+Q2xpZW50KCkg
PSBkZWZhdWx0OworCitTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6U2Nyb2xsR2VzdHVyZUNvbnRy
b2xsZXIoQ2xpZW50JiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGllbnQpCit7CisgICAgbV9r
aW5ldGljcy50aW1lciA9IHN0ZDo6bWFrZV91bmlxdWU8UnVuTG9vcDo6VGltZXI8U2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXI+PihSdW5Mb29wOjptYWluKCksIHRoaXMsICZTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcjo6ZGlzcGF0Y2hDYWxsYmFjayk7Cit9CisKK1Njcm9sbEdlc3R1cmVDb250cm9sbGVy
Ojp+U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKQoreworfQorCiBib29sIFNjcm9sbEdlc3R1cmVD
b250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50
X3JhdyogdG91Y2hQb2ludCkKIHsKICAgICBzd2l0Y2ggKHRvdWNoUG9pbnQtPnR5cGUpIHsKICAg
ICBjYXNlIHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX2Rvd246Ci0gICAgICAgIG1fc3RhcnQu
dGltZSA9IHRvdWNoUG9pbnQtPnRpbWU7Ci0gICAgICAgIG1fc3RhcnQueCA9IHRvdWNoUG9pbnQt
Png7Ci0gICAgICAgIG1fc3RhcnQueSA9IHRvdWNoUG9pbnQtPnk7Ci0gICAgICAgIG1fb2Zmc2V0
LnggPSB0b3VjaFBvaW50LT54OwotICAgICAgICBtX29mZnNldC55ID0gdG91Y2hQb2ludC0+eTsK
KyAgICB7CisgICAgICAgIGludDMyX3QgeCA9IHRvdWNoUG9pbnQtPng7CisgICAgICAgIGludDMy
X3QgeSA9IHRvdWNoUG9pbnQtPnk7CisgICAgICAgIG1fc3RhcnQgPSB7IHRvdWNoUG9pbnQtPnRp
bWUsIHgsIHkgfTsKKyAgICAgICAgbV9vZmZzZXQgPSB7IHgsIHkgfTsKKyAgICAgICAgbV9raW5l
dGljcy5sYXN0ID0geyB0b3VjaFBvaW50LT50aW1lLCB4LCB5IH07CisgICAgICAgIG1fa2luZXRp
Y3MudmVsb2NpdHkgPSB7IH07CisgICAgICAgIG1fa2luZXRpY3MuYXBwbGljYXRpb24gPSB7IH07
CisgICAgICAgIG1fa2luZXRpY3MudGltZXItPnN0b3AoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICBjYXNlIHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX21vdGlvbjoKICAg
ICAgICAgaWYgKCFtX2hhbmRsaW5nKSB7CiAgICAgICAgICAgICBpbnQzMl90IGRlbHRhWCA9IHRv
dWNoUG9pbnQtPnggLSBtX3N0YXJ0Lng7CkBAIC00OSw3ICs2OCw3IEBAIGJvb2wgU2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hf
ZXZlbnRfcmF3CiAgICAgICAgICAgICBpbnQgcGl4ZWxzUGVyTGluZVN0ZXAgPSBXZWJDb3JlOjpT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCk7CiAgICAgICAgICAgICBtX2hhbmRsaW5nID0g
c3RkOjphYnMoZGVsdGFYKSA+PSBwaXhlbHNQZXJMaW5lU3RlcAogICAgICAgICAgICAgICAgIHx8
IHN0ZDo6YWJzKGRlbHRhWSkgPj0gcGl4ZWxzUGVyTGluZVN0ZXAKLSAgICAgICAgICAgICAgICB8
fCBkZWx0YVRpbWUgPj0gMjAwOworICAgICAgICAgICAgICAgIHx8IGRlbHRhVGltZSA+PSA2NDsK
ICAgICAgICAgfQogICAgICAgICBpZiAobV9oYW5kbGluZykgewogICAgICAgICAgICAgbV9heGlz
RXZlbnQgPSB7CkBAIC01OSw4ICs3OCwyNSBAQCBib29sIFNjcm9sbEdlc3R1cmVDb250cm9sbGVy
OjpoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdwogICAg
ICAgICAgICAgfTsKICAgICAgICAgICAgIG1fb2Zmc2V0LnggPSB0b3VjaFBvaW50LT54OwogICAg
ICAgICAgICAgbV9vZmZzZXQueSA9IHRvdWNoUG9pbnQtPnk7CisKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBsYXN0ID0gbV9raW5ldGljcy5sYXN0OworICAgICAgICAgICAg
ICAgIGF1dG8mIHZlbG9jaXR5ID0gbV9raW5ldGljcy52ZWxvY2l0eTsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnJvdGF0ZSh2ZWxvY2l0eS54LmJlZ2luKCksIHZlbG9jaXR5LnguYmVnaW4oKSArIDEs
IHZlbG9jaXR5LnguZW5kKCkpOworICAgICAgICAgICAgICAgIHN0ZDo6cm90YXRlKHZlbG9jaXR5
LnkuYmVnaW4oKSwgdmVsb2NpdHkueS5iZWdpbigpICsgMSwgdmVsb2NpdHkueS5lbmQoKSk7Cisg
ICAgICAgICAgICAgICAgc3RkOjpyb3RhdGUodmVsb2NpdHkudGltZS5iZWdpbigpLCB2ZWxvY2l0
eS50aW1lLmJlZ2luKCkgKyAxLCB2ZWxvY2l0eS50aW1lLmVuZCgpKTsKKworICAgICAgICAgICAg
ICAgIHZlbG9jaXR5LnguYmFjaygpID0gdG91Y2hQb2ludC0+eCAtIGxhc3QueDsKKyAgICAgICAg
ICAgICAgICB2ZWxvY2l0eS55LmJhY2soKSA9IHRvdWNoUG9pbnQtPnkgLSBsYXN0Lnk7CisgICAg
ICAgICAgICAgICAgdmVsb2NpdHkudGltZS5iYWNrKCkgPSB0b3VjaFBvaW50LT50aW1lIC0gbGFz
dC50aW1lOworCisgICAgICAgICAgICAgICAgbGFzdCA9IHsgdG91Y2hQb2ludC0+dGltZSwgdG91
Y2hQb2ludC0+eCwgdG91Y2hQb2ludC0+eSB9OworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorCisgICAgICAgIG1fa2luZXRpY3MubGFzdCA9IHsg
dG91Y2hQb2ludC0+dGltZSwgdG91Y2hQb2ludC0+eCwgdG91Y2hQb2ludC0+eSB9OwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfdHlwZV91cDoK
ICAgICAgICAgaWYgKG1faGFuZGxpbmcpIHsKQEAgLTY5LDYgKzEwNSwyMCBAQCBib29sIFNjcm9s
bEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3Rv
dWNoX2V2ZW50X3JhdwogICAgICAgICAgICAgICAgIHdwZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVf
bnVsbCwKICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwCiAgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBhdXRvJiB2ZWxvY2l0eSA9IG1fa2luZXRpY3MudmVsb2NpdHk7CisgICAgICAg
ICAgICB1aW50MzJfdCBhY2N1bXVsYXRlZFRpbWUgPSBzdGQ6OmFjY3VtdWxhdGUodmVsb2NpdHku
dGltZS5iZWdpbigpLCB2ZWxvY2l0eS50aW1lLmVuZCgpLCAwKTsKKyAgICAgICAgICAgIGludDMy
X3QgYWNjdW11bGF0ZWRYID0gc3RkOjphY2N1bXVsYXRlKHZlbG9jaXR5LnguYmVnaW4oKSwgdmVs
b2NpdHkueC5lbmQoKSwgMCk7CisgICAgICAgICAgICBpbnQzMl90IGFjY3VtdWxhdGVkWSA9IHN0
ZDo6YWNjdW11bGF0ZSh2ZWxvY2l0eS55LmJlZ2luKCksIHZlbG9jaXR5LnkuZW5kKCksIDApOwor
ICAgICAgICAgICAgZG91YmxlIHRyYWplY3RvcnlYID0gMTAwMC4wICogYWNjdW11bGF0ZWRYIC8g
YWNjdW11bGF0ZWRUaW1lOworICAgICAgICAgICAgZG91YmxlIHRyYWplY3RvcnlZID0gMTAwMC4w
ICogYWNjdW11bGF0ZWRZIC8gYWNjdW11bGF0ZWRUaW1lOworCisgICAgICAgICAgICBtX2tpbmV0
aWNzLmFwcGxpY2F0aW9uID0geworICAgICAgICAgICAgICAgICAgICBnX2dldF9tb25vdG9uaWNf
dGltZSgpLCB0b3VjaFBvaW50LT50aW1lLCB0b3VjaFBvaW50LT50aW1lLAorICAgICAgICAgICAg
ICAgICAgICB7IG1fc3RhcnQueCwgdHJhamVjdG9yeVgsIHN0ZDo6YWJzKHRyYWplY3RvcnlYICog
MC4yKSB9LAorICAgICAgICAgICAgICAgICAgICB7IG1fc3RhcnQueSwgdHJhamVjdG9yeVksIHN0
ZDo6YWJzKHRyYWplY3RvcnlZICogMC4yKSB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIG1fa2luZXRpY3MudGltZXItPnN0YXJ0T25lU2hvdChTZWNvbmRzOjpmcm9tTWlsbGlzZWNv
bmRzKDE1KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC03Nyw0ICsxMjcsNDIgQEAgYm9vbCBTY3JvbGxHZXN0dXJlQ29udHJv
bGxlcjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcK
ICAgICB9CiB9CiAKK3ZvaWQgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmRpc3BhdGNoQ2FsbGJh
Y2soKQoreworICAgIHVpbnQzMl90IHRpbWVPZmZzZXQgPSAoZ19nZXRfbW9ub3RvbmljX3RpbWUo
KSAtIG1fa2luZXRpY3MuYXBwbGljYXRpb24uYmFzZU1vbm90b25pY1RpbWUpIC8gMTAwMDsKKyAg
ICB1aW50MzJfdCB0aW1lID0gbV9raW5ldGljcy5hcHBsaWNhdGlvbi5iYXNlVGltZSArIHRpbWVP
ZmZzZXQ7CisgICAgdWludDMyX3QgdGltZURlbHRhID0gdGltZSAtIG1fa2luZXRpY3MuYXBwbGlj
YXRpb24ubGFzdFRpbWU7CisgICAgbV9raW5ldGljcy5hcHBsaWNhdGlvbi5sYXN0VGltZSA9IHRp
bWU7CisKKyAgICBkb3VibGUgdHJhamVjdG9yeVhWYWx1ZSA9IDA7CisgICAgaWYgKHRpbWVPZmZz
ZXQgPCBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnguZHVyYXRpb24pIHsKKyAgICAgICAgdHJhamVj
dG9yeVhWYWx1ZSA9IC1zdGQ6OnBvdyhkb3VibGUodGltZU9mZnNldCkgLyBtX2tpbmV0aWNzLmFw
cGxpY2F0aW9uLnguZHVyYXRpb24sIDIpICsgMTsKKyAgICAgICAgdHJhamVjdG9yeVhWYWx1ZSA9
IHN0ZDo6bWF4PGRvdWJsZT4odHJhamVjdG9yeVhWYWx1ZSwgMCk7CisgICAgfQorCisgICAgZG91
YmxlIHRyYWplY3RvcnlZVmFsdWUgPSAwOworICAgIGlmICh0aW1lT2Zmc2V0IDwgbV9raW5ldGlj
cy5hcHBsaWNhdGlvbi55LmR1cmF0aW9uKSB7CisgICAgICAgIHRyYWplY3RvcnlZVmFsdWUgPSAt
c3RkOjpwb3coZG91YmxlKHRpbWVPZmZzZXQpIC8gbV9raW5ldGljcy5hcHBsaWNhdGlvbi55LmR1
cmF0aW9uLCAyKSArIDE7CisgICAgICAgIHRyYWplY3RvcnlZVmFsdWUgPSBzdGQ6Om1heDxkb3Vi
bGU+KHRyYWplY3RvcnlZVmFsdWUsIDApOworICAgIH0KKworICAgIGJvb2wgYWN0aXZlVHJhamVj
dG9yaWVzID0gISF0cmFqZWN0b3J5WFZhbHVlIHx8ICEhdHJhamVjdG9yeVlWYWx1ZTsKKworICAg
IGludDMyX3QgdHJhamVjdG9yeVlDaGFuZ2UgPSBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnkudHJh
amVjdG9yeSAqIHRyYWplY3RvcnlZVmFsdWUgKiB0aW1lRGVsdGEgLyAxMDAwLjA7CisgICAgaWYg
KHRyYWplY3RvcnlZQ2hhbmdlKSB7CisgICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVu
dCBheGlzRXZlbnQgPSB7CisgICAgICAgICAgICB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX21v
dGlvbiwKKyAgICAgICAgICAgIG1fa2luZXRpY3MuYXBwbGljYXRpb24uYmFzZVRpbWUgKyB0aW1l
T2Zmc2V0LAorICAgICAgICAgICAgbV9raW5ldGljcy5hcHBsaWNhdGlvbi54LmNvb3JkaW5hdGUs
IG1fa2luZXRpY3MuYXBwbGljYXRpb24ueS5jb29yZGluYXRlLAorICAgICAgICAgICAgMiwgdHJh
amVjdG9yeVlDaGFuZ2UKKyAgICAgICAgfTsKKyAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hBeGlz
RXZlbnQoJmF4aXNFdmVudCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEFsc28gaGFuZGxlIGNo
YW5nZSBpbiB0aGUgaG9yaXpvbnRhbCB0cmFqZWN0b3J5LgorCisgICAgaWYgKGFjdGl2ZVRyYWpl
Y3RvcmllcykKKyAgICAgICAgbV9raW5ldGljcy50aW1lci0+c3RhcnRPbmVTaG90KFNlY29uZHM6
OmZyb21NaWxsaXNlY29uZHMoMTUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVD
b250cm9sbGVyLmgKaW5kZXggOWM5ZjZlOWUzYjEuLjYyNmUxMThhZWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJv
bGxlci5oCkBAIC0yNSwxOSArMjUsMzQgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDxh
cnJheT4KICNpbmNsdWRlIDx3cGUvd3BlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyIHsKIHB1
YmxpYzoKLSAgICBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcigpID0gZGVmYXVsdDsKKyAgICBjbGFz
cyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2xpZW50KCk7CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQXhpc0V2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhp
c19ldmVudCopID0gMDsKKyAgICB9OworCisgICAgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoQ2xp
ZW50Jik7CisgICAgflNjcm9sbEdlc3R1cmVDb250cm9sbGVyKCk7CiAKICAgICBzdHJ1Y3Qgd3Bl
X2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVudCgpIHsgcmV0dXJuICZtX2F4aXNFdmVudDsgfQog
CisgICAgYm9vbCBpc0hhbmRsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oYW5kbGluZzsgfQogICAg
IGJvb2wgaGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcq
KTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGRpc3BhdGNoQ2FsbGJhY2soKTsKKworICAgIENsaWVu
dCYgbV9jbGllbnQ7CisKICAgICBzdHJ1Y3QgewogICAgICAgICB1aW50MzJfdCB0aW1lIHsgMCB9
OwogICAgICAgICBpbnQzMl90IHggeyAwIH07CkBAIC00OSw2ICs2NCwzMiBAQCBwcml2YXRlOgog
ICAgICAgICBpbnQzMl90IHkgeyAwIH07CiAgICAgfSBtX29mZnNldDsKIAorICAgIHN0cnVjdCB7
CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50MzJfdCB0aW1lIHsgMCB9OworICAg
ICAgICAgICAgaW50MzJfdCB4IHsgMCB9OworICAgICAgICAgICAgaW50MzJfdCB5IHsgMCB9Owor
ICAgICAgICB9IGxhc3Q7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdGQ6OmFycmF5
PGludDMyX3QsIDQ+IHg7CisgICAgICAgICAgICBzdGQ6OmFycmF5PGludDMyX3QsIDQ+IHk7Cisg
ICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCA0PiB0aW1lOworICAgICAgICB9IHZlbG9j
aXR5OworCisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBpbnQ2NF90IGJhc2VNb25vdG9u
aWNUaW1lIHsgMCB9OworICAgICAgICAgICAgdWludDMyX3QgYmFzZVRpbWUgeyAwIH07CisgICAg
ICAgICAgICB1aW50MzJfdCBsYXN0VGltZSB7IDAgfTsKKyAgICAgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBjb29yZGluYXRlIHsgMCB9OworICAgICAgICAgICAgICAg
IGRvdWJsZSB0cmFqZWN0b3J5IHsgMCB9OworICAgICAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlv
biB7IDAgfTsKKyAgICAgICAgICAgIH0geCwgeTsKKyAgICAgICAgfSBhcHBsaWNhdGlvbjsKKwor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuTG9vcDo6VGltZXI8U2Nyb2xsR2VzdHVyZUNvbnRy
b2xsZXI+PiB0aW1lcjsKKyAgICB9IG1fa2luZXRpY3M7CisKICAgICBib29sIG1faGFuZGxpbmcg
eyBmYWxzZSB9OwogICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCBtX2F4aXNFdmVudDsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcAppbmRleCA0
OGQ4MDQ0MTM1Zi4uOTRiYTJjODJiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XUEVWaWV3LmNwcApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV0tXUEUgewogCiBW
aWV3OjpWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBh
Z2VDb25maWd1cmF0aW9uJiBiYXNlQ29uZmlndXJhdGlvbikKICAgICA6IG1fY2xpZW50KHN0ZDo6
bWFrZV91bmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpKQorICAgICwgbV9zY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcihzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEdlc3R1cmVDb250cm9sbGVyPigqdGhpcykp
CiAgICAgLCBtX3BhZ2VDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxQYWdlQ2xpZW50SW1wbD4oKnRo
aXMpKQogICAgICwgbV9zaXplIHsgODAwLCA2MDAgfQogICAgICwgbV92aWV3U3RhdGVGbGFncyhX
ZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpXaW5kb3dJc0FjdGl2ZSB8IFdlYkNvcmU6OkFjdGl2aXR5
U3RhdGU6OklzRm9jdXNlZCB8IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSB8IFdl
YkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzSW5XaW5kb3cpCkBAIC0xMjYsOCArMTI3LDI3IEBAIFZp
ZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFn
ZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAgICAgIC8vIGhhbmRsZV90b3VjaF9ldmVudAogICAg
ICAgICBbXSh2b2lkKiBkYXRhLCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50KiBldmVudCkK
ICAgICAgICAgewotICAgICAgICAgICAgYXV0byYgcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vmll
dyo+KGRhdGEpLT5wYWdlKCk7Ci0gICAgICAgICAgICBwYWdlLmhhbmRsZVRvdWNoRXZlbnQoV2Vi
S2l0OjpOYXRpdmVXZWJUb3VjaEV2ZW50KGV2ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkp
KTsKKyAgICAgICAgICAgIGF1dG8mIHZpZXcgPSAqcmVpbnRlcnByZXRfY2FzdDxWaWV3Kj4oZGF0
YSk7CisgICAgICAgICAgICBhdXRvJiBwYWdlID0gdmlldy5wYWdlKCk7CisKKyAgICAgICAgICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAgICAgICAgICBXZWJLaXQ6Ok5hdGl2ZVdlYlRv
dWNoRXZlbnQgbmF0aXZlRXZlbnQoZXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisK
KyAgICAgICAgICAgIGF1dG8mIHNjcm9sbEdlc3R1cmVDb250cm9sbGVyID0gKnZpZXcubV9zY3Jv
bGxHZXN0dXJlQ29udHJvbGxlcjsKKyAgICAgICAgICAgIGlmIChzY3JvbGxHZXN0dXJlQ29udHJv
bGxlci5pc0hhbmRsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgd3BlX2lu
cHV0X3RvdWNoX2V2ZW50X3JhdyogdG91Y2hQb2ludCA9IG5hdGl2ZUV2ZW50Lm5hdGl2ZUZhbGxi
YWNrVG91Y2hQb2ludCgpOworICAgICAgICAgICAgICAgIGlmICh0b3VjaFBvaW50LT50eXBlICE9
IHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX251bGwgJiYKKyAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB3cGVfaW5wdXRfYXhpc19ldmVudCogYXhpc0V2ZW50ID0gc2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXIuYXhpc0V2ZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChheGlzRXZlbnQtPnR5cGUg
IT0gd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxsKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudChheGlz
RXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFoYW5kbGVkKQorICAgICAgICAgICAgICAg
IHBhZ2UuaGFuZGxlVG91Y2hFdmVudChuYXRpdmVFdmVudCk7CiAgICAgICAgIH0sCiAgICAgICAg
IC8vIHBhZGRpbmcKICAgICAgICAgbnVsbHB0ciwKQEAgLTE4OCw0ICsyMDgsMTAgQEAgdm9pZCBW
aWV3OjpjbG9zZSgpCiAgICAgbV9wYWdlUHJveHktPmNsb3NlKCk7CiB9CiAKK3ZvaWQgVmlldzo6
ZGlzcGF0Y2hBeGlzRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQp
Cit7CisgICAgYXV0byYgcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBwYWdlLmhhbmRsZVdoZWVs
RXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNFdmVudCwgcGFnZS5kZXZpY2VT
Y2FsZUZhY3RvcigpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdLV1BFCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCmluZGV4IDJhZDE4ZmZmNzQyLi4yNDZkMGM2OGFk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKQEAgLTI4LDEy
ICsyOCwxNCBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW5n
TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJT
Y3JvbGxHZXN0dXJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQWN0aXZpdHlTdGF0ZS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNH
bG9iYWxDb250ZXh0UmVmOworc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50Owogc3RydWN0IHdw
ZV92aWV3X2JhY2tlbmQ7CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNDIsMTMgKzQ0LDE0IEBAIGNs
YXNzIFZpZXdDbGllbnQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94
eTsKK2NsYXNzIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOwogY2xhc3MgV2ViUGFnZUdyb3VwOwog
Y2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiB9CiAKIG5hbWVzcGFjZSBXS1dQRSB7CiAKLWNsYXNzIFZp
ZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpWaWV3PiB7Citj
bGFzcyBWaWV3IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6Vmll
dz4sIHB1YmxpYyBXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpDbGllbnQgewogcHVi
bGljOgogICAgIHN0YXRpYyBWaWV3KiBjcmVhdGUoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJh
Y2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAgICAg
ewpAQCAtNzcsMTMgKzgwLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZ1bGxTY3JlZW4oYm9v
bCBmdWxsU2NyZWVuU3RhdGUpIHsgbV9mdWxsU2NyZWVuTW9kZUFjdGl2ZSA9IGZ1bGxTY3JlZW5T
dGF0ZTsgfTsKICNlbmRpZgogCisgICAgV2ViS2l0OjpTY3JvbGxHZXN0dXJlQ29udHJvbGxlciYg
c2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAqbV9zY3JvbGxHZXN0dXJl
Q29udHJvbGxlcjsgfQorCiBwcml2YXRlOgogICAgIFZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tl
bmQqLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CiAKICAgICB2b2lkIHNldFNpemUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCisgICAgLy8gU2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXI6OkNsaWVudAorICAgIHZvaWQgZGlzcGF0Y2hBeGlzRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9h
eGlzX2V2ZW50Kikgb3ZlcnJpZGU7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xp
ZW50PiBtX2NsaWVudDsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlNjcm9sbEdlc3R1
cmVDb250cm9sbGVyPiBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdl
YktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1f
c2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggY2U5MzdkN2ZjMzkuLjk1MzY0NzA4N2Q4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRl
ZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9B
Y2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAtMTcxLDYgKzE3MSwxMSBAQCB2b2lkIEFjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRT
aXplJiBzaXplKQogI2VuZGlmCiB9CiAKK2Jvb2wgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c3Vw
cG9ydHNBc3luY1Njcm9sbGluZygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEFj
Y2VsZXJhdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKIHsKICAgICBB
U1NFUlQobV9sYXllclRyZWVIb3N0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaAppbmRleCA3NzFhZjBhMjA1
MS4uZWJkMzViOWU0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKQEAgLTU0LDYgKzU0LDggQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgdXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNT
dG9yZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgbWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKIAorICAgIGJvb2wgc3VwcG9ydHNBc3lu
Y1Njcm9sbGluZygpIG92ZXJyaWRlOworCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rv
cnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRSb290Q29t
cG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21w
b3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXggYmYx
OWEzMTljNGIuLmExMzYxZmQzZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTUyLDYgKzUyLDggQEAgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6Q29tcG9zaXRpbmdDb29yZGluYXRvcihQYWdlKiBwYWdlLCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG8KICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcGFpbnRpbmdF
bmdpbmUoTmljb3NpYTo6UGFpbnRpbmdFbmdpbmU6OmNyZWF0ZSgpKQogeworICAgIG1fbmljb3Np
YS5zY2VuZSA9IE5pY29zaWE6OlNjZW5lOjpjcmVhdGUoKTsKKyAgICBtX3N0YXRlLm5pY29zaWEu
c2NlbmUgPSBtX25pY29zaWEuc2NlbmU7CiB9CiAKIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6On5D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yKCkKQEAgLTEwMiw2ICsxMDQsMzYgQEAgdm9pZCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5ld1NpemUpCiAg
ICAgbm90aWZ5Rmx1c2hSZXF1aXJlZChtX3Jvb3RMYXllci5nZXQoKSk7CiB9CiAKK3ZvaWQgZHVt
cFBsYXRmb3JtTGF5ZXIoTmljb3NpYTo6Q29tcG9zaXRpb25MYXllciYgbGF5ZXIsIHVuc2lnbmVk
IGluZGVudGF0aW9uKQoreworICAgIGF1dG8gd3JpdGVJbmRlbnRhdGlvbiA9CisgICAgICAgIFtd
KHVuc2lnbmVkIGlkKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaWQ7ICsraSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICB8Iik7
CisgICAgICAgIH07CisKKyAgICBsYXllci5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgWyZsYXllciwg
JndyaXRlSW5kZW50YXRpb24sIGluZGVudGF0aW9uXShjb25zdCBOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgd3JpdGVJ
bmRlbnRhdGlvbihpbmRlbnRhdGlvbik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxh
eWVyKCVwKTogaWQgJWx1IHBvc2l0aW9uICglLjJmLCUuMmYpIGFuY2hvclBvaW50ICglLjJmLCUu
MmYsJS4yZikgc2l6ZSAoJS4yZiwlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAmbGF5ZXIsIGxh
eWVyLmlkKCksIHN0YXRlLnBvc2l0aW9uLngoKSwgc3RhdGUucG9zaXRpb24ueSgpLAorICAgICAg
ICAgICAgICAgIHN0YXRlLmFuY2hvclBvaW50LngoKSwgc3RhdGUuYW5jaG9yUG9pbnQueSgpLCBz
dGF0ZS5hbmNob3JQb2ludC56KCksCisgICAgICAgICAgICAgICAgc3RhdGUuc2l6ZS53aWR0aCgp
LCBzdGF0ZS5zaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHdyaXRlSW5kZW50YXRpb24oaW5k
ZW50YXRpb24pOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIGNoaWxkcmVuWyV6dV0g
cmVwbGljYSAlcCBtYXNrICVwXG4iLAorICAgICAgICAgICAgICAgIHN0YXRlLmNoaWxkcmVuLnNp
emUoKSwgc3RhdGUucmVwbGljYS5nZXQoKSwgc3RhdGUubWFzay5nZXQoKSk7CisgICAgICAgICAg
ICB3cml0ZUluZGVudGF0aW9uKGluZGVudGF0aW9uKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiICBmbGFncyB7ICVkLCAlZCwgJWQsICVkLCAlZCwgJWQgfVxuIiwKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5mbGFncy5jb250ZW50c09wYXF1ZSwgc3RhdGUuZmxhZ3MuZHJhd3NDb250ZW50
LCBzdGF0ZS5mbGFncy5jb250ZW50c1Zpc2libGUsCisgICAgICAgICAgICAgICAgc3RhdGUuZmxh
Z3MuYmFja2ZhY2VWaXNpYmxlLCBzdGF0ZS5mbGFncy5tYXNrc1RvQm91bmRzLCBzdGF0ZS5mbGFn
cy5wcmVzZXJ2ZXMzRCk7CisKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBzdGF0ZS5j
aGlsZHJlbikKKyAgICAgICAgICAgICAgICBkdW1wUGxhdGZvcm1MYXllcigqY2hpbGQsIGluZGVu
dGF0aW9uICsgMSk7CisgICAgICAgIH0pOworfQorCiBib29sIENvbXBvc2l0aW5nQ29vcmRpbmF0
b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4g
cHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7CkBAIC0xMjIsOSArMTU0
LDI2IEBAIGJvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCkKIAogICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKIAorI2lmIDAK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGlu
Z0xheWVyQ2hhbmdlcygpXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0bV9yb290TGF5ZXIg
JXAsIG1fcm9vdExheWVyLnBsYXRmb3JtTGF5ZXIoKSAlcFxuIiwKKyAgICAgICAgbV9yb290TGF5
ZXIuZ2V0KCksIG1fcm9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIGR1bXBQbGF0Zm9y
bUxheWVyKCptX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigpLCAxKTsKKyNlbmRpZgorCiAgICAg
aWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CiAgICAgICAgIGRpZFN5bmMgPSB0cnVlOwogCisgICAg
ICAgIG1fc3RhdGUubmljb3NpYS5zY2VuZS0+YWNjZXNzU3RhdGUoCisgICAgICAgICAgICBbdGhp
c10oTmljb3NpYTo6U2NlbmU6OlN0YXRlJiBzdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGNvbXBvc2l0aW9uTGF5ZXIgOiBtX25pY29zaWEuc3RhdGUubGF5
ZXJzKQorICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbkxheWVyLT5mbHVzaFN0YXRlKCk7
CisKKyAgICAgICAgICAgICAgICArK3N0YXRlLmlkOworICAgICAgICAgICAgICAgIHN0YXRlLmxh
eWVycyA9IG1fbmljb3NpYS5zdGF0ZS5sYXllcnM7CisgICAgICAgICAgICAgICAgc3RhdGUucm9v
dExheWVyID0gbV9uaWNvc2lhLnN0YXRlLnJvb3RMYXllcjsKKyAgICAgICAgICAgIH0pOwogICAg
ICAgICBtX2NsaWVudC5jb21taXRTY2VuZVN0YXRlKG1fc3RhdGUpOwogCiAgICAgICAgIGNsZWFy
UGVuZGluZ1N0YXRlQ2hhbmdlcygpOwpAQCAtMTcyLDcgKzIyMSw3IEBAIHZvaWQgQ29tcG9zaXRp
bmdDb29yZGluYXRvcjo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiByb290TGF5ZXIgPSBkb3duY2FzdDxDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI+KCptX3Jvb3RMYXllcik7Ci0gICAgbV9zdGF0ZS5uaWNvc2lhLnJv
b3RMYXllciA9IHJvb3RMYXllci5jb21wb3NpdGlvbkxheWVyKCk7CisgICAgbV9uaWNvc2lhLnN0
YXRlLnJvb3RMYXllciA9IHJvb3RMYXllci5jb21wb3NpdGlvbkxheWVyKCk7CiAgICAgbV9zdGF0
ZS5yb290Q29tcG9zaXRpbmdMYXllciA9IHJvb3RMYXllci5pZCgpOwogICAgIG1fZGlkSW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CkBAIC0yNjMsNyArMzEyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGgKIHsKICAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihsYXllclR5cGUsIGNsaWVudCk7CiAgICAgbGF5ZXItPnNldENvb3JkaW5hdG9yKHRo
aXMpOwotICAgIG1fc3RhdGUubmljb3NpYS5sYXllcnMuYWRkKGxheWVyLT5jb21wb3NpdGlvbkxh
eWVyKCkpOworICAgIG1fbmljb3NpYS5zdGF0ZS5sYXllcnMuYWRkKGxheWVyLT5jb21wb3NpdGlv
bkxheWVyKCkpOwogICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXItPmlkKCksIGxheWVy
KTsKICAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmFwcGVuZChsYXllci0+aWQoKSk7CiAgICAg
bGF5ZXItPnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CkBAIC0zMDQsNyArMzUzLDcg
QEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXllcihDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIGlmIChtX2lzUHVyZ2luZykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9zdGF0ZS5uaWNvc2lhLmxheWVycy5yZW1vdmUobGF5ZXItPmNvbXBvc2l0aW9u
TGF5ZXIoKSk7CisgICAgbV9uaWNvc2lhLnN0YXRlLmxheWVycy5yZW1vdmUobGF5ZXItPmNvbXBv
c2l0aW9uTGF5ZXIoKSk7CiAgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllci0+aWQo
KSk7CiAKICAgICBzaXplX3QgaW5kZXggPSBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLmZpbmQobGF5
ZXItPmlkKCkpOwpAQCAtMzIwLDcgKzM2OSw3IEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRv
cjo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKIHZvaWQgQ29t
cG9zaXRpbmdDb29yZGluYXRvcjo6YXR0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KiBsYXllcikKIHsKICAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7Ci0gICAgbV9zdGF0
ZS5uaWNvc2lhLmxheWVycy5hZGQobGF5ZXItPmNvbXBvc2l0aW9uTGF5ZXIoKSk7CisgICAgbV9u
aWNvc2lhLnN0YXRlLmxheWVycy5hZGQobGF5ZXItPmNvbXBvc2l0aW9uTGF5ZXIoKSk7CiAgICAg
bV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwogICAgIG1fc3RhdGUu
bGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKICAgICBsYXllci0+c2V0TmVlZHNW
aXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKaW5kZXggNDY0ZWI5ZWU0NWYuLjI4MTI2MmI1MTQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aApAQCAtNDAsNiArNDAsNyBAQAogCiBuYW1lc3BhY2UgTmljb3NpYSB7CiBjbGFzcyBQYWludGlu
Z0VuZ2luZTsKK2NsYXNzIFNjZW5lSW50ZWdyYXRpb247CiB9CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTYxLDYgKzYyLDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmx1
c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3Qp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTdGF0ZSYpID0gMDsKKyAgICAgICAgdmlydHVhbCBSZWZQdHI8Tmljb3Np
YTo6U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlvbigpID0gMDsKICAgICB9OwogCiAg
ICAgQ29tcG9zaXRpbmdDb29yZGluYXRvcihXZWJDb3JlOjpQYWdlKiwgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Q2xpZW50Jik7CkBAIC0xMjgsNiArMTMwLDEwIEBAIHByaXZhdGU6CiAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogbV9yb290Q29tcG9zaXRpbmdMYXllciB7IG51bGxwdHIgfTsK
ICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX292ZXJsYXlDb21wb3NpdGluZ0xheWVyIHsg
bnVsbHB0ciB9OwogCisgICAgc3RydWN0IHsKKyAgICAgICAgUmVmUHRyPE5pY29zaWE6OlNjZW5l
PiBzY2VuZTsKKyAgICAgICAgTmljb3NpYTo6U2NlbmU6OlN0YXRlIHN0YXRlOworICAgIH0gbV9u
aWNvc2lhOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOwog
CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDBhOGJl
YzhhMzk4Li4yYTFjY2YzMmYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC03MCw2ICs3MCw3IEBAIHByb3RlY3RlZDoK
ICAgICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlz
aWJsZUNvbnRlbnRSZWN0KSBvdmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQo
KSBvdmVycmlkZSB7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9OwogICAgIHZvaWQgY29tbWl0U2Nl
bmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlk
ZTsKKyAgICBSZWZQdHI8Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlv
bigpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHZvaWQgZmx1c2hMYXllcnNB
bmRGb3JjZVJlcGFpbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCBkOTlmMTZi
Y2U3NS4uM2U3MDY2NDIyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmljb3Np
YVNjZW5lSW50ZWdyYXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKQEAgLTU5LDYgKzYwLDcgQEAgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlAKICAg
ICA6IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQogICAgICwgbV9jb21wb3NpdG9y
Q2xpZW50KCp0aGlzKQogICAgICwgbV9zdXJmYWNlKEFjY2VsZXJhdGVkU3VyZmFjZTo6Y3JlYXRl
KHdlYlBhZ2UsICp0aGlzKSkKKyAgICAsIG1fc2NlbmVJbnRlZ3JhdGlvbihhZG9wdFJlZigqbmV3
IE5pY29zaWE6OlNjZW5lSW50ZWdyYXRpb24oKnRoaXMpKSkKICAgICAsIG1fdmlld3BvcnRDb250
cm9sbGVyKHdlYlBhZ2Uuc2l6ZSgpKQogewogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCkpIHsKQEAgLTg5LDYgKzkxLDcgQEAgVGhyZWFkZWRD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
KFdlYlBhZ2UmIHdlYlAKIAogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
aW52YWxpZGF0ZSgpCiB7CisgICAgbV9zY2VuZUludGVncmF0aW9uLT5pbnZhbGlkYXRlKCk7CiAg
ICAgbV9jb21wb3NpdG9yLT5pbnZhbGlkYXRlKCk7CiAgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjppbnZhbGlkYXRlKCk7CiAgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKQEAgLTEyMSw2ICsx
MjQsMTEgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aGFuZGxlRGlz
cGxheVJlZnJlc2hNb25pdG9yVXBkYXRlKGJvb2wgaGEKICAgICBtX2NvbXBvc2l0b3ItPmhhbmRs
ZURpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwogfQogCitSZWZQdHI8Tmljb3NpYTo6U2Nl
bmVJbnRlZ3JhdGlvbj4gVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjZW5lSW50
ZWdyYXRpb24oKQoreworICAgIHJldHVybiBtX3NjZW5lSW50ZWdyYXRpb24uY29weVJlZigpOwor
fQorCiB1aW50NjRfdCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3Vy
ZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCkKIHsKICAgICBpZiAoIW1fc3VyZmFjZSkKQEAgLTI3
Myw2ICsyODEsMTEgQEAgdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0U2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWMKICAgICBtX2NvbXBvc2l0b3It
PnVwZGF0ZVNjZW5lU3RhdGUoc3RhdGUpOwogfQogCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZXF1ZXN0VXBkYXRlKCkKK3sKKyAgICBtX2NvbXBvc2l0b3ItPnJlcXVl
c3RVcGRhdGUoKTsKK30KKwogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2V0SXNEaXNjYXJkYWJsZShib29sIGRpc2NhcmRhYmxlKQogewogICAgIG1faXNEaXNjYXJkYWJs
ZSA9IGRpc2NhcmRhYmxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDg3YTdkYTcxN2NkLi5i
ODQwOGI1Mjk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIlNpbXBsZVZpZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRocmVhZGVkQ29t
cG9zaXRvci5oIgogI2luY2x1ZGUgIlRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDcsMTAgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFRocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGZpbmFsIDogcHVibGljIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCwgcHVibGljIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50IHsKK2NsYXNzIFRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGZpbmFsCisgICAgOiBwdWJsaWMgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0CisgICAgLCBwdWJsaWMgQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKKyAg
ICAsIHB1YmxpYyBOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uOjpDbGllbnQgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IGNyZWF0ZShX
ZWJQYWdlJik7CiAgICAgdmlydHVhbCB+VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Qo
KTsKQEAgLTEyMCw2ICsxMjQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmx1c2hSb290TGF5
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBjb21t
aXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92
ZXJyaWRlOwogCisgICAgLy8gTmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbjo6Q2xpZW50CisgICAg
dm9pZCByZXF1ZXN0VXBkYXRlKCkgb3ZlcnJpZGU7CisKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9y
bURpc3BsYXlJRCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyNyw2ICsxMzQsOSBAQCBwcml2YXRl
OgogICAgIC8vIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CiAgICAgdm9pZCBmcmFtZUNvbXBs
ZXRlKCkgb3ZlcnJpZGU7CiAKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQK
KyAgICBSZWZQdHI8Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlvbigp
IG92ZXJyaWRlOworCiAgICAgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0
aW5nKCk7CiAgICAgdm9pZCBkaWREZXN0cm95R0xDb250ZXh0KCk7CiAgICAgdm9pZCB3aWxsUmVu
ZGVyRnJhbWUoKTsKQEAgLTE0NCw2ICsxNTQsNyBAQCBwcml2YXRlOgogICAgIENvbXBvc2l0b3JD
bGllbnQgbV9jb21wb3NpdG9yQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRl
ZFN1cmZhY2U+IG1fc3VyZmFjZTsKICAgICBSZWZQdHI8VGhyZWFkZWRDb21wb3NpdG9yPiBtX2Nv
bXBvc2l0b3I7CisgICAgUmVmPE5pY29zaWE6OlNjZW5lSW50ZWdyYXRpb24+IG1fc2NlbmVJbnRl
Z3JhdGlvbjsKICAgICBTaW1wbGVWaWV3cG9ydENvbnRyb2xsZXIgbV92aWV3cG9ydENvbnRyb2xs
ZXI7CiAgICAgZmxvYXQgbV9sYXN0UGFnZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIFdlYkNvcmU6
OkludFBvaW50IG1fbGFzdFNjcm9sbFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCA5
NDVkZWRlYzIyZS4uNDUyNDUxMDg0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25z
R1RLLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0yNzcsNiAr
Mjc3LDcgQEAgaWYgKEVOQUJMRV9PUEVOR0wpCiAKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MgVFJVRSkKICAgICBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQgVFJVRSkKKyAgICBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfTklDT1NJQSBUUlVFKQogZW5kaWYgKCkKIAogaWYgKEVOQUJM
RV9QTFVHSU5fUFJPQ0VTU19HVEsyKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNX
UEUuY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQppbmRleCBlODcwMTFkNTJk
Ni4uZmNiNTlkODgwOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCkBAIC0xMzQsNiArMTM0LDcgQEAg
U0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMIFRSVUUpCiBTRVRf
QU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVElMRURfQkFDS0lOR19TVE9SRSBUUlVFKQogU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTIFRSVUUpCiBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQgVFJVRSkK
K1NFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9OSUNPU0lBIFRSVUUpCiAKIHNldChGT1JXQVJE
SU5HX0hFQURFUlNfRElSICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMp
CiBzZXQoRk9SV0FSRElOR19IRUFERVJTX1dQRV9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElS
fS93cGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>346895</attachid>
            <date>2018-08-09 23:23:52 -0700</date>
            <delta_ts>2018-08-16 10:50:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>platform-layers.patch</filename>
            <type>text/plain</type>
            <size>117642</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCmluZGV4IGIzM2FhMGNkYWZlLi4wZjJkZDRjZmE5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCkBAIC0yNjMs
NyArMjYzLDYgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZVRyZWU6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jaWZuZGVmIE5ERUJVRwogdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkKIHsKICAgICBpZiAoIXRyZWUpCkBA
IC0yODcsNiArMjg2LDQgQEAgdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKICAgICBzaG93U2Nyb2xsaW5nU3RhdGVUcmVl
KCZub2RlLT5zY3JvbGxpbmdTdGF0ZVRyZWUoKSk7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLy8g
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaApp
bmRleCAzYjI1NjE1MWFkNy4uNmFlNmYzM2RiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCkBAIC05OSw5ICs5OSw3IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2lmbmRlZiBOREVCVUcKIHZvaWQg
c2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUq
KTsKIHZvaWQgc2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCmluZGV4IDgzMDM1MzY0OGNlLi5hYzNkOTk4NTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcApAQCAtODcsNiArODcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKCkKIAogICAgIGF1dG8gdHJlZVN0
YXRlID0gc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmNvbW1pdChMYXllclJlcHJlc2VudGF0aW9uOjpQ
bGF0Zm9ybUxheWVyUmVwcmVzZW50YXRpb24pOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdHJlZVN0YXRlID0gV1RGTW92ZSh0cmVlU3RhdGUp
XSgpIG11dGFibGUgeworICAgICAgICAvLyBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CiAgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRl
KFdURk1vdmUodHJlZVN0YXRlKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1N0YXRlTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAzZDY4YWU2NmE4Zi4uMTkwZTU4YWFlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nU3RhdGVO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtMjYsMjIgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6
cmV0YWluUGxhdGZvcm1MYXllcih2b2lkKikKK3ZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6cmV0
YWluUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5ZXJUeXBlZCh0eXBl
bGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPnJlZigpOwogfQogCi12b2lkIExheWVyUmVwcmVz
ZW50YXRpb246OnJlbGVhc2VQbGF0Zm9ybUxheWVyKHZvaWQqKQordm9pZCBMYXllclJlcHJlc2Vu
dGF0aW9uOjpyZWxlYXNlUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5
ZXJUeXBlZCh0eXBlbGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPmRlcmVmKCk7CiB9CiAKIFBs
YXRmb3JtTGF5ZXIqIExheWVyUmVwcmVzZW50YXRpb246Om1ha2VQbGF0Zm9ybUxheWVyVHlwZWQo
dm9pZCogdHlwZWxlc3NMYXllcikKQEAgLTU2LDQgKzU3LDQgQEAgdm9pZCogTGF5ZXJSZXByZXNl
bnRhdGlvbjo6bWFrZVBsYXRmb3JtTGF5ZXJUeXBlbGVzcyhQbGF0Zm9ybUxheWVyKiBsYXllcikK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZi
ZmNhNGRmZDUxLi4wNDEyYTY3OTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFw
aGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRn
cmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oIgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKQEAgLTY2LDQgKzY2LDQgQEAgUmVmPFNjcm9sbGlu
Z1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y3JlYXRlU2Nyb2xs
aW5nVHJlZU5vZGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8v
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmNwcAppbmRleCAyMmNkMWZmNzcxOS4uNTVkMzNkZTA3YTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMjgsOSArMjgs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQ
bGF0Zm9ybUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzUyLDQ0
IEBAIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCkKICAg
ICBzY3JvbGxpbmdUcmVlKCkuZml4ZWRPclN0aWNreU5vZGVSZW1vdmVkKCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQog
eworICAgIGF1dG8mIGZpeGVkTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
PihzdGF0ZU5vZGUpOworCisgICAgaWYgKGZpeGVkTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZv
cm1MYXllciogbGF5ZXIgPSBmaXhlZE5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXll
ciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBmaXhl
ZE5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJl
ZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQordm9pZCBTY3JvbGxp
bmdUcmVlRml4ZWROb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgRmxvYXRQ
b2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9yVmlld3Bv
cnRSZWN0KGZpeGVkUG9zaXRpb25SZWN0KTsKKyAgICBsYXllclBvc2l0aW9uIC09IGN1bXVsYXRp
dmVEZWx0YTsKKworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbExheWVy
LT5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgYW5jaG9yUG9pbnQgPSBzdGF0ZS5hbmNob3JQb2ludDsKKyAgICAgICAgICAgIGF1
dG8mIHNpemUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkKKyAgICAg
ICAgICAgICAgICArIEZsb2F0UG9pbnQoYW5jaG9yUG9pbnQueCgpICogc2l6ZS53aWR0aCgpLCBh
bmNob3JQb2ludC55KCkgKiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9KTsKKworICAgIGlmIChtX2NoaWxkcmVuKSB7CisgICAgICAgIEZs
b2F0U2l6ZSBuZXdEZWx0YSA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25BdExhc3RMYXlvdXQoKSArIGN1bXVsYXRpdmVEZWx0YTsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0Fm
dGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBuZXdEZWx0
YSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmgKaW5kZXggZDBhYTg3OTI0MjIuLjNkNWRiYjUxMDkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlTm9kZS5oIgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00
Myw4ICs0NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCBlY2M2ZjMxNzMwNi4u
ODNjM2YyNTYzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nv
b3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCkBAIC0yOCw3ICsyOCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKworI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVy
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsMjUgKzQ3LDE0MCBAQCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0
ZWRHcmFwaGljczo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTgogCiBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6flNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzKCkgPSBkZWZhdWx0OwogCi12b2lkIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRTdGF0ZUJlZm9yZUNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIC8vZnBy
aW50ZihzdGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRH
cmFwaGljczo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbigpIGNoYW5nZWQgcHJvcGVydGllcyAl
ZFxuIiwKKyAgICAvLyAgICBzdGF0ZU5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKSk7CisgICAgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihz
dGF0ZU5vZGUpOworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOworCisgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIg
PSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXllciA9IGRv
d25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJp
bnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogU2Nyb2xsTGF5ZXIgJXAgaWQgJWx1XG4i
LCBtX3Njcm9sbExheWVyLmdldCgpLCBtX3Njcm9sbExheWVyID8gbV9zY3JvbGxMYXllci0+aWQo
KSA6IDApOworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikp
IHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAg
ICAgICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBTY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJXAgaWQgJWx1XG4iLCBtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSwgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgPyBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+aWQoKSA6IDAp
OworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkg
eworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKTsKKyAgICAgICAgbV9jb3VudGVyU2Nyb2xsaW5n
TGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAg
ICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQgcHJvcGVydHk6IENvdW50ZXJTY3JvbGxp
bmdMYXllciAlcFxuIiwgbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOworICAgIH0KKyAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6
OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmluc2V0Q2xpcExheWVy
KCk7CisgICAgICAgIG1faW5zZXRDbGlwTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3Np
dGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQg
cHJvcGVydHk6IEluc2V0Q2xpcExheWVyICVwXG4iLCBtX2luc2V0Q2xpcExheWVyLmdldCgpKTsK
KyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpIHsKKyAg
ICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUu
Y29udGVudFNoYWRvd0xheWVyKCk7CisgICAgICAgIG1fY29udGVudFNoYWRvd0xheWVyID0gZG93
bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2Zwcmlu
dGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBDb250ZW50U2hhZG93TGF5ZXIgJXBcbiIs
IG1fY29udGVudFNoYWRvd0xheWVyLmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkhlYWRlckxheWVyKSkgeworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oZWFkZXJMYXllcigpOworICAgICAgICBtX2hlYWRlckxh
eWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAg
ICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBIZWFkZXJMYXllciAlcFxu
IiwgbV9oZWFkZXJMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpG
b290ZXJMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKTsKKyAgICAgICAgbV9mb290ZXJMYXllciA9
IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9m
cHJpbnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogRm9vdGVyTGF5ZXIgJXBcbiIsIG1f
Zm9vdGVyTGF5ZXIuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogeworICAgIC8vZnByaW50Zihz
dGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKCkgY2hhbmdlZCBwcm9wZXJ0aWVzICVkXG4iLAor
ICAgIC8vICAgIHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYg
KCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxCeSh7
IHdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworCisgICAgLy8g
VE9ETzoKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVs
RXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuaGFuZGxl
V2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyB9OworICAgIEFTU0VSVChtX3Njcm9sbExh
eWVyKTsKKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb247CisgICAgbV9zY3JvbGxMYXll
ci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKGNvbnN0IE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICBzY3JvbGxQb3NpdGlvbiA9IC1zdGF0ZS5wb3NpdGlvbjsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIHNjcm9sbFBvc2l0aW9uOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQog
eworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29v
cmRpbmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBGbG9hdFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRl
bnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7Cisg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBsYXlvdXRWaWV3cG9ydE9yaWdpbjsKKyAgICBp
ZiAoc2Nyb2xsaW5nVHJlZSgpLnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKSB7CisgICAgICAgIEZs
b2F0UG9pbnQgdmlzaWJsZUNvbnRlbnRPcmlnaW4gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICAgICAg
RmxvYXRSZWN0IG5ld0xheW91dFZpZXdwb3J0ID0gbGF5b3V0Vmlld3BvcnRGb3JTY3JvbGxQb3Np
dGlvbih2aXNpYmxlQ29udGVudE9yaWdpbiwgZnJhbWVTY2FsZUZhY3RvcigpKTsKKyAgICAgICAg
c2V0TGF5b3V0Vmlld3BvcnQobmV3TGF5b3V0Vmlld3BvcnQpOworICAgICAgICBsYXlvdXRWaWV3
cG9ydE9yaWdpbiA9IG5ld0xheW91dFZpZXdwb3J0LmxvY2F0aW9uKCk7CisgICAgfQorCisgICAg
c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnQoKSk7
CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGlu
Z05vZGVJRCgpLCBzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmlnaW4pOwogfQogCi12
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkKIHsKKyAgICAvL2ZwcmludGYoc3Rk
ZXJyLCAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldFNjcm9sbExheWVyUG9zaXRpb24oKSBwb3NpdGlvbiAoJS4yZiwlLjJmKSBsYXlvdXRWaWV3
cG9ydCAoJS4yZiwlLjJmKXgoJS4yZiwlLjJmKVxuIiwKKyAgICAvLyAgICBzY3JvbGxQb3NpdGlv
bi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSwKKyAgICAvLyAgICBsYXlvdXRWaWV3cG9ydC54KCks
IGxheW91dFZpZXdwb3J0LnkoKSwgbGF5b3V0Vmlld3BvcnQud2lkdGgoKSwgbGF5b3V0Vmlld3Bv
cnQuaGVpZ2h0KCkpOworCisgICAgYXV0byB1cGRhdGVTY29wZSA9IG1fc2Nyb2xsTGF5ZXItPmNy
ZWF0ZVVwZGF0ZVNjb3BlKCk7CisKKyAgICBBU1NFUlQobV9zY3JvbGxMYXllcik7CisgICAgbV9z
Y3JvbGxMYXllci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKE5pY29z
aWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKKyAgICAgICAgICAgIHN0
YXRlLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgRmxv
YXRSZWN0IHZpc2libGVDb250ZW50UmVjdChzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsYWJsZUFyZWFT
aXplKCkpOworICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdDsKKyAgICBTY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCA9IFN0aWNrVG9WaWV3cG9ydEJv
dW5kczsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkudmlzdWFsVmlld3BvcnRFbmFibGVkKCkp
CisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0gbGF5b3V0Vmlld3BvcnQ7CisgICAgZWxzZSB7
CisgICAgICAgIGJlaGF2aW9yRm9yRml4ZWQgPSBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMoKTsKKworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJl
biA9IEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKGVuY2xvc2luZ0xh
eW91dFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KSwgTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6
ZSgpKSwKKyAgICAgICAgICAgIExheW91dFBvaW50KHNjcm9sbFBvc2l0aW9uKSwgc2Nyb2xsT3Jp
Z2luKCksIGZyYW1lU2NhbGVGYWN0b3IoKSwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9G
cmFtZSgpLCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkp
OworCisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0geyBzY3JvbGxQb3NpdGlvbkZvckZpeGVk
Q2hpbGRyZW4sIHZpc2libGVDb250ZW50UmVjdC5zaXplKCkgfTsKKyAgICB9CisKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQgPSB0aGlzLT50b3BDb250ZW50SW5zZXQoKTsKKyAgICBpZiAobV9p
bnNldENsaXBMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiB0b3BDb250ZW50SW5z
ZXQpIHsKKyAgICAgICAgLy8gVE9ETzogLi4uCisgICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4p
IHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAg
Y2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRp
b25SZWN0LCBGbG9hdFNpemUoKSk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjp1cGRhdGVMYXllcnNBZnRlclZpZXdw
b3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKQEAgLTcxLDQgKzE4OSw0IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnVw
ZGF0ZUxheWVyc0FmdGVyVmlld3BvCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oCmluZGV4IDY1MDg2Y2M5MmJkLi5iZTdiZDY3NmFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaApAQCAtMjcsMTAgKzI3
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MgZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZSB7CkBAIC00MSw2ICs0Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3Mo
U2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpOwogCisg
ICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9k
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNj
cm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgRmxvYXRQb2ludCBz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDksOCArNTQsMTYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlclZp
ZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Cisg
ICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2luc2V0Q2xpcExh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFk
b3dMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJM
YXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRp
bmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmNwcAppbmRleCAwMzIyZTY3NmE2OC4uOWVkNThlYTBiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCkBAIC0yOCw5ICsyOCwx
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzU0LDU5IEBAIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKQogICAgIHNjcm9sbGluZ1RyZWUo
KS5maXhlZE9yU3RpY2t5Tm9kZVJlbW92ZWQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGls
ZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKKyAgICBhdXRvJiBz
dGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlPihzdGF0ZU5vZGUp
OworCisgICAgaWYgKHN0aWNreU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
Tm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxh
eWVyID0gc3RpY2t5Tm9kZS5sYXllcigpOworICAgICAgICBtX3Njcm9sbExheWVyID0gZG93bmNh
c3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgIH0KKworICAgIGlmIChz
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZTo6Vmll
d3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBzdGlja3lOb2RlLnZp
ZXdwb3J0Q29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpCit2b2lkIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGlu
Z1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVj
dCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgYm9vbCBhZGp1c3RT
dGlja3lMYXllciA9IGZhbHNlOworICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0OworCisg
ICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkp
IHsKKyAgICAgICAgY29uc3RyYWluaW5nUmVjdCA9IEZsb2F0UmVjdChkb3duY2FzdDxTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqcGFyZW50KCkpLnNjcm9sbFBvc2l0aW9uKCks
IG1fY29uc3RyYWludHMuY29uc3RyYWluaW5nUmVjdEF0TGFzdExheW91dCgpLnNpemUoKSk7Cisg
ICAgICAgIGFkanVzdFN0aWNreUxheWVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGlzPFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkpIHsKKyAgICAgICAgY29uc3Ry
YWluaW5nUmVjdCA9IGZpeGVkUG9zaXRpb25SZWN0OworICAgICAgICBhZGp1c3RTdGlja3lMYXll
ciA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRTaXplIGRlbHRhRm9yRGVzY2VuZGFudHMgPSBj
dW11bGF0aXZlRGVsdGE7CisKKyAgICBpZiAoYWRqdXN0U3RpY2t5TGF5ZXIpIHsKKyAgICAgICAg
RmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9y
Q29uc3RyYWluaW5nUmVjdChjb25zdHJhaW5pbmdSZWN0KTsKKworICAgICAgICBBU1NFUlQobV9z
Y3JvbGxMYXllcik7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFjY2Vzc1N0YXRlKAorICAgICAg
ICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpM
YXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBh
bmNob3JQb2ludCA9IHN0YXRlLmFuY2hvclBvaW50OworICAgICAgICAgICAgICAgIGF1dG8mIHNp
emUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9
IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpCisgICAgICAg
ICAgICAgICAgICAgICsgRmxvYXRQb2ludChhbmNob3JQb2ludC54KCkgKiBzaXplLndpZHRoKCks
IGFuY2hvclBvaW50LnkoKSAqIHNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHN0YXRl
LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgc3RhdGUuZGVsdGEucG9zaXRp
b25DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGRlbHRhRm9yRGVz
Y2VuZGFudHMgPSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRM
YXN0TGF5b3V0KCkgKyBjdW11bGF0aXZlRGVsdGE7CisgICAgfQorCisgICAgaWYgKG1fY2hpbGRy
ZW4pIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAg
ICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZp
eGVkUG9zaXRpb25SZWN0LCBkZWx0YUZvckRlc2NlbmRhbnRzKTsKKyAgICB9CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCmluZGV4IGYzMTMz
YTcwOGM3Li5lYjE4ZjRjZWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgogCisj
aW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUg
ZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgewpAQCAtNDMsOCArNDYsMTEgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
bmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0
b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJh
aW50cyBtX2NvbnN0cmFpbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZQppbmRleCAzYzc4ZmVhNTBjMC4uM2NkMGNlMmU2YzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtNTQsMTMgKzU0LDE2IEBA
IGlmIChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvTmljb3NpYVBhaW50aW5nRW5naW5lVGhyZWFkZWQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lLmNwcAorICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmNwcAogCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVj
b3JkZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAogCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUNvbXBvc2l0aW9u
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhSW1hZ2VC
YWNraW5nVGV4dHVyZU1hcHBlckltcGwuY3BwCiAgICAgKQogZWxzZSAoKQogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCmluZGV4IDc4
MGFjZWI3Mjc0Li5kZDkzNWMyZDUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIk5pY29zaWFTY2Vu
ZUludGVncmF0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CkBAIC01Miw2ICs1MywyNyBAQCBwdWJsaWM6CiAKICAgICB1aW50NjRfdCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KIAorICAgIHZvaWQgc2V0U2NlbmVJbnRlZ3JhdGlvbihSZWZQdHI8U2Nl
bmVJbnRlZ3JhdGlvbj4mJiBzY2VuZUludGVncmF0aW9uKQorICAgIHsKKyAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgbV9zdGF0ZS5zY2VuZUludGVncmF0
aW9uID0gV1RGTW92ZShzY2VuZUludGVncmF0aW9uKTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2NlbmVJbnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU+IGNyZWF0ZVVwZGF0ZVNjb3BlKCkK
KyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RhdGUubG9jayk7CisgICAgICAg
IGlmIChtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24pCisgICAgICAgICAgICByZXR1cm4gbV9zdGF0
ZS5zY2VuZUludGVncmF0aW9uLT5jcmVhdGVVcGRhdGVTY29wZSgpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHJlcXVlc3RVcGRhdGUoKQorICAgIHsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgaWYgKG1fc3RhdGUu
c2NlbmVJbnRlZ3JhdGlvbikKKyAgICAgICAgICAgIG1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbi0+
cmVxdWVzdFVwZGF0ZSgpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFBsYXRm
b3JtTGF5ZXIodWludDY0X3QpOwogCkBAIC01OSw2ICs4MSw3IEBAIHByb3RlY3RlZDoKIAogICAg
IHN0cnVjdCB7CiAgICAgICAgIExvY2sgbG9jazsKKyAgICAgICAgUmVmUHRyPFNjZW5lSW50ZWdy
YXRpb24+IHNjZW5lSW50ZWdyYXRpb247CiAgICAgfSBtX3N0YXRlOwogfTsKIApAQCAtMTczLDYg
KzE5NiwyNCBAQCBwdWJsaWM6CiAgICAgICAgIH0gZGVidWdCb3JkZXI7CiAgICAgfTsKIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhY2Nlc3NTdGF0ZShjb25zdCBUJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoUGxhdGZvcm1MYXllcjo6bV9z
dGF0ZS5sb2NrKTsKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLnBlbmRpbmcpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhY2Nlc3NTdGF0ZUFuZFVwZGF0ZShj
b25zdCBUJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoUGxhdGZv
cm1MYXllcjo6bV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLnBlbmRpbmcp
OworCisgICAgICAgIGF1dG8mIHNjZW5lSW50ZWdyYXRpb24gPSBQbGF0Zm9ybUxheWVyOjptX3N0
YXRlLnNjZW5lSW50ZWdyYXRpb247CisgICAgICAgIGlmIChzY2VuZUludGVncmF0aW9uKQorICAg
ICAgICAgICAgc2NlbmVJbnRlZ3JhdGlvbi0+cmVxdWVzdFVwZGF0ZSgpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBUJiBmdW5j
dG9yKQogICAgIHsKQEAgLTE4MCw2ICsyMjEsODkgQEAgcHVibGljOgogICAgICAgICBmdW5jdG9y
KG1fc3RhdGUucGVuZGluZyk7CiAgICAgfQogCisgICAgdm9pZCBmbHVzaFN0YXRlKCkKKyAgICB7
CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKFBsYXRmb3JtTGF5ZXI6Om1fc3RhdGUubG9jayk7
CisgICAgICAgIGF1dG8mIHBlbmRpbmcgPSBtX3N0YXRlLnBlbmRpbmc7CisgICAgICAgIGF1dG8m
IHN0YWdpbmcgPSBtX3N0YXRlLnN0YWdpbmc7CisKKyAgICAgICAgc3RhZ2luZy5kZWx0YS52YWx1
ZSB8PSBwZW5kaW5nLmRlbHRhLnZhbHVlOworCisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLnBv
c2l0aW9uQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcucG9zaXRpb24gPSBwZW5kaW5nLnBv
c2l0aW9uOworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5hbmNob3JQb2ludENoYW5nZWQpCisg
ICAgICAgICAgICBzdGFnaW5nLmFuY2hvclBvaW50ID0gcGVuZGluZy5hbmNob3JQb2ludDsKKyAg
ICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuc2l6ZUNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5n
LnNpemUgPSBwZW5kaW5nLnNpemU7CisKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEudHJhbnNm
b3JtQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcudHJhbnNmb3JtID0gcGVuZGluZy50cmFu
c2Zvcm07CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdl
ZCkKKyAgICAgICAgICAgIHN0YWdpbmcuY2hpbGRyZW5UcmFuc2Zvcm0gPSBwZW5kaW5nLmNoaWxk
cmVuVHJhbnNmb3JtOworCisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmNvbnRlbnRzUmVjdENo
YW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLmNvbnRlbnRzUmVjdCA9IHBlbmRpbmcuY29udGVu
dHNSZWN0OworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5jb250ZW50c1RpbGluZ0NoYW5nZWQp
IHsKKyAgICAgICAgICAgIHN0YWdpbmcuY29udGVudHNUaWxlUGhhc2UgPSBwZW5kaW5nLmNvbnRl
bnRzVGlsZVBoYXNlOworICAgICAgICAgICAgc3RhZ2luZy5jb250ZW50c1RpbGVTaXplID0gcGVu
ZGluZy5jb250ZW50c1RpbGVTaXplOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlbmRpbmcu
ZGVsdGEub3BhY2l0eUNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLm9wYWNpdHkgPSBwZW5k
aW5nLm9wYWNpdHk7CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLnNvbGlkQ29sb3JDaGFuZ2Vk
KQorICAgICAgICAgICAgc3RhZ2luZy5zb2xpZENvbG9yID0gcGVuZGluZy5zb2xpZENvbG9yOwor
CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmZpbHRlcnNDaGFuZ2VkKQorICAgICAgICAgICAg
c3RhZ2luZy5maWx0ZXJzID0gcGVuZGluZy5maWx0ZXJzOworICAgICAgICBpZiAocGVuZGluZy5k
ZWx0YS5hbmltYXRpb25zQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuYW5pbWF0aW9ucyA9
IHBlbmRpbmcuYW5pbWF0aW9uczsKKworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5jaGlsZHJl
bkNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLmNoaWxkcmVuID0gcGVuZGluZy5jaGlsZHJl
bjsKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEubWFza0NoYW5nZWQpCisgICAgICAgICAgICBz
dGFnaW5nLm1hc2sgPSBwZW5kaW5nLm1hc2s7CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLnJl
cGxpY2FDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5yZXBsaWNhID0gcGVuZGluZy5yZXBs
aWNhOworCisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmZsYWdzQ2hhbmdlZCkKKyAgICAgICAg
ICAgIHN0YWdpbmcuZmxhZ3MudmFsdWUgPSBwZW5kaW5nLmZsYWdzLnZhbHVlOworCisgICAgICAg
IGlmIChwZW5kaW5nLmRlbHRhLnJlcGFpbnRDb3VudGVyQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0
YWdpbmcucmVwYWludENvdW50ZXIgPSBwZW5kaW5nLnJlcGFpbnRDb3VudGVyOworICAgICAgICBp
ZiAocGVuZGluZy5kZWx0YS5kZWJ1Z0JvcmRlckNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5n
LmRlYnVnQm9yZGVyID0gcGVuZGluZy5kZWJ1Z0JvcmRlcjsKKworICAgICAgICBpZiAocGVuZGlu
Zy5kZWx0YS5jb250ZW50TGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5jb250ZW50
TGF5ZXIgPSBwZW5kaW5nLmNvbnRlbnRMYXllcjsKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEu
YmFja2luZ1N0b3JlQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuYmFja2luZ1N0b3JlID0g
cGVuZGluZy5iYWNraW5nU3RvcmU7CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmltYWdlQmFj
a2luZ0NoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLmltYWdlQmFja2luZyA9IHBlbmRpbmcu
aW1hZ2VCYWNraW5nOworCisgICAgICAgIHBlbmRpbmcuZGVsdGEgPSB7IH07CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGNvbW1pdFN0YXRlKGNvbnN0IFQmIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBjb25zdCBMYXllclN0YXRlJiBzdGF0ZSA9CisgICAgICAg
ICAgICBbdGhpc10geworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKFBsYXRmb3Jt
TGF5ZXI6Om1fc3RhdGUubG9jayk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5jb21taXR0ZWQg
PSBtX3N0YXRlLnN0YWdpbmc7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdGFnaW5nLmRlbHRh
ID0geyB9OworICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRlLmNvbW1pdHRlZDsKKyAgICAg
ICAgICAgIH0oKTsKKworICAgICAgICBmdW5jdG9yKHN0YXRlKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYWNjZXNzQ29tbWl0dGVkKGNvbnN0IFQmIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihQbGF0Zm9ybUxheWVyOjptX3N0
YXRlLmxvY2spOworICAgICAgICBmdW5jdG9yKG1fc3RhdGUuY29tbWl0dGVkKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgQ29tcG9zaXRpb25MYXllcih1aW50NjRfdCwgY29uc3QgSW1wbDo6RmFj
dG9yeSYpOwogCkBAIC0xODcsNiArMzExLDggQEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCB7CiAg
ICAgICAgIExheWVyU3RhdGUgcGVuZGluZzsKKyAgICAgICAgTGF5ZXJTdGF0ZSBzdGFnaW5nOwor
ICAgICAgICBMYXllclN0YXRlIGNvbW1pdHRlZDsKICAgICB9IG1fc3RhdGU7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFT
Y2VuZUludGVncmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi42ODkyZTY2NGYxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24u
Y3BwCkBAIC0wLDAgKzEsNDkgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOaWNv
c2lhU2NlbmVJbnRlZ3JhdGlvbi5oIgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK1NjZW5lSW50
ZWdyYXRpb246OlNjZW5lSW50ZWdyYXRpb24oQ2xpZW50JiBjbGllbnQpCit7CisgICAgbV9jbGll
bnQub2JqZWN0ID0gJmNsaWVudDsKK30KKworU2NlbmVJbnRlZ3JhdGlvbjo6flNjZW5lSW50ZWdy
YXRpb24oKQoreworICAgIEFTU0VSVCghbV9jbGllbnQub2JqZWN0KTsKK30KKwordm9pZCBTY2Vu
ZUludGVncmF0aW9uOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Ns
aWVudC5sb2NrKTsKKyAgICBtX2NsaWVudC5vYmplY3QgPSBudWxscHRyOworfQorCit2b2lkIFNj
ZW5lSW50ZWdyYXRpb246OnJlcXVlc3RVcGRhdGUoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fY2xpZW50LmxvY2spOworICAgIGlmIChtX2NsaWVudC5vYmplY3QpCisgICAgICAgIG1fY2xp
ZW50Lm9iamVjdC0+cmVxdWVzdFVwZGF0ZSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8U2NlbmVJ
bnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU+IFNjZW5lSW50ZWdyYXRpb246OmNyZWF0ZVVwZGF0ZVNj
b3BlKCkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxVcGRhdGVTY29wZT4obWFrZVJl
ZigqdGhpcykpOworfQorCitTY2VuZUludGVncmF0aW9uOjpDbGllbnQ6On5DbGllbnQoKSA9IGRl
ZmF1bHQ7CisKK1NjZW5lSW50ZWdyYXRpb246OlVwZGF0ZVNjb3BlOjpVcGRhdGVTY29wZShSZWY8
U2NlbmVJbnRlZ3JhdGlvbj4mJiBzY2VuZUludGVncmF0aW9uKQorICAgIDogbV9zY2VuZUludGVn
cmF0aW9uKFdURk1vdmUoc2NlbmVJbnRlZ3JhdGlvbikpCisgICAgLCBtX2xvY2tlcihtX3NjZW5l
SW50ZWdyYXRpb24tPm1fY2xpZW50LmxvY2spCit7Cit9CisKK1NjZW5lSW50ZWdyYXRpb246OlVw
ZGF0ZVNjb3BlOjp+VXBkYXRlU2NvcGUoKQoreworICAgIGF1dG8mIHNjZW5lSW50ZWdyYXRpb25P
YmogPSBtX3NjZW5lSW50ZWdyYXRpb24uZ2V0KCk7CisgICAgaWYgKHNjZW5lSW50ZWdyYXRpb25P
YmoubV9jbGllbnQub2JqZWN0KQorICAgICAgICBzY2VuZUludGVncmF0aW9uT2JqLm1fY2xpZW50
Lm9iamVjdC0+cmVxdWVzdFVwZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBOaWNvc2lhCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFTY2VuZUludGVncmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmJmNTlmZDMzNmZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5o
CkBAIC0wLDAgKzEsNDUgQEAKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIFNj
ZW5lSW50ZWdyYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2NlbmVJbnRlZ3Jh
dGlvbj4geworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIH5DbGllbnQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFVwZGF0
ZSgpID0gMDsKKyAgICB9OworCisgICAgU2NlbmVJbnRlZ3JhdGlvbihDbGllbnQmKTsKKyAgICB+
U2NlbmVJbnRlZ3JhdGlvbigpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2b2lk
IHJlcXVlc3RVcGRhdGUoKTsKKworICAgIGNsYXNzIFVwZGF0ZVNjb3BlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFVwZGF0ZVNjb3BlKFJlZjxTY2VuZUludGVncmF0aW9uPiYmKTsKKyAgICAgICAg
flVwZGF0ZVNjb3BlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWY8U2NlbmVJbnRlZ3Jh
dGlvbj4gbV9zY2VuZUludGVncmF0aW9uOworICAgICAgICBMb2NrSG9sZGVyIG1fbG9ja2VyOwor
ICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VXBkYXRlU2NvcGU+IGNyZWF0ZVVwZGF0ZVNj
b3BlKCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IHsKKyAgICAgICAgTG9jayBsb2NrOworICAg
ICAgICBDbGllbnQqIG9iamVjdCB7IG51bGxwdHIgfTsKKyAgICB9IG1fY2xpZW50OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUJhY2tpbmdTdG9yZVRleHR1cmVNYXBw
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4
bWFwL05pY29zaWFCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiNTYyMmVkYmViCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsLmNwcApAQCAtMCwwICsxLDc3IEBACisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmljb3NpYUJhY2tpbmdTdG9yZVRleHR1cmVNYXBw
ZXJJbXBsLmgiCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKK25hbWVzcGFjZSBOaWNvc2lh
IHsKKworYXV0byBCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgp
IC0+IEZhY3RvcnkKK3sKKyAgICByZXR1cm4gRmFjdG9yeSgKKyAgICAgICAgW10oQmFja2luZ1N0
b3JlJikgeworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QmFja2luZ1N0b3Jl
VGV4dHVyZU1hcHBlckltcGw+KCk7CisgICAgICAgIH0pOworfQorCitCYWNraW5nU3RvcmVUZXh0
dXJlTWFwcGVySW1wbDo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwoKSA9IGRlZmF1bHQ7
CitCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6fkJhY2tpbmdTdG9yZVRleHR1cmVNYXBw
ZXJJbXBsKCkgPSBkZWZhdWx0OworCit2b2lkIEJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBs
Ojp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQoreworICAgIG1fbGF5
ZXJTdGF0ZS5oYXNQZW5kaW5nVGlsZUNyZWF0aW9uID0gdHJ1ZTsKK30KKwordm9pZCBCYWNraW5n
U3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGZsb2F0
IHNjYWxlKQoreworICAgIEFTU0VSVChtX2xheWVyU3RhdGUuaXNGbHVzaGluZyk7CisgICAgbV9s
YXllclN0YXRlLnVwZGF0ZS50aWxlc1RvQ3JlYXRlLmFwcGVuZCh7IHRpbGVJRCwgc2NhbGUgfSk7
Cit9CisKK3ZvaWQgQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGw6OnVwZGF0ZVRpbGUodWlu
dDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgQVNTRVJUKG1fbGF5
ZXJTdGF0ZS5pc0ZsdXNoaW5nKTsKKyAgICBtX2xheWVyU3RhdGUudXBkYXRlLnRpbGVzVG9VcGRh
dGUuYXBwZW5kKHsgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbyB9KTsKK30KKwordm9pZCBC
YWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6cmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQp
Cit7CisgICAgQVNTRVJUKG1fbGF5ZXJTdGF0ZS5pc0ZsdXNoaW5nIHx8IG1fbGF5ZXJTdGF0ZS5p
c1B1cmdpbmcpOworICAgIG1fbGF5ZXJTdGF0ZS51cGRhdGUudGlsZXNUb1JlbW92ZS5hcHBlbmQo
VGlsZVVwZGF0ZTo6UmVtb3ZhbERhdGEgeyB0aWxlSUQgfSk7Cit9CisKK3ZvaWQgQmFja2luZ1N0
b3JlVGV4dHVyZU1hcHBlckltcGw6OmZsdXNoVXBkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9sYXll
clN0YXRlLmlzRmx1c2hpbmcpOworICAgIG1fbGF5ZXJTdGF0ZS5pc0ZsdXNoaW5nID0gZmFsc2U7
CisgICAgbV9sYXllclN0YXRlLmhhc1BlbmRpbmdUaWxlQ3JlYXRpb24gPSBmYWxzZTsKKworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV91cGRhdGUubG9jayk7CisgICAgICAgIG1f
dXBkYXRlLnBlbmRpbmcudGlsZXNUb0NyZWF0ZS5hcHBlbmRWZWN0b3IobV9sYXllclN0YXRlLnVw
ZGF0ZS50aWxlc1RvQ3JlYXRlKTsKKyAgICAgICAgbV91cGRhdGUucGVuZGluZy50aWxlc1RvVXBk
YXRlLmFwcGVuZFZlY3RvcihtX2xheWVyU3RhdGUudXBkYXRlLnRpbGVzVG9VcGRhdGUpOworICAg
ICAgICBtX3VwZGF0ZS5wZW5kaW5nLnRpbGVzVG9SZW1vdmUuYXBwZW5kVmVjdG9yKG1fbGF5ZXJT
dGF0ZS51cGRhdGUudGlsZXNUb1JlbW92ZSk7CisgICAgfQorCisgICAgbV9sYXllclN0YXRlLnVw
ZGF0ZSA9IHsgfTsKK30KKwordm9pZCBCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6YXBw
bHlVcGRhdGUoKQoreworICAgIEFTU0VSVChtX2NvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3Jl
KTsKKyAgICBhdXRvJiBiYWNraW5nU3RvcmUgPSAqbV9jb21wb3NpdGlvblN0YXRlLmJhY2tpbmdT
dG9yZTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fdXBkYXRlLmxvY2spOworICAgIGZvciAo
YXV0byYgdGlsZSA6IG1fdXBkYXRlLnBlbmRpbmcudGlsZXNUb0NyZWF0ZSkKKyAgICAgICAgYmFj
a2luZ1N0b3JlLmNyZWF0ZVRpbGUodGlsZS50aWxlSUQsIHRpbGUuc2NhbGUpOworICAgIGZvciAo
YXV0byYgdGlsZSA6IG1fdXBkYXRlLnBlbmRpbmcudGlsZXNUb1JlbW92ZSkKKyAgICAgICAgYmFj
a2luZ1N0b3JlLnJlbW92ZVRpbGUodGlsZS50aWxlSUQpOworICAgIGZvciAoYXV0byYgdGlsZSA6
IG1fdXBkYXRlLnBlbmRpbmcudGlsZXNUb1VwZGF0ZSkgeworICAgICAgICBiYWNraW5nU3RvcmUu
dXBkYXRlVGlsZSh0aWxlLnRpbGVJRCwgdGlsZS51cGRhdGVJbmZvLnVwZGF0ZVJlY3QsCisgICAg
ICAgICAgICB0aWxlLnRpbGVSZWN0LCB0aWxlLnVwZGF0ZUluZm8uYnVmZmVyLmNvcHlSZWYoKSwg
eyAwLCAwIH0pOworICAgIH0KKyAgICBtX3VwZGF0ZS5wZW5kaW5nID0geyB9OworfQorCit9IC8v
IG5hbWVzcGFjZSBOaWNvc2lhCisKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFCYWNraW5nU3RvcmVUZXh0dXJl
TWFwcGVySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hNjMw
ZmExYzBkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbC5o
CkBAIC0wLDAgKzEsODQgQEAKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJOaWNv
c2lhUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5j
bHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNs
aWVudC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1l
c3BhY2UgTmljb3NpYSB7CisKK2NsYXNzIEJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsIGZp
bmFsIDogcHVibGljIEJhY2tpbmdTdG9yZTo6SW1wbCwgcHVibGljIFdlYkNvcmU6OlRpbGVkQmFj
a2luZ1N0b3JlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgRmFjdG9yeSBjcmVhdGVGYWN0
b3J5KCk7CisKKyAgICBCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbCgpOworICAgIHZpcnR1
YWwgfkJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsKCk7CisgICAgYm9vbCBpc1RleHR1cmVN
YXBwZXJJbXBsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgc3RydWN0
IFRpbGVVcGRhdGUgeworICAgICAgICBzdHJ1Y3QgQ3JlYXRpb25EYXRhIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlOworICAgICAgICB9Owor
ICAgICAgICBWZWN0b3I8Q3JlYXRpb25EYXRhPiB0aWxlc1RvQ3JlYXRlOworCisgICAgICAgIHN0
cnVjdCBVcGRhdGVEYXRhIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbGVJRDsKKyAgICAgICAg
ICAgIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgICAgICBXZWJDb3JlOjpTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgICAgICB9OworICAgICAgICBWZWN0b3I8VXBk
YXRlRGF0YT4gdGlsZXNUb1VwZGF0ZTsKKworICAgICAgICBzdHJ1Y3QgUmVtb3ZhbERhdGEgewor
ICAgICAgICAgICAgdWludDMyX3QgdGlsZUlEOworICAgICAgICB9OworICAgICAgICBWZWN0b3I8
UmVtb3ZhbERhdGE+IHRpbGVzVG9SZW1vdmU7CisgICAgfTsKKworICAgIHN0cnVjdCBMYXllclN0
YXRlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3Jl
PiBtYWluQmFja2luZ1N0b3JlOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmU+IHByZXZpb3VzQmFja2luZ1N0b3JlOworCisgICAgICAgIFRpbGVVcGRh
dGUgdXBkYXRlOworICAgICAgICBib29sIGlzRmx1c2hpbmcgeyBmYWxzZSB9OworICAgICAgICBi
b29sIGlzUHVyZ2luZyB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgaGFzUGVuZGluZ1RpbGVDcmVh
dGlvbiB7IGZhbHNlIH07CisgICAgfTsKKyAgICBMYXllclN0YXRlJiBsYXllclN0YXRlKCkgeyBy
ZXR1cm4gbV9sYXllclN0YXRlOyB9CisKKyAgICB2b2lkIGZsdXNoVXBkYXRlKCk7CisKKyAgICBz
dHJ1Y3QgQ29tcG9zaXRpb25TdGF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOworICAgIH07CisgICAgQ29tcG9zaXRpb25T
dGF0ZSYgY29tcG9zaXRpb25TdGF0ZSgpIHsgcmV0dXJuIG1fY29tcG9zaXRpb25TdGF0ZTsgfQor
CisgICAgdm9pZCBhcHBseVVwZGF0ZSgpOworCisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQKKyAgICB2b2lkIHRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbigpIG92
ZXJyaWRlOworICAgIHZvaWQgY3JlYXRlVGlsZSh1aW50MzJfdCwgZmxvYXQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1v
dmVUaWxlKHVpbnQzMl90KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBMYXllclN0YXRlIG1f
bGF5ZXJTdGF0ZTsKKyAgICBDb21wb3NpdGlvblN0YXRlIG1fY29tcG9zaXRpb25TdGF0ZTsKKwor
ICAgIHN0cnVjdCB7CisgICAgICAgIExvY2sgbG9jazsKKyAgICAgICAgVGlsZVVwZGF0ZSBwZW5k
aW5nOworICAgICAgICBUaWxlVXBkYXRlIGNvbW1pdHRlZDsKKyAgICB9IG1fdXBkYXRlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX05JQ09T
SUFfQkFDS0lOR1NUT1JFX0lNUEwoQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwsIGlzVGV4
dHVyZU1hcHBlckltcGwoKSk7CisKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUltYWdlQmFja2luZ1RleHR1
cmVNYXBwZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZTlhMDMwOWUwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlcklt
cGwuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJO
aWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGwuaCIKKworI2lmIFVTRShURVhUVVJF
X01BUFBFUikKKworbmFtZXNwYWNlIE5pY29zaWEgeworCithdXRvIEltYWdlQmFja2luZ1RleHR1
cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCkgLT4gRmFjdG9yeQoreworICAgIHJldHVybiBG
YWN0b3J5KAorICAgICAgICBbXShJbWFnZUJhY2tpbmcmKSB7CisgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbD4oKTsKKyAgICAg
ICAgfSk7Cit9CisKK0ltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsOjpJbWFnZUJhY2tpbmdU
ZXh0dXJlTWFwcGVySW1wbCgpID0gZGVmYXVsdDsKK0ltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJ
bXBsOjp+SW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGwoKSA9IGRlZmF1bHQ7CisKK3ZvaWQg
SW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGw6OmZsdXNoVXBkYXRlKCkKK3sKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3VwZGF0ZS5sb2NrKTsKKyAgICBtX3VwZGF0ZS5pc1Zpc2libGUgPSBt
X2xheWVyU3RhdGUuaXNWaXNpYmxlOworICAgIG1fdXBkYXRlLmJ1ZmZlciA9IFdURk1vdmUobV9s
YXllclN0YXRlLmJ1ZmZlcik7Cit9CisKK3ZvaWQgSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlcklt
cGw6OmFwcGx5VXBkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9jb21wb3NpdGlvblN0YXRlLmJhY2tp
bmdTdG9yZSk7CisgICAgYXV0byYgYmFja2luZ1N0b3JlID0gKm1fY29tcG9zaXRpb25TdGF0ZS5i
YWNraW5nU3RvcmU7CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3VwZGF0ZS5sb2NrKTsKKyAg
ICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsOjphcHBseVVw
ZGF0ZSgpIGlzVmlzaWJsZSAlZCBidWZmZXIgJXBcbiIsCisgICAgICAgIG1fdXBkYXRlLmlzVmlz
aWJsZSwgbV91cGRhdGUuYnVmZmVyLmdldCgpKTsKKyAgICBpZiAoIW1fdXBkYXRlLmlzVmlzaWJs
ZSB8fCAhbV91cGRhdGUuYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBiYWNraW5nU3Rv
cmUuY3JlYXRlVGlsZSgxLCAxKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QgeyB7IH0sIG1f
dXBkYXRlLmJ1ZmZlci0+c2l6ZSgpIH07CisgICAgQVNTRVJUKDIwMDAgPj0gc3RkOjptYXgocmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisgICAgYmFja2luZ1N0b3JlLnNldFNpemUocmVj
dC5zaXplKCkpOworICAgIGJhY2tpbmdTdG9yZS51cGRhdGVUaWxlKDEsIHJlY3QsIHJlY3QsIFdU
Rk1vdmUobV91cGRhdGUuYnVmZmVyKSwgcmVjdC5sb2NhdGlvbigpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgTmljb3NpYQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFJbWFnZUJhY2tpbmdUZXh0dXJlTWFw
cGVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3YjIwZDk1YWJmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUlt
YWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmgKQEAgLTAsMCArMSw1NiBAQAorI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKKyNpbmNsdWRlICJOaWNv
c2lhUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEltYWdlOworfQorCituYW1lc3BhY2UgTmljb3NpYSB7CisKK2NsYXNz
IEltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsIGZpbmFsIDogcHVibGljIEltYWdlQmFja2lu
Zzo6SW1wbCB7CitwdWJsaWM6CisgICAgc3RhdGljIEZhY3RvcnkgY3JlYXRlRmFjdG9yeSgpOwor
CisgICAgSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGwoKTsKKyAgICB2aXJ0dWFsIH5JbWFn
ZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbCgpOworICAgIGJvb2wgaXNUZXh0dXJlTWFwcGVySW1w
bCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0cnVjdCBMYXllclN0
YXRlIHsKKyAgICAgICAgdWludHB0cl90IGltYWdlSUQgeyAwIH07CisgICAgICAgIHVpbnRwdHJf
dCBuYXRpdmVJbWFnZUlEIHsgMCB9OworICAgICAgICBib29sIGlzVmlzaWJsZSB7IGZhbHNlIH07
CisgICAgICAgIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+IGJ1ZmZlcjsKKyAgICB9OworICAgIExh
eWVyU3RhdGUmIGxheWVyU3RhdGUoKSB7IHJldHVybiBtX2xheWVyU3RhdGU7IH0KKworICAgIHZv
aWQgZmx1c2hVcGRhdGUoKTsKKworICAgIHN0cnVjdCBDb21wb3NpdGlvblN0YXRlIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7
CisgICAgfTsKKyAgICBDb21wb3NpdGlvblN0YXRlJiBjb21wb3NpdGlvblN0YXRlKCkgeyByZXR1
cm4gbV9jb21wb3NpdGlvblN0YXRlOyB9CisKKyAgICB2b2lkIGFwcGx5VXBkYXRlKCk7CisKK3By
aXZhdGU6CisgICAgTGF5ZXJTdGF0ZSBtX2xheWVyU3RhdGU7CisgICAgQ29tcG9zaXRpb25TdGF0
ZSBtX2NvbXBvc2l0aW9uU3RhdGU7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICBMb2NrIGxvY2s7
CisgICAgICAgIGJvb2wgaXNWaXNpYmxlIHsgZmFsc2UgfTsKKyAgICAgICAgUmVmUHRyPE5pY29z
aWE6OkJ1ZmZlcj4gYnVmZmVyOworICAgIH0gbV91cGRhdGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOaWNvc2lhCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfTklDT1NJQV9JTUFHRUJBQ0tJTkdf
SU1QTChJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbCwgaXNUZXh0dXJlTWFwcGVySW1wbCgp
KTsKKworI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggYmUyMTY4MGZi
ZDIuLmJmMTkzNzIzNzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMzAsNyArMzAsMTEgQEAKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllckZhY3RvcnkuaCIKKyNpbmNsdWRlICJOaWNvc2lhQmFja2luZ1N0b3JlVGV4
dHVyZU1hcHBlckltcGwuaCIKICNpbmNsdWRlICJOaWNvc2lhQ29tcG9zaXRpb25MYXllclRleHR1
cmVNYXBwZXJJbXBsLmgiCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsLmgiCisjaW5jbHVkZSAiTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBs
LmgiCisjaW5jbHVkZSAiTmljb3NpYVBhaW50aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIk5pY29z
aWFQYWludGluZ0VuZ2luZS5oIgogI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCkBAIC0xNjAsNiAr
MTY0LDggQEAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKCkKICAgICB9CiAgICAgQVNTRVJUKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKTsKICAg
ICBBU1NFUlQoIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAgQVNTRVJUKCFtX25pY29zaWEuaW1h
Z2VCYWNraW5nKTsKKyAgICBBU1NFUlQoIW1fbmljb3NpYS5iYWNraW5nU3RvcmUpOwogICAgIHdp
bGxCZURlc3Ryb3llZCgpOwogfQogCkBAIC0yMjgsNiArMjM0LDE3IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQogICAgIGRp
ZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
eW5jUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9
PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24o
cCk7CisgICAgbV9uaWNvc2lhLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgbV9z
aG91bGRTeW5jTGF5ZXJTdGF0ZSA9IHRydWU7CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3QoKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50
KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKIHsKICAgICBpZiAoYW5jaG9yUG9pbnQoKSA9PSBwKQpA
QCAtNDIxLDggKzQzOCwxMyBAQCBib29sIEdyYXBoaWNzTGF5ZXI6OnN1cHBvcnRzQ29udGVudHNU
aWxpbmcoKQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVlZHNE
aXNwbGF5KCkKIHsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCisjaWYg
VVNFKE5JQ09TSUEpCisgICAgaWYgKG1fbmljb3NpYS5jb250ZW50TGF5ZXIpCisgICAgICAgIG1f
c2hvdWxkVXBkYXRlUGxhdGZvcm1MYXllciA9IHRydWU7CisjZWxzZQogICAgIGlmIChtX3BsYXRm
b3JtTGF5ZXIpCiAgICAgICAgIG1fc2hvdWxkVXBkYXRlUGxhdGZvcm1MYXllciA9IHRydWU7Cisj
ZW5kaWYKICNlbmRpZgogCiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwpAQCAtNDMzLDYgKzQ1
NSwxMyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1BsYXRm
b3JtTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcgogewogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19USFJFQURFRCkKICNpZiBVU0UoTklDT1NJQSkKKyAgICBhdXRvKiBjb250ZW50TGF5
ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXI+KHBsYXRmb3JtTGF5ZXIpOworICAg
IGlmIChtX25pY29zaWEuY29udGVudExheWVyICE9IGNvbnRlbnRMYXllcikgeworICAgICAgICBt
X3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVyID0gdHJ1ZTsKKyAgICAgICAgbV9uaWNvc2lhLmRlbHRh
LmNvbnRlbnRMYXllckNoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIG1fbmljb3NpYS5jb250
ZW50TGF5ZXIgPSBjb250ZW50TGF5ZXI7CiAjZWxzZQogICAgIGlmIChtX3BsYXRmb3JtTGF5ZXIg
IT0gcGxhdGZvcm1MYXllcikKICAgICAgICAgbV9zaG91bGRTeW5jUGxhdGZvcm1MYXllciA9IHRy
dWU7CkBAIC02NzcsNiArNzA2LDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5
bmNJbWFnZUJhY2tpbmcoKQogICAgICAgICBtX2xheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkID0gdHJ1
ZTsKICAgICB9IGVsc2UKICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKCkKQEAg
LTc5OCw2ICs4MjgsNjYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIGlmICghaGFzQWN0aXZlVHJhbnNm
b3JtQW5pbWF0aW9uKQogICAgICAgICBtX21vdmluZ1Zpc2libGVSZWN0ID0gZmFsc2U7CiAKKyAg
ICBpZiAobV9uaWNvc2lhLmNvbnRlbnRMYXllcikKKyAgICAgICAgZG93bmNhc3Q8Tmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYS5jb250ZW50TGF5ZXItPmlt
cGwoKSkuc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpOworCisgICAgaWYgKCFzaG91bGRIYXZlQmFja2lu
Z1N0b3JlKCkpIHsKKyAgICAgICAgaWYgKG1fbmljb3NpYS5iYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGxheWVyU3RhdGUgPSBkb3duY2FzdDxOaWNvc2lhOjpCYWNraW5nU3RvcmVU
ZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhLmJhY2tpbmdTdG9yZS0+aW1wbCgpKS5sYXllclN0
YXRlKCk7CisgICAgICAgICAgICBsYXllclN0YXRlLmlzUHVyZ2luZyA9IHRydWU7CisgICAgICAg
ICAgICBsYXllclN0YXRlLm1haW5CYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgICAgICAgICAg
bGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAg
IG1fbmljb3NpYS5iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgICAgICAgICAgbV9uaWNvc2lh
LmRlbHRhLmJhY2tpbmdTdG9yZUNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKCFtX25pY29zaWEuYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICBt
X25pY29zaWEuYmFja2luZ1N0b3JlID0gTmljb3NpYTo6QmFja2luZ1N0b3JlOjpjcmVhdGUoTmlj
b3NpYTo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKSk7Cisg
ICAgICAgICAgICBtX25pY29zaWEuZGVsdGEuYmFja2luZ1N0b3JlQ2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpIHsK
KyAgICAgICAgQVNTRVJUKG1fY29tcG9zaXRlZEltYWdlKTsKKyAgICAgICAgYXV0byYgaW1hZ2Ug
PSAqbV9jb21wb3NpdGVkSW1hZ2U7CisgICAgICAgIGlmIChtX25pY29zaWEuaW1hZ2VCYWNraW5n
KSB7CisgICAgICAgICAgICBhdXRvJiBpbXBsID0gZG93bmNhc3Q8Tmljb3NpYTo6SW1hZ2VCYWNr
aW5nVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYS5pbWFnZUJhY2tpbmctPmltcGwoKSk7Cisg
ICAgICAgICAgICBpZiAoaW1wbC5sYXllclN0YXRlKCkuaW1hZ2VJRCAhPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oJmltYWdlKSkKKyAgICAgICAgICAgICAgICBtX25pY29zaWEuaW1hZ2VC
YWNraW5nID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fbmljb3NpYS5pbWFn
ZUJhY2tpbmcpIHsKKyAgICAgICAgICAgIG1fbmljb3NpYS5pbWFnZUJhY2tpbmcgPSBOaWNvc2lh
OjpJbWFnZUJhY2tpbmc6OmNyZWF0ZShOaWNvc2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeSgpKTsKKyAgICAgICAgICAgIG1fbmljb3NpYS5kZWx0YS5pbWFn
ZUJhY2tpbmdDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8mIGltcGwg
PSBkb3duY2FzdDxOaWNvc2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNv
c2lhLmltYWdlQmFja2luZy0+aW1wbCgpKTsKKyAgICAgICAgYXV0byYgbGF5ZXJTdGF0ZSA9IGlt
cGwubGF5ZXJTdGF0ZSgpOworICAgICAgICBsYXllclN0YXRlLmltYWdlSUQgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oJmltYWdlKTsKKyAgICAgICAgbGF5ZXJTdGF0ZS5pc1Zpc2libGUg
PSB0cmFuc2Zvcm1lZFZpc2libGVSZWN0KCkuaW50ZXJzZWN0cyhJbnRSZWN0KGNvbnRlbnRzUmVj
dCgpKSk7CisgICAgICAgIGlmIChsYXllclN0YXRlLmlzVmlzaWJsZSAmJiBsYXllclN0YXRlLm5h
dGl2ZUltYWdlSUQgIT0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fY29tcG9zaXRlZE5h
dGl2ZUltYWdlUHRyLmdldCgpKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXIgPSBOaWNvc2lh
OjpCdWZmZXI6OmNyZWF0ZShJbnRTaXplKGltYWdlLnNpemUoKSksCisgICAgICAgICAgICAgICAg
IWltYWdlLmN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpID8gTmljb3NpYTo6QnVmZmVyOjpT
dXBwb3J0c0FscGhhIDogTmljb3NpYTo6QnVmZmVyOjpOb0ZsYWdzKTsKKyAgICAgICAgICAgIE5p
Y29zaWE6OlBhaW50aW5nQ29udGV4dDo6cGFpbnQoYnVmZmVyLAorICAgICAgICAgICAgICAgIFsm
aW1hZ2VdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdCB7IHsgfSwgSW50U2l6ZSB7IGltYWdlLnNpemUo
KSB9IH07CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCByZWN0
LCByZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhDb21wb3NpdGVDb3B5KSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBsYXllclN0YXRlLm5hdGl2ZUltYWdlSUQgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIuZ2V0KCkpOwor
ICAgICAgICAgICAgbGF5ZXJTdGF0ZS5idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7CisgICAgICAg
ICAgICBtX25pY29zaWEuZGVsdGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCA9IHRydWU7CisKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCkgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgJXAgaW1hZ2VJRCAlbHUgaXNWaXNp
YmxlICVkIGJ1ZmZlciAlcFxuIiwKKyAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJ
bWFnZVB0ci5nZXQoKSwgbGF5ZXJTdGF0ZS5pbWFnZUlELCBsYXllclN0YXRlLmlzVmlzaWJsZSwg
bGF5ZXJTdGF0ZS5idWZmZXIuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaW1wbC5mbHVz
aFVwZGF0ZSgpOworICAgIH0gZWxzZSBpZiAobV9uaWNvc2lhLmltYWdlQmFja2luZykgeworICAg
ICAgICBtX25pY29zaWEuaW1hZ2VCYWNraW5nID0gbnVsbHB0cjsKKyAgICAgICAgbV9uaWNvc2lh
LmRlbHRhLmltYWdlQmFja2luZ0NoYW5nZWQgPSB0cnVlOworICAgIH0KKwogICAgIHsKICAgICAg
ICAgbV9uaWNvc2lhLmxheWVyLT51cGRhdGVTdGF0ZSgKICAgICAgICAgICAgIFt0aGlzXShOaWNv
c2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKQEAgLTg1NCw2ICs5NDQs
MTMgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5yZXBsaWNhID0g
cmVwbGljYSA/IHJlcGxpY2EtPm1fbmljb3NpYS5sYXllciA6IG51bGxwdHI7CiAgICAgICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKGxvY2FsRGVsdGEuY29udGVudExheWVyQ2hh
bmdlZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29udGVudExheWVyID0gbV9uaWNvc2lh
LmNvbnRlbnRMYXllcjsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5iYWNraW5nU3Rv
cmVDaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5iYWNraW5nU3RvcmUgPSBtX25p
Y29zaWEuYmFja2luZ1N0b3JlOworICAgICAgICAgICAgICAgIGlmIChsb2NhbERlbHRhLmltYWdl
QmFja2luZ0NoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmltYWdlQmFja2luZyA9
IG1fbmljb3NpYS5pbWFnZUJhY2tpbmc7CisKICAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0
YS5mbGFnc0NoYW5nZWQpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MuY29udGVu
dHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5m
bGFncy5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKQEAgLTkyMywyNyArMTAyMCw2IEBA
IGZsb2F0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgp
CiAgICAgcmV0dXJuIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKSA/IDEg
OiBkZXZpY2VTY2FsZUZhY3RvcigpICogcGFnZVNjYWxlRmFjdG9yKCk7CiB9CiAKLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1NjYWxlKCkKLXsKLSAgICBBU1NF
UlQoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsKLSAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9y
ZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBlZmZlY3RpdmVDb250
ZW50c1NjYWxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEJldHdlZW4gY3JlYXRpbmcg
dGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwKLSAgICAvLyB3
ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1
bHQgaW4KLSAgICAvLyBicmllZmx5IHNlZWluZyBmbGlja2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMg
bWF5IGJlIGRyb3BwZWQgYmVmb3JlCi0gICAgLy8gc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCi0g
ICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IFdURk1vdmUobV9tYWluQmFja2luZ1N0b3JlKTsK
LQotICAgIC8vIE5vIHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZv
ciBub24tdmlzaWJsZSBhcmVhcy4KLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLT5yZW1vdmVB
bGxOb25WaXNpYmxlVGlsZXModHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpLCBJbnRSZWN0KDAsIDAs
IHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbV9tYWluQmFja2lu
Z1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxUaWxlZEJhY2tpbmdTdG9yZT4oKnRoaXMsIGVmZmVj
dGl2ZUNvbnRlbnRzU2NhbGUoKSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQogewogICAgIHNldE5l
ZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CkBAIC0xMDExLDEyICsxMDg3LDEzIEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkKIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVyc0luY2x1ZGlu
Z1N1YkxheWVycygpCiB7CiAgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFzayA9
IGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4obWFza0xheWVyKCkpKQotICAgICAg
ICBtYXNrLT51cGRhdGVDb250ZW50QnVmZmVycygpOworICAgICAgICBtYXNrLT51cGRhdGVDb250
ZW50QnVmZmVyczIoKTsKIAogICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHJlcGxp
Y2EgPSBkb3duY2FzdDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KHJlcGxpY2FMYXllcigpKSkK
LSAgICAgICAgcmVwbGljYS0+dXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICAgICAgcmVwbGlj
YS0+dXBkYXRlQ29udGVudEJ1ZmZlcnMyKCk7CiAKLSAgICB1cGRhdGVDb250ZW50QnVmZmVycygp
OworICAgIC8vIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgdXBkYXRlQ29udGVudEJ1ZmZl
cnMyKCk7CiAKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4oKSkKICAgICAgICAgZG93
bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPigqY2hpbGQpLnVwZGF0ZUNvbnRlbnRCdWZm
ZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CkBAIC0xMDMxLDE0ICsxMTA4LDIyIEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCiAgICAgfQogCiAg
ICAgaWYgKG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50KSB7Ci0gICAgICAgIGFkanVz
dENvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSAmJiBtX21h
aW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSAhPSBlZmZlY3RpdmVDb250ZW50c1NjYWxl
KCkpIHsKKyAgICAgICAgICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0
b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwgIHdlIGRvIG5vdAorICAgICAgICAgICAgLy8g
d2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4gYnJp
ZWZseSBzZWVpbmcgZmxpY2tlcmluZworICAgICAgICAgICAgLy8gYXMgdGhlIG9sZCB0aWxlcyBt
YXkgYmUgZHJvcHBlZCBiZWZvcmUgc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCisgICAgICAgICAg
ICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gV1RGTW92ZShtX21haW5CYWNraW5nU3RvcmUpOwor
CisgICAgICAgICAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2luZyBz
dG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCisgICAgICAgICAgICBtX3ByZXZpb3VzQmFja2lu
Z1N0b3JlLT5yZW1vdmVBbGxOb25WaXNpYmxlVGlsZXModHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgp
LCBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgfQogICAgICAgICBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOwog
ICAgIH0KIAogICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUg
bWFpbiB0aWxlZCBiYWNraW5nIHN0b3JlLCBvbmNlIHdlCiAgICAgLy8gaGF2ZSBhIHJlbW90ZSBj
bGllbnQgYW5kIHdlIGFyZSByZWFkeSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNz
LgogICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGNyZWF0ZUJhY2tpbmdT
dG9yZSgpOworICAgICAgICBtX21haW5CYWNraW5nU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFRp
bGVkQmFja2luZ1N0b3JlPigqdGhpcywgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKICAgICAg
ICAgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50ID0gdHJ1ZTsKICAgICB9CiAKQEAgLTEx
MDAsNiArMTE4NSw5OSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29u
dGVudEJ1ZmZlcnMoKQogICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gbnVsbHB0cjsK
IH0KIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJz
MigpCit7CisgICAgaWYgKCFtX25pY29zaWEuYmFja2luZ1N0b3JlKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvJiBpbXBsID0gZG93bmNhc3Q8Tmljb3NpYTo6QmFja2luZ1N0b3JlVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYS5iYWNraW5nU3RvcmUtPmltcGwoKSk7CisgICAgYXV0byYg
bGF5ZXJTdGF0ZSA9IGltcGwubGF5ZXJTdGF0ZSgpOworICAgIGxheWVyU3RhdGUuaXNGbHVzaGlu
ZyA9IHRydWU7CisKKyAgICBpZiAobV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQpIHsK
KyAgICAgICAgaWYgKGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSAmJiBsYXllclN0YXRlLm1h
aW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSAhPSBlZmZlY3RpdmVDb250ZW50c1NjYWxl
KCkpIHsKKyAgICAgICAgICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0
b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwgIHdlIGRvIG5vdAorICAgICAgICAgICAgLy8g
d2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4gYnJp
ZWZseSBzZWVpbmcgZmxpY2tlcmluZworICAgICAgICAgICAgLy8gYXMgdGhlIG9sZCB0aWxlcyBt
YXkgYmUgZHJvcHBlZCBiZWZvcmUgc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCisgICAgICAgICAg
ICBsYXllclN0YXRlLnByZXZpb3VzQmFja2luZ1N0b3JlID0gV1RGTW92ZShsYXllclN0YXRlLm1h
aW5CYWNraW5nU3RvcmUpOworCisgICAgICAgICAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUg
cHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCisgICAgICAgICAg
ICBsYXllclN0YXRlLnByZXZpb3VzQmFja2luZ1N0b3JlLT5yZW1vdmVBbGxOb25WaXNpYmxlVGls
ZXModHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpLCBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgp
LCBzaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBtX3BlbmRpbmdDb250ZW50
c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOworICAgIH0KKworICAgIGlmICghbGF5ZXJTdGF0ZS5t
YWluQmFja2luZ1N0b3JlKSB7CisgICAgICAgIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSA9
IHN0ZDo6bWFrZV91bmlxdWU8VGlsZWRCYWNraW5nU3RvcmU+KGltcGwsIGVmZmVjdGl2ZUNvbnRl
bnRzU2NhbGUoKSk7CisgICAgICAgIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA9IHRy
dWU7CisgICAgfQorCisgICAgaWYgKCFtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQgJiYg
IW1fbmVlZHNEaXNwbGF5LmNvbXBsZXRlTGF5ZXIgJiYgbV9uZWVkc0Rpc3BsYXkucmVjdHMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGltcGwuZmx1c2hVcGRhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9uZWVkc0Rpc3BsYXkuY29tcGxldGVMYXllcikgeworICAgICAg
ICBmb3IgKGF1dG8mIHJlY3QgOiBtX25lZWRzRGlzcGxheS5yZWN0cykKKyAgICAgICAgICAgIGxh
eWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0IHsgcmVjdCB9KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlk
YXRlKHsgeyB9LCBJbnRTaXplIHsgbV9zaXplIH0gfSk7CisKKyAgICBtX25lZWRzRGlzcGxheS5j
b21wbGV0ZUxheWVyID0gZmFsc2U7CisgICAgbV9uZWVkc0Rpc3BsYXkucmVjdHMuY2xlYXIoKTsK
KworICAgIGlmIChtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQpIHsKKyAgICAgICAgbV9w
ZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50ID0gZmFsc2U7CisgICAgICAgIGxheWVyU3RhdGUu
bWFpbkJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZXNJZk5lZWRlZCh0cmFuc2Zvcm1lZFZpc2libGVS
ZWN0KCksIEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwor
ICAgIH0KKworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yICYmIG1fY29vcmRpbmF0b3ItPmlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSk7CisKKyAgICBhdXRvIGRpcnR5VGlsZXMgPSBsYXllclN0YXRl
Lm1haW5CYWNraW5nU3RvcmUtPmRpcnR5VGlsZXMoKTsKKyAgICBpZiAoIWRpcnR5VGlsZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIGJvb2wgZGlkVXBkYXRlVGlsZXMgPSBmYWxzZTsKKworICAgICAg
ICBmb3IgKGF1dG8mIHRpbGVSZWZlcmVuY2UgOiBkaXJ0eVRpbGVzKSB7CisgICAgICAgICAgICBh
dXRvJiB0aWxlID0gdGlsZVJlZmVyZW5jZS5nZXQoKTsKKyAgICAgICAgICAgIHRpbGUuZW5zdXJl
VGlsZUlEKCk7CisKKyAgICAgICAgICAgIGF1dG8mIHRpbGVSZWN0ID0gdGlsZS5yZWN0KCk7Cisg
ICAgICAgICAgICBhdXRvJiBkaXJ0eVJlY3QgPSB0aWxlLmRpcnR5UmVjdCgpOworCisgICAgICAg
ICAgICBhdXRvIGNvb3JkaW5hdGVkQnVmZmVyID0gTmljb3NpYTo6QnVmZmVyOjpjcmVhdGUoZGly
dHlSZWN0LnNpemUoKSwgY29udGVudHNPcGFxdWUoKSA/IE5pY29zaWE6OkJ1ZmZlcjo6Tm9GbGFn
cyA6IE5pY29zaWE6OkJ1ZmZlcjo6U3VwcG9ydHNBbHBoYSk7CisgICAgICAgICAgICBTdXJmYWNl
VXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgICAgICAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0
ID0gZGlydHlSZWN0OworICAgICAgICAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLXRp
bGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7CisgICAgICAgICAgICB1cGRhdGVJbmZvLmJ1ZmZl
ciA9IGNvb3JkaW5hdGVkQnVmZmVyLmNvcHlSZWYoKTsKKworICAgICAgICAgICAgaWYgKCFtX2Nv
b3JkaW5hdG9yLT5wYWludGluZ0VuZ2luZSgpLnBhaW50KCp0aGlzLCBXVEZNb3ZlKGNvb3JkaW5h
dGVkQnVmZmVyKSwKKyAgICAgICAgICAgICAgICBkaXJ0eVJlY3QsIGxheWVyU3RhdGUubWFpbkJh
Y2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhkaXJ0eVJlY3QpLAorICAgICAgICAgICAgICAgIElu
dFJlY3QgeyB7IDAsIDAgfSwgZGlydHlSZWN0LnNpemUoKSB9LCBsYXllclN0YXRlLm1haW5CYWNr
aW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGltcGwudXBkYXRlVGlsZSh0aWxlLnRpbGVJRCgpLCB1cGRhdGVJbmZvLCB0
aWxlUmVjdCk7CisKKyAgICAgICAgICAgIHRpbGUubWFya0NsZWFuKCk7CisgICAgICAgICAgICBk
aWRVcGRhdGVUaWxlcyB8PSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpZFVwZGF0
ZVRpbGVzKQorICAgICAgICAgICAgZGlkVXBkYXRlVGlsZUJ1ZmZlcnMoKTsKKyAgICB9CisKKyAg
ICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBm
bGlja2VyaW5nIGJldHdlZW4KKyAgICAvLyByZW1vdmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5k
IHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJs
ZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9y
ZS4KKyAgICBpZiAobGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tpbmdTdG9yZSAmJiBsYXllclN0YXRl
Lm1haW5CYWNraW5nU3RvcmUtPnZpc2libGVBcmVhSXNDb3ZlcmVkKCkpCisgICAgICAgIGxheWVy
U3RhdGUucHJldmlvdXNCYWNraW5nU3RvcmUgPSBudWxscHRyOworCisgICAgaWYgKGxheWVyU3Rh
dGUuaGFzUGVuZGluZ1RpbGVDcmVhdGlvbikgeworICAgICAgICBzZXROZWVkc1Zpc2libGVSZWN0
QWRqdXN0bWVudCgpOworICAgICAgICBub3RpZnlGbHVzaFJlcXVpcmVkKCk7CisgICAgfQorICAg
IGltcGwuZmx1c2hVcGRhdGUoKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMTEwNyw2ICsxMjg1
LDE0IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMo
KQogI2VuZGlmCiAgICAgbV9tYWluQmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICBpZiAobV9uaWNvc2lhLmJhY2tpbmdTdG9y
ZSkgeworICAgICAgICBhdXRvJiBsYXllclN0YXRlID0gZG93bmNhc3Q8Tmljb3NpYTo6QmFja2lu
Z1N0b3JlVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYS5iYWNraW5nU3RvcmUtPmltcGwoKSku
bGF5ZXJTdGF0ZSgpOworICAgICAgICBsYXllclN0YXRlLmlzUHVyZ2luZyA9IHRydWU7CisgICAg
ICAgIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgIGxheWVy
U3RhdGUucHJldmlvdXNCYWNraW5nU3RvcmUgPSBudWxscHRyOworCisgICAgICAgIG1fbmljb3Np
YS5iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIH0KIAogICAgIHJlbGVhc2VJbWFnZUJhY2tp
bmdJZk5lZWRlZCgpOwogCkBAIC0xMzI1LDYgKzE1MTEsMTMgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKCkKICAgICBjbGllbnQoKS5u
b3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMsICIiLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUp
OwogfQogCisjaWYgVVNFKE5JQ09TSUEpCitQbGF0Zm9ybUxheWVyKiBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX25pY29zaWEu
bGF5ZXIuZ2V0KCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IDhiOWY5YTkyMjc4Li42YjVi
ZGQ4ZGM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuaApAQCAtNzYsNiArNzYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXBsYWNl
Q2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2b2lk
IHJlbW92ZUZyb21QYXJlbnQoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBv
aW50M0QmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KSBvdmVycmlkZTsKQEAgLTExMCw3ICsxMTEsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogICAgIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoTW9ub3RvbmljVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25z
KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB1c2VzQ29udGVudHNMYXllcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllciB8fCBtX2NvbXBvc2l0ZWRJbWFnZTsgfQorICAgIGJv
b2wgdXNlc0NvbnRlbnRzTGF5ZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXRmb3Jt
TGF5ZXIgfHwgbV9uaWNvc2lhLmNvbnRlbnRMYXllciB8fCBtX2NvbXBvc2l0ZWRJbWFnZTsgfQor
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IG92ZXJyaWRlOworI2VuZGlmCiAKICAgICB2b2lkIHN5bmNQZW5kaW5nU3RhdGVDaGFuZ2Vz
SW5jbHVkaW5nU3ViTGF5ZXJzKCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVyc0luY2x1
ZGluZ1N1YkxheWVycygpOwpAQCAtMTYwLDggKzE2NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
eW5jSW1hZ2VCYWNraW5nKCk7CiAgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVj
dCgpOwogICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRCdWZmZXJzMigpOwogCi0gICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKICAgICB2
b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwogCiAgICAgdm9pZCBub3RpZnlGbHVz
aFJlcXVpcmVkKCk7CkBAIC0xNzEsNyArMTc2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3Vs
ZEhhdmVCYWNraW5nU3RvcmUoKSBjb25zdDsKICAgICBib29sIHNlbGZPckFuY2VzdG9ySGFzQWN0
aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3Q7CiAgICAgYm9vbCBzZWxmT3JBbmNlc3Rvckhh
dmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci0gICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7
CiAKICAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7CiAgICAgZmxvYXQgZWZm
ZWN0aXZlQ29udGVudHNTY2FsZSgpOwpAQCAtMjMxLDYgKzIzNSwxMCBAQCBwcml2YXRlOgogICAg
ICAgICBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlOjpEZWx0YSBkZWx0YTsK
ICAgICAgICAgTmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZTo6UmVwYWludENv
dW50ZXIgcmVwYWludENvdW50ZXI7CiAgICAgICAgIE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6
OkxheWVyU3RhdGU6OkRlYnVnQm9yZGVyIGRlYnVnQm9yZGVyOworCisgICAgICAgIFJlZlB0cjxO
aWNvc2lhOjpDb250ZW50TGF5ZXI+IGNvbnRlbnRMYXllcjsKKyAgICAgICAgUmVmUHRyPE5pY29z
aWE6OkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlOworICAgICAgICBSZWZQdHI8Tmljb3NpYTo6
SW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7CiAgICAgfSBtX25pY29zaWE7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKaW5k
ZXggNmY5NjI0ZjRlNWQuLjAyNWMxZWE0MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZS5oCkBAIC0xNzEsOSArMTcxLDExIEBAIHN0
cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7CiB9OwogCiBzdHJ1Y3QgQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlIHsKKyNpZiBVU0UoTklDT1NJQSkKICAgICBzdHJ1Y3QgTmljb3Np
YVN0YXRlIHsKICAgICAgICAgUmVmUHRyPE5pY29zaWE6OlNjZW5lPiBzY2VuZTsKICAgICB9IG5p
Y29zaWE7CisjZW5kaWYKIAogICAgIHVpbnQzMl90IHJvb3RDb21wb3NpdGluZ0xheWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKaW5kZXggZmVhMjhlYTBiMDYu
LjI3ZjliZTNmZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3Bw
CkBAIC0yNiw2ICsyNiwxMCBAQAogCiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYUJ1ZmZlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvTmljb3NpYUJhY2tpbmdTdG9yZVRleHR1cmVNYXBwZXJJbXBsLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9OaWNvc2lhQ29tcG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBsLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1h
cHBlckdMLmg+CkBAIC01NywyMCArNjEsMTcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OmFwcGx5U3RhdGVDaGFuZ2VzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZEdyYXBoaWMKICAg
ICBlbnN1cmVSb290TGF5ZXIoKTsKIAogICAgIGZvciAoYXV0byYgc3RhdGUgOiBzdGF0ZXMpCi0g
ICAgICAgIGNvbW1pdFNjZW5lU3RhdGUoc3RhdGUpOworICAgICAgICBjb21taXRTY2VuZVN0YXRl
KHN0YXRlLm5pY29zaWEpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvciwgYm9vbCBkcmF3c0JhY2tncm91bmQsIFRleHR1cmVNYXBwZXI6OlBhaW50
RmxhZ3MgUGFpbnRGbGFncykKIHsKKyAgICB1cGRhdGVTY2VuZVN0YXRlKCk7CisKICAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKICAgICBpZiAo
IWN1cnJlbnRSb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDU19USFJFQURFRCkKLSAgICBmb3IgKGF1dG8mIHByb3h5IDogbV9wbGF0Zm9ybUxh
eWVyUHJveGllcy52YWx1ZXMoKSkKLSAgICAgICAgcHJveHktPnN3YXBCdWZmZXIoKTsKLSNlbmRp
ZgotCiAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBw
ZXIuZ2V0KCkpOwogICAgIGJvb2wgc2NlbmVIYXNSdW5uaW5nQW5pbWF0aW9ucyA9IGN1cnJlbnRS
b290TGF5ZXItPmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KE1vbm90b25pY1RpbWU6Om5vdygp
KTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7CkBAIC0x
MDQsMjMgKzEwNSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVWaWV3
cG9ydCgpCiAgICAgICAgIG1fY2xpZW50LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUpCi17Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIGlm
ICghc3RhdGUucGxhdGZvcm1MYXllckNoYW5nZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChzdGF0ZS5wbGF0Zm9ybUxheWVyUHJveHkpIHsKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJv
eGllcy5zZXQobGF5ZXIsIHN0YXRlLnBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0gICAgICAgIHN0YXRl
LnBsYXRmb3JtTGF5ZXJQcm94eS0+YWN0aXZhdGVPbkNvbXBvc2l0aW5nVGhyZWFkKHRoaXMsIGxh
eWVyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveGllcy5yZW1vdmUo
bGF5ZXIpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obGF5ZXIpOwotICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7Ci0jZW5kaWYKLX0KLQogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJF
QURFRCkKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpvbk5ld0J1ZmZlckF2YWlsYWJs
ZSgpCiB7CkBAIC0xMjgsMzIwICsxMTIsMjE5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpvbk5ld0J1ZmZlckF2YWlsYWJsZSgpCiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5
ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17
Ci0gICAgaWYgKCFzdGF0ZS5jaGlsZHJlbkNoYW5nZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqPiBjaGlsZHJlbjsKLSAgICBjaGlsZHJlbi5yZXNl
cnZlQ2FwYWNpdHkoc3RhdGUuY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGNoaWxk
IDogc3RhdGUuY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChsYXllckJ5SUQoY2hp
bGQpKTsKLQotICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3Rh
dGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5maWx0ZXJzQ2hhbmdlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbGF5ZXItPnNldEZpbHRlcnMoc3RhdGUuZmlsdGVycyk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIGxheWVyU3RhdGUsIENvbW1pdFNj
b3BlJiBjb21taXRTY29wZSkKLXsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlk
Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5
ZXJCeUlEKGlkKTsKLQotICAgIGlmIChsYXllclN0YXRlLnBvc2l0aW9uQ2hhbmdlZCkKLSAgICAg
ICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyU3RhdGUucG9zKTsKLQotICAgIGlmIChsYXllclN0
YXRlLmFuY2hvclBvaW50Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxh
eWVyU3RhdGUuYW5jaG9yUG9pbnQpOwotCi0gICAgaWYgKGxheWVyU3RhdGUuc2l6ZUNoYW5nZWQp
Ci0gICAgICAgIGxheWVyLT5zZXRTaXplKGxheWVyU3RhdGUuc2l6ZSk7Ci0KLSAgICBpZiAobGF5
ZXJTdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxh
eWVyU3RhdGUudHJhbnNmb3JtKTsKLQotICAgIGlmIChsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNm
b3JtQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVyU3Rh
dGUuY2hpbGRyZW5UcmFuc2Zvcm0pOwotCi0gICAgaWYgKGxheWVyU3RhdGUuY29udGVudHNSZWN0
Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllclN0YXRlLmNvbnRl
bnRzUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5jb250ZW50c1RpbGluZ0NoYW5nZWQpIHsK
LSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVGlsZVBoYXNlKGxheWVyU3RhdGUuY29udGVudHNU
aWxlUGhhc2UpOwotICAgICAgICBsYXllci0+c2V0Q29udGVudHNUaWxlU2l6ZShsYXllclN0YXRl
LmNvbnRlbnRzVGlsZVNpemUpOwotICAgIH0KLQotICAgIGlmIChsYXllclN0YXRlLm9wYWNpdHlD
aGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0T3BhY2l0eShsYXllclN0YXRlLm9wYWNpdHkpOwot
Ci0gICAgaWYgKGxheWVyU3RhdGUuc29saWRDb2xvckNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5z
ZXRTb2xpZENvbG9yKGxheWVyU3RhdGUuc29saWRDb2xvcik7Ci0KLSAgICBpZiAobGF5ZXJTdGF0
ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0RGVidWdWaXN1YWxzKGxh
eWVyU3RhdGUuZGVidWdWaXN1YWxzLnNob3dEZWJ1Z0JvcmRlcnMsIGxheWVyU3RhdGUuZGVidWdW
aXN1YWxzLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVyU3RhdGUuZGVidWdWaXN1YWxzLmRlYnVnQm9y
ZGVyV2lkdGgpOwotICAgIGlmIChsYXllclN0YXRlLnJlcGFpbnRDb3VudENoYW5nZWQpCi0gICAg
ICAgIGxheWVyLT5zZXRSZXBhaW50Q291bnRlcihsYXllclN0YXRlLnJlcGFpbnRDb3VudC5zaG93
UmVwYWludENvdW50ZXIsIGxheWVyU3RhdGUucmVwYWludENvdW50LmNvdW50KTsKLQotICAgIGlm
IChsYXllclN0YXRlLnJlcGxpY2FDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0UmVwbGljYUxh
eWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVyU3RhdGUucmVwbGljYSkpOwotCi0gICAgaWYg
KGxheWVyU3RhdGUubWFza0NoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0
TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJTdGF0ZS5tYXNrKSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0
ZS5pbWFnZUNoYW5nZWQpCi0gICAgICAgIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIs
IGxheWVyU3RhdGUuaW1hZ2VJRCk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQp
IHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVyU3RhdGUuY29udGVudHNP
cGFxdWUpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVyU3RhdGUuZHJhd3ND
b250ZW50KTsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllclN0YXRlLmNv
bnRlbnRzVmlzaWJsZSk7Ci0gICAgICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5
ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUpOwotCi0gICAgICAgIC8vIE5ldmVyIGNsaXAgdGhlIHJv
b3QgbGF5ZXIuCi0gICAgICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGlkID09IG1fcm9vdExh
eWVySUQgPyBmYWxzZSA6IGxheWVyU3RhdGUubWFza3NUb0JvdW5kcyk7Ci0gICAgICAgIGxheWVy
LT5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRlLnByZXNlcnZlczNEKTsKLSAgICB9Ci0KLSAgICAv
LyBBcHBseSBPcGVyYXRpb25zLgotICAgIHNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChsYXllciwg
bGF5ZXJTdGF0ZSk7Ci0gICAgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3Rh
dGUpOwotICAgIHNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsK
LSAgICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllciwgY29tbWl0U2NvcGUpOwotICAg
IGNyZWF0ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwotICAgIHJlbW92ZVRpbGVz
SWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUsIGNvbW1pdFNjb3BlKTsKLSAgICB1cGRhdGVUaWxl
c0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlLCBjb21taXRTY29wZSk7Ci0gICAgc3luY1BsYXRm
b3JtTGF5ZXJJZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci19Ci0KLVRleHR1cmVNYXBwZXJM
YXllciogQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29y
ZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgcmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0
ZWRMYXllcklEKSA/IGxheWVyQnlJRChpZCkgOiAwOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+
JiBsYXllcklEcykKLXsKLSAgICBmb3IgKGF1dG8mIGxheWVySUQgOiBsYXllcklEcykKLSAgICAg
ICAgY3JlYXRlTGF5ZXIobGF5ZXJJRCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCitOaWNvc2lhOjpDb21wb3Np
dGlvbkxheWVyVGV4dHVyZU1hcHBlckltcGwmIGNvbXBvc2l0aW9uTGF5ZXJJbXBsKE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXImIGNvbXBvc2l0aW9uTGF5ZXIpCiB7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbmV3TGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1
cmVNYXBwZXJMYXllcj4oKTsKLSAgICBuZXdMYXllci0+c2V0SUQoaWQpOwotICAgIG1fbGF5ZXJz
LmFkZChpZCwgV1RGTW92ZShuZXdMYXllcikpOworICAgIHJldHVybiBkb3duY2FzdDxOaWNvc2lh
OjpDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1hcHBlckltcGw+KGNvbXBvc2l0aW9uTGF5ZXIuaW1w
bCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVycyhj
b25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCitOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbCYgY29udGVudExheWVySW1wbChOaWNvc2lhOjpDb250
ZW50TGF5ZXImIGNvbnRlbnRMYXllcikKIHsKLSAgICBmb3IgKGF1dG8mIGxheWVySUQgOiBsYXll
cklEcykKLSAgICAgICAgZGVsZXRlTGF5ZXIobGF5ZXJJRCk7CisgICAgcmV0dXJuIGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihjb250ZW50TGF5ZXIuaW1w
bCgpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQorTmljb3NpYTo6QmFja2luZ1N0b3JlVGV4dHVyZU1h
cHBlckltcGwmIGJhY2tpbmdTdG9yZUltcGwoTmljb3NpYTo6QmFja2luZ1N0b3JlJiBiYWNraW5n
U3RvcmUpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbGF5ZXIg
PSBtX2xheWVycy50YWtlKGxheWVySUQpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBtX2Jh
Y2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCi0gICAgaWYgKGF1dG8gcGxhdGZvcm1MYXllclByb3h5ID0gbV9wbGF0
Zm9ybUxheWVyUHJveGllcy50YWtlKGxheWVyLmdldCgpKSkKLSAgICAgICAgcGxhdGZvcm1MYXll
clByb3h5LT5pbnZhbGlkYXRlKCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gZG93bmNhc3Q8Tmljb3Np
YTo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGw+KGJhY2tpbmdTdG9yZS5pbXBsKCkpOwog
fQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQoQ29vcmRp
bmF0ZWRMYXllcklEIGxheWVySUQpCitOaWNvc2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVy
SW1wbCYgaW1hZ2VCYWNraW5nSW1wbChOaWNvc2lhOjpJbWFnZUJhY2tpbmcmIGltYWdlQmFja2lu
ZykKIHsKLSAgICBBU1NFUlQobGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsK
LSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsK
LQotICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOwotCi0gICAgVGV4dHVyZU1hcHBlckxheWVy
KiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXItPmNo
aWxkcmVuKCkuaXNFbXB0eSgpKTsKLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwor
ICAgIHJldHVybiBkb3duY2FzdDxOaWNvc2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1w
bD4oaW1hZ2VCYWNraW5nLmltcGwoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVy
LCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUpCitUZXh0dXJlTWFwcGVyTGF5ZXImIHRleG1hcExh
eWVyKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXImIGNvbXBvc2l0aW9uTGF5ZXIpCiB7Ci0gICAg
aWYgKCFsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUobGF5ZXIpKSB7Ci0gICAgICAgIHJlbW92
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGxheWVyKTsKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8m
IGNvbXBvc2l0aW9uU3RhdGUgPSBjb21wb3NpdGlvbkxheWVySW1wbChjb21wb3NpdGlvbkxheWVy
KS5jb21wb3NpdGlvblN0YXRlKCk7CisgICAgaWYgKCFjb21wb3NpdGlvblN0YXRlLmxheWVyKSB7
CisgICAgICAgIGNvbXBvc2l0aW9uU3RhdGUubGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1
cmVNYXBwZXJMYXllcj4oKTsKKyAgICAgICAgY29tcG9zaXRpb25TdGF0ZS5sYXllci0+c2V0SUQo
Y29tcG9zaXRpb25MYXllci5pZCgpKTsKICAgICB9Ci0KLSAgICBjcmVhdGVCYWNraW5nU3RvcmVJ
Zk5lZWRlZChsYXllcik7Ci0gICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5
ZXIsIGNvbW1pdFNjb3BlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCi17Ci0g
ICAgaWYgKG1fYmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXllcikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gYmFja2luZ1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZSgpOwotICAgIG1fYmFja2luZ1N0b3Jlcy5hZGQobGF5ZXIsIGJhY2tpbmdTdG9yZS5jb3B5UmVm
KCkpOwotICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlLnB0cigpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMudGFrZShsYXllcik7
Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5z
ZXRCYWNraW5nU3RvcmUobnVsbHB0cik7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShUZXh0dXJlTWFwcGVyTGF5ZXIq
IGxheWVyLCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVy
KTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUo
bGF5ZXItPnNpemUoKSk7Ci0gICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OmNyZWF0ZVRpbGVzSWZOZWVkZWQoVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciwgY29u
c3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmIHN0YXRlKQotewotICAgIGlmIChzdGF0
ZS50aWxlc1RvQ3JlYXRlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMu
Z2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlIHx8ICFsYXllclNob3VsZEhhdmVC
YWNraW5nU3RvcmUobGF5ZXIpKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChhdXRvJiB0aWxlIDogc3RhdGUudGlsZXNUb0NyZWF0ZSkKLSAgICAg
ICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGUudGlsZUlELCB0aWxlLnNjYWxlKTsKKyAg
ICByZXR1cm4gKmNvbXBvc2l0aW9uU3RhdGUubGF5ZXI7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5
ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSwgQ29tbWl0U2Nv
cGUmIGNvbW1pdFNjb3BlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZUJh
Y2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZWZQdHI8Tmljb3Np
YTo6QmFja2luZ1N0b3JlPiYgYmFja2luZ1N0b3JlLCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUp
CiB7Ci0gICAgaWYgKHN0YXRlLnRpbGVzVG9SZW1vdmUuaXNFbXB0eSgpKQorICAgIGlmICghYmFj
a2luZ1N0b3JlKSB7CisgICAgICAgIGxheWVyLnNldEJhY2tpbmdTdG9yZShudWxscHRyKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gYmFja2luZ1N0b3JlSW1wbCgq
YmFja2luZ1N0b3JlKTsKKyAgICBhdXRvJiBjb21wb3NpdGlvblN0YXRlID0gaW1wbC5jb21wb3Np
dGlvblN0YXRlKCk7CiAKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIGlmICghYmFja2luZ1N0
b3JlKQorICAgIGlmICghbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKCZsYXllcikpIHsKKyAg
ICAgICAgbGF5ZXIuc2V0QmFja2luZ1N0b3JlKG51bGxwdHIpOworICAgICAgICBjb21wb3NpdGlv
blN0YXRlLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBmb3IgKGF1dG8mIHRpbGUgOiBzdGF0ZS50aWxlc1RvUmVtb3ZlKQotICAgICAgICBiYWNr
aW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZSk7CisgICAgaWYgKCFjb21wb3NpdGlvblN0YXRlLmJh
Y2tpbmdTdG9yZSkKKyAgICAgICAgY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUgPSBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CiAKLSAgICBjb21taXRTY29wZS5iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworICAgIGxheWVyLnNl
dEJhY2tpbmdTdG9yZShjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAg
Y29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUtPnNldFNpemUobGF5ZXIuc2l6ZSgpKTsKKyAg
ICBpbXBsLmFwcGx5VXBkYXRlKCk7CisgICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQ
ZW5kaW5nQnVmZmVycy5hZGQoY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUpOwogfQogCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5lZWRlZChUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYg
c3RhdGUsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcoVGV4dHVyZU1hcHBlckxheWVyJiBsYXllciwgY29u
c3QgUmVmUHRyPE5pY29zaWE6OkltYWdlQmFja2luZz4mIGltYWdlQmFja2luZywgQ29tbWl0U2Nv
cGUmIGNvbW1pdFNjb3BlKQogewotICAgIGlmIChzdGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHko
KSkKKyAgICBpZiAoIWltYWdlQmFja2luZykgeworICAgICAgICBsYXllci5zZXRDb250ZW50c0xh
eWVyKG51bGxwdHIpOwogICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwot
ICAgIEFTU0VSVChiYWNraW5nU3RvcmUgfHwgIWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShs
YXllcikpOwotICAgIGlmICghYmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm
b3IgKGF1dG8mIHRpbGUgOiBzdGF0ZS50aWxlc1RvVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiBzdXJmYWNlVXBkYXRlSW5mbyA9IHRpbGUudXBkYXRlSW5mbzsKLQot
ICAgICAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZS50aWxlSUQsIHN1cmZhY2VVcGRh
dGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGUudGlsZVJlY3QsIHN1cmZhY2VVcGRhdGVJbmZvLmJ1ZmZl
ci5jb3B5UmVmKCksIHsgMCwgMCB9KTsKLSAgICAgICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKICAgICB9Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jSW1hZ2VCYWNraW5ncyhjb25zdCBDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUmIHN0YXRlLCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUpCi17Ci0g
ICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvUmVtb3ZlKQotICAgICAgICByZW1v
dmVJbWFnZUJhY2tpbmcoaW1hZ2UsIGNvbW1pdFNjb3BlKTsKLQotICAgIGZvciAoYXV0byYgaW1h
Z2UgOiBzdGF0ZS5pbWFnZXNUb0NyZWF0ZSkKLSAgICAgICAgY3JlYXRlSW1hZ2VCYWNraW5nKGlt
YWdlKTsKKyAgICBhdXRvJiBpbXBsID0gaW1hZ2VCYWNraW5nSW1wbCgqaW1hZ2VCYWNraW5nKTsK
KyAgICBhdXRvJiBjb21wb3NpdGlvblN0YXRlID0gaW1wbC5jb21wb3NpdGlvblN0YXRlKCk7CiAK
LSAgICBmb3IgKGF1dG8mIGltYWdlIDogc3RhdGUuaW1hZ2VzVG9VcGRhdGUpCi0gICAgICAgIHVw
ZGF0ZUltYWdlQmFja2luZyhpbWFnZS5maXJzdCwgaW1hZ2Uuc2Vjb25kLmNvcHlSZWYoKSwgY29t
bWl0U2NvcGUpOworICAgIGlmICghY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUpCisgICAg
ICAgIGNvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU6OmNyZWF0ZSgpOwogCi0gICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvQ2xl
YXIpCi0gICAgICAgIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2UsIGNvbW1pdFNjb3Bl
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgQVNTRVJUKCFtX2lt
YWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5hZGQo
aW1hZ2VJRCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBpbXBsLmFw
cGx5VXBkYXRlKCk7CisgICAgbGF5ZXIuc2V0Q29udGVudHNMYXllcihjb21wb3NpdGlvblN0YXRl
LmJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQ
ZW5kaW5nQnVmZmVycy5hZGQoY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmUpOwogfQogCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgUmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4mJiBidWZm
ZXIsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpyZW1vdmVMYXllcihOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyJiBsYXllcikKIHsKLSAg
ICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBhdXRvIGl0
ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7Ci0KLSAgICAvLyBDb29yZGlu
YXRlZEltYWdlQmFja2luZyBpcyByZWFsaXplZCB0byBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSB3
aXRoIG9ubHkgb25lIHRpbGUgaW4gVUkgUHJvY2Vzcy4KLSAgICBiYWNraW5nU3RvcmUtPmNyZWF0
ZVRpbGUoMSAvKiBpZCAqLywgMSAvKiBzY2FsZSAqLyk7Ci0gICAgSW50UmVjdCByZWN0KEludFBv
aW50Ojp6ZXJvKCksIGJ1ZmZlci0+c2l6ZSgpKTsKLSAgICAvLyBTZWUgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKCkKLSAgICBBU1NFUlQoMjAw
MCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBiYWNraW5n
U3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGls
ZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBXVEZNb3ZlKGJ1ZmZlciksIHJlY3QubG9jYXRpb24o
KSk7Ci0KLSAgICBjb21taXRTY29wZS5iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFk
ZChiYWNraW5nU3RvcmUpOwotfQorICAgIGxheWVyLmFjY2Vzc0NvbW1pdHRlZCgKKyAgICAgICAg
W10oY29uc3QgTmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZSYgY29tbWl0dGVk
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29tbWl0dGVkLmNvbnRlbnRMYXllcikKKyAg
ICAgICAgICAgICAgICBjb250ZW50TGF5ZXJJbXBsKCpjb21taXR0ZWQuY29udGVudExheWVyKS5w
cm94eSgpLmludmFsaWRhdGUoKTsKIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
LCBDb21taXRTY29wZSYgY29tbWl0U2NvcGUpCi17Ci0gICAgQVNTRVJUKG1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgYXV0byBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5k
KGltYWdlSUQpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlID0gaXQtPnZhbHVlOwotICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsVGlsZXMoKTsKLSAg
ICBjb21taXRTY29wZS5iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5n
U3RvcmUpOwotfQorICAgICAgICAgICAgaWYgKGNvbW1pdHRlZC5iYWNraW5nU3RvcmUpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiBjb21wb3NpdGlvblN0YXRlID0gYmFja2luZ1N0b3JlSW1wbCgq
Y29tbWl0dGVkLmJhY2tpbmdTdG9yZSkuY29tcG9zaXRpb25TdGF0ZSgpOworICAgICAgICAgICAg
ICAgIGNvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIENvbW1pdFNjb3BlJiBjb21taXRTY29w
ZSkKLXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAg
ICAgICAgICAgIGlmIChjb21taXR0ZWQuaW1hZ2VCYWNraW5nKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgY29tcG9zaXRpb25TdGF0ZSA9IGltYWdlQmFja2luZ0ltcGwoKmNvbW1pdHRlZC5pbWFn
ZUJhY2tpbmcpLmNvbXBvc2l0aW9uU3RhdGUoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdGlv
blN0YXRlLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OwogCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJzIGEgZGFu
Z2xpbmcgcG9pbnRlci4KLSAgICBjb21taXRTY29wZS5yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBw
ZW5kKG1faW1hZ2VCYWNraW5ncy50YWtlKGltYWdlSUQpKTsKKyAgICBhdXRvJiBjb21wb3NpdGlv
blN0YXRlID0gY29tcG9zaXRpb25MYXllckltcGwobGF5ZXIpLmNvbXBvc2l0aW9uU3RhdGUoKTsK
KyAgICBjb21wb3NpdGlvblN0YXRlLmxheWVyID0gbnVsbHB0cjsKIH0KIAotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoVGV4dHVyZU1hcHBl
ckxheWVyKiBsYXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlOjpOaWNvc2lhU3RhdGUmIHN0YXRlKQogewotICAgIGlmIChpbWFnZUlE
ID09IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSB7Ci0gICAgICAgIGxheWVyLT5z
ZXRDb250ZW50c0xheWVyKDApOworICAgIGlmICghbV9jbGllbnQpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAKLSAgICBhdXRvIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0g
ICAgQVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENv
bnRlbnRzTGF5ZXIoaXQtPnZhbHVlLmdldCgpKTsKKyAgICBtX25pY29zaWEuc2NlbmUgPSBzdGF0
ZS5zY2VuZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5l
U3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVTY2VuZVN0YXRlKCkKIHsKLSAgICBpZiAoIW1fY2xp
ZW50KQorICAgIGlmICghbV9uaWNvc2lhLnNjZW5lKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X25pY29zaWEgPSBzdGF0ZS5uaWNvc2lhOwotICAgIC8vIEZJWE1FOiBTdGFydCB1c2luZyB0aGUg
Tmljb3NpYSBsYXllciBzdGF0ZSBmb3IgdXBkYXRlcy4KLQogICAgIENvbW1pdFNjb3BlIGNvbW1p
dFNjb3BlOwogCi0gICAgY3JlYXRlTGF5ZXJzKHN0YXRlLmxheWVyc1RvQ3JlYXRlKTsKLSAgICBk
ZWxldGVMYXllcnMoc3RhdGUubGF5ZXJzVG9SZW1vdmUpOwotCi0gICAgaWYgKHN0YXRlLnJvb3RD
b21wb3NpdGluZ0xheWVyICE9IG1fcm9vdExheWVySUQpCi0gICAgICAgIHNldFJvb3RMYXllcklE
KHN0YXRlLnJvb3RDb21wb3NpdGluZ0xheWVyKTsKLQotICAgIHN5bmNJbWFnZUJhY2tpbmdzKHN0
YXRlLCBjb21taXRTY29wZSk7Ci0KLSAgICBmb3IgKGF1dG8mIGxheWVyIDogc3RhdGUubGF5ZXJz
VG9VcGRhdGUpCi0gICAgICAgIHNldExheWVyU3RhdGUobGF5ZXIuZmlyc3QsIGxheWVyLnNlY29u
ZCwgY29tbWl0U2NvcGUpOworICAgIG1fbmljb3NpYS5zY2VuZS0+YWNjZXNzU3RhdGUoCisgICAg
ICAgIFt0aGlzLCAmY29tbWl0U2NvcGVdKE5pY29zaWE6OlNjZW5lOjpTdGF0ZSYgc3RhdGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5pZCA9PSBtX25pY29zaWEuc3RhdGUuaWQp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byYgcm9vdExheWVyID0gdGV4bWFwTGF5ZXIoKnN0YXRlLnJvb3RMYXllcik7CisgICAg
ICAgICAgICAgICAgaWYgKHJvb3RMYXllci5pZCgpICE9IG1fcm9vdExheWVySUQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9yb290TGF5ZXJJRCA9IHJvb3RMYXllci5pZCgpOworICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5pc0VtcHR5
KCkpOworICAgICAgICAgICAgICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQoJnJvb3RMYXll
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYXNo
U2V0PFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPj4gcmVtb3ZlZExheWVyczsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX25pY29zaWEuc3RhdGUubGF5ZXJzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5sYXllcnMuY29udGFpbnMobGF5ZXIpKQorICAgICAg
ICAgICAgICAgICAgICByZW1vdmVkTGF5ZXJzLmFkZChsYXllcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG1fbmljb3NpYS5zdGF0ZSA9IHN0YXRlOworCisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGxheWVyIDogcmVtb3ZlZExheWVycykKKyAgICAgICAgICAgICAgICByZW1vdmVMYXll
cigqbGF5ZXIpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGNvbXBvc2l0aW9uTGF5ZXIgOiBt
X25pY29zaWEuc3RhdGUubGF5ZXJzKSB7CisgICAgICAgICAgICAgICAgYXV0byYgbGF5ZXIgPSB0
ZXhtYXBMYXllcigqY29tcG9zaXRpb25MYXllcik7CisgICAgICAgICAgICAgICAgY29tcG9zaXRp
b25MYXllci0+Y29tbWl0U3RhdGUoCisgICAgICAgICAgICAgICAgICAgIFt0aGlzLCAmbGF5ZXIs
ICZjb21taXRTY29wZV0oY29uc3QgTmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0
ZSYgbGF5ZXJTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEucG9zaXRpb25DaGFuZ2VkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheWVyLnNldFBvc2l0aW9uKGxheWVyU3RhdGUucG9zaXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuYW5jaG9yUG9pbnRD
aGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldEFuY2hvclBvaW50
KGxheWVyU3RhdGUuYW5jaG9yUG9pbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxh
eWVyU3RhdGUuZGVsdGEuc2l6ZUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGF5ZXIuc2V0U2l6ZShsYXllclN0YXRlLnNpemUpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS50cmFuc2Zvcm1DaGFuZ2VkKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxheWVyLnNldFRyYW5zZm9ybShsYXllclN0YXRlLnRyYW5zZm9ybSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5jaGlsZHJlblRyYW5z
Zm9ybUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0obGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRlbnRzUmVjdENoYW5nZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q29udGVudHNSZWN0KGxheWVyU3Rh
dGUuY29udGVudHNSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRl
LmRlbHRhLmNvbnRlbnRzVGlsaW5nQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxheWVyLnNldENvbnRlbnRzVGlsZVBoYXNlKGxheWVyU3RhdGUuY29udGVudHNUaWxlUGhh
c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRzVGlsZVNp
emUobGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEub3BhY2l0
eUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0T3BhY2l0eShs
YXllclN0YXRlLm9wYWNpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3Rh
dGUuZGVsdGEuc29saWRDb2xvckNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGF5ZXIuc2V0U29saWRDb2xvcihsYXllclN0YXRlLnNvbGlkQ29sb3IpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRGaWx0ZXJzKGxheWVyU3RhdGUuZmlsdGVy
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5hbmltYXRp
b25zQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRBbmltYXRp
b25zKGxheWVyU3RhdGUuYW5pbWF0aW9ucyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChsYXllclN0YXRlLmRlbHRhLmNoaWxkcmVuQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxheWVyLnNldENoaWxkcmVuKFdURjo6bWFwKGxheWVyU3RhdGUuY2hpbGRyZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGF1dG8mIGNoaWxkKSB7IHJldHVy
biAmdGV4bWFwTGF5ZXIoKmNoaWxkKTsgfSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5tYXNrQ2hhbmdl
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRNYXNrTGF5ZXIobGF5ZXJT
dGF0ZS5tYXNrID8gJnRleG1hcExheWVyKCpsYXllclN0YXRlLm1hc2spIDogbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5yZXBsaWNhQ2hhbmdl
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRSZXBsaWNhTGF5ZXIobGF5
ZXJTdGF0ZS5yZXBsaWNhID8gJnRleG1hcExheWVyKCpsYXllclN0YXRlLnJlcGxpY2EpIDogbnVs
bHB0cik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNv
bnRlbnRMYXllckNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5
ZXJTdGF0ZS5jb250ZW50TGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byYgaW1wbCA9IGNvbnRlbnRMYXllckltcGwoKmxheWVyU3RhdGUuY29udGVudExheWVyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5wcm94eSgpLmFjdGl2YXRlT25D
b21wb3NpdGluZ1RocmVhZCh0aGlzLCAmbGF5ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuZmxhZ3NDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGF5ZXIuc2V0Q29udGVudHNPcGFxdWUobGF5ZXJTdGF0ZS5mbGFncy5jb250
ZW50c09wYXF1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0RHJhd3ND
b250ZW50KGxheWVyU3RhdGUuZmxhZ3MuZHJhd3NDb250ZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsYXllci5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJTdGF0ZS5mbGFncy5jb250
ZW50c1Zpc2libGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldEJhY2tm
YWNlVmlzaWJpbGl0eShsYXllclN0YXRlLmZsYWdzLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0TWFza3NUb0JvdW5kcyhsYXllclN0YXRlLmZs
YWdzLm1hc2tzVG9Cb3VuZHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNl
dFByZXNlcnZlczNEKGxheWVyU3RhdGUuZmxhZ3MucHJlc2VydmVzM0QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5j
b250ZW50TGF5ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbXBsID0g
Y29udGVudExheWVySW1wbCgqbGF5ZXJTdGF0ZS5jb250ZW50TGF5ZXIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbW1pdFNjb3BlLnByb3hpZXMuYWRkKG1ha2VSZWYoaW1wbC5wcm94
eSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVwZGF0ZUJhY2tpbmdTdG9yZShsYXllciwgbGF5ZXJTdGF0ZS5iYWNraW5nU3RvcmUsIGNv
bW1pdFNjb3BlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVs
dGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRh
dGVJbWFnZUJhY2tpbmcobGF5ZXIsIGxheWVyU3RhdGUuaW1hZ2VCYWNraW5nLCBjb21taXRTY29w
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
IAogICAgIGZvciAoYXV0byYgYmFja2luZ1N0b3JlIDogY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycykKICAgICAgICAgYmFja2luZ1N0b3JlLT5jb21taXRUaWxlT3Bl
cmF0aW9ucygqbV90ZXh0dXJlTWFwcGVyKTsKKworICAgIGZvciAoYXV0byYgcHJveHkgOiBjb21t
aXRTY29wZS5wcm94aWVzKQorICAgICAgICBwcm94eS0+c3dhcEJ1ZmZlcigpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZW5zdXJlUm9vdExheWVyKCkKQEAgLTQ2NSwyNiAr
MzQ4LDE3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUdMUmVzb3VyY2Vz
KCkKIHsKICAgICBBU1NFUlQoIW1fY2xpZW50KTsKIAotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVh
cigpOwotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKLSAgICBmb3IgKGF1
dG8mIHByb3h5IDogbV9wbGF0Zm9ybUxheWVyUHJveGllcy52YWx1ZXMoKSkKLSAgICAgICAgcHJv
eHktPmludmFsaWRhdGUoKTsKLSAgICBtX3BsYXRmb3JtTGF5ZXJQcm94aWVzLmNsZWFyKCk7Ci0j
ZW5kaWYKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgbGF5ZXIgOiBtX25pY29zaWEuc3RhdGUu
bGF5ZXJzKQorICAgICAgICAgICAgcmVtb3ZlTGF5ZXIoKmxheWVyKTsKKyAgICAgICAgbV9uaWNv
c2lhLnN0YXRlLmxheWVycyA9IHsgfTsKKyAgICAgICAgbV9uaWNvc2lhLnN0YXRlLnJvb3RMYXll
ciA9IG51bGxwdHI7CisgICAgICAgIG1fbmljb3NpYS5zY2VuZSA9IG51bGxwdHI7CisgICAgfQog
CiAgICAgbV9yb290TGF5ZXIgPSBudWxscHRyOwogICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlk
Q29vcmRpbmF0ZWRMYXllcklEOwotICAgIG1fbGF5ZXJzLmNsZWFyKCk7CiAgICAgbV90ZXh0dXJl
TWFwcGVyID0gbnVsbHB0cjsKLSAgICBtX2JhY2tpbmdTdG9yZXMuY2xlYXIoKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKFRl
eHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoIXN0YXRlLmFuaW1hdGlvbnNDaGFuZ2VkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0QW5pbWF0aW9ucyhzdGF0ZS5hbmltYXRpb25zKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRldGFjaCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAppbmRleCAyZjNiNGYzMzk3NS4uNDViMjQ0NzlmNTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvTmljb3NpYVNjZW5lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UZXh0dXJlTWFwcGVyRlBTQ291bnRlci5oPgpAQCAtODEsOCArODIsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBY3RpdmU7IH0KICAg
ICB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSkgeyBtX2lzQWN0aXZlID0gYWN0aXZlOyB9CiAK
LSAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlJik7Ci0KICAgICB2b2lkIHNldFZpZXdCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGNvbG9yKSB7IG1fdmlld0JhY2tncm91bmRDb2xvciA9IGNvbG9yOyB9CiAg
ICAgV2ViQ29yZTo6Q29sb3Igdmlld0JhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld0JhY2tncm91bmRDb2xvcjsgfQogCkBAIC05Miw3MiArOTEsNDAgQEAgcHJpdmF0ZToKICAg
ICAgICAgQ29tbWl0U2NvcGUoQ29tbWl0U2NvcGUmKSA9IGRlbGV0ZTsKICAgICAgICAgQ29tbWl0
U2NvcGUmIG9wZXJhdG9yPShjb25zdCBDb21taXRTY29wZSYpID0gZGVsZXRlOwogCi0gICAgICAg
IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+PiByZWxlYXNl
ZEltYWdlQmFja2luZ3M7CiAgICAgICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5h
dGVkQmFja2luZ1N0b3JlPj4gYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKKyAgICAg
ICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4+IHByb3hpZXM7CiAgICAgfTsKIAotICAgIHZvaWQgc2V0Um9vdExheWVySUQoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRM
YXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmLCBDb21taXRTY29wZSYpOwotICAgIHZvaWQgc2V0
TGF5ZXJDaGlsZHJlbklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCB1cGRh
dGVUaWxlc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2
b2lkIGNyZWF0ZVRpbGVzSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29u
c3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLSAgICB2b2lkIHJl
bW92ZVRpbGVzSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgY29uc3QgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmLCBDb21taXRTY29wZSYpOwotICAg
IHZvaWQgc2V0TGF5ZXJGaWx0ZXJzSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
KiwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyU3RhdGUmKTsKLSAgICB2
b2lkIHNldExheWVyQW5pbWF0aW9uc0lmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
ciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAg
dm9pZCBzeW5jUGxhdGZvcm1MYXllcklmTmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
ciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0KLSAg
ICB2b2lkIHN5bmNJbWFnZUJhY2tpbmdzKGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZSYsIENvbW1pdFNjb3BlJik7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJh
Y2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPE5pY29zaWE6
OkJ1ZmZlcj4mJiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgQ29tbWl0U2NvcGUmKTsK
LSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lELCBDb21taXRTY29wZSYpOwotCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVy
KiBsYXllckJ5SUQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEIGlkKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fbGF5ZXJzLmNvbnRhaW5zKGlkKSk7Ci0gICAgICAgIEFTU0VSVChpZCAhPSBX
ZWJDb3JlOjpJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICAgICAgcmV0dXJuIG1fbGF5
ZXJzLmdldChpZCk7Ci0gICAgfQotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogZ2V0
TGF5ZXJCeUlESWZFeGlzdHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lk
IGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
OjpOaWNvc2lhU3RhdGUmKTsKKyAgICB2b2lkIHVwZGF0ZVNjZW5lU3RhdGUoKTsKKwogICAgIFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5
ZXIuZ2V0KCk7IH0KIAogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKIAotICAgIHZvaWQgY3Jl
YXRlTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIGRlbGV0ZUxh
eWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0KLSAgICB2b2lkIGFzc2lnbkltYWdl
QmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKIAot
ICAgIHZvaWQgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckxheWVyKiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciopOwotICAgIHZvaWQgcmVtb3ZlQmFja2lu
Z1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKik7Ci0gICAgdm9pZCBy
ZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXIqLCBDb21taXRTY29wZSYpOworICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciYsIGNvbnN0IFJlZlB0cjxOaWNvc2lhOjpCYWNraW5nU3RvcmU+
JiwgQ29tbWl0U2NvcGUmKTsKKyAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTGF5ZXImLCBjb25zdCBSZWZQdHI8Tmljb3NpYTo6SW1hZ2VCYWNraW5nPiYs
IENvbW1pdFNjb3BlJik7CisgICAgdm9pZCByZW1vdmVMYXllcihOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyJik7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAgICAg
dm9pZCBvbk5ld0J1ZmZlckF2YWlsYWJsZSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICBXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGU6Ok5pY29zaWFTdGF0ZSBtX25pY29zaWE7Cisg
ICAgc3RydWN0IHsKKyAgICAgICAgUmVmUHRyPE5pY29zaWE6OlNjZW5lPiBzY2VuZTsKKyAgICAg
ICAgTmljb3NpYTo6U2NlbmU6OlN0YXRlIHN0YXRlOworICAgIH0gbV9uaWNvc2lhOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsK
IAotICAgIEhhc2hNYXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRy
PFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlPj4gbV9pbWFnZUJhY2tpbmdzOwotICAg
IEhhc2hNYXA8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgUmVmUHRyPFdlYkNvcmU6OkNv
b3JkaW5hdGVkQmFja2luZ1N0b3JlPj4gbV9iYWNraW5nU3RvcmVzOwotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIEhhc2hNYXA8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlckxheWVyKiwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+PiBtX3BsYXRmb3JtTGF5ZXJQcm94aWVzOwotI2VuZGlmCi0KICAgICAvLyBCZWxvdyB0d28g
bWVtYmVycyBhcmUgYWNjZXNzZWQgYnkgb25seSB0aGUgbWFpbiB0aHJlYWQuIFRoZSBwYWludGlu
ZyB0aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byBhY2Nlc3MgYm90aCBtZW1iZXJz
LgogICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCogbV9jbGllbnQ7CiAgICAgYm9v
bCBtX2lzQWN0aXZlIHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTGF5ZXI+IG1fcm9vdExheWVyOwogCi0gICAgSGFzaE1hcDxXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
TGF5ZXI+PiBtX2xheWVyczsKICAgICBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQgbV9yb290
TGF5ZXJJRCB7IFdlYkNvcmU6OkludmFsaWRDb29yZGluYXRlZExheWVySUQgfTsKICAgICBXZWJD
b3JlOjpDb2xvciBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3IgeyBXZWJDb3JlOjpDb2xvcjo6d2hpdGUg
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVk
Q29tcG9zaXRvci5jcHAKaW5kZXggMmNkYzFmZmI5YTMuLjZlMGJkOTljNGFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9z
aXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5j
cHAKQEAgLTIyMCw3ICsyMjAsNyBAQCB2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVuZGVyTGF5
ZXJUcmVlKCkKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHN0YXRlIDogc3RhdGVzKQogICAg
ICAgICAgICAgICAgICAgICBjb29yZGluYXRlVXBkYXRlIHw9IHN0ZDo6YW55X29mKHN0YXRlLmxh
eWVyc1RvVXBkYXRlLmJlZ2luKCksIHN0YXRlLmxheWVyc1RvVXBkYXRlLmVuZCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgW10oYXV0byYgaXQpIHsgcmV0dXJuIGl0LnNlY29uZC5wbGF0Zm9y
bUxheWVyQ2hhbmdlZCB8fCBpdC5zZWNvbmQucGxhdGZvcm1MYXllclVwZGF0ZWQ7IH0pOwotICAg
ICAgICAgICAgICAgIG1fYXR0cmlidXRlcy5jb29yZGluYXRlVXBkYXRlQ29tcGxldGlvbldpdGhD
bGllbnQgPSBjb29yZGluYXRlVXBkYXRlOworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlcy5j
b29yZGluYXRlVXBkYXRlQ29tcGxldGlvbldpdGhDbGllbnQgPSAvKiBjb29yZGluYXRlVXBkYXRl
ICovIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTI5OCw2ICsyOTgsMTEg
QEAgdm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnVwZGF0ZVNjZW5lU3RhdGUoY29uc3QgQ29vcmRp
bmF0ZWRHcmFwaGljc1N0YXRlJiBzdGF0ZSkKICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2No
ZWR1bGVVcGRhdGUoKTsKIH0KIAordm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlcXVlc3RVcGRh
dGUoKQoreworICAgIG1fY29tcG9zaXRpbmdSdW5Mb29wLT5zY2hlZHVsZVVwZGF0ZSgpOworfQor
CiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKIFJlZlB0
cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFRocmVhZGVkQ29tcG9zaXRvcjo6ZGlz
cGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3Iv
VGhyZWFkZWRDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAppbmRleCA0MmIy
NDZkMmIwNi4uMTM0ODkyYzAzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRj
b21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sKTsKIAogICAgIHZvaWQgdXBkYXRlU2Nl
bmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKKyAgICB2
b2lkIHJlcXVlc3RVcGRhdGUoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4
IGQ4N2YyZmRiYWZlLi5kNjcwZmIyNTFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKIFBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChXS1dQRTo6Vmll
dyYgdmlldykKICAgICA6IG1fdmlldyh2aWV3KQotICAgICwgbV9zY3JvbGxHZXN0dXJlQ29udHJv
bGxlcihzdGQ6Om1ha2VfdW5pcXVlPFNjcm9sbEdlc3R1cmVDb250cm9sbGVyPigpKQorICAgICwg
bV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcihtX3ZpZXcuc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIo
KSkKIHsKIH0KIApAQCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVX
aXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiB0b3VjaEV2ZW50LCBiCiAK
ICAgICBhdXRvJiBwYWdlID0gbV92aWV3LnBhZ2UoKTsKIAotICAgIGlmIChtX3Njcm9sbEdlc3R1
cmVDb250cm9sbGVyLT5oYW5kbGVFdmVudCh0b3VjaFBvaW50KSkgewotICAgICAgICBzdHJ1Y3Qg
d3BlX2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVudCA9IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXItPmF4aXNFdmVudCgpOworICAgIGlmIChtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmhhbmRs
ZUV2ZW50KHRvdWNoUG9pbnQpKSB7CisgICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVu
dCogYXhpc0V2ZW50ID0gbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlci5heGlzRXZlbnQoKTsKICAg
ICAgICAgaWYgKGF4aXNFdmVudC0+dHlwZSAhPSB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251
bGwpCiAgICAgICAgICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJX
aGVlbEV2ZW50KGF4aXNFdmVudCwgbV92aWV3LnBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
UGFnZUNsaWVudEltcGwuaAppbmRleCAyNGQ5ZjgzM2ZjMS4uYzZmYTFjNDlhY2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTE0
Miw4ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXRE
aXJlY3Rpb24gdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbigpIG92ZXJyaWRlOwogCiAgICAg
V0tXUEU6OlZpZXcmIG1fdmlldzsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxHZXN0dXJl
Q29udHJvbGxlcj4gbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcjsKKyAgICBTY3JvbGxHZXN0dXJl
Q29udHJvbGxlciYgbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9T
Y3JvbGxHZXN0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmNwcAppbmRleCBkYTEyYzhlYjM1MS4uYTMxM2Nl
N2EyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xs
R2VzdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuY3BwCkBAIC0yNywxOSArMjcsMzggQEAKICNpbmNs
dWRlICJTY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxiYXIuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8bnVtZXJpYz4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKK1Njcm9sbEdlc3R1cmVDb250cm9sbGVyOjpDbGllbnQ6On5DbGllbnQo
KSA9IGRlZmF1bHQ7CisKK1Njcm9sbEdlc3R1cmVDb250cm9sbGVyOjpTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcihDbGllbnQmIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBt
X2tpbmV0aWNzLnRpbWVyID0gc3RkOjptYWtlX3VuaXF1ZTxSdW5Mb29wOjpUaW1lcjxTY3JvbGxH
ZXN0dXJlQ29udHJvbGxlcj4+KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlNjcm9sbEdlc3R1cmVD
b250cm9sbGVyOjpkaXNwYXRjaENhbGxiYWNrKTsKK30KKworU2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXI6On5TY3JvbGxHZXN0dXJlQ29udHJvbGxlcigpCit7Cit9CisKIGJvb2wgU2Nyb2xsR2VzdHVy
ZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZl
bnRfcmF3KiB0b3VjaFBvaW50KQogewogICAgIHN3aXRjaCAodG91Y2hQb2ludC0+dHlwZSkgewog
ICAgIGNhc2Ugd3BlX2lucHV0X3RvdWNoX2V2ZW50X3R5cGVfZG93bjoKLSAgICAgICAgbV9zdGFy
dC50aW1lID0gdG91Y2hQb2ludC0+dGltZTsKLSAgICAgICAgbV9zdGFydC54ID0gdG91Y2hQb2lu
dC0+eDsKLSAgICAgICAgbV9zdGFydC55ID0gdG91Y2hQb2ludC0+eTsKLSAgICAgICAgbV9vZmZz
ZXQueCA9IHRvdWNoUG9pbnQtPng7Ci0gICAgICAgIG1fb2Zmc2V0LnkgPSB0b3VjaFBvaW50LT55
OworICAgIHsKKyAgICAgICAgaW50MzJfdCB4ID0gdG91Y2hQb2ludC0+eDsKKyAgICAgICAgaW50
MzJfdCB5ID0gdG91Y2hQb2ludC0+eTsKKyAgICAgICAgbV9zdGFydCA9IHsgdG91Y2hQb2ludC0+
dGltZSwgeCwgeSB9OworICAgICAgICBtX29mZnNldCA9IHsgeCwgeSB9OworICAgICAgICBtX2tp
bmV0aWNzLmxhc3QgPSB7IHRvdWNoUG9pbnQtPnRpbWUsIHgsIHkgfTsKKyAgICAgICAgbV9raW5l
dGljcy52ZWxvY2l0eSA9IHsgfTsKKyAgICAgICAgbV9raW5ldGljcy5hcHBsaWNhdGlvbiA9IHsg
fTsKKyAgICAgICAgbV9raW5ldGljcy50aW1lci0+c3RvcCgpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogICAgIGNhc2Ugd3BlX2lucHV0X3RvdWNoX2V2ZW50X3R5cGVfbW90aW9uOgog
ICAgICAgICBpZiAoIW1faGFuZGxpbmcpIHsKICAgICAgICAgICAgIGludDMyX3QgZGVsdGFYID0g
dG91Y2hQb2ludC0+eCAtIG1fc3RhcnQueDsKQEAgLTQ5LDcgKzY4LDcgQEAgYm9vbCBTY3JvbGxH
ZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3Vj
aF9ldmVudF9yYXcKICAgICAgICAgICAgIGludCBwaXhlbHNQZXJMaW5lU3RlcCA9IFdlYkNvcmU6
OlNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKTsKICAgICAgICAgICAgIG1faGFuZGxpbmcg
PSBzdGQ6OmFicyhkZWx0YVgpID49IHBpeGVsc1BlckxpbmVTdGVwCiAgICAgICAgICAgICAgICAg
fHwgc3RkOjphYnMoZGVsdGFZKSA+PSBwaXhlbHNQZXJMaW5lU3RlcAotICAgICAgICAgICAgICAg
IHx8IGRlbHRhVGltZSA+PSAyMDA7CisgICAgICAgICAgICAgICAgfHwgZGVsdGFUaW1lID49IDY0
OwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2hhbmRsaW5nKSB7CiAgICAgICAgICAgICBtX2F4
aXNFdmVudCA9IHsKQEAgLTU5LDggKzc4LDI1IEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXI6OmhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAg
ICAgICAgICAgICB9OwogICAgICAgICAgICAgbV9vZmZzZXQueCA9IHRvdWNoUG9pbnQtPng7CiAg
ICAgICAgICAgICBtX29mZnNldC55ID0gdG91Y2hQb2ludC0+eTsKKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGF1dG8mIGxhc3QgPSBtX2tpbmV0aWNzLmxhc3Q7CisgICAgICAgICAg
ICAgICAgYXV0byYgdmVsb2NpdHkgPSBtX2tpbmV0aWNzLnZlbG9jaXR5OworICAgICAgICAgICAg
ICAgIHN0ZDo6cm90YXRlKHZlbG9jaXR5LnguYmVnaW4oKSwgdmVsb2NpdHkueC5iZWdpbigpICsg
MSwgdmVsb2NpdHkueC5lbmQoKSk7CisgICAgICAgICAgICAgICAgc3RkOjpyb3RhdGUodmVsb2Np
dHkueS5iZWdpbigpLCB2ZWxvY2l0eS55LmJlZ2luKCkgKyAxLCB2ZWxvY2l0eS55LmVuZCgpKTsK
KyAgICAgICAgICAgICAgICBzdGQ6OnJvdGF0ZSh2ZWxvY2l0eS50aW1lLmJlZ2luKCksIHZlbG9j
aXR5LnRpbWUuYmVnaW4oKSArIDEsIHZlbG9jaXR5LnRpbWUuZW5kKCkpOworCisgICAgICAgICAg
ICAgICAgdmVsb2NpdHkueC5iYWNrKCkgPSB0b3VjaFBvaW50LT54IC0gbGFzdC54OworICAgICAg
ICAgICAgICAgIHZlbG9jaXR5LnkuYmFjaygpID0gdG91Y2hQb2ludC0+eSAtIGxhc3QueTsKKyAg
ICAgICAgICAgICAgICB2ZWxvY2l0eS50aW1lLmJhY2soKSA9IHRvdWNoUG9pbnQtPnRpbWUgLSBs
YXN0LnRpbWU7CisKKyAgICAgICAgICAgICAgICBsYXN0ID0geyB0b3VjaFBvaW50LT50aW1lLCB0
b3VjaFBvaW50LT54LCB0b3VjaFBvaW50LT55IH07CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisKKyAgICAgICAgbV9raW5ldGljcy5sYXN0ID0g
eyB0b3VjaFBvaW50LT50aW1lLCB0b3VjaFBvaW50LT54LCB0b3VjaFBvaW50LT55IH07CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX3Vw
OgogICAgICAgICBpZiAobV9oYW5kbGluZykgewpAQCAtNjksNiArMTA1LDIwIEBAIGJvb2wgU2Ny
b2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRf
dG91Y2hfZXZlbnRfcmF3CiAgICAgICAgICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlw
ZV9udWxsLAogICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAKICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIGF1dG8mIHZlbG9jaXR5ID0gbV9raW5ldGljcy52ZWxvY2l0eTsKKyAgICAg
ICAgICAgIHVpbnQzMl90IGFjY3VtdWxhdGVkVGltZSA9IHN0ZDo6YWNjdW11bGF0ZSh2ZWxvY2l0
eS50aW1lLmJlZ2luKCksIHZlbG9jaXR5LnRpbWUuZW5kKCksIDApOworICAgICAgICAgICAgaW50
MzJfdCBhY2N1bXVsYXRlZFggPSBzdGQ6OmFjY3VtdWxhdGUodmVsb2NpdHkueC5iZWdpbigpLCB2
ZWxvY2l0eS54LmVuZCgpLCAwKTsKKyAgICAgICAgICAgIGludDMyX3QgYWNjdW11bGF0ZWRZID0g
c3RkOjphY2N1bXVsYXRlKHZlbG9jaXR5LnkuYmVnaW4oKSwgdmVsb2NpdHkueS5lbmQoKSwgMCk7
CisgICAgICAgICAgICBkb3VibGUgdHJhamVjdG9yeVggPSAxMDAwLjAgKiBhY2N1bXVsYXRlZFgg
LyBhY2N1bXVsYXRlZFRpbWU7CisgICAgICAgICAgICBkb3VibGUgdHJhamVjdG9yeVkgPSAxMDAw
LjAgKiBhY2N1bXVsYXRlZFkgLyBhY2N1bXVsYXRlZFRpbWU7CisKKyAgICAgICAgICAgIG1fa2lu
ZXRpY3MuYXBwbGljYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAgIGdfZ2V0X21vbm90b25p
Y190aW1lKCksIHRvdWNoUG9pbnQtPnRpbWUsIHRvdWNoUG9pbnQtPnRpbWUsCisgICAgICAgICAg
ICAgICAgICAgIHsgbV9zdGFydC54LCB0cmFqZWN0b3J5WCwgc3RkOjphYnModHJhamVjdG9yeVgg
KiAwLjIpIH0sCisgICAgICAgICAgICAgICAgICAgIHsgbV9zdGFydC55LCB0cmFqZWN0b3J5WSwg
c3RkOjphYnModHJhamVjdG9yeVkgKiAwLjIpIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgbV9raW5ldGljcy50aW1lci0+c3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNl
Y29uZHMoMTUpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTc3LDQgKzEyNyw0MiBAQCBib29sIFNjcm9sbEdlc3R1cmVDb250
cm9sbGVyOjpoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3Jh
dwogICAgIH0KIH0KIAordm9pZCBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hDYWxs
YmFjaygpCit7CisgICAgdWludDMyX3QgdGltZU9mZnNldCA9IChnX2dldF9tb25vdG9uaWNfdGlt
ZSgpIC0gbV9raW5ldGljcy5hcHBsaWNhdGlvbi5iYXNlTW9ub3RvbmljVGltZSkgLyAxMDAwOwor
ICAgIHVpbnQzMl90IHRpbWUgPSBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLmJhc2VUaW1lICsgdGlt
ZU9mZnNldDsKKyAgICB1aW50MzJfdCB0aW1lRGVsdGEgPSB0aW1lIC0gbV9raW5ldGljcy5hcHBs
aWNhdGlvbi5sYXN0VGltZTsKKyAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLmxhc3RUaW1lID0g
dGltZTsKKworICAgIGRvdWJsZSB0cmFqZWN0b3J5WFZhbHVlID0gMDsKKyAgICBpZiAodGltZU9m
ZnNldCA8IG1fa2luZXRpY3MuYXBwbGljYXRpb24ueC5kdXJhdGlvbikgeworICAgICAgICB0cmFq
ZWN0b3J5WFZhbHVlID0gLXN0ZDo6cG93KGRvdWJsZSh0aW1lT2Zmc2V0KSAvIG1fa2luZXRpY3Mu
YXBwbGljYXRpb24ueC5kdXJhdGlvbiwgMikgKyAxOworICAgICAgICB0cmFqZWN0b3J5WFZhbHVl
ID0gc3RkOjptYXg8ZG91YmxlPih0cmFqZWN0b3J5WFZhbHVlLCAwKTsKKyAgICB9CisKKyAgICBk
b3VibGUgdHJhamVjdG9yeVlWYWx1ZSA9IDA7CisgICAgaWYgKHRpbWVPZmZzZXQgPCBtX2tpbmV0
aWNzLmFwcGxpY2F0aW9uLnkuZHVyYXRpb24pIHsKKyAgICAgICAgdHJhamVjdG9yeVlWYWx1ZSA9
IC1zdGQ6OnBvdyhkb3VibGUodGltZU9mZnNldCkgLyBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnku
ZHVyYXRpb24sIDIpICsgMTsKKyAgICAgICAgdHJhamVjdG9yeVlWYWx1ZSA9IHN0ZDo6bWF4PGRv
dWJsZT4odHJhamVjdG9yeVlWYWx1ZSwgMCk7CisgICAgfQorCisgICAgYm9vbCBhY3RpdmVUcmFq
ZWN0b3JpZXMgPSAhIXRyYWplY3RvcnlYVmFsdWUgfHwgISF0cmFqZWN0b3J5WVZhbHVlOworCisg
ICAgaW50MzJfdCB0cmFqZWN0b3J5WUNoYW5nZSA9IG1fa2luZXRpY3MuYXBwbGljYXRpb24ueS50
cmFqZWN0b3J5ICogdHJhamVjdG9yeVlWYWx1ZSAqIHRpbWVEZWx0YSAvIDEwMDAuMDsKKyAgICBp
ZiAodHJhamVjdG9yeVlDaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2
ZW50IGF4aXNFdmVudCA9IHsKKyAgICAgICAgICAgIHdwZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVf
bW90aW9uLAorICAgICAgICAgICAgbV9raW5ldGljcy5hcHBsaWNhdGlvbi5iYXNlVGltZSArIHRp
bWVPZmZzZXQsCisgICAgICAgICAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnguY29vcmRpbmF0
ZSwgbV9raW5ldGljcy5hcHBsaWNhdGlvbi55LmNvb3JkaW5hdGUsCisgICAgICAgICAgICAyLCB0
cmFqZWN0b3J5WUNoYW5nZQorICAgICAgICB9OworICAgICAgICBtX2NsaWVudC5kaXNwYXRjaEF4
aXNFdmVudCgmYXhpc0V2ZW50KTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQWxzbyBoYW5kbGUg
Y2hhbmdlIGluIHRoZSBob3Jpem9udGFsIHRyYWplY3RvcnkuCisKKyAgICBpZiAoYWN0aXZlVHJh
amVjdG9yaWVzKQorICAgICAgICBtX2tpbmV0aWNzLnRpbWVyLT5zdGFydE9uZVNob3QoU2Vjb25k
czo6ZnJvbU1pbGxpc2Vjb25kcygxNSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVy
ZUNvbnRyb2xsZXIuaAppbmRleCA5YzlmNmU5ZTNiMS4uNjI2ZTExOGFlY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250
cm9sbGVyLmgKQEAgLTI1LDE5ICsyNSwzNCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
PGFycmF5PgogI2luY2x1ZGUgPHdwZS93cGUuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIgewog
cHVibGljOgotICAgIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyKCkgPSBkZWZhdWx0OworICAgIGNs
YXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKTsKKwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hBeGlzRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9h
eGlzX2V2ZW50KikgPSAwOworICAgIH07CisKKyAgICBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcihD
bGllbnQmKTsKKyAgICB+U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKTsKIAogICAgIHN0cnVjdCB3
cGVfaW5wdXRfYXhpc19ldmVudCogYXhpc0V2ZW50KCkgeyByZXR1cm4gJm1fYXhpc0V2ZW50OyB9
CiAKKyAgICBib29sIGlzSGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsaW5nOyB9CiAg
ICAgYm9vbCBoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3Jh
dyopOwogCiBwcml2YXRlOgorICAgIHZvaWQgZGlzcGF0Y2hDYWxsYmFjaygpOworCisgICAgQ2xp
ZW50JiBtX2NsaWVudDsKKwogICAgIHN0cnVjdCB7CiAgICAgICAgIHVpbnQzMl90IHRpbWUgeyAw
IH07CiAgICAgICAgIGludDMyX3QgeCB7IDAgfTsKQEAgLTQ5LDYgKzY0LDMyIEBAIHByaXZhdGU6
CiAgICAgICAgIGludDMyX3QgeSB7IDAgfTsKICAgICB9IG1fb2Zmc2V0OwogCisgICAgc3RydWN0
IHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbWUgeyAwIH07Cisg
ICAgICAgICAgICBpbnQzMl90IHggeyAwIH07CisgICAgICAgICAgICBpbnQzMl90IHkgeyAwIH07
CisgICAgICAgIH0gbGFzdDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0ZDo6YXJy
YXk8aW50MzJfdCwgND4geDsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8aW50MzJfdCwgND4geTsK
KyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIDQ+IHRpbWU7CisgICAgICAgIH0gdmVs
b2NpdHk7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGludDY0X3QgYmFzZU1vbm90
b25pY1RpbWUgeyAwIH07CisgICAgICAgICAgICB1aW50MzJfdCBiYXNlVGltZSB7IDAgfTsKKyAg
ICAgICAgICAgIHVpbnQzMl90IGxhc3RUaW1lIHsgMCB9OworICAgICAgICAgICAgc3RydWN0IHsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IGNvb3JkaW5hdGUgeyAwIH07CisgICAgICAgICAgICAg
ICAgZG91YmxlIHRyYWplY3RvcnkgeyAwIH07CisgICAgICAgICAgICAgICAgZG91YmxlIGR1cmF0
aW9uIHsgMCB9OworICAgICAgICAgICAgfSB4LCB5OworICAgICAgICB9IGFwcGxpY2F0aW9uOwor
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW5Mb29wOjpUaW1lcjxTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcj4+IHRpbWVyOworICAgIH0gbV9raW5ldGljczsKKwogICAgIGJvb2wgbV9oYW5kbGlu
ZyB7IGZhbHNlIH07CiAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50IG1fYXhpc0V2ZW50
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4
IDg1YmVkNWZlMTZiLi5hYzBjN2Q1YTM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dQRVZpZXcuY3BwCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXS1dQRSB7CiAK
IFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6
UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDb25maWd1cmF0aW9uKQogICAgIDogbV9jbGllbnQoc3Rk
OjptYWtlX3VuaXF1ZTxBUEk6OlZpZXdDbGllbnQ+KCkpCisgICAgLCBtX3Njcm9sbEdlc3R1cmVD
b250cm9sbGVyKHN0ZDo6bWFrZV91bmlxdWU8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+KCp0aGlz
KSkKICAgICAsIG1fcGFnZUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFBhZ2VDbGllbnRJbXBsPigq
dGhpcykpCiAgICAgLCBtX3NpemUgeyA4MDAsIDYwMCB9CiAgICAgLCBtX3ZpZXdTdGF0ZUZsYWdz
KFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OldpbmRvd0lzQWN0aXZlIHwgV2ViQ29yZTo6QWN0aXZp
dHlTdGF0ZTo6SXNGb2N1c2VkIHwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlIHwg
V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNJbldpbmRvdykKQEAgLTEyNiw4ICsxMjcsMjcgQEAg
Vmlldzo6VmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQ
YWdlQ29uZmlndXJhdGlvbiYgYmFzZUMKICAgICAgICAgLy8gaGFuZGxlX3RvdWNoX2V2ZW50CiAg
ICAgICAgIFtdKHZvaWQqIGRhdGEsIHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnQqIGV2ZW50
KQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxW
aWV3Kj4oZGF0YSktPnBhZ2UoKTsKLSAgICAgICAgICAgIHBhZ2UuaGFuZGxlVG91Y2hFdmVudChX
ZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQoZXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3Io
KSkpOworICAgICAgICAgICAgYXV0byYgdmlldyA9ICpyZWludGVycHJldF9jYXN0PFZpZXcqPihk
YXRhKTsKKyAgICAgICAgICAgIGF1dG8mIHBhZ2UgPSB2aWV3LnBhZ2UoKTsKKworICAgICAgICAg
ICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIFdlYktpdDo6TmF0aXZlV2Vi
VG91Y2hFdmVudCBuYXRpdmVFdmVudChldmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsK
KworICAgICAgICAgICAgYXV0byYgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIgPSAqdmlldy5tX3Nj
cm9sbEdlc3R1cmVDb250cm9sbGVyOworICAgICAgICAgICAgaWYgKHNjcm9sbEdlc3R1cmVDb250
cm9sbGVyLmlzSGFuZGxpbmcoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB3cGVf
aW5wdXRfdG91Y2hfZXZlbnRfcmF3KiB0b3VjaFBvaW50ID0gbmF0aXZlRXZlbnQubmF0aXZlRmFs
bGJhY2tUb3VjaFBvaW50KCk7CisgICAgICAgICAgICAgICAgaWYgKHRvdWNoUG9pbnQtPnR5cGUg
IT0gd3BlX2lucHV0X3RvdWNoX2V2ZW50X3R5cGVfbnVsbCAmJgorICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oYW5kbGVFdmVudCh0b3VjaFBvaW50KSkgeworICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBzY3JvbGxHZXN0dXJlQ29udHJv
bGxlci5heGlzRXZlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXNFdmVudC0+dHlw
ZSAhPSB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4
aXNFdmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgICAgICAg
ICAgcGFnZS5oYW5kbGVUb3VjaEV2ZW50KG5hdGl2ZUV2ZW50KTsKICAgICAgICAgfSwKICAgICAg
ICAgLy8gcGFkZGluZwogICAgICAgICBudWxscHRyLApAQCAtMTg4LDQgKzIwOCwxMCBAQCB2b2lk
IFZpZXc6OmNsb3NlKCkKICAgICBtX3BhZ2VQcm94eS0+Y2xvc2UoKTsKIH0KIAordm9pZCBWaWV3
OjpkaXNwYXRjaEF4aXNFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVu
dCkKK3sKKyAgICBhdXRvJiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIHBhZ2UuaGFuZGxlV2hl
ZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoYXhpc0V2ZW50LCBwYWdlLmRldmlj
ZVNjYWxlRmFjdG9yKCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV0tXUEUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKaW5kZXggMmFkMThmZmY3NDIuLjI0NmQwYzY4
YWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaApAQCAtMjgs
MTIgKzI4LDE0IEBACiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRp
bmdNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUg
IlNjcm9sbEdlc3R1cmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBK
U0dsb2JhbENvbnRleHRSZWY7CitzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQ7CiBzdHJ1Y3Qg
d3BlX3ZpZXdfYmFja2VuZDsKIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00MiwxMyArNDQsMTQgQEAg
Y2xhc3MgVmlld0NsaWVudDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFBy
b3h5OworY2xhc3MgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CiBjbGFzcyBXZWJQYWdlR3JvdXA7
CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIH0KIAogbmFtZXNwYWNlIFdLV1BFIHsKIAotY2xhc3Mg
VmlldyA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlZpZXc+IHsK
K2NsYXNzIFZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpW
aWV3PiwgcHVibGljIFdlYktpdDo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OkNsaWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFZpZXcqIGNyZWF0ZShzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCog
YmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKICAg
ICB7CkBAIC03NywxMyArODAsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RnVsbFNjcmVlbihi
b29sIGZ1bGxTY3JlZW5TdGF0ZSkgeyBtX2Z1bGxTY3JlZW5Nb2RlQWN0aXZlID0gZnVsbFNjcmVl
blN0YXRlOyB9OwogI2VuZGlmCiAKKyAgICBXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVy
JiBzY3JvbGxHZXN0dXJlQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX3Njcm9sbEdlc3R1
cmVDb250cm9sbGVyOyB9CisKIHByaXZhdGU6CiAgICAgVmlldyhzdHJ1Y3Qgd3BlX3ZpZXdfYmFj
a2VuZCosIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mKTsKIAogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAKKyAgICAvLyBTY3JvbGxHZXN0dXJlQ29udHJv
bGxlcjo6Q2xpZW50CisgICAgdm9pZCBkaXNwYXRjaEF4aXNFdmVudChzdHJ1Y3Qgd3BlX2lucHV0
X2F4aXNfZXZlbnQqKSBvdmVycmlkZTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlZpZXdD
bGllbnQ+IG1fY2xpZW50OwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6U2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXI+IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYktpdDo6UGFnZUNsaWVudEltcGw+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQdHI8
V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1fcGFnZVByb3h5OwogICAgIFdlYkNvcmU6OkludFNpemUg
bV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAppbmRleCBjZTkzN2Q3ZmMzOS4uOTUzNjQ3MDg3
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJh
dGVkRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCkBAIC0xNzEsNiArMTcxLDExIEBAIHZvaWQgQWNj
ZWxlcmF0ZWREcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0IElu
dFNpemUmIHNpemUpCiAjZW5kaWYKIH0KIAorYm9vbCBBY2NlbGVyYXRlZERyYXdpbmdBcmVhOjpz
dXBwb3J0c0FzeW5jU2Nyb2xsaW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQg
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQogewogICAg
IEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCmluZGV4IDc3MWFmMGEy
MDUxLi5lYmQzNWI5ZTQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaApAQCAtNTQsNiArNTQsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNl
c1N0b3JlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwogCisgICAgYm9vbCBzdXBwb3J0c0Fz
eW5jU2Nyb2xsaW5nKCkgb3ZlcnJpZGU7CisKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFj
dG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJvb3RD
b21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2
b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
bXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCA0
ZWMwZjVlYTFhMy4uYTEzNjFmZDNkOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMTA0LDYgKzEwNCwzNiBAQCB2b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSkKICAgICBub3RpZnlGbHVzaFJlcXVpcmVkKG1fcm9vdExheWVyLmdldCgpKTsKIH0KIAor
dm9pZCBkdW1wUGxhdGZvcm1MYXllcihOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyJiBsYXllciwg
dW5zaWduZWQgaW5kZW50YXRpb24pCit7CisgICAgYXV0byB3cml0ZUluZGVudGF0aW9uID0KKyAg
ICAgICAgW10odW5zaWduZWQgaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpZDsgKytpKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
ICAgIHwiKTsKKyAgICAgICAgfTsKKworICAgIGxheWVyLmFjY2Vzc1N0YXRlKAorICAgICAgICBb
JmxheWVyLCAmd3JpdGVJbmRlbnRhdGlvbiwgaW5kZW50YXRpb25dKGNvbnN0IE5pY29zaWE6OkNv
bXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAgICAgICAg
ICB3cml0ZUluZGVudGF0aW9uKGluZGVudGF0aW9uKTsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAibGF5ZXIoJXApOiBpZCAlbHUgcG9zaXRpb24gKCUuMmYsJS4yZikgYW5jaG9yUG9pbnQg
KCUuMmYsJS4yZiwlLjJmKSBzaXplICglLjJmLCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICZs
YXllciwgbGF5ZXIuaWQoKSwgc3RhdGUucG9zaXRpb24ueCgpLCBzdGF0ZS5wb3NpdGlvbi55KCks
CisgICAgICAgICAgICAgICAgc3RhdGUuYW5jaG9yUG9pbnQueCgpLCBzdGF0ZS5hbmNob3JQb2lu
dC55KCksIHN0YXRlLmFuY2hvclBvaW50LnooKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaXpl
LndpZHRoKCksIHN0YXRlLnNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgd3JpdGVJbmRlbnRh
dGlvbihpbmRlbnRhdGlvbik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgY2hpbGRy
ZW5bJXp1XSByZXBsaWNhICVwIG1hc2sgJXBcbiIsCisgICAgICAgICAgICAgICAgc3RhdGUuY2hp
bGRyZW4uc2l6ZSgpLCBzdGF0ZS5yZXBsaWNhLmdldCgpLCBzdGF0ZS5tYXNrLmdldCgpKTsKKyAg
ICAgICAgICAgIHdyaXRlSW5kZW50YXRpb24oaW5kZW50YXRpb24pOworICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgIGZsYWdzIHsgJWQsICVkLCAlZCwgJWQsICVkLCAlZCB9XG4iLAorICAg
ICAgICAgICAgICAgIHN0YXRlLmZsYWdzLmNvbnRlbnRzT3BhcXVlLCBzdGF0ZS5mbGFncy5kcmF3
c0NvbnRlbnQsIHN0YXRlLmZsYWdzLmNvbnRlbnRzVmlzaWJsZSwKKyAgICAgICAgICAgICAgICBz
dGF0ZS5mbGFncy5iYWNrZmFjZVZpc2libGUsIHN0YXRlLmZsYWdzLm1hc2tzVG9Cb3VuZHMsIHN0
YXRlLmZsYWdzLnByZXNlcnZlczNEKTsKKworICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6
IHN0YXRlLmNoaWxkcmVuKQorICAgICAgICAgICAgICAgIGR1bXBQbGF0Zm9ybUxheWVyKCpjaGls
ZCwgaW5kZW50YXRpb24gKyAxKTsKKyAgICAgICAgfSk7Cit9CisKIGJvb2wgQ29tcG9zaXRpbmdD
b29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKIHsKICAgICBTZXRGb3JTY29w
ZTxib29sPiBwcm90ZWN0b3IobV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzLCB0cnVlKTsKQEAgLTEy
NCwxNyArMTU0LDI2IEBAIGJvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkKIAogICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsK
IAorI2lmIDAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0bV9y
b290TGF5ZXIgJXAsIG1fcm9vdExheWVyLnBsYXRmb3JtTGF5ZXIoKSAlcFxuIiwKKyAgICAgICAg
bV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworICAgIGR1
bXBQbGF0Zm9ybUxheWVyKCptX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigpLCAxKTsKKyNlbmRp
ZgorCiAgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CiAgICAgICAgIGRpZFN5bmMgPSB0cnVl
OwogCiAgICAgICAgIG1fc3RhdGUubmljb3NpYS5zY2VuZS0+YWNjZXNzU3RhdGUoCiAgICAgICAg
ICAgICBbdGhpc10oTmljb3NpYTo6U2NlbmU6OlN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNvbXBvc2l0aW9uTGF5ZXIgOiBtX25pY29zaWEu
c3RhdGUubGF5ZXJzKQorICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbkxheWVyLT5mbHVz
aFN0YXRlKCk7CisKICAgICAgICAgICAgICAgICArK3N0YXRlLmlkOwogICAgICAgICAgICAgICAg
IHN0YXRlLmxheWVycyA9IG1fbmljb3NpYS5zdGF0ZS5sYXllcnM7CiAgICAgICAgICAgICAgICAg
c3RhdGUucm9vdExheWVyID0gbV9uaWNvc2lhLnN0YXRlLnJvb3RMYXllcjsKICAgICAgICAgICAg
IH0pOwotCiAgICAgICAgIG1fY2xpZW50LmNvbW1pdFNjZW5lU3RhdGUobV9zdGF0ZSk7CiAKICAg
ICAgICAgY2xlYXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IDQzMDhlYWUyZmY2Li4yODEy
NjJiNTE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nv
b3JkaW5hdG9yLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIE5pY29zaWEgewogY2xh
c3MgUGFpbnRpbmdFbmdpbmU7CitjbGFzcyBTY2VuZUludGVncmF0aW9uOwogfQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC02MSw2ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNv
bnRlbnRSZWN0KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVk
KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUmVm
UHRyPE5pY29zaWE6OlNjZW5lSW50ZWdyYXRpb24+IHNjZW5lSW50ZWdyYXRpb24oKSA9IDA7CiAg
ICAgfTsKIAogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoV2ViQ29yZTo6UGFnZSosIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggMGE4YmVjOGEzOTguLjJhMWNj
ZjMyZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlk
Rmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJl
Y3QpIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpIG92ZXJyaWRlIHsg
c2NoZWR1bGVMYXllckZsdXNoKCk7IH07CiAgICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOworICAgIFJlZlB0
cjxOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgdm9pZCBmbHVzaExheWVyc0FuZEZvcmNlUmVwYWlu
dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IGQ5OWYxNmJjZTc1Li4zZTcwNjY0
MjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhU2NlbmVJbnRlZ3Jh
dGlvbi5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtNTksNiArNjAsNyBAQCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6VGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUAogICAgIDogQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2NvbXBvc2l0b3JDbGllbnQoKnRoaXMp
CiAgICAgLCBtX3N1cmZhY2UoQWNjZWxlcmF0ZWRTdXJmYWNlOjpjcmVhdGUod2ViUGFnZSwgKnRo
aXMpKQorICAgICwgbV9zY2VuZUludGVncmF0aW9uKGFkb3B0UmVmKCpuZXcgTmljb3NpYTo6U2Nl
bmVJbnRlZ3JhdGlvbigqdGhpcykpKQogICAgICwgbV92aWV3cG9ydENvbnRyb2xsZXIod2ViUGFn
ZS5zaXplKCkpCiB7CiAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1h
aW5GcmFtZVZpZXcoKSkgewpAQCAtODksNiArOTEsNyBAQCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2Vi
UAogCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkK
IHsKKyAgICBtX3NjZW5lSW50ZWdyYXRpb24tPmludmFsaWRhdGUoKTsKICAgICBtX2NvbXBvc2l0
b3ItPmludmFsaWRhdGUoKTsKICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRh
dGUoKTsKICAgICBtX3N1cmZhY2UgPSBudWxscHRyOwpAQCAtMTIxLDYgKzEyNCwxMSBAQCB2b2lk
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1v
bml0b3JVcGRhdGUoYm9vbCBoYQogICAgIG1fY29tcG9zaXRvci0+aGFuZGxlRGlzcGxheVJlZnJl
c2hNb25pdG9yVXBkYXRlKCk7CiB9CiAKK1JlZlB0cjxOaWNvc2lhOjpTY2VuZUludGVncmF0aW9u
PiBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NlbmVJbnRlZ3JhdGlvbigpCit7
CisgICAgcmV0dXJuIG1fc2NlbmVJbnRlZ3JhdGlvbi5jb3B5UmVmKCk7Cit9CisKIHVpbnQ2NF90
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpuYXRpdmVTdXJmYWNlSGFuZGxlRm9y
Q29tcG9zaXRpbmcoKQogewogICAgIGlmICghbV9zdXJmYWNlKQpAQCAtMjczLDYgKzI4MSwxMSBA
QCB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRl
KGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpYwogICAgIG1fY29tcG9zaXRvci0+dXBkYXRlU2NlbmVT
dGF0ZShzdGF0ZSk7CiB9CiAKK3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnJlcXVlc3RVcGRhdGUoKQoreworICAgIG1fY29tcG9zaXRvci0+cmVxdWVzdFVwZGF0ZSgpOwor
fQorCiB2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRh
YmxlKGJvb2wgZGlzY2FyZGFibGUpCiB7CiAgICAgbV9pc0Rpc2NhcmRhYmxlID0gZGlzY2FyZGFi
bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggODdhN2RhNzE3Y2QuLmI4NDA4YjUyOTYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2ltcGxl
Vmlld3BvcnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkZWRDb21wb3NpdG9yLmgiCiAj
aW5jbHVkZSAiVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL05pY29zaWFTY2VuZUludGVncmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw3ICs0NywxMCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3QgZmluYWwgOiBwdWJsaWMgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LCBwdWJsaWMg
QWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQgeworY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QgZmluYWwKKyAgICA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QK
KyAgICAsIHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudAorICAgICwgcHVibGljIE5p
Y29zaWE6OlNjZW5lSW50ZWdyYXRpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UmKTsKICAg
ICB2aXJ0dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwpAQCAtMTIwLDYg
KzEyNCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUo
Y29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uOjpDbGllbnQKKyAgICB2b2lkIHJlcXVlc3RV
cGRhdGUoKSBvdmVycmlkZTsKKwogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQ
TEFZX01PTklUT1IpCiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4g
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBv
dmVycmlkZTsKICNlbmRpZgpAQCAtMTI3LDYgKzEzNCw5IEBAIHByaXZhdGU6CiAgICAgLy8gQWNj
ZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKICAgICB2b2lkIGZyYW1lQ29tcGxldGUoKSBvdmVycmlk
ZTsKIAorICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAorICAgIFJlZlB0cjxO
aWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgb3ZlcnJpZGU7CisK
ICAgICB1aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsKICAgICB2
b2lkIGRpZERlc3Ryb3lHTENvbnRleHQoKTsKICAgICB2b2lkIHdpbGxSZW5kZXJGcmFtZSgpOwpA
QCAtMTQ0LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBv
c2l0b3JDbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3VyZmFjZT4gbV9z
dXJmYWNlOwogICAgIFJlZlB0cjxUaHJlYWRlZENvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsKKyAg
ICBSZWY8Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gbV9zY2VuZUludGVncmF0aW9uOwogICAg
IFNpbXBsZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKICAgICBmbG9h
dCBtX2xhc3RQYWdlU2NhbGVGYWN0b3IgeyAxIH07CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9s
YXN0U2Nyb2xsUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDk0NWRlZGVjMjJlLi40
NTI0NTEwODRlYiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKQEAgLTI3Nyw2ICsyNzcsNyBAQCBpZiAo
RU5BQkxFX09QRU5HTCkKIAogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DT09SRElO
QVRFRF9HUkFQSElDUyBUUlVFKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DT09S
RElOQVRFRF9HUkFQSElDU19USFJFQURFRCBUUlVFKQorICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9OSUNPU0lBIFRSVUUpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX1BMVUdJTl9QUk9D
RVNTX0dUSzIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZSBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCmluZGV4IGU4NzAxMWQ1MmQ2Li5mY2I1OWQ4ODA4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTEzNCw2ICsxMzQsNyBAQCBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQRVJfR0wgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9USUxFRF9CQUNLSU5HX1NUT1JFIFRSVUUpCiBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1MgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9DT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCBUUlVFKQorU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX05JQ09TSUEgVFJVRSkKIAogc2V0KEZPUldBUkRJTkdfSEVBREVSU19E
SVIgJHtERVJJVkVEX1NPVVJDRVNfRElSfS9Gb3J3YXJkaW5nSGVhZGVycykKIHNldChGT1JXQVJE
SU5HX0hFQURFUlNfV1BFX0RJUiAke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9L3dwZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347274</attachid>
            <date>2018-08-16 10:50:55 -0700</date>
            <delta_ts>2018-08-22 09:19:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>platform-layers.patch</filename>
            <type>text/plain</type>
            <size>113023</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCmluZGV4IGIzM2FhMGNkYWZlLi4wZjJkZDRjZmE5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCkBAIC0yNjMs
NyArMjYzLDYgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZVRyZWU6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jaWZuZGVmIE5ERUJVRwogdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkKIHsKICAgICBpZiAoIXRyZWUpCkBA
IC0yODcsNiArMjg2LDQgQEAgdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKICAgICBzaG93U2Nyb2xsaW5nU3RhdGVUcmVl
KCZub2RlLT5zY3JvbGxpbmdTdGF0ZVRyZWUoKSk7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLy8g
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaApp
bmRleCAzYjI1NjE1MWFkNy4uNmFlNmYzM2RiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCkBAIC05OSw5ICs5OSw3IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2lmbmRlZiBOREVCVUcKIHZvaWQg
c2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUq
KTsKIHZvaWQgc2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCmluZGV4IDgzMDM1MzY0OGNlLi5hYzNkOTk4NTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcApAQCAtODcsNiArODcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKCkKIAogICAgIGF1dG8gdHJlZVN0
YXRlID0gc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmNvbW1pdChMYXllclJlcHJlc2VudGF0aW9uOjpQ
bGF0Zm9ybUxheWVyUmVwcmVzZW50YXRpb24pOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdHJlZVN0YXRlID0gV1RGTW92ZSh0cmVlU3RhdGUp
XSgpIG11dGFibGUgeworICAgICAgICAvLyBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CiAgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRl
KFdURk1vdmUodHJlZVN0YXRlKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1N0YXRlTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAzZDY4YWU2NmE4Zi4uMTkwZTU4YWFlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nU3RhdGVO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtMjYsMjIgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6
cmV0YWluUGxhdGZvcm1MYXllcih2b2lkKikKK3ZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6cmV0
YWluUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5ZXJUeXBlZCh0eXBl
bGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPnJlZigpOwogfQogCi12b2lkIExheWVyUmVwcmVz
ZW50YXRpb246OnJlbGVhc2VQbGF0Zm9ybUxheWVyKHZvaWQqKQordm9pZCBMYXllclJlcHJlc2Vu
dGF0aW9uOjpyZWxlYXNlUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5
ZXJUeXBlZCh0eXBlbGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPmRlcmVmKCk7CiB9CiAKIFBs
YXRmb3JtTGF5ZXIqIExheWVyUmVwcmVzZW50YXRpb246Om1ha2VQbGF0Zm9ybUxheWVyVHlwZWQo
dm9pZCogdHlwZWxlc3NMYXllcikKQEAgLTU2LDQgKzU3LDQgQEAgdm9pZCogTGF5ZXJSZXByZXNl
bnRhdGlvbjo6bWFrZVBsYXRmb3JtTGF5ZXJUeXBlbGVzcyhQbGF0Zm9ybUxheWVyKiBsYXllcikK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZi
ZmNhNGRmZDUxLi4wNDEyYTY3OTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFw
aGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRn
cmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oIgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKQEAgLTY2LDQgKzY2LDQgQEAgUmVmPFNjcm9sbGlu
Z1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y3JlYXRlU2Nyb2xs
aW5nVHJlZU5vZGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8v
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmNwcAppbmRleCAyMmNkMWZmNzcxOS4uNTVkMzNkZTA3YTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMjgsOSArMjgs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQ
bGF0Zm9ybUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzUyLDQ0
IEBAIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCkKICAg
ICBzY3JvbGxpbmdUcmVlKCkuZml4ZWRPclN0aWNreU5vZGVSZW1vdmVkKCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQog
eworICAgIGF1dG8mIGZpeGVkTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
PihzdGF0ZU5vZGUpOworCisgICAgaWYgKGZpeGVkTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZv
cm1MYXllciogbGF5ZXIgPSBmaXhlZE5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXll
ciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBmaXhl
ZE5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJl
ZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQordm9pZCBTY3JvbGxp
bmdUcmVlRml4ZWROb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgRmxvYXRQ
b2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9yVmlld3Bv
cnRSZWN0KGZpeGVkUG9zaXRpb25SZWN0KTsKKyAgICBsYXllclBvc2l0aW9uIC09IGN1bXVsYXRp
dmVEZWx0YTsKKworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbExheWVy
LT5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgYW5jaG9yUG9pbnQgPSBzdGF0ZS5hbmNob3JQb2ludDsKKyAgICAgICAgICAgIGF1
dG8mIHNpemUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkKKyAgICAg
ICAgICAgICAgICArIEZsb2F0UG9pbnQoYW5jaG9yUG9pbnQueCgpICogc2l6ZS53aWR0aCgpLCBh
bmNob3JQb2ludC55KCkgKiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9KTsKKworICAgIGlmIChtX2NoaWxkcmVuKSB7CisgICAgICAgIEZs
b2F0U2l6ZSBuZXdEZWx0YSA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25BdExhc3RMYXlvdXQoKSArIGN1bXVsYXRpdmVEZWx0YTsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0Fm
dGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBuZXdEZWx0
YSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmgKaW5kZXggZDBhYTg3OTI0MjIuLjNkNWRiYjUxMDkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlTm9kZS5oIgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00
Myw4ICs0NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCBlY2M2ZjMxNzMwNi4u
ODNjM2YyNTYzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nv
b3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCkBAIC0yOCw3ICsyOCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKworI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVy
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsMjUgKzQ3LDE0MCBAQCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0
ZWRHcmFwaGljczo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTgogCiBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6flNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzKCkgPSBkZWZhdWx0OwogCi12b2lkIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRTdGF0ZUJlZm9yZUNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIC8vZnBy
aW50ZihzdGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRH
cmFwaGljczo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbigpIGNoYW5nZWQgcHJvcGVydGllcyAl
ZFxuIiwKKyAgICAvLyAgICBzdGF0ZU5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKSk7CisgICAgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihz
dGF0ZU5vZGUpOworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOworCisgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIg
PSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXllciA9IGRv
d25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJp
bnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogU2Nyb2xsTGF5ZXIgJXAgaWQgJWx1XG4i
LCBtX3Njcm9sbExheWVyLmdldCgpLCBtX3Njcm9sbExheWVyID8gbV9zY3JvbGxMYXllci0+aWQo
KSA6IDApOworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikp
IHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAg
ICAgICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBTY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJXAgaWQgJWx1XG4iLCBtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSwgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgPyBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+aWQoKSA6IDAp
OworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkg
eworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKTsKKyAgICAgICAgbV9jb3VudGVyU2Nyb2xsaW5n
TGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAg
ICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQgcHJvcGVydHk6IENvdW50ZXJTY3JvbGxp
bmdMYXllciAlcFxuIiwgbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOworICAgIH0KKyAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6
OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmluc2V0Q2xpcExheWVy
KCk7CisgICAgICAgIG1faW5zZXRDbGlwTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3Np
dGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQg
cHJvcGVydHk6IEluc2V0Q2xpcExheWVyICVwXG4iLCBtX2luc2V0Q2xpcExheWVyLmdldCgpKTsK
KyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpIHsKKyAg
ICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUu
Y29udGVudFNoYWRvd0xheWVyKCk7CisgICAgICAgIG1fY29udGVudFNoYWRvd0xheWVyID0gZG93
bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2Zwcmlu
dGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBDb250ZW50U2hhZG93TGF5ZXIgJXBcbiIs
IG1fY29udGVudFNoYWRvd0xheWVyLmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkhlYWRlckxheWVyKSkgeworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oZWFkZXJMYXllcigpOworICAgICAgICBtX2hlYWRlckxh
eWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAg
ICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBIZWFkZXJMYXllciAlcFxu
IiwgbV9oZWFkZXJMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpG
b290ZXJMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKTsKKyAgICAgICAgbV9mb290ZXJMYXllciA9
IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9m
cHJpbnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogRm9vdGVyTGF5ZXIgJXBcbiIsIG1f
Zm9vdGVyTGF5ZXIuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogeworICAgIC8vZnByaW50Zihz
dGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKCkgY2hhbmdlZCBwcm9wZXJ0aWVzICVkXG4iLAor
ICAgIC8vICAgIHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYg
KCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxCeSh7
IHdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworCisgICAgLy8g
VE9ETzoKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVs
RXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuaGFuZGxl
V2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyB9OworICAgIEFTU0VSVChtX3Njcm9sbExh
eWVyKTsKKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb247CisgICAgbV9zY3JvbGxMYXll
ci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKGNvbnN0IE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICBzY3JvbGxQb3NpdGlvbiA9IC1zdGF0ZS5wb3NpdGlvbjsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIHNjcm9sbFBvc2l0aW9uOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQog
eworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29v
cmRpbmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBGbG9hdFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRl
bnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7Cisg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBsYXlvdXRWaWV3cG9ydE9yaWdpbjsKKyAgICBp
ZiAoc2Nyb2xsaW5nVHJlZSgpLnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKSB7CisgICAgICAgIEZs
b2F0UG9pbnQgdmlzaWJsZUNvbnRlbnRPcmlnaW4gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICAgICAg
RmxvYXRSZWN0IG5ld0xheW91dFZpZXdwb3J0ID0gbGF5b3V0Vmlld3BvcnRGb3JTY3JvbGxQb3Np
dGlvbih2aXNpYmxlQ29udGVudE9yaWdpbiwgZnJhbWVTY2FsZUZhY3RvcigpKTsKKyAgICAgICAg
c2V0TGF5b3V0Vmlld3BvcnQobmV3TGF5b3V0Vmlld3BvcnQpOworICAgICAgICBsYXlvdXRWaWV3
cG9ydE9yaWdpbiA9IG5ld0xheW91dFZpZXdwb3J0LmxvY2F0aW9uKCk7CisgICAgfQorCisgICAg
c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnQoKSk7
CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGlu
Z05vZGVJRCgpLCBzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmlnaW4pOwogfQogCi12
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkKIHsKKyAgICAvL2ZwcmludGYoc3Rk
ZXJyLCAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldFNjcm9sbExheWVyUG9zaXRpb24oKSBwb3NpdGlvbiAoJS4yZiwlLjJmKSBsYXlvdXRWaWV3
cG9ydCAoJS4yZiwlLjJmKXgoJS4yZiwlLjJmKVxuIiwKKyAgICAvLyAgICBzY3JvbGxQb3NpdGlv
bi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSwKKyAgICAvLyAgICBsYXlvdXRWaWV3cG9ydC54KCks
IGxheW91dFZpZXdwb3J0LnkoKSwgbGF5b3V0Vmlld3BvcnQud2lkdGgoKSwgbGF5b3V0Vmlld3Bv
cnQuaGVpZ2h0KCkpOworCisgICAgYXV0byB1cGRhdGVTY29wZSA9IG1fc2Nyb2xsTGF5ZXItPmNy
ZWF0ZVVwZGF0ZVNjb3BlKCk7CisKKyAgICBBU1NFUlQobV9zY3JvbGxMYXllcik7CisgICAgbV9z
Y3JvbGxMYXllci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKE5pY29z
aWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKKyAgICAgICAgICAgIHN0
YXRlLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgRmxv
YXRSZWN0IHZpc2libGVDb250ZW50UmVjdChzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsYWJsZUFyZWFT
aXplKCkpOworICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdDsKKyAgICBTY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCA9IFN0aWNrVG9WaWV3cG9ydEJv
dW5kczsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkudmlzdWFsVmlld3BvcnRFbmFibGVkKCkp
CisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0gbGF5b3V0Vmlld3BvcnQ7CisgICAgZWxzZSB7
CisgICAgICAgIGJlaGF2aW9yRm9yRml4ZWQgPSBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMoKTsKKworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJl
biA9IEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKGVuY2xvc2luZ0xh
eW91dFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KSwgTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6
ZSgpKSwKKyAgICAgICAgICAgIExheW91dFBvaW50KHNjcm9sbFBvc2l0aW9uKSwgc2Nyb2xsT3Jp
Z2luKCksIGZyYW1lU2NhbGVGYWN0b3IoKSwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9G
cmFtZSgpLCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkp
OworCisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0geyBzY3JvbGxQb3NpdGlvbkZvckZpeGVk
Q2hpbGRyZW4sIHZpc2libGVDb250ZW50UmVjdC5zaXplKCkgfTsKKyAgICB9CisKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQgPSB0aGlzLT50b3BDb250ZW50SW5zZXQoKTsKKyAgICBpZiAobV9p
bnNldENsaXBMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiB0b3BDb250ZW50SW5z
ZXQpIHsKKyAgICAgICAgLy8gVE9ETzogLi4uCisgICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4p
IHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAg
Y2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRp
b25SZWN0LCBGbG9hdFNpemUoKSk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjp1cGRhdGVMYXllcnNBZnRlclZpZXdw
b3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKQEAgLTcxLDQgKzE4OSw0IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnVw
ZGF0ZUxheWVyc0FmdGVyVmlld3BvCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oCmluZGV4IDY1MDg2Y2M5MmJkLi5iZTdiZDY3NmFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaApAQCAtMjcsMTAgKzI3
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MgZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZSB7CkBAIC00MSw2ICs0Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3Mo
U2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpOwogCisg
ICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9k
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNj
cm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgRmxvYXRQb2ludCBz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDksOCArNTQsMTYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlclZp
ZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Cisg
ICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2luc2V0Q2xpcExh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFk
b3dMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJM
YXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRp
bmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmNwcAppbmRleCAwMzIyZTY3NmE2OC4uOWVkNThlYTBiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCkBAIC0yOCw5ICsyOCwx
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzU0LDU5IEBAIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKQogICAgIHNjcm9sbGluZ1RyZWUo
KS5maXhlZE9yU3RpY2t5Tm9kZVJlbW92ZWQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGls
ZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKKyAgICBhdXRvJiBz
dGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlPihzdGF0ZU5vZGUp
OworCisgICAgaWYgKHN0aWNreU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
Tm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxh
eWVyID0gc3RpY2t5Tm9kZS5sYXllcigpOworICAgICAgICBtX3Njcm9sbExheWVyID0gZG93bmNh
c3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgIH0KKworICAgIGlmIChz
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZTo6Vmll
d3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBzdGlja3lOb2RlLnZp
ZXdwb3J0Q29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpCit2b2lkIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGlu
Z1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVj
dCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgYm9vbCBhZGp1c3RT
dGlja3lMYXllciA9IGZhbHNlOworICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0OworCisg
ICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkp
IHsKKyAgICAgICAgY29uc3RyYWluaW5nUmVjdCA9IEZsb2F0UmVjdChkb3duY2FzdDxTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqcGFyZW50KCkpLnNjcm9sbFBvc2l0aW9uKCks
IG1fY29uc3RyYWludHMuY29uc3RyYWluaW5nUmVjdEF0TGFzdExheW91dCgpLnNpemUoKSk7Cisg
ICAgICAgIGFkanVzdFN0aWNreUxheWVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGlzPFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkpIHsKKyAgICAgICAgY29uc3Ry
YWluaW5nUmVjdCA9IGZpeGVkUG9zaXRpb25SZWN0OworICAgICAgICBhZGp1c3RTdGlja3lMYXll
ciA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRTaXplIGRlbHRhRm9yRGVzY2VuZGFudHMgPSBj
dW11bGF0aXZlRGVsdGE7CisKKyAgICBpZiAoYWRqdXN0U3RpY2t5TGF5ZXIpIHsKKyAgICAgICAg
RmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9y
Q29uc3RyYWluaW5nUmVjdChjb25zdHJhaW5pbmdSZWN0KTsKKworICAgICAgICBBU1NFUlQobV9z
Y3JvbGxMYXllcik7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFjY2Vzc1N0YXRlKAorICAgICAg
ICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpM
YXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBh
bmNob3JQb2ludCA9IHN0YXRlLmFuY2hvclBvaW50OworICAgICAgICAgICAgICAgIGF1dG8mIHNp
emUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9
IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpCisgICAgICAg
ICAgICAgICAgICAgICsgRmxvYXRQb2ludChhbmNob3JQb2ludC54KCkgKiBzaXplLndpZHRoKCks
IGFuY2hvclBvaW50LnkoKSAqIHNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHN0YXRl
LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgc3RhdGUuZGVsdGEucG9zaXRp
b25DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGRlbHRhRm9yRGVz
Y2VuZGFudHMgPSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRM
YXN0TGF5b3V0KCkgKyBjdW11bGF0aXZlRGVsdGE7CisgICAgfQorCisgICAgaWYgKG1fY2hpbGRy
ZW4pIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAg
ICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZp
eGVkUG9zaXRpb25SZWN0LCBkZWx0YUZvckRlc2NlbmRhbnRzKTsKKyAgICB9CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCmluZGV4IGYzMTMz
YTcwOGM3Li5lYjE4ZjRjZWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgogCisj
aW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUg
ZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgewpAQCAtNDMsOCArNDYsMTEgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
bmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0
b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJh
aW50cyBtX2NvbnN0cmFpbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZQppbmRleCA0YjQ5OTYyMzYwYS4uM2NkMGNlMmU2YzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtNTQsNiArNTQsNyBAQCBp
ZiAoVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL05pY29zaWFQYWludGluZ0VuZ2luZVRocmVhZGVkLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZS5jcHAKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5jcHAKIAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQ
YWludGluZ0NvbnRleHRDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaAppbmRl
eCA3ODBhY2ViNzI3NC4uMzQ0NmY2YjkxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVy
LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJOaWNvc2lh
U2NlbmVJbnRlZ3JhdGlvbi5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bi5oPgpAQCAtNTIsNiArNTMsMjcgQEAgcHVibGljOgogCiAgICAgdWludDY0X3QgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CiAKKyAgICB2b2lkIHNldFNjZW5lSW50ZWdyYXRpb24oUmVmUHRy
PFNjZW5lSW50ZWdyYXRpb24+JiYgc2NlbmVJbnRlZ3JhdGlvbikKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fc3RhdGUubG9jayk7CisgICAgICAgIG1fc3RhdGUuc2NlbmVJbnRl
Z3JhdGlvbiA9IFdURk1vdmUoc2NlbmVJbnRlZ3JhdGlvbik7CisgICAgfQorCisgICAgc3RkOjp1
bmlxdWVfcHRyPFNjZW5lSW50ZWdyYXRpb246OlVwZGF0ZVNjb3BlPiBjcmVhdGVVcGRhdGVTY29w
ZSgpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3N0YXRlLmxvY2spOworICAg
ICAgICBpZiAobV9zdGF0ZS5zY2VuZUludGVncmF0aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1f
c3RhdGUuc2NlbmVJbnRlZ3JhdGlvbi0+Y3JlYXRlVXBkYXRlU2NvcGUoKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCByZXF1ZXN0VXBkYXRlKCkKKyAgICB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RhdGUubG9jayk7CisgICAgICAgIGlmIChtX3N0
YXRlLnNjZW5lSW50ZWdyYXRpb24pCisgICAgICAgICAgICBtX3N0YXRlLnNjZW5lSW50ZWdyYXRp
b24tPnJlcXVlc3RVcGRhdGUoKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBQ
bGF0Zm9ybUxheWVyKHVpbnQ2NF90KTsKIApAQCAtNTksNiArODEsNyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBzdHJ1Y3QgewogICAgICAgICBMb2NrIGxvY2s7CisgICAgICAgIFJlZlB0cjxTY2VuZUlu
dGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uOwogICAgIH0gbV9zdGF0ZTsKIH07CiAKQEAgLTE3
Myw2ICsxOTYsMjQgQEAgcHVibGljOgogICAgICAgICB9IGRlYnVnQm9yZGVyOwogICAgIH07CiAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYWNjZXNzU3RhdGUoY29uc3QgVCYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKFBsYXRmb3JtTGF5ZXI6
Om1fc3RhdGUubG9jayk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5wZW5kaW5nKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYWNjZXNzU3RhdGVBbmRVcGRh
dGUoY29uc3QgVCYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKFBs
YXRmb3JtTGF5ZXI6Om1fc3RhdGUubG9jayk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS5wZW5k
aW5nKTsKKworICAgICAgICBhdXRvJiBzY2VuZUludGVncmF0aW9uID0gUGxhdGZvcm1MYXllcjo6
bV9zdGF0ZS5zY2VuZUludGVncmF0aW9uOworICAgICAgICBpZiAoc2NlbmVJbnRlZ3JhdGlvbikK
KyAgICAgICAgICAgIHNjZW5lSW50ZWdyYXRpb24tPnJlcXVlc3RVcGRhdGUoKTsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgVCYg
ZnVuY3RvcikKICAgICB7CkBAIC0xODAsNiArMjIxLDkyIEBAIHB1YmxpYzoKICAgICAgICAgZnVu
Y3RvcihtX3N0YXRlLnBlbmRpbmcpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCBmbHVzaFN0YXRlKGNvbnN0IFQmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihQbGF0Zm9ybUxheWVyOjptX3N0YXRlLmxvY2spOworICAgICAgICBh
dXRvJiBwZW5kaW5nID0gbV9zdGF0ZS5wZW5kaW5nOworICAgICAgICBhdXRvJiBzdGFnaW5nID0g
bV9zdGF0ZS5zdGFnaW5nOworCisgICAgICAgIHN0YWdpbmcuZGVsdGEudmFsdWUgfD0gcGVuZGlu
Zy5kZWx0YS52YWx1ZTsKKworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5wb3NpdGlvbkNoYW5n
ZWQpCisgICAgICAgICAgICBzdGFnaW5nLnBvc2l0aW9uID0gcGVuZGluZy5wb3NpdGlvbjsKKyAg
ICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuYW5jaG9yUG9pbnRDaGFuZ2VkKQorICAgICAgICAgICAg
c3RhZ2luZy5hbmNob3JQb2ludCA9IHBlbmRpbmcuYW5jaG9yUG9pbnQ7CisgICAgICAgIGlmIChw
ZW5kaW5nLmRlbHRhLnNpemVDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5zaXplID0gcGVu
ZGluZy5zaXplOworCisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLnRyYW5zZm9ybUNoYW5nZWQp
CisgICAgICAgICAgICBzdGFnaW5nLnRyYW5zZm9ybSA9IHBlbmRpbmcudHJhbnNmb3JtOworICAg
ICAgICBpZiAocGVuZGluZy5kZWx0YS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAg
ICAgICBzdGFnaW5nLmNoaWxkcmVuVHJhbnNmb3JtID0gcGVuZGluZy5jaGlsZHJlblRyYW5zZm9y
bTsKKworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5jb250ZW50c1JlY3RDaGFuZ2VkKQorICAg
ICAgICAgICAgc3RhZ2luZy5jb250ZW50c1JlY3QgPSBwZW5kaW5nLmNvbnRlbnRzUmVjdDsKKyAg
ICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuY29udGVudHNUaWxpbmdDaGFuZ2VkKSB7CisgICAgICAg
ICAgICBzdGFnaW5nLmNvbnRlbnRzVGlsZVBoYXNlID0gcGVuZGluZy5jb250ZW50c1RpbGVQaGFz
ZTsKKyAgICAgICAgICAgIHN0YWdpbmcuY29udGVudHNUaWxlU2l6ZSA9IHBlbmRpbmcuY29udGVu
dHNUaWxlU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLm9wYWNp
dHlDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5vcGFjaXR5ID0gcGVuZGluZy5vcGFjaXR5
OworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5zb2xpZENvbG9yQ2hhbmdlZCkKKyAgICAgICAg
ICAgIHN0YWdpbmcuc29saWRDb2xvciA9IHBlbmRpbmcuc29saWRDb2xvcjsKKworICAgICAgICBp
ZiAocGVuZGluZy5kZWx0YS5maWx0ZXJzQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuZmls
dGVycyA9IHBlbmRpbmcuZmlsdGVyczsKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuYW5pbWF0
aW9uc0NoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLmFuaW1hdGlvbnMgPSBwZW5kaW5nLmFu
aW1hdGlvbnM7CisKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuY2hpbGRyZW5DaGFuZ2VkKQor
ICAgICAgICAgICAgc3RhZ2luZy5jaGlsZHJlbiA9IHBlbmRpbmcuY2hpbGRyZW47CisgICAgICAg
IGlmIChwZW5kaW5nLmRlbHRhLm1hc2tDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5tYXNr
ID0gcGVuZGluZy5tYXNrOworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5yZXBsaWNhQ2hhbmdl
ZCkKKyAgICAgICAgICAgIHN0YWdpbmcucmVwbGljYSA9IHBlbmRpbmcucmVwbGljYTsKKworICAg
ICAgICBpZiAocGVuZGluZy5kZWx0YS5mbGFnc0NoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5n
LmZsYWdzLnZhbHVlID0gcGVuZGluZy5mbGFncy52YWx1ZTsKKworICAgICAgICBpZiAocGVuZGlu
Zy5kZWx0YS5yZXBhaW50Q291bnRlckNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLnJlcGFp
bnRDb3VudGVyID0gcGVuZGluZy5yZXBhaW50Q291bnRlcjsKKyAgICAgICAgaWYgKHBlbmRpbmcu
ZGVsdGEuZGVidWdCb3JkZXJDaGFuZ2VkKQorICAgICAgICAgICAgc3RhZ2luZy5kZWJ1Z0JvcmRl
ciA9IHBlbmRpbmcuZGVidWdCb3JkZXI7CisKKyAgICAgICAgaWYgKHBlbmRpbmcuZGVsdGEuY29u
dGVudExheWVyQ2hhbmdlZCkKKyAgICAgICAgICAgIHN0YWdpbmcuY29udGVudExheWVyID0gcGVu
ZGluZy5jb250ZW50TGF5ZXI7CisgICAgICAgIGlmIChwZW5kaW5nLmRlbHRhLmJhY2tpbmdTdG9y
ZUNoYW5nZWQpCisgICAgICAgICAgICBzdGFnaW5nLmJhY2tpbmdTdG9yZSA9IHBlbmRpbmcuYmFj
a2luZ1N0b3JlOworICAgICAgICBpZiAocGVuZGluZy5kZWx0YS5pbWFnZUJhY2tpbmdDaGFuZ2Vk
KQorICAgICAgICAgICAgc3RhZ2luZy5pbWFnZUJhY2tpbmcgPSBwZW5kaW5nLmltYWdlQmFja2lu
ZzsKKworICAgICAgICBwZW5kaW5nLmRlbHRhID0geyB9OworCisgICAgICAgIGZ1bmN0b3Ioc3Rh
Z2luZyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGNvbW1p
dFN0YXRlKGNvbnN0IFQmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBjb25zdCBMYXllclN0YXRl
JiBzdGF0ZSA9CisgICAgICAgICAgICBbdGhpc10geworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKFBsYXRmb3JtTGF5ZXI6Om1fc3RhdGUubG9jayk7CisgICAgICAgICAgICAgICAg
bV9zdGF0ZS5jb21taXR0ZWQgPSBtX3N0YXRlLnN0YWdpbmc7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zdGFnaW5nLmRlbHRhID0geyB9OworICAgICAgICAgICAgICAgIHJldHVybiBtX3N0YXRl
LmNvbW1pdHRlZDsKKyAgICAgICAgICAgIH0oKTsKKworICAgICAgICBmdW5jdG9yKHN0YXRlKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYWNjZXNzQ29tbWl0
dGVkKGNvbnN0IFQmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihQ
bGF0Zm9ybUxheWVyOjptX3N0YXRlLmxvY2spOworICAgICAgICBmdW5jdG9yKG1fc3RhdGUuY29t
bWl0dGVkKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ29tcG9zaXRpb25MYXllcih1aW50NjRf
dCwgY29uc3QgSW1wbDo6RmFjdG9yeSYpOwogCkBAIC0xODcsNiArMzE0LDggQEAgcHJpdmF0ZToK
IAogICAgIHN0cnVjdCB7CiAgICAgICAgIExheWVyU3RhdGUgcGVuZGluZzsKKyAgICAgICAgTGF5
ZXJTdGF0ZSBzdGFnaW5nOworICAgICAgICBMYXllclN0YXRlIGNvbW1pdHRlZDsKICAgICB9IG1f
c3RhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ODkyZTY2NGYxMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVNjZW5lSW50ZWdyYXRpb24uY3BwCkBAIC0wLDAgKzEsNDkgQEAKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJOaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5oIgorCituYW1lc3BhY2UgTmlj
b3NpYSB7CisKK1NjZW5lSW50ZWdyYXRpb246OlNjZW5lSW50ZWdyYXRpb24oQ2xpZW50JiBjbGll
bnQpCit7CisgICAgbV9jbGllbnQub2JqZWN0ID0gJmNsaWVudDsKK30KKworU2NlbmVJbnRlZ3Jh
dGlvbjo6flNjZW5lSW50ZWdyYXRpb24oKQoreworICAgIEFTU0VSVCghbV9jbGllbnQub2JqZWN0
KTsKK30KKwordm9pZCBTY2VuZUludGVncmF0aW9uOjppbnZhbGlkYXRlKCkKK3sKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2NsaWVudC5sb2NrKTsKKyAgICBtX2NsaWVudC5vYmplY3QgPSBudWxs
cHRyOworfQorCit2b2lkIFNjZW5lSW50ZWdyYXRpb246OnJlcXVlc3RVcGRhdGUoKQoreworICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fY2xpZW50LmxvY2spOworICAgIGlmIChtX2NsaWVudC5vYmpl
Y3QpCisgICAgICAgIG1fY2xpZW50Lm9iamVjdC0+cmVxdWVzdFVwZGF0ZSgpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8U2NlbmVJbnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU+IFNjZW5lSW50ZWdyYXRp
b246OmNyZWF0ZVVwZGF0ZVNjb3BlKCkKK3sKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxV
cGRhdGVTY29wZT4obWFrZVJlZigqdGhpcykpOworfQorCitTY2VuZUludGVncmF0aW9uOjpDbGll
bnQ6On5DbGllbnQoKSA9IGRlZmF1bHQ7CisKK1NjZW5lSW50ZWdyYXRpb246OlVwZGF0ZVNjb3Bl
OjpVcGRhdGVTY29wZShSZWY8U2NlbmVJbnRlZ3JhdGlvbj4mJiBzY2VuZUludGVncmF0aW9uKQor
ICAgIDogbV9zY2VuZUludGVncmF0aW9uKFdURk1vdmUoc2NlbmVJbnRlZ3JhdGlvbikpCisgICAg
LCBtX2xvY2tlcihtX3NjZW5lSW50ZWdyYXRpb24tPm1fY2xpZW50LmxvY2spCit7Cit9CisKK1Nj
ZW5lSW50ZWdyYXRpb246OlVwZGF0ZVNjb3BlOjp+VXBkYXRlU2NvcGUoKQoreworICAgIGF1dG8m
IHNjZW5lSW50ZWdyYXRpb25PYmogPSBtX3NjZW5lSW50ZWdyYXRpb24uZ2V0KCk7CisgICAgaWYg
KHNjZW5lSW50ZWdyYXRpb25PYmoubV9jbGllbnQub2JqZWN0KQorICAgICAgICBzY2VuZUludGVn
cmF0aW9uT2JqLm1fY2xpZW50Lm9iamVjdC0+cmVxdWVzdFVwZGF0ZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJmNTlmZDMzNmZhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lh
U2NlbmVJbnRlZ3JhdGlvbi5oCkBAIC0wLDAgKzEsNDUgQEAKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgTmlj
b3NpYSB7CisKK2NsYXNzIFNjZW5lSW50ZWdyYXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8U2NlbmVJbnRlZ3JhdGlvbj4geworcHVibGljOgorICAgIGNsYXNzIENsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVxdWVzdFVwZGF0ZSgpID0gMDsKKyAgICB9OworCisgICAgU2NlbmVJbnRlZ3JhdGlv
bihDbGllbnQmKTsKKyAgICB+U2NlbmVJbnRlZ3JhdGlvbigpOworCisgICAgdm9pZCBpbnZhbGlk
YXRlKCk7CisKKyAgICB2b2lkIHJlcXVlc3RVcGRhdGUoKTsKKworICAgIGNsYXNzIFVwZGF0ZVNj
b3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFVwZGF0ZVNjb3BlKFJlZjxTY2VuZUludGVncmF0
aW9uPiYmKTsKKyAgICAgICAgflVwZGF0ZVNjb3BlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWY8U2NlbmVJbnRlZ3JhdGlvbj4gbV9zY2VuZUludGVncmF0aW9uOworICAgICAgICBMb2Nr
SG9sZGVyIG1fbG9ja2VyOworICAgIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VXBkYXRlU2Nv
cGU+IGNyZWF0ZVVwZGF0ZVNjb3BlKCk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IHsKKyAgICAg
ICAgTG9jayBsb2NrOworICAgICAgICBDbGllbnQqIG9iamVjdCB7IG51bGxwdHIgfTsKKyAgICB9
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBiZTIx
NjgwZmJkMi4uMTE2ZWVlYjY4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0zMCw3ICszMCwxMSBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgorI2luY2x1ZGUgIk5pY29zaWFCYWNraW5nU3Rv
cmVUZXh0dXJlTWFwcGVySW1wbC5oIgogI2luY2x1ZGUgIk5pY29zaWFDb21wb3NpdGlvbkxheWVy
VGV4dHVyZU1hcHBlckltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhSW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBl
ckltcGwuaCIKKyNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
Tmljb3NpYVBhaW50aW5nRW5naW5lLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKQEAgLTE2
MCw2ICsxNjQsOCBAQCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIoKQogICAgIH0KICAgICBBU1NFUlQoIW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcp
OwogICAgIEFTU0VSVCghbV9tYWluQmFja2luZ1N0b3JlKTsKKyAgICBBU1NFUlQoIW1fbmljb3Np
YS5pbWFnZUJhY2tpbmcpOworICAgIEFTU0VSVCghbV9uaWNvc2lhLmJhY2tpbmdTdG9yZSk7CiAg
ICAgd2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKQEAgLTIyOCw2ICsyMzQsMTcgQEAgdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCiAg
ICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKIH0KIAordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlmIChwb3NpdGlv
bigpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnN5bmNQb3Np
dGlvbihwKTsKKyAgICBtX25pY29zaWEuZGVsdGEucG9zaXRpb25DaGFuZ2VkID0gdHJ1ZTsKKyAg
ICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKKyAgICBzZXRTaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCgpOworfQorCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9y
UG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQogewogICAgIGlmIChhbmNob3JQb2ludCgpID09
IHApCkBAIC00MjEsOCArNDM4LDEzIEBAIGJvb2wgR3JhcGhpY3NMYXllcjo6c3VwcG9ydHNDb250
ZW50c1RpbGluZygpCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNO
ZWVkc0Rpc3BsYXkoKQogewogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkK
KyNpZiBVU0UoTklDT1NJQSkKKyAgICBpZiAobV9uaWNvc2lhLmNvbnRlbnRMYXllcikKKyAgICAg
ICAgbV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyID0gdHJ1ZTsKKyNlbHNlCiAgICAgaWYgKG1f
cGxhdGZvcm1MYXllcikKICAgICAgICAgbV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyID0gdHJ1
ZTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICBub3RpZnlGbHVzaFJlcXVpcmVkKCk7CkBAIC00MzMs
NiArNDU1LDEzIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
UGxhdGZvcm1MYXllcihQbGF0Zm9ybUxheWVyKiBwbGF0Zm9yCiB7CiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTX1RIUkVBREVEKQogI2lmIFVTRShOSUNPU0lBKQorICAgIGF1dG8qIGNvbnRl
bnRMYXllciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllcj4ocGxhdGZvcm1MYXllcik7
CisgICAgaWYgKG1fbmljb3NpYS5jb250ZW50TGF5ZXIgIT0gY29udGVudExheWVyKSB7CisgICAg
ICAgIG1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIgPSB0cnVlOworICAgICAgICBtX25pY29zaWEu
ZGVsdGEuY29udGVudExheWVyQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgbV9uaWNvc2lh
LmNvbnRlbnRMYXllciA9IGNvbnRlbnRMYXllcjsKICNlbHNlCiAgICAgaWYgKG1fcGxhdGZvcm1M
YXllciAhPSBwbGF0Zm9ybUxheWVyKQogICAgICAgICBtX3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVy
ID0gdHJ1ZTsKQEAgLTY3Nyw2ICs3MDYsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c3luY0ltYWdlQmFja2luZygpCiAgICAgICAgIG1fbGF5ZXJTdGF0ZS5pbWFnZUNoYW5nZWQg
PSB0cnVlOwogICAgIH0gZWxzZQogICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQo
KTsKKwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUo
KQpAQCAtNzk4LDYgKzgyOCw2OCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCiAgICAgaWYgKCFoYXNBY3RpdmVU
cmFuc2Zvcm1BbmltYXRpb24pCiAgICAgICAgIG1fbW92aW5nVmlzaWJsZVJlY3QgPSBmYWxzZTsK
IAorICAgIGlmIChtX25pY29zaWEuY29udGVudExheWVyKQorICAgICAgICBkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhLmNvbnRlbnRMYXll
ci0+aW1wbCgpKS5zd2FwQnVmZmVyc0lmTmVlZGVkKCk7CisKKyAgICBpZiAoIXNob3VsZEhhdmVC
YWNraW5nU3RvcmUoKSkgeworICAgICAgICBpZiAobV9uaWNvc2lhLmJhY2tpbmdTdG9yZSkgewor
ICAgICAgICAgICAgYXV0byYgbGF5ZXJTdGF0ZSA9IGRvd25jYXN0PE5pY29zaWE6OkJhY2tpbmdT
dG9yZVRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWEuYmFja2luZ1N0b3JlLT5pbXBsKCkpLmxh
eWVyU3RhdGUoKTsKKyAgICAgICAgICAgIGxheWVyU3RhdGUuaXNQdXJnaW5nID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAg
ICAgICBsYXllclN0YXRlLnByZXZpb3VzQmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKworICAgICAg
ICAgICAgbV9uaWNvc2lhLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgICAgICAgICBtX25p
Y29zaWEuZGVsdGEuYmFja2luZ1N0b3JlQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIW1fbmljb3NpYS5iYWNraW5nU3RvcmUpIHsKKyAgICAgICAg
ICAgIG1fbmljb3NpYS5iYWNraW5nU3RvcmUgPSBOaWNvc2lhOjpCYWNraW5nU3RvcmU6OmNyZWF0
ZShOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgp
KTsKKyAgICAgICAgICAgIG1fbmljb3NpYS5kZWx0YS5iYWNraW5nU3RvcmVDaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
cikgeworICAgICAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2UpOworICAgICAgICBhdXRvJiBp
bWFnZSA9ICptX2NvbXBvc2l0ZWRJbWFnZTsKKyAgICAgICAgdWludHB0cl90IGltYWdlSUQgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oJmltYWdlKTsKKyAgICAgICAgdWludHB0cl90IG5h
dGl2ZUltYWdlSUQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9jb21wb3NpdGVkTmF0
aXZlSW1hZ2VQdHIuZ2V0KCkpOworCisgICAgICAgIGlmIChtX25pY29zaWEuaW1hZ2VCYWNraW5n
KSB7CisgICAgICAgICAgICBhdXRvJiBpbXBsID0gZG93bmNhc3Q8Tmljb3NpYTo6SW1hZ2VCYWNr
aW5nVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYS5pbWFnZUJhY2tpbmctPmltcGwoKSk7Cisg
ICAgICAgICAgICBpZiAoaW1wbC5sYXllclN0YXRlKCkuaW1hZ2VJRCAhPSBpbWFnZUlEKSB7Cisg
ICAgICAgICAgICAgICAgaW1wbC5sYXllclN0YXRlKCkudXBkYXRlID0gTmljb3NpYTo6SW1hZ2VC
YWNraW5nVGV4dHVyZU1hcHBlckltcGw6OlVwZGF0ZSB7IH07CisgICAgICAgICAgICAgICAgbV9u
aWNvc2lhLmltYWdlQmFja2luZyA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFtX25pY29zaWEuaW1hZ2VCYWNraW5nKSB7CisgICAgICAgICAgICBtX25p
Y29zaWEuaW1hZ2VCYWNraW5nID0gTmljb3NpYTo6SW1hZ2VCYWNraW5nOjpjcmVhdGUoTmljb3Np
YTo6SW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKSk7CisgICAg
ICAgICAgICBtX25pY29zaWEuZGVsdGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBhdXRvJiBpbXBsID0gZG93bmNhc3Q8Tmljb3NpYTo6SW1hZ2VCYWNr
aW5nVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYS5pbWFnZUJhY2tpbmctPmltcGwoKSk7Cisg
ICAgICAgIGF1dG8mIGxheWVyU3RhdGUgPSBpbXBsLmxheWVyU3RhdGUoKTsKKyAgICAgICAgbGF5
ZXJTdGF0ZS5pbWFnZUlEID0gaW1hZ2VJRDsKKyAgICAgICAgbGF5ZXJTdGF0ZS51cGRhdGUuaXNW
aXNpYmxlID0gdHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpLmludGVyc2VjdHMoSW50UmVjdChjb250
ZW50c1JlY3QoKSkpOworICAgICAgICBpZiAobGF5ZXJTdGF0ZS51cGRhdGUuaXNWaXNpYmxlICYm
IGxheWVyU3RhdGUubmF0aXZlSW1hZ2VJRCAhPSBuYXRpdmVJbWFnZUlEKSB7CisgICAgICAgICAg
ICBhdXRvIGJ1ZmZlciA9IE5pY29zaWE6OkJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoaW1hZ2Uuc2l6
ZSgpKSwKKyAgICAgICAgICAgICAgICAhaW1hZ2UuY3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVl
KCkgPyBOaWNvc2lhOjpCdWZmZXI6OlN1cHBvcnRzQWxwaGEgOiBOaWNvc2lhOjpCdWZmZXI6Ok5v
RmxhZ3MpOworICAgICAgICAgICAgTmljb3NpYTo6UGFpbnRpbmdDb250ZXh0OjpwYWludChidWZm
ZXIsCisgICAgICAgICAgICAgICAgWyZpbWFnZV0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgeyB9
LCBJbnRTaXplIHsgaW1hZ2Uuc2l6ZSgpIH0gfTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5kcmF3SW1hZ2UoaW1hZ2UsIHJlY3QsIHJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKENvbXBv
c2l0ZUNvcHkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGxheWVyU3RhdGUu
bmF0aXZlSW1hZ2VJRCA9IG5hdGl2ZUltYWdlSUQ7CisgICAgICAgICAgICBsYXllclN0YXRlLnVw
ZGF0ZS5idWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcik7CisgICAgICAgICAgICBtX25pY29zaWEuZGVs
dGEuaW1hZ2VCYWNraW5nQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KG1fbmljb3NpYS5pbWFnZUJhY2tpbmcpIHsKKyAgICAgICAgYXV0byYgaW1wbCA9IGRvd25jYXN0
PE5pY29zaWE6OkltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWEuaW1hZ2VC
YWNraW5nLT5pbXBsKCkpOworICAgICAgICBpbXBsLmxheWVyU3RhdGUoKS51cGRhdGUgPSBOaWNv
c2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1wbDo6VXBkYXRlIHsgfTsKKyAgICAgICAg
bV9uaWNvc2lhLmltYWdlQmFja2luZyA9IG51bGxwdHI7CisgICAgICAgIG1fbmljb3NpYS5kZWx0
YS5pbWFnZUJhY2tpbmdDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKICAgICB7CiAgICAgICAgIG1f
bmljb3NpYS5sYXllci0+dXBkYXRlU3RhdGUoCiAgICAgICAgICAgICBbdGhpc10oTmljb3NpYTo6
Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZSYgc3RhdGUpCkBAIC04NTQsNiArOTQ2LDEzIEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JU
aGlzTGF5ZXJPbmx5KCkKICAgICAgICAgICAgICAgICAgICAgc3RhdGUucmVwbGljYSA9IHJlcGxp
Y2EgPyByZXBsaWNhLT5tX25pY29zaWEubGF5ZXIgOiBudWxscHRyOwogICAgICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgICAgIGlmIChsb2NhbERlbHRhLmNvbnRlbnRMYXllckNoYW5nZWQp
CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbnRlbnRMYXllciA9IG1fbmljb3NpYS5jb250
ZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgaWYgKGxvY2FsRGVsdGEuYmFja2luZ1N0b3JlQ2hh
bmdlZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuYmFja2luZ1N0b3JlID0gbV9uaWNvc2lh
LmJhY2tpbmdTdG9yZTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWxEZWx0YS5pbWFnZUJhY2tp
bmdDaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pbWFnZUJhY2tpbmcgPSBtX25p
Y29zaWEuaW1hZ2VCYWNraW5nOworCiAgICAgICAgICAgICAgICAgaWYgKGxvY2FsRGVsdGEuZmxh
Z3NDaGFuZ2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzLmNvbnRlbnRzT3Bh
cXVlID0gY29udGVudHNPcGFxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3Mu
ZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7CkBAIC04NjgsMTYgKzk2NywxOCBAQCB2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpCiAgICAgICAgICAgICAgICAgaWYgKGxvY2FsRGVsdGEuZGVidWdCb3JkZXJDaGFu
Z2VkKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5kZWJ1Z0JvcmRlciA9IG1fbmljb3NpYS5k
ZWJ1Z0JvcmRlcjsKICAgICAgICAgICAgIH0pOworICAgICAgICBtX25pY29zaWEucGVyZm9ybUxh
eWVyU3luYyA9ICEhbV9uaWNvc2lhLmRlbHRhLnZhbHVlOwogICAgICAgICBtX25pY29zaWEuZGVs
dGEgPSB7IH07CiAgICAgfQogfQogCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3lu
Y1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKQogewotICAgIGlmIChtX2xh
eWVyU3RhdGUuaGFzUGVuZGluZ0NoYW5nZXMoKSkgeworICAgIGlmIChtX25pY29zaWEucGVyZm9y
bUxheWVyU3luYyB8fCBtX2xheWVyU3RhdGUuaGFzUGVuZGluZ0NoYW5nZXMoKSkgewogICAgICAg
ICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVyU3RhdGUpOwogICAg
ICAgICByZXNldExheWVyU3RhdGUoKTsKICAgICB9CisgICAgbV9uaWNvc2lhLnBlcmZvcm1MYXll
clN5bmMgPSBmYWxzZTsKIAogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgZG93bmNhc3Q8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPigqbWFza0xheWVyKCkpLnN5bmNQZW5kaW5nU3RhdGVD
aGFuZ2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CkBAIC05MjMsMjcgKzEwMjQsNiBAQCBmbG9hdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQogICAgIHJl
dHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgPyAxIDogZGV2aWNl
U2NhbGVGYWN0b3IoKSAqIHBhZ2VTY2FsZUZhY3RvcigpOwogfQogCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCi17Ci0gICAgQVNTRVJUKHNob3Vs
ZEhhdmVCYWNraW5nU3RvcmUoKSk7Ci0gICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9t
YWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2Fs
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcg
YmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcgdGhlIGNvbnRlbnQsCi0gICAgLy8gd2UgZG8gbm90
IHdhbnQgdG8gZHJvcCB0aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCi0g
ICAgLy8gYnJpZWZseSBzZWVpbmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBk
cm9wcGVkIGJlZm9yZQotICAgIC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgotICAgIG1fcHJl
dmlvdXNCYWNraW5nU3RvcmUgPSBXVEZNb3ZlKG1fbWFpbkJhY2tpbmdTdG9yZSk7Ci0KLSAgICAv
LyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZp
c2libGUgYXJlYXMuCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlz
aWJsZVRpbGVzKHRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKSwgSW50UmVjdCgwLCAwLCBzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9
IHN0ZDo6bWFrZV91bmlxdWU8VGlsZWRCYWNraW5nU3RvcmU+KCp0aGlzLCBlZmZlY3RpdmVDb250
ZW50c1NjYWxlKCkpOwotfQotCiB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKIHsKICAgICBzZXROZWVkc1Zpc2li
bGVSZWN0QWRqdXN0bWVudCgpOwpAQCAtMTAxMSwxMiArMTA5MSwxMyBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpCiB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJMYXll
cnMoKQogewogICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sgPSBkb3duY2Fz
dDxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KG1hc2tMYXllcigpKSkKLSAgICAgICAgbWFzay0+
dXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICAgICAgbWFzay0+dXBkYXRlQ29udGVudEJ1ZmZl
cnMyKCk7CiAKICAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiByZXBsaWNhID0gZG93
bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPihyZXBsaWNhTGF5ZXIoKSkpCi0gICAgICAg
IHJlcGxpY2EtPnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgICAgIHJlcGxpY2EtPnVwZGF0
ZUNvbnRlbnRCdWZmZXJzMigpOwogCi0gICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICAv
LyB1cGRhdGVDb250ZW50QnVmZmVycygpOworICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzMigpOwog
CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKCkpCiAgICAgICAgIGRvd25jYXN0PENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcj4oKmNoaWxkKS51cGRhdGVDb250ZW50QnVmZmVyc0luY2x1
ZGluZ1N1YkxheWVycygpOwpAQCAtMTAzMSwxNCArMTExMiwyMiBAQCB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQogICAgIH0KIAogICAgIGlmICht
X3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCkgewotICAgICAgICBhZGp1c3RDb250ZW50
c1NjYWxlKCk7CisgICAgICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUgJiYgbV9tYWluQmFja2lu
Z1N0b3JlLT5jb250ZW50c1NjYWxlKCkgIT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKSB7Cisg
ICAgICAgICAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQg
cGFpbnRpbmcgdGhlIGNvbnRlbnQsICB3ZSBkbyBub3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8g
ZHJvcCB0aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGJyaWVmbHkgc2Vl
aW5nIGZsaWNrZXJpbmcKKyAgICAgICAgICAgIC8vIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRy
b3BwZWQgYmVmb3JlIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgorICAgICAgICAgICAgbV9wcmV2
aW91c0JhY2tpbmdTdG9yZSA9IFdURk1vdmUobV9tYWluQmFja2luZ1N0b3JlKTsKKworICAgICAg
ICAgICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9y
IG5vbi12aXNpYmxlIGFyZWFzLgorICAgICAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS0+
cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKHRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKSwgSW50UmVj
dCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIH0KICAg
ICAgICAgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgPSBmYWxzZTsKICAgICB9CiAK
ICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGls
ZWQgYmFja2luZyBzdG9yZSwgb25jZSB3ZQogICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFu
ZCB3ZSBhcmUgcmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KICAgICBp
ZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSkgewotICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsK
KyAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxUaWxlZEJhY2tp
bmdTdG9yZT4oKnRoaXMsIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7CiAgICAgICAgIG1fcGVu
ZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA9IHRydWU7CiAgICAgfQogCkBAIC0xMTAwLDYgKzEx
ODksMTA3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVm
ZmVycygpCiAgICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBudWxscHRyOwogfQogCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMyKCkKK3sK
KyAgICBpZiAoIW1fbmljb3NpYS5iYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8mIGltcGwgPSBkb3duY2FzdDxOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVy
SW1wbD4obV9uaWNvc2lhLmJhY2tpbmdTdG9yZS0+aW1wbCgpKTsKKyAgICBhdXRvJiBsYXllclN0
YXRlID0gaW1wbC5sYXllclN0YXRlKCk7CisgICAgbGF5ZXJTdGF0ZS5pc0ZsdXNoaW5nID0gdHJ1
ZTsKKworICAgIGF1dG8gZmluaXNoVXBkYXRlID0KKyAgICAgICAgW3RoaXMsICZsYXllclN0YXRl
XSB7CisgICAgICAgICAgICBhdXRvJiB1cGRhdGUgPSBsYXllclN0YXRlLnVwZGF0ZTsKKyAgICAg
ICAgICAgIG1fbmljb3NpYS5wZXJmb3JtTGF5ZXJTeW5jID0gIXVwZGF0ZS50aWxlc1RvQ3JlYXRl
LmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICF1cGRhdGUudGlsZXNUb1JlbW92ZS5pc0Vt
cHR5KCkgfHwgIXVwZGF0ZS50aWxlc1RvVXBkYXRlLmlzRW1wdHkoKTsKKyAgICAgICAgICAgIGxh
eWVyU3RhdGUuaXNGbHVzaGluZyA9IGZhbHNlOworICAgICAgICB9OworCisgICAgaWYgKG1fcGVu
ZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50KSB7CisgICAgICAgIGlmIChsYXllclN0YXRlLm1h
aW5CYWNraW5nU3RvcmUgJiYgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1Nj
YWxlKCkgIT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKSB7CisgICAgICAgICAgICAvLyBCZXR3
ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcgdGhlIGNvbnRl
bnQsICB3ZSBkbyBub3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8gZHJvcCB0aGUgcHJldmlvdXMg
b25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluIGJyaWVmbHkgc2VlaW5nIGZsaWNrZXJpbmcKKyAg
ICAgICAgICAgIC8vIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlIHNvbWV0
aGluZyByZXBsYWNlcyB0aGVtLgorICAgICAgICAgICAgbGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tp
bmdTdG9yZSA9IFdURk1vdmUobGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlKTsKKworICAgICAg
ICAgICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9y
IG5vbi12aXNpYmxlIGFyZWFzLgorICAgICAgICAgICAgbGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tp
bmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKHRyYW5zZm9ybWVkVmlzaWJsZVJlY3Qo
KSwgSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIWxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZSkgeworICAgICAg
ICBsYXllclN0YXRlLm1haW5CYWNraW5nU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFRpbGVkQmFj
a2luZ1N0b3JlPihpbXBsLCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOworICAgICAgICBtX3Bl
bmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghbV9w
ZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50ICYmICFtX25lZWRzRGlzcGxheS5jb21wbGV0ZUxh
eWVyICYmIG1fbmVlZHNEaXNwbGF5LnJlY3RzLmlzRW1wdHkoKSkgeworICAgICAgICBmaW5pc2hV
cGRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9uZWVkc0Rpc3Bs
YXkuY29tcGxldGVMYXllcikgeworICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX25lZWRzRGlz
cGxheS5yZWN0cykKKyAgICAgICAgICAgIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+aW52
YWxpZGF0ZShJbnRSZWN0IHsgcmVjdCB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbGF5ZXJTdGF0
ZS5tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKHsgeyB9LCBJbnRTaXplIHsgbV9zaXplIH0g
fSk7CisKKyAgICBtX25lZWRzRGlzcGxheS5jb21wbGV0ZUxheWVyID0gZmFsc2U7CisgICAgbV9u
ZWVkc0Rpc3BsYXkucmVjdHMuY2xlYXIoKTsKKworICAgIGlmIChtX3BlbmRpbmdWaXNpYmxlUmVj
dEFkanVzdG1lbnQpIHsKKyAgICAgICAgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50ID0g
ZmFsc2U7CisgICAgICAgIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZXNJ
Zk5lZWRlZCh0cmFuc2Zvcm1lZFZpc2libGVSZWN0KCksIEludFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOworICAgIH0KKworICAgIEFTU0VSVChtX2Nvb3JkaW5h
dG9yICYmIG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7CisKKyAgICBh
dXRvIGRpcnR5VGlsZXMgPSBsYXllclN0YXRlLm1haW5CYWNraW5nU3RvcmUtPmRpcnR5VGlsZXMo
KTsKKyAgICBpZiAoIWRpcnR5VGlsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGJvb2wgZGlkVXBk
YXRlVGlsZXMgPSBmYWxzZTsKKworICAgICAgICBmb3IgKGF1dG8mIHRpbGVSZWZlcmVuY2UgOiBk
aXJ0eVRpbGVzKSB7CisgICAgICAgICAgICBhdXRvJiB0aWxlID0gdGlsZVJlZmVyZW5jZS5nZXQo
KTsKKyAgICAgICAgICAgIHRpbGUuZW5zdXJlVGlsZUlEKCk7CisKKyAgICAgICAgICAgIGF1dG8m
IHRpbGVSZWN0ID0gdGlsZS5yZWN0KCk7CisgICAgICAgICAgICBhdXRvJiBkaXJ0eVJlY3QgPSB0
aWxlLmRpcnR5UmVjdCgpOworCisgICAgICAgICAgICBhdXRvIGNvb3JkaW5hdGVkQnVmZmVyID0g
Tmljb3NpYTo6QnVmZmVyOjpjcmVhdGUoZGlydHlSZWN0LnNpemUoKSwgY29udGVudHNPcGFxdWUo
KSA/IE5pY29zaWE6OkJ1ZmZlcjo6Tm9GbGFncyA6IE5pY29zaWE6OkJ1ZmZlcjo6U3VwcG9ydHNB
bHBoYSk7CisgICAgICAgICAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgICAg
ICAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gZGlydHlSZWN0OworICAgICAgICAgICAgdXBk
YXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLXRpbGVSZWN0LngoKSwgLXRpbGVSZWN0LnkoKSk7Cisg
ICAgICAgICAgICB1cGRhdGVJbmZvLmJ1ZmZlciA9IGNvb3JkaW5hdGVkQnVmZmVyLmNvcHlSZWYo
KTsKKworICAgICAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdG9yLT5wYWludGluZ0VuZ2luZSgpLnBh
aW50KCp0aGlzLCBXVEZNb3ZlKGNvb3JkaW5hdGVkQnVmZmVyKSwKKyAgICAgICAgICAgICAgICBk
aXJ0eVJlY3QsIGxheWVyU3RhdGUubWFpbkJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhkaXJ0
eVJlY3QpLAorICAgICAgICAgICAgICAgIEludFJlY3QgeyB7IDAsIDAgfSwgZGlydHlSZWN0LnNp
emUoKSB9LCBsYXllclN0YXRlLm1haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGltcGwudXBkYXRlVGlsZSh0
aWxlLnRpbGVJRCgpLCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIHRpbGUu
bWFya0NsZWFuKCk7CisgICAgICAgICAgICBkaWRVcGRhdGVUaWxlcyB8PSB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGRpZFVwZGF0ZVRpbGVzKQorICAgICAgICAgICAgZGlkVXBkYXRl
VGlsZUJ1ZmZlcnMoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9y
ZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KKyAgICAvLyByZW1v
dmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZp
cnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92
ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZS4KKyAgICBpZiAobGF5ZXJTdGF0ZS5wcmV2aW91
c0JhY2tpbmdTdG9yZSAmJiBsYXllclN0YXRlLm1haW5CYWNraW5nU3RvcmUtPnZpc2libGVBcmVh
SXNDb3ZlcmVkKCkpCisgICAgICAgIGxheWVyU3RhdGUucHJldmlvdXNCYWNraW5nU3RvcmUgPSBu
dWxscHRyOworCisgICAgaWYgKGxheWVyU3RhdGUuaGFzUGVuZGluZ1RpbGVDcmVhdGlvbikgewor
ICAgICAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAgICAgICBub3RpZnlG
bHVzaFJlcXVpcmVkKCk7CisgICAgfQorICAgIGZpbmlzaFVwZGF0ZSgpOworfQorCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKICNpZm5kZWYg
TkRFQlVHCkBAIC0xMTA3LDYgKzEyOTcsMTQgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAjZW5kaWYKICAgICBtX21haW5CYWNraW5nU3RvcmUg
PSBudWxscHRyOwogICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIGlm
IChtX25pY29zaWEuYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGF1dG8mIGxheWVyU3RhdGUgPSBk
b3duY2FzdDxOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lh
LmJhY2tpbmdTdG9yZS0+aW1wbCgpKS5sYXllclN0YXRlKCk7CisgICAgICAgIGxheWVyU3RhdGUu
aXNQdXJnaW5nID0gdHJ1ZTsKKyAgICAgICAgbGF5ZXJTdGF0ZS5tYWluQmFja2luZ1N0b3JlID0g
bnVsbHB0cjsKKyAgICAgICAgbGF5ZXJTdGF0ZS5wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CisKKyAgICAgICAgbV9uaWNvc2lhLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgfQog
CiAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CiAKQEAgLTEzMjUsNiArMTUyMywx
MyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVy
RmlyZWQoKQogICAgIGNsaWVudCgpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgIiIsIG1f
bGFzdEFuaW1hdGlvblN0YXJ0VGltZSk7CiB9CiAKKyNpZiBVU0UoTklDT1NJQSkKK1BsYXRmb3Jt
TGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbmljb3NpYS5sYXllci5nZXQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgK
aW5kZXggOGI5ZjlhOTIyNzguLmU1ZjA0NDQwNGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC03Niw2ICs3Niw3IEBAIHB1
YmxpYzoKICAgICBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXll
ciopIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQg
c3luY1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEFu
Y2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwpAQCAtMTEwLDcgKzExMSwxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKSBvdmVycmlkZTsKLSAgICBib29sIHVzZXNDb250ZW50
c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyIHx8IG1fY29t
cG9zaXRlZEltYWdlOyB9CisgICAgYm9vbCB1c2VzQ29udGVudHNMYXllcigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllciB8fCBtX25pY29zaWEuY29udGVudExheWVyIHx8
IG1fY29tcG9zaXRlZEltYWdlOyB9CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKIAogICAgIHZvaWQg
c3luY1BlbmRpbmdTdGF0ZUNoYW5nZXNJbmNsdWRpbmdTdWJMYXllcnMoKTsKICAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CkBAIC0xNjAsOCArMTY1LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN5bmNJbWFnZUJhY2tpbmcoKTsKICAgICB2b2lkIGNvbXB1
dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CiAgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVy
cygpOworICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZlcnMyKCk7CiAKLSAgICB2b2lkIGNyZWF0
ZUJhY2tpbmdTdG9yZSgpOwogICAgIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7
CiAKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKQEAgLTE3MSw3ICsxNzYsNiBAQCBw
cml2YXRlOgogICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0OwogICAgIGJv
b2wgc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdDsKICAg
ICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKLSAgICB2b2lk
IGFkanVzdENvbnRlbnRzU2NhbGUoKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QoKTsKICAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7CkBAIC0yMzEsNiAr
MjM1LDExIEBAIHByaXZhdGU6CiAgICAgICAgIE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6Okxh
eWVyU3RhdGU6OkRlbHRhIGRlbHRhOwogICAgICAgICBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVy
OjpMYXllclN0YXRlOjpSZXBhaW50Q291bnRlciByZXBhaW50Q291bnRlcjsKICAgICAgICAgTmlj
b3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZTo6RGVidWdCb3JkZXIgZGVidWdCb3Jk
ZXI7CisgICAgICAgIGJvb2wgcGVyZm9ybUxheWVyU3luYyB7IGZhbHNlIH07CisKKyAgICAgICAg
UmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gY29udGVudExheWVyOworICAgICAgICBSZWZQ
dHI8Tmljb3NpYTo6QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmU7CisgICAgICAgIFJlZlB0cjxO
aWNvc2lhOjpJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKICAgICB9IG1fbmljb3NpYTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3Rh
dGUuaAppbmRleCA2Zjk2MjRmNGU1ZC4uMDI1YzFlYTQyZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKQEAgLTE3MSw5ICsxNzEs
MTEgQEAgc3RydWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIHsKIH07CiAKIHN0cnVj
dCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgeworI2lmIFVTRShOSUNPU0lBKQogICAgIHN0cnVj
dCBOaWNvc2lhU3RhdGUgewogICAgICAgICBSZWZQdHI8Tmljb3NpYTo6U2NlbmU+IHNjZW5lOwog
ICAgIH0gbmljb3NpYTsKKyNlbmRpZgogCiAgICAgdWludDMyX3Qgcm9vdENvbXBvc2l0aW5nTGF5
ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAppbmRleCBmZWEy
OGVhMGIwNi4uMGJkMWUxMTQ1NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5jcHAKQEAgLTI2LDYgKzI2LDEwIEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhQnVmZmVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhQmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGwuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFDb21wb3NpdGlvbkxheWVyVGV4dHVyZU1hcHBlcklt
cGwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBw
ZXJJbXBsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0dXJlTWFwcGVyR0wuaD4KQEAgLTU3LDIwICs2MSwxNyBAQCB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6YXBwbHlTdGF0ZUNoYW5nZXMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkR3Jh
cGhpYwogICAgIGVuc3VyZVJvb3RMYXllcigpOwogCiAgICAgZm9yIChhdXRvJiBzdGF0ZSA6IHN0
YXRlcykKLSAgICAgICAgY29tbWl0U2NlbmVTdGF0ZShzdGF0ZSk7CisgICAgICAgIGNvbW1pdFNj
ZW5lU3RhdGUoc3RhdGUubmljb3NpYSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0LCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yLCBib29sIGRyYXdzQmFja2dyb3VuZCwgVGV4dHVyZU1hcHBl
cjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQogeworICAgIHVwZGF0ZVNjZW5lU3RhdGUoKTsKKwog
ICAgIFRleHR1cmVNYXBwZXJMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwog
ICAgIGlmICghY3VycmVudFJvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotICAgIGZvciAoYXV0byYgcHJveHkgOiBtX3Bs
YXRmb3JtTGF5ZXJQcm94aWVzLnZhbHVlcygpKQotICAgICAgICBwcm94eS0+c3dhcEJ1ZmZlcigp
OwotI2VuZGlmCi0KICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4
dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgYm9vbCBzY2VuZUhhc1J1bm5pbmdBbmltYXRpb25zID0g
Y3VycmVudFJvb3RMYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoTW9ub3RvbmljVGlt
ZTo6bm93KCkpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdz
KTsKQEAgLTEwNCwyMyArMTA1LDYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVw
ZGF0ZVZpZXdwb3J0KCkKICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAK
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jUGxhdGZvcm1MYXllcklmTmVlZGVk
KFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
clN0YXRlJiBzdGF0ZSkKLXsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQp
Ci0gICAgaWYgKCFzdGF0ZS5wbGF0Zm9ybUxheWVyQ2hhbmdlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKHN0YXRlLnBsYXRmb3JtTGF5ZXJQcm94eSkgewotICAgICAgICBtX3BsYXRmb3Jt
TGF5ZXJQcm94aWVzLnNldChsYXllciwgc3RhdGUucGxhdGZvcm1MYXllclByb3h5KTsKLSAgICAg
ICAgc3RhdGUucGxhdGZvcm1MYXllclByb3h5LT5hY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQo
dGhpcywgbGF5ZXIpOwotICAgIH0gZWxzZQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94aWVz
LnJlbW92ZShsYXllcik7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShsYXllcik7Ci0gICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKLSNlbmRpZgotfQotCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTX1RIUkVBREVEKQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6Om9uTmV3QnVmZmVy
QXZhaWxhYmxlKCkKIHsKQEAgLTEyOCwzMjAgKzExMiwyOTAgQEAgdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6Om9uTmV3QnVmZmVyQXZhaWxhYmxlKCkKIH0KICNlbmRpZgogCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbklmTmVlZGVkKFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBz
dGF0ZSkKK05pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXJUZXh0dXJlTWFwcGVySW1wbCYgY29tcG9z
aXRpb25MYXllckltcGwoTmljb3NpYTo6Q29tcG9zaXRpb25MYXllciYgY29tcG9zaXRpb25MYXll
cikKIHsKLSAgICBpZiAoIXN0YXRlLmNoaWxkcmVuQ2hhbmdlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJMYXllcio+IGNoaWxkcmVuOwotICAgIGNoaWxkcmVu
LnJlc2VydmVDYXBhY2l0eShzdGF0ZS5jaGlsZHJlbi5zaXplKCkpOwotICAgIGZvciAoYXV0byYg
Y2hpbGQgOiBzdGF0ZS5jaGlsZHJlbikKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGxheWVyQnlJ
RChjaGlsZCkpOwotCi0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllclRleHR1cmVNYXBwZXJJbXBsPihj
b21wb3NpdGlvbkxheWVyLmltcGwoKSk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRMYXllckZpbHRlcnNJZk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBj
b25zdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCitOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbCYgY29udGVudExheWVySW1wbChOaWNvc2lhOjpDb250
ZW50TGF5ZXImIGNvbnRlbnRMYXllcikKIHsKLSAgICBpZiAoIXN0YXRlLmZpbHRlcnNDaGFuZ2Vk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0RmlsdGVycyhzdGF0ZS5maWx0ZXJz
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw+KGNvbnRlbnRMYXllci5pbXBsKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBsYXllclN0YXRlLCBDb21taXRTY29wZSYgY29tbWl0
U2NvcGUpCitOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbCYgYmFja2luZ1N0
b3JlSW1wbChOaWNvc2lhOjpCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSkKIHsKLSAgICBBU1NF
UlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLQotICAgIGlmIChsYXllclN0
YXRlLnBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVyU3Rh
dGUucG9zKTsKLQotICAgIGlmIChsYXllclN0YXRlLmFuY2hvclBvaW50Q2hhbmdlZCkKLSAgICAg
ICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVyU3RhdGUuYW5jaG9yUG9pbnQpOwotCi0gICAg
aWYgKGxheWVyU3RhdGUuc2l6ZUNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRTaXplKGxheWVy
U3RhdGUuc2l6ZSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkKQotICAg
ICAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVyU3RhdGUudHJhbnNmb3JtKTsKLQotICAgIGlm
IChsYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNl
dENoaWxkcmVuVHJhbnNmb3JtKGxheWVyU3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pOwotCi0gICAg
aWYgKGxheWVyU3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCkKLSAgICAgICAgbGF5ZXItPnNldENv
bnRlbnRzUmVjdChsYXllclN0YXRlLmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0
ZS5jb250ZW50c1RpbGluZ0NoYW5nZWQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVGls
ZVBoYXNlKGxheWVyU3RhdGUuY29udGVudHNUaWxlUGhhc2UpOwotICAgICAgICBsYXllci0+c2V0
Q29udGVudHNUaWxlU2l6ZShsYXllclN0YXRlLmNvbnRlbnRzVGlsZVNpemUpOwotICAgIH0KLQot
ICAgIGlmIChsYXllclN0YXRlLm9wYWNpdHlDaGFuZ2VkKQotICAgICAgICBsYXllci0+c2V0T3Bh
Y2l0eShsYXllclN0YXRlLm9wYWNpdHkpOwotCi0gICAgaWYgKGxheWVyU3RhdGUuc29saWRDb2xv
ckNoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRTb2xpZENvbG9yKGxheWVyU3RhdGUuc29saWRD
b2xvcik7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkKQotICAgICAg
ICBsYXllci0+c2V0RGVidWdWaXN1YWxzKGxheWVyU3RhdGUuZGVidWdWaXN1YWxzLnNob3dEZWJ1
Z0JvcmRlcnMsIGxheWVyU3RhdGUuZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVy
U3RhdGUuZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGgpOwotICAgIGlmIChsYXllclN0YXRl
LnJlcGFpbnRDb3VudENoYW5nZWQpCi0gICAgICAgIGxheWVyLT5zZXRSZXBhaW50Q291bnRlcihs
YXllclN0YXRlLnJlcGFpbnRDb3VudC5zaG93UmVwYWludENvdW50ZXIsIGxheWVyU3RhdGUucmVw
YWludENvdW50LmNvdW50KTsKLQotICAgIGlmIChsYXllclN0YXRlLnJlcGxpY2FDaGFuZ2VkKQot
ICAgICAgICBsYXllci0+c2V0UmVwbGljYUxheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVy
U3RhdGUucmVwbGljYSkpOwotCi0gICAgaWYgKGxheWVyU3RhdGUubWFza0NoYW5nZWQpCi0gICAg
ICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJTdGF0ZS5t
YXNrKSk7Ci0KLSAgICBpZiAobGF5ZXJTdGF0ZS5pbWFnZUNoYW5nZWQpCi0gICAgICAgIGFzc2ln
bkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVyU3RhdGUuaW1hZ2VJRCk7Ci0KLSAgICBp
ZiAobGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRz
T3BhcXVlKGxheWVyU3RhdGUuY29udGVudHNPcGFxdWUpOwotICAgICAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KGxheWVyU3RhdGUuZHJhd3NDb250ZW50KTsKLSAgICAgICAgbGF5ZXItPnNldENv
bnRlbnRzVmlzaWJsZShsYXllclN0YXRlLmNvbnRlbnRzVmlzaWJsZSk7Ci0gICAgICAgIGxheWVy
LT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJTdGF0ZS5iYWNrZmFjZVZpc2libGUpOwotCi0g
ICAgICAgIC8vIE5ldmVyIGNsaXAgdGhlIHJvb3QgbGF5ZXIuCi0gICAgICAgIGxheWVyLT5zZXRN
YXNrc1RvQm91bmRzKGlkID09IG1fcm9vdExheWVySUQgPyBmYWxzZSA6IGxheWVyU3RhdGUubWFz
a3NUb0JvdW5kcyk7Ci0gICAgICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllclN0YXRlLnBy
ZXNlcnZlczNEKTsKLSAgICB9Ci0KLSAgICAvLyBBcHBseSBPcGVyYXRpb25zLgotICAgIHNldExh
eWVyQ2hpbGRyZW5JZk5lZWRlZChsYXllciwgbGF5ZXJTdGF0ZSk7Ci0gICAgc2V0TGF5ZXJGaWx0
ZXJzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUpOwotICAgIHNldExheWVyQW5pbWF0aW9uc0lm
TmVlZGVkKGxheWVyLCBsYXllclN0YXRlKTsKLSAgICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9y
ZShsYXllciwgY29tbWl0U2NvcGUpOwotICAgIGNyZWF0ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxh
eWVyU3RhdGUpOwotICAgIHJlbW92ZVRpbGVzSWZOZWVkZWQobGF5ZXIsIGxheWVyU3RhdGUsIGNv
bW1pdFNjb3BlKTsKLSAgICB1cGRhdGVUaWxlc0lmTmVlZGVkKGxheWVyLCBsYXllclN0YXRlLCBj
b21taXRTY29wZSk7Ci0gICAgc3luY1BsYXRmb3JtTGF5ZXJJZk5lZWRlZChsYXllciwgbGF5ZXJT
dGF0ZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PE5pY29zaWE6OkJhY2tpbmdTdG9yZVRleHR1cmVN
YXBwZXJJbXBsPihiYWNraW5nU3RvcmUuaW1wbCgpKTsKIH0KIAotVGV4dHVyZU1hcHBlckxheWVy
KiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmdldExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCkKK05pY29zaWE6OkltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsJiBp
bWFnZUJhY2tpbmdJbXBsKE5pY29zaWE6OkltYWdlQmFja2luZyYgaW1hZ2VCYWNraW5nKQogewot
ICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkgPyBsYXllckJ5SUQo
aWQpIDogMDsKKyAgICByZXR1cm4gZG93bmNhc3Q8Tmljb3NpYTo6SW1hZ2VCYWNraW5nVGV4dHVy
ZU1hcHBlckltcGw+KGltYWdlQmFja2luZy5pbXBsKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Y3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+JiBsYXllcklEcykKK1RleHR1cmVNYXBwZXJMYXllciYgdGV4bWFwTGF5ZXIoTmljb3NpYTo6
Q29tcG9zaXRpb25MYXllciYgY29tcG9zaXRpb25MYXllcikKIHsKLSAgICBmb3IgKGF1dG8mIGxh
eWVySUQgOiBsYXllcklEcykKLSAgICAgICAgY3JlYXRlTGF5ZXIobGF5ZXJJRCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVy
SUQgaWQpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbmV3TGF5
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFRleHR1cmVNYXBwZXJMYXllcj4oKTsKLSAgICBuZXdMYXll
ci0+c2V0SUQoaWQpOwotICAgIG1fbGF5ZXJzLmFkZChpZCwgV1RGTW92ZShuZXdMYXllcikpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKLXsKLSAgICBmb3IgKGF1dG8mIGxh
eWVySUQgOiBsYXllcklEcykKLSAgICAgICAgZGVsZXRlTGF5ZXIobGF5ZXJJRCk7CisgICAgYXV0
byYgY29tcG9zaXRpb25TdGF0ZSA9IGNvbXBvc2l0aW9uTGF5ZXJJbXBsKGNvbXBvc2l0aW9uTGF5
ZXIpLmNvbXBvc2l0aW9uU3RhdGUoKTsKKyAgICBpZiAoIWNvbXBvc2l0aW9uU3RhdGUubGF5ZXIp
IHsKKyAgICAgICAgY29tcG9zaXRpb25TdGF0ZS5sYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8VGV4
dHVyZU1hcHBlckxheWVyPigpOworICAgICAgICBjb21wb3NpdGlvblN0YXRlLmxheWVyLT5zZXRJ
RChjb21wb3NpdGlvbkxheWVyLmlkKCkpOworICAgIH0KKyAgICByZXR1cm4gKmNvbXBvc2l0aW9u
U3RhdGUubGF5ZXI7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVM
YXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKK3ZvaWQgdXBkYXRlQmFja2luZ1N0b3Jl
KFRleHR1cmVNYXBwZXJMYXllciYgbGF5ZXIsCisgICAgTmljb3NpYTo6QmFja2luZ1N0b3JlVGV4
dHVyZU1hcHBlckltcGw6OkNvbXBvc2l0aW9uU3RhdGUmIGNvbXBvc2l0aW9uU3RhdGUsCisgICAg
Y29uc3QgTmljb3NpYTo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGw6OlRpbGVVcGRhdGUm
IHVwZGF0ZSkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckxheWVyPiBsYXll
ciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7Ci0gICAgQVNTRVJUKGxheWVyKTsKLQotICAgIG1f
YmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5ZXIuZ2V0KCkpOwotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19USFJFQURFRCkKLSAgICBpZiAoYXV0byBwbGF0Zm9ybUxheWVyUHJveHkgPSBtX3Bs
YXRmb3JtTGF5ZXJQcm94aWVzLnRha2UobGF5ZXIuZ2V0KCkpKQotICAgICAgICBwbGF0Zm9ybUxh
eWVyUHJveHktPmludmFsaWRhdGUoKTsKLSNlbmRpZgotfQorICAgIGlmICghbGF5ZXJTaG91bGRI
YXZlQmFja2luZ1N0b3JlKCZsYXllcikpIHsKKyAgICAgICAgbGF5ZXIuc2V0QmFja2luZ1N0b3Jl
KG51bGxwdHIpOworICAgICAgICBjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBB
U1NFUlQobGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBBU1NFUlQo
bV9yb290TGF5ZXJJRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBpZiAoIWNv
bXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlKQorICAgICAgICBjb21wb3NpdGlvblN0YXRlLmJh
Y2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICBhdXRv
JiBiYWNraW5nU3RvcmUgPSAqY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmU7CiAKLSAgICBt
X3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKKyAgICBsYXllci5zZXRCYWNraW5nU3RvcmUoJmJhY2tp
bmdTdG9yZSk7CisgICAgYmFja2luZ1N0b3JlLnNldFNpemUobGF5ZXIuc2l6ZSgpKTsKIAotICAg
IFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgQVNT
RVJUKG1fcm9vdExheWVyLT5jaGlsZHJlbigpLmlzRW1wdHkoKSk7Ci0gICAgbV9yb290TGF5ZXIt
PmFkZENoaWxkKGxheWVyKTsKKyAgICBmb3IgKGF1dG8mIHRpbGUgOiB1cGRhdGUudGlsZXNUb0Ny
ZWF0ZSkKKyAgICAgICAgYmFja2luZ1N0b3JlLmNyZWF0ZVRpbGUodGlsZS50aWxlSUQsIHRpbGUu
c2NhbGUpOworICAgIGZvciAoYXV0byYgdGlsZSA6IHVwZGF0ZS50aWxlc1RvUmVtb3ZlKQorICAg
ICAgICBiYWNraW5nU3RvcmUucmVtb3ZlVGlsZSh0aWxlLnRpbGVJRCk7CisgICAgZm9yIChhdXRv
JiB0aWxlIDogdXBkYXRlLnRpbGVzVG9VcGRhdGUpIHsKKyAgICAgICAgYmFja2luZ1N0b3JlLnVw
ZGF0ZVRpbGUodGlsZS50aWxlSUQsIHRpbGUudXBkYXRlSW5mby51cGRhdGVSZWN0LAorICAgICAg
ICAgICAgdGlsZS50aWxlUmVjdCwgdGlsZS51cGRhdGVJbmZvLmJ1ZmZlci5jb3B5UmVmKCksIHsg
MCwgMCB9KTsKKyAgICB9CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwcmVw
YXJlQ29udGVudEJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb21taXRT
Y29wZSYgY29tbWl0U2NvcGUpCit2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhUZXh0dXJlTWFwcGVy
TGF5ZXImIGxheWVyLAorICAgIE5pY29zaWE6OkltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBs
OjpDb21wb3NpdGlvblN0YXRlJiBjb21wb3NpdGlvblN0YXRlLAorICAgIE5pY29zaWE6OkltYWdl
QmFja2luZ1RleHR1cmVNYXBwZXJJbXBsOjpVcGRhdGUmIHVwZGF0ZSkKIHsKLSAgICBpZiAoIWxh
eWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShsYXllcikpIHsKLSAgICAgICAgcmVtb3ZlQmFja2lu
Z1N0b3JlSWZOZWVkZWQobGF5ZXIpOworICAgIGlmICghdXBkYXRlLmlzVmlzaWJsZSkgeworICAg
ICAgICBsYXllci5zZXRCYWNraW5nU3RvcmUobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChsYXllcik7Ci0gICAgcmVzZXRC
YWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIsIGNvbW1pdFNjb3BlKTsKLX0KKyAgICBp
ZiAoIWNvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlKQorICAgICAgICBjb21wb3NpdGlvblN0
YXRlLmJhY2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAg
ICBhdXRvJiBiYWNraW5nU3RvcmUgPSAqY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3RvcmU7Cisg
ICAgbGF5ZXIuc2V0Q29udGVudHNMYXllcigmYmFja2luZ1N0b3JlKTsKIAotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKG1fYmFja2luZ1N0b3Jlcy5jb250YWlucyhsYXll
cikpCisgICAgaWYgKCF1cGRhdGUuYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGJhY2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICBt
X2JhY2tpbmdTdG9yZXMuYWRkKGxheWVyLCBiYWNraW5nU3RvcmUuY29weVJlZigpKTsKLSAgICBs
YXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5wdHIoKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyKQotewotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLnRha2UobGF5ZXIpOwotICAgIGlmICgh
YmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0QmFja2luZ1N0
b3JlKG51bGxwdHIpOworICAgIGJhY2tpbmdTdG9yZS5jcmVhdGVUaWxlKDEsIDEuMCk7CisgICAg
V2ViQ29yZTo6SW50UmVjdCByZWN0IHsgeyB9LCB1cGRhdGUuYnVmZmVyLT5zaXplKCkgfTsKKyAg
ICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
KyAgICBiYWNraW5nU3RvcmUuc2V0U2l6ZShyZWN0LnNpemUoKSk7CisgICAgYmFja2luZ1N0b3Jl
LnVwZGF0ZVRpbGUoMSwgcmVjdCwgcmVjdCwgV1RGTW92ZSh1cGRhdGUuYnVmZmVyKSwgcmVjdC5s
b2NhdGlvbigpKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlc2V0QmFj
a2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIENvbW1p
dFNjb3BlJiBjb21taXRTY29wZSkKK3ZvaWQgcmVtb3ZlTGF5ZXIoTmljb3NpYTo6Q29tcG9zaXRp
b25MYXllciYgbGF5ZXIpCiB7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFj
a2luZ1N0b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUobGF5ZXItPnNpemUoKSk7Ci0g
ICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2lu
Z1N0b3JlKTsKLX0KKyAgICBsYXllci5hY2Nlc3NDb21taXR0ZWQoCisgICAgICAgIFtdKGNvbnN0
IE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIGNvbW1pdHRlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbW1pdHRlZC5jb250ZW50TGF5ZXIpCisgICAgICAgICAg
ICAgICAgY29udGVudExheWVySW1wbCgqY29tbWl0dGVkLmNvbnRlbnRMYXllcikucHJveHkoKS5p
bnZhbGlkYXRlKCk7CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVUaWxl
c0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoc3RhdGUudGlsZXNUb0NyZWF0ZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChjb21taXR0ZWQuYmFj
a2luZ1N0b3JlKSB7CisgICAgICAgICAgICAgICAgYXV0byYgY29tcG9zaXRpb25TdGF0ZSA9IGJh
Y2tpbmdTdG9yZUltcGwoKmNvbW1pdHRlZC5iYWNraW5nU3RvcmUpLmNvbXBvc2l0aW9uU3RhdGUo
KTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXRlLmJhY2tpbmdTdG9yZSA9IG51bGxw
dHI7CisgICAgICAgICAgICB9CiAKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+
IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIEFTU0VSVChi
YWNraW5nU3RvcmUgfHwgIWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShsYXllcikpOwotICAg
IGlmICghYmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoY29t
bWl0dGVkLmltYWdlQmFja2luZykgeworICAgICAgICAgICAgICAgIGF1dG8mIGNvbXBvc2l0aW9u
U3RhdGUgPSBpbWFnZUJhY2tpbmdJbXBsKCpjb21taXR0ZWQuaW1hZ2VCYWNraW5nKS5jb21wb3Np
dGlvblN0YXRlKCk7CisgICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGF0ZS5iYWNraW5nU3Rv
cmUgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgIGZvciAoYXV0
byYgdGlsZSA6IHN0YXRlLnRpbGVzVG9DcmVhdGUpCi0gICAgICAgIGJhY2tpbmdTdG9yZS0+Y3Jl
YXRlVGlsZSh0aWxlLnRpbGVJRCwgdGlsZS5zY2FsZSk7CisgICAgYXV0byYgY29tcG9zaXRpb25T
dGF0ZSA9IGNvbXBvc2l0aW9uTGF5ZXJJbXBsKGxheWVyKS5jb21wb3NpdGlvblN0YXRlKCk7Cisg
ICAgY29tcG9zaXRpb25TdGF0ZS5sYXllciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlc0lmTmVlZGVkKFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIsIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSwgQ29tbWl0
U2NvcGUmIGNvbW1pdFNjb3BlKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1p
dFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlOjpOaWNvc2lhU3RhdGUm
IHN0YXRlKQogewotICAgIGlmIChzdGF0ZS50aWxlc1RvUmVtb3ZlLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9y
ZSkKKyAgICBpZiAoIW1fY2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8m
IHRpbGUgOiBzdGF0ZS50aWxlc1RvUmVtb3ZlKQotICAgICAgICBiYWNraW5nU3RvcmUtPnJlbW92
ZVRpbGUodGlsZSk7Ci0KLSAgICBjb21taXRTY29wZS5iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdC
dWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworICAgIG1fbmljb3NpYS5zY2VuZSA9IHN0YXRlLnNj
ZW5lOwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZXNJZk5l
ZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYgc3RhdGUsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVTY2VuZVN0YXRlKCkKIHsKLSAgICBpZiAoc3RhdGUu
dGlsZXNUb1VwZGF0ZS5pc0VtcHR5KCkpCisgICAgaWYgKCFtX25pY29zaWEuc2NlbmUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7Ci0gICAgQVNTRVJUKGJhY2tpbmdT
dG9yZSB8fCAhbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKGxheWVyKSk7Ci0gICAgaWYgKCFi
YWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoYXV0byYgdGlsZSA6IHN0
YXRlLnRpbGVzVG9VcGRhdGUpIHsKLSAgICAgICAgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHN1
cmZhY2VVcGRhdGVJbmZvID0gdGlsZS51cGRhdGVJbmZvOwotCi0gICAgICAgIGJhY2tpbmdTdG9y
ZS0+dXBkYXRlVGlsZSh0aWxlLnRpbGVJRCwgc3VyZmFjZVVwZGF0ZUluZm8udXBkYXRlUmVjdCwg
dGlsZS50aWxlUmVjdCwgc3VyZmFjZVVwZGF0ZUluZm8uYnVmZmVyLmNvcHlSZWYoKSwgeyAwLCAw
IH0pOwotICAgICAgICBjb21taXRTY29wZS5iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmFkZChiYWNraW5nU3RvcmUpOworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCBCYWNraW5n
U3RvcmUgeworICAgICAgICAgICAgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUZXh0dXJlTWFwcGVy
TGF5ZXI+IGxheWVyOworICAgICAgICAgICAgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxOaWNvc2lh
OjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbD4gYmFja2luZ1N0b3JlOworICAgICAgICAg
ICAgTmljb3NpYTo6QmFja2luZ1N0b3JlVGV4dHVyZU1hcHBlckltcGw6OlRpbGVVcGRhdGUgdXBk
YXRlOworICAgICAgICB9OworICAgICAgICBWZWN0b3I8QmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmU7CisKKyAgICAgICAgc3RydWN0IENvbnRlbnRMYXllciB7CisgICAgICAgICAgICBzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFRleHR1cmVNYXBwZXJMYXllcj4gbGF5ZXI7CisgICAgICAgICAgICBz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHBy
b3h5OworICAgICAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24geyBmYWxzZSB9OworICAgICAg
ICB9OworICAgICAgICBWZWN0b3I8Q29udGVudExheWVyPiBjb250ZW50TGF5ZXI7CisKKyAgICAg
ICAgc3RydWN0IEltYWdlQmFja2luZyB7CisgICAgICAgICAgICBzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFRleHR1cmVNYXBwZXJMYXllcj4gbGF5ZXI7CisgICAgICAgICAgICBzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPE5pY29zaWE6OkltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsPiBpbWFnZUJh
Y2tpbmc7CisgICAgICAgICAgICBOaWNvc2lhOjpJbWFnZUJhY2tpbmdUZXh0dXJlTWFwcGVySW1w
bDo6VXBkYXRlIHVwZGF0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPEltYWdlQmFja2lu
Zz4gaW1hZ2VCYWNraW5nOworICAgIH0gbGF5ZXJzQnlCYWNraW5nOworCisgICAgbV9uaWNvc2lh
LnNjZW5lLT5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgW3RoaXMsICZsYXllcnNCeUJhY2tpbmddKE5p
Y29zaWE6OlNjZW5lOjpTdGF0ZSYgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChz
dGF0ZS5pZCA9PSBtX25pY29zaWEuc3RhdGUuaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgcm9vdExheWVyID0gdGV4bWFw
TGF5ZXIoKnN0YXRlLnJvb3RMYXllcik7CisgICAgICAgICAgICAgICAgaWYgKHJvb3RMYXllci5p
ZCgpICE9IG1fcm9vdExheWVySUQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9yb290TGF5ZXJJ
RCA9IHJvb3RMYXllci5pZCgpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgICAgICBt
X3Jvb3RMYXllci0+YWRkQ2hpbGQoJnJvb3RMYXllcik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBIYXNoU2V0PFJlZlB0cjxOaWNvc2lhOjpDb21wb3Np
dGlvbkxheWVyPj4gcmVtb3ZlZExheWVyczsKKyAgICAgICAgICAgIGZvciAoYXV0byYgbGF5ZXIg
OiBtX25pY29zaWEuc3RhdGUubGF5ZXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5s
YXllcnMuY29udGFpbnMobGF5ZXIpKQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkTGF5ZXJz
LmFkZChsYXllcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbmljb3NpYS5zdGF0
ZSA9IHN0YXRlOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogcmVtb3ZlZExheWVy
cykKKyAgICAgICAgICAgICAgICByZW1vdmVMYXllcigqbGF5ZXIpOworCisgICAgICAgICAgICBm
b3IgKGF1dG8mIGNvbXBvc2l0aW9uTGF5ZXIgOiBtX25pY29zaWEuc3RhdGUubGF5ZXJzKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgbGF5ZXIgPSB0ZXhtYXBMYXllcigqY29tcG9zaXRpb25MYXll
cik7CisgICAgICAgICAgICAgICAgY29tcG9zaXRpb25MYXllci0+Y29tbWl0U3RhdGUoCisgICAg
ICAgICAgICAgICAgICAgIFt0aGlzLCAmbGF5ZXIsICZjb21wb3NpdGlvbkxheWVyLCAmbGF5ZXJz
QnlCYWNraW5nXQorICAgICAgICAgICAgICAgICAgICAoY29uc3QgTmljb3NpYTo6Q29tcG9zaXRp
b25MYXllcjo6TGF5ZXJTdGF0ZSYgbGF5ZXJTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEucG9zaXRpb25DaGFu
Z2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldFBvc2l0aW9uKGxheWVy
U3RhdGUucG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUu
ZGVsdGEuYW5jaG9yUG9pbnRDaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh
eWVyLnNldEFuY2hvclBvaW50KGxheWVyU3RhdGUuYW5jaG9yUG9pbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuc2l6ZUNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0U2l6ZShsYXllclN0YXRlLnNpemUpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS50cmFuc2Zvcm1DaGFuZ2Vk
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldFRyYW5zZm9ybShsYXllclN0
YXRlLnRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5k
ZWx0YS5jaGlsZHJlblRyYW5zZm9ybUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGF5ZXIuc2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9y
bSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRl
bnRzUmVjdENoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0Q29u
dGVudHNSZWN0KGxheWVyU3RhdGUuY29udGVudHNSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNvbnRlbnRzVGlsaW5nQ2hhbmdlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENvbnRlbnRzVGlsZVBoYXNlKGxheWVyU3Rh
dGUuY29udGVudHNUaWxlUGhhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVy
LnNldENvbnRlbnRzVGlsZVNpemUobGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVTaXplKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVy
U3RhdGUuZGVsdGEub3BhY2l0eUNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGF5ZXIuc2V0T3BhY2l0eShsYXllclN0YXRlLm9wYWNpdHkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheWVyU3RhdGUuZGVsdGEuc29saWRDb2xvckNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF5ZXIuc2V0U29saWRDb2xvcihsYXllclN0YXRlLnNvbGlkQ29s
b3IpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5kZWx0YS5maWx0
ZXJzQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRGaWx0ZXJz
KGxheWVyU3RhdGUuZmlsdGVycyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJT
dGF0ZS5kZWx0YS5hbmltYXRpb25zQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllci5zZXRBbmltYXRpb25zKGxheWVyU3RhdGUuYW5pbWF0aW9ucyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsYXllclN0YXRlLmRlbHRhLmNoaWxkcmVuQ2hhbmdlZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldENoaWxkcmVuKFdURjo6bWFwKGxh
eWVyU3RhdGUuY2hpbGRyZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGF1
dG8mIGNoaWxkKSB7IHJldHVybiAmdGV4bWFwTGF5ZXIoKmNoaWxkKTsgfSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0
ZS5kZWx0YS5tYXNrQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5z
ZXRNYXNrTGF5ZXIobGF5ZXJTdGF0ZS5tYXNrID8gJnRleG1hcExheWVyKCpsYXllclN0YXRlLm1h
c2spIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJTdGF0ZS5k
ZWx0YS5yZXBsaWNhQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5z
ZXRSZXBsaWNhTGF5ZXIobGF5ZXJTdGF0ZS5yZXBsaWNhID8gJnRleG1hcExheWVyKCpsYXllclN0
YXRlLnJlcGxpY2EpIDogbnVsbHB0cik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs
YXllclN0YXRlLmRlbHRhLmZsYWdzQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxheWVyLnNldENvbnRlbnRzT3BhcXVlKGxheWVyU3RhdGUuZmxhZ3MuY29udGVudHNPcGFx
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldERyYXdzQ29udGVudChs
YXllclN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGF5ZXIuc2V0Q29udGVudHNWaXNpYmxlKGxheWVyU3RhdGUuZmxhZ3MuY29udGVudHNWaXNp
YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRCYWNrZmFjZVZpc2li
aWxpdHkobGF5ZXJTdGF0ZS5mbGFncy5iYWNrZmFjZVZpc2libGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxheWVyLnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJTdGF0ZS5mbGFncy5tYXNr
c1RvQm91bmRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci5zZXRQcmVzZXJ2
ZXMzRChsYXllclN0YXRlLmZsYWdzLnByZXNlcnZlczNEKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuYmFja2luZ1N0
b3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW1wbCA9IGJhY2tpbmdT
dG9yZUltcGwoKmxheWVyU3RhdGUuYmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsYXllcnNCeUJhY2tpbmcuYmFja2luZ1N0b3JlLmFwcGVuZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyBzdGQ6OnJlZihsYXllciksIHN0ZDo6cmVmKGltcGwpLCBp
bXBsLnRha2VVcGRhdGUoKSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLnNldEJhY2tpbmdTdG9yZShudWxscHRyKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU3RhdGUuY29udGVudExheWVyKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgaW1wbCA9IGNvbnRlbnRMYXllcklt
cGwoKmxheWVyU3RhdGUuY29udGVudExheWVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllcnNCeUJhY2tpbmcuY29udGVudExheWVyLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyBzdGQ6OnJlZihsYXllciksIHN0ZDo6cmVmKGltcGwucHJveHkoKSks
IGxheWVyU3RhdGUuZGVsdGEuY29udGVudExheWVyQ2hhbmdlZCB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGF5ZXJTdGF0ZS5pbWFnZUJhY2tpbmcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbXBsID0gaW1hZ2VCYWNraW5nSW1wbCgqbGF5ZXJT
dGF0ZS5pbWFnZUJhY2tpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyc0J5
QmFja2luZy5pbWFnZUJhY2tpbmcuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IHN0ZDo6cmVmKGxheWVyKSwgc3RkOjpyZWYoaW1wbCksIGltcGwudGFrZVVwZGF0ZSgp
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGF5ZXIuc2V0Q29udGVudHNMYXllcihudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgSGFzaFNldDxSZWY8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+PiBiYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzOworICAgIEhhc2hTZXQ8UmVmPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk+PiBwcm94aWVzRm9yU3dhcHBpbmc7CisKKyAgICB7CisgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBsYXllcnNCeUJhY2tpbmcuYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAg
ICBhdXRvJiBjb21wb3NpdGlvblN0YXRlID0gZW50cnkuYmFja2luZ1N0b3JlLmdldCgpLmNvbXBv
c2l0aW9uU3RhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUJhY2tpbmdTdG9yZShlbnRyeS5sYXll
ci5nZXQoKSwgY29tcG9zaXRpb25TdGF0ZSwgZW50cnkudXBkYXRlKTsKKworICAgICAgICAgICAg
aWYgKGNvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlKQorICAgICAgICAgICAgICAgIGJhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKG1ha2VSZWYoKmNvbXBvc2l0aW9uU3RhdGUu
YmFja2luZ1N0b3JlKSk7CisgICAgICAgIH0KKworICAgICAgICBsYXllcnNCeUJhY2tpbmcuYmFj
a2luZ1N0b3JlID0geyB9OwogICAgIH0KLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnN5bmNJbWFnZUJhY2tpbmdzKGNvbnN0IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3Rh
dGUsIENvbW1pdFNjb3BlJiBjb21taXRTY29wZSkKLXsKLSAgICBmb3IgKGF1dG8mIGltYWdlIDog
c3RhdGUuaW1hZ2VzVG9SZW1vdmUpCi0gICAgICAgIHJlbW92ZUltYWdlQmFja2luZyhpbWFnZSwg
Y29tbWl0U2NvcGUpOwotCi0gICAgZm9yIChhdXRvJiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvQ3Jl
YXRlKQotICAgICAgICBjcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2UpOwotCi0gICAgZm9yIChhdXRv
JiBpbWFnZSA6IHN0YXRlLmltYWdlc1RvVXBkYXRlKQotICAgICAgICB1cGRhdGVJbWFnZUJhY2tp
bmcoaW1hZ2UuZmlyc3QsIGltYWdlLnNlY29uZC5jb3B5UmVmKCksIGNvbW1pdFNjb3BlKTsKLQot
ICAgIGZvciAoYXV0byYgaW1hZ2UgOiBzdGF0ZS5pbWFnZXNUb0NsZWFyKQotICAgICAgICBjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlLCBjb21taXRTY29wZSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRh
aW5zKGltYWdlSUQpKTsKLSAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlELCBSZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiYmIGJ1ZmZlciwgQ29tbWl0U2NvcGUmIGNvbW1p
dFNjb3BlKQotewotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkp
OwotICAgIGF1dG8gaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAgICBSZWZQ
dHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLQot
ICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgotICAgIGJhY2tp
bmdTdG9yZS0+Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKLSAgICBJbnRS
ZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgYnVmZmVyLT5zaXplKCkpOwotICAgIC8vIFNlZSBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoKQot
ICAgIEFTU0VSVCgyMDAwID49IHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkp
OwotICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgYmFja2luZ1N0
b3JlLT51cGRhdGVUaWxlKDEgLyogaWQgKi8sIHJlY3QsIHJlY3QsIFdURk1vdmUoYnVmZmVyKSwg
cmVjdC5sb2NhdGlvbigpKTsKLQotICAgIGNvbW1pdFNjb3BlLmJhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci19CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCwgQ29tbWl0U2NvcGUmIGNvbW1pdFNjb3BlKQotewotICAgIEFTU0VSVCht
X2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIGF1dG8gaXQgPSBtX2ltYWdl
QmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLSAgICBiYWNraW5nU3RvcmUtPnJlbW92ZUFs
bFRpbGVzKCk7Ci0gICAgY29tbWl0U2NvcGUuYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
cy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIENv
bW1pdFNjb3BlJiBjb21taXRTY29wZSkKLXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNv
bnRhaW5zKGltYWdlSUQpKTsKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsYXll
cnNCeUJhY2tpbmcuY29udGVudExheWVyKSB7CisgICAgICAgICAgICBhdXRvJiBwcm94eSA9IGVu
dHJ5LnByb3h5LmdldCgpOworICAgICAgICAgICAgaWYgKGVudHJ5Lm5lZWRzQWN0aXZhdGlvbikK
KyAgICAgICAgICAgICAgICBwcm94eS5hY3RpdmF0ZU9uQ29tcG9zaXRpbmdUaHJlYWQodGhpcywg
JmVudHJ5LmxheWVyLmdldCgpKTsKKyAgICAgICAgICAgIHByb3hpZXNGb3JTd2FwcGluZy5hZGQo
bWFrZVJlZihwcm94eSkpOworICAgICAgICB9CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IFRleHR1
cmVNYXBwZXJMYXllciByZWZlcnMgYSBkYW5nbGluZyBwb2ludGVyLgotICAgIGNvbW1pdFNjb3Bl
LnJlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFnZUJhY2tpbmdzLnRha2UoaW1hZ2VJ
RCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNr
aW5nVG9MYXllcihUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQpCi17Ci0gICAgaWYgKGltYWdlSUQgPT0gSW52YWxpZENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzTGF5ZXIoMCk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgbGF5ZXJzQnlCYWNraW5nLmNvbnRlbnRMYXllciA9IHsg
fTsKICAgICB9CiAKLSAgICBhdXRvIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7
Ci0gICAgQVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNl
dENvbnRlbnRzTGF5ZXIoaXQtPnZhbHVlLmdldCgpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlJiBzdGF0ZSkKLXsKLSAgICBpZiAoIW1fY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX25pY29zaWEgPSBzdGF0ZS5uaWNvc2lhOwotICAgIC8vIEZJWE1FOiBTdGFydCB1c2luZyB0
aGUgTmljb3NpYSBsYXllciBzdGF0ZSBmb3IgdXBkYXRlcy4KKyAgICB7CisgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBsYXllcnNCeUJhY2tpbmcuaW1hZ2VCYWNraW5nKSB7CisgICAgICAgICAg
ICBhdXRvJiBjb21wb3NpdGlvblN0YXRlID0gZW50cnkuaW1hZ2VCYWNraW5nLmdldCgpLmNvbXBv
c2l0aW9uU3RhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUltYWdlQmFja2luZyhlbnRyeS5sYXll
ci5nZXQoKSwgY29tcG9zaXRpb25TdGF0ZSwgZW50cnkudXBkYXRlKTsKIAotICAgIENvbW1pdFNj
b3BlIGNvbW1pdFNjb3BlOworICAgICAgICAgICAgaWYgKGNvbXBvc2l0aW9uU3RhdGUuYmFja2lu
Z1N0b3JlKQorICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMu
YWRkKG1ha2VSZWYoKmNvbXBvc2l0aW9uU3RhdGUuYmFja2luZ1N0b3JlKSk7CisgICAgICAgIH0K
IAotICAgIGNyZWF0ZUxheWVycyhzdGF0ZS5sYXllcnNUb0NyZWF0ZSk7Ci0gICAgZGVsZXRlTGF5
ZXJzKHN0YXRlLmxheWVyc1RvUmVtb3ZlKTsKLQotICAgIGlmIChzdGF0ZS5yb290Q29tcG9zaXRp
bmdMYXllciAhPSBtX3Jvb3RMYXllcklEKQotICAgICAgICBzZXRSb290TGF5ZXJJRChzdGF0ZS5y
b290Q29tcG9zaXRpbmdMYXllcik7Ci0KLSAgICBzeW5jSW1hZ2VCYWNraW5ncyhzdGF0ZSwgY29t
bWl0U2NvcGUpOwotCi0gICAgZm9yIChhdXRvJiBsYXllciA6IHN0YXRlLmxheWVyc1RvVXBkYXRl
KQotICAgICAgICBzZXRMYXllclN0YXRlKGxheWVyLmZpcnN0LCBsYXllci5zZWNvbmQsIGNvbW1p
dFNjb3BlKTsKKyAgICAgICAgbGF5ZXJzQnlCYWNraW5nLmltYWdlQmFja2luZyA9IHsgfTsKKyAg
ICB9CiAKLSAgICBmb3IgKGF1dG8mIGJhY2tpbmdTdG9yZSA6IGNvbW1pdFNjb3BlLmJhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMpCisgICAgZm9yIChhdXRvJiBiYWNraW5nU3RvcmUgOiBi
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzKQogICAgICAgICBiYWNraW5nU3RvcmUtPmNv
bW1pdFRpbGVPcGVyYXRpb25zKCptX3RleHR1cmVNYXBwZXIpOworCisgICAgZm9yIChhdXRvJiBw
cm94eSA6IHByb3hpZXNGb3JTd2FwcGluZykKKyAgICAgICAgcHJveHktPnN3YXBCdWZmZXIoKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmVuc3VyZVJvb3RMYXllcigpCkBA
IC00NjUsMjYgKzQxOSwxNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VH
TFJlc291cmNlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NsaWVudCk7CiAKLSAgICBtX2ltYWdlQmFj
a2luZ3MuY2xlYXIoKTsKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0g
ICAgZm9yIChhdXRvJiBwcm94eSA6IG1fcGxhdGZvcm1MYXllclByb3hpZXMudmFsdWVzKCkpCi0g
ICAgICAgIHByb3h5LT5pbnZhbGlkYXRlKCk7Ci0gICAgbV9wbGF0Zm9ybUxheWVyUHJveGllcy5j
bGVhcigpOwotI2VuZGlmCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGxheWVyIDogbV9uaWNv
c2lhLnN0YXRlLmxheWVycykKKyAgICAgICAgICAgIHJlbW92ZUxheWVyKCpsYXllcik7CisgICAg
ICAgIG1fbmljb3NpYS5zdGF0ZS5sYXllcnMgPSB7IH07CisgICAgICAgIG1fbmljb3NpYS5zdGF0
ZS5yb290TGF5ZXIgPSBudWxscHRyOworICAgICAgICBtX25pY29zaWEuc2NlbmUgPSBudWxscHRy
OworICAgIH0KIAogICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKICAgICBtX3Jvb3RMYXllcklE
ID0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRDsKLSAgICBtX2xheWVycy5jbGVhcigpOwogICAg
IG1fdGV4dHVyZU1hcHBlciA9IG51bGxwdHI7Ci0gICAgbV9iYWNraW5nU3RvcmVzLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlvbnNJ
Zk5lZWRlZChUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJTdGF0ZSYgc3RhdGUpCi17Ci0gICAgaWYgKCFzdGF0ZS5hbmltYXRpb25zQ2hhbmdl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoc3RhdGUuYW5p
bWF0aW9ucyk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXRhY2goKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKaW5kZXggMmYzYjRmMzM5NzUuLjI2
ZjBlZmU1MzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL05pY29zaWFTY2VuZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1h
cHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KQEAgLTgxLDgzICs4
MiwzNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNB
Y3RpdmU7IH0KICAgICB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSkgeyBtX2lzQWN0aXZlID0g
YWN0aXZlOyB9CiAKLSAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7Ci0KICAgICB2b2lkIHNldFZpZXdCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKSB7IG1fdmlld0JhY2tncm91bmRDb2xvciA9
IGNvbG9yOyB9CiAgICAgV2ViQ29yZTo6Q29sb3Igdmlld0JhY2tncm91bmRDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmlld0JhY2tncm91bmRDb2xvcjsgfQogCiBwcml2YXRlOgotICAgIHN0cnVj
dCBDb21taXRTY29wZSB7Ci0gICAgICAgIENvbW1pdFNjb3BlKCkgPSBkZWZhdWx0OwotICAgICAg
ICBDb21taXRTY29wZShDb21taXRTY29wZSYpID0gZGVsZXRlOwotICAgICAgICBDb21taXRTY29w
ZSYgb3BlcmF0b3I9KGNvbnN0IENvbW1pdFNjb3BlJikgPSBkZWxldGU7Ci0KLSAgICAgICAgVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4+IHJlbGVhc2VkSW1h
Z2VCYWNraW5nczsKLSAgICAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU+PiBiYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwotICAgIH07Ci0K
LSAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0g
ICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRD4mKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlJiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2b2lkIHNldExheWVyQ2hpbGRyZW5JZk5lZWRlZChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZvaWQgdXBkYXRlVGlsZXNJZk5lZWRlZChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJTdGF0ZSYsIENvbW1pdFNjb3BlJik7Ci0gICAgdm9pZCBjcmVhdGVUaWxlc0lmTmVlZGVk
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCByZW1vdmVUaWxlc0lmTmVlZGVkKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllclN0YXRlJiwgQ29tbWl0U2NvcGUmKTsKLSAgICB2b2lkIHNldExheWVyRmlsdGVyc0lm
TmVlZGVkKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIGNvbnN0IFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJik7Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnNJ
Zk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotICAgIHZvaWQgc3luY1BsYXRmb3JtTGF5ZXJJ
Zk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBjb25zdCBXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpOwotCi0gICAgdm9pZCBzeW5jSW1hZ2VCYWNraW5n
cyhjb25zdCBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmLCBDb21taXRTY29wZSYp
OwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOwotICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+JiYsIENvbW1pdFNjb3Bl
Jik7Ci0gICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQsIENvbW1pdFNjb3BlJik7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJh
Y2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgQ29tbWl0U2NvcGUmKTsK
LQotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciogbGF5ZXJCeUlEKFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xheWVycy5jb250
YWlucyhpZCkpOwotICAgICAgICBBU1NFUlQoaWQgIT0gV2ViQ29yZTo6SW52YWxpZENvb3JkaW5h
dGVkTGF5ZXJJRCk7Ci0gICAgICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOwotICAgIH0KLSAg
ICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIGdldExheWVyQnlJRElmRXhpc3RzKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZTo6Tmljb3NpYVN0YXRlJik7CisgICAg
dm9pZCB1cGRhdGVTY2VuZVN0YXRlKCk7CisKICAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5
ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAKICAgICB2b2lk
IHVwZGF0ZVZpZXdwb3J0KCk7CiAKLSAgICB2b2lkIGNyZWF0ZUxheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCk7Ci0gICAgdm9pZCBkZWxldGVMYXllcihXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQpOwotCi0gICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciosIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
OwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAKLSAgICB2b2lkIHByZXBhcmVDb250ZW50
QmFja2luZ1N0b3JlKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIENvbW1pdFNjb3BlJik7
Ci0gICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXIqKTsKLSAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciopOwotICAgIHZvaWQgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9M
YXllclNpemUoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiwgQ29tbWl0U2NvcGUmKTsKLQog
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKICAgICB2b2lkIG9uTmV3QnVm
ZmVyQXZhaWxhYmxlKCkgb3ZlcnJpZGU7CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTdGF0ZTo6Tmljb3NpYVN0YXRlIG1fbmljb3NpYTsKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICBSZWZQdHI8Tmljb3NpYTo6U2NlbmU+IHNjZW5lOworICAgICAgICBOaWNvc2lhOjpT
Y2VuZTo6U3RhdGUgc3RhdGU7CisgICAgfSBtX25pY29zaWE7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwogCi0gICAgSGFzaE1h
cDxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+PiBtX2ltYWdlQmFja2luZ3M7Ci0gICAgSGFzaE1hcDxXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU+PiBtX2JhY2tpbmdTdG9yZXM7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1NfVEhSRUFERUQpCi0gICAgSGFzaE1hcDxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqLCBS
ZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4+IG1fcGxhdGZv
cm1MYXllclByb3hpZXM7Ci0jZW5kaWYKLQogICAgIC8vIEJlbG93IHR3byBtZW1iZXJzIGFyZSBh
Y2Nlc3NlZCBieSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0
IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3RoIG1lbWJlcnMuCiAgICAgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50KiBtX2NsaWVudDsKICAgICBib29sIG1faXNBY3RpdmUg
eyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllcj4gbV9yb290TGF5ZXI7CiAKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcj4+IG1fbGF5
ZXJzOwogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCBtX3Jvb3RMYXllcklEIHsgV2Vi
Q29yZTo6SW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCB9OwogICAgIFdlYkNvcmU6OkNvbG9yIG1f
dmlld0JhY2tncm91bmRDb2xvciB7IFdlYkNvcmU6OkNvbG9yOjp3aGl0ZSB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29t
cG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNw
cAppbmRleCAyY2RjMWZmYjlhMy4uNmUwYmQ5OWM0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVk
Q29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmNwcApAQCAtMjIwLDcg
KzIyMCw3IEBAIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpyZW5kZXJMYXllclRyZWUoKQogICAg
ICAgICAgICAgICAgIGZvciAoYXV0byYgc3RhdGUgOiBzdGF0ZXMpCiAgICAgICAgICAgICAgICAg
ICAgIGNvb3JkaW5hdGVVcGRhdGUgfD0gc3RkOjphbnlfb2Yoc3RhdGUubGF5ZXJzVG9VcGRhdGUu
YmVnaW4oKSwgc3RhdGUubGF5ZXJzVG9VcGRhdGUuZW5kKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICBbXShhdXRvJiBpdCkgeyByZXR1cm4gaXQuc2Vjb25kLnBsYXRmb3JtTGF5ZXJDaGFuZ2Vk
IHx8IGl0LnNlY29uZC5wbGF0Zm9ybUxheWVyVXBkYXRlZDsgfSk7Ci0gICAgICAgICAgICAgICAg
bV9hdHRyaWJ1dGVzLmNvb3JkaW5hdGVVcGRhdGVDb21wbGV0aW9uV2l0aENsaWVudCA9IGNvb3Jk
aW5hdGVVcGRhdGU7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVzLmNvb3JkaW5hdGVVcGRh
dGVDb21wbGV0aW9uV2l0aENsaWVudCA9IC8qIGNvb3JkaW5hdGVVcGRhdGUgKi8gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjk4LDYgKzI5OCwxMSBAQCB2b2lkIFRocmVh
ZGVkQ29tcG9zaXRvcjo6dXBkYXRlU2NlbmVTdGF0ZShjb25zdCBDb29yZGluYXRlZEdyYXBoaWNz
U3RhdGUmIHN0YXRlKQogICAgIG1fY29tcG9zaXRpbmdSdW5Mb29wLT5zY2hlZHVsZVVwZGF0ZSgp
OwogfQogCit2b2lkIFRocmVhZGVkQ29tcG9zaXRvcjo6cmVxdWVzdFVwZGF0ZSgpCit7CisgICAg
bV9jb21wb3NpdGluZ1J1bkxvb3AtPnNjaGVkdWxlVXBkYXRlKCk7Cit9CisKICNpZiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogUmVmUHRyPFdlYkNvcmU6OkRp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gVGhyZWFkZWRDb21wb3NpdG9yOjpkaXNwbGF5UmVmcmVzaE1v
bml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBv
c2l0b3IuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFk
ZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCmluZGV4IDQyYjI0NmQyYjA2Li4xMzQ4
OTJjMDM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhy
ZWFkZWRDb21wb3NpdG9yLmgKQEAgLTcyLDYgKzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOwogCiAgICAgdm9pZCB1cGRhdGVTY2VuZVN0YXRlKGNvbnN0
IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpOworICAgIHZvaWQgcmVxdWVzdFVw
ZGF0ZSgpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNjZjZmU3N2ZmODcu
LjZlZTA5OTc5NWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogUGFnZUNsaWVudEltcGw6OlBhZ2VDbGllbnRJbXBsKFdLV1BFOjpWaWV3JiB2aWV3KQogICAg
IDogbV92aWV3KHZpZXcpCi0gICAgLCBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyKHN0ZDo6bWFr
ZV91bmlxdWU8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+KCkpCisgICAgLCBtX3Njcm9sbEdlc3R1
cmVDb250cm9sbGVyKG1fdmlldy5zY3JvbGxHZXN0dXJlQ29udHJvbGxlcigpKQogewogfQogCkBA
IC0xOTIsOCArMTkyLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZG9uZVdpdGhUb3VjaEV2ZW50
KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIGIKIAogICAgIGF1dG8mIHBh
Z2UgPSBtX3ZpZXcucGFnZSgpOwogCi0gICAgaWYgKG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIt
PmhhbmRsZUV2ZW50KHRvdWNoUG9pbnQpKSB7Ci0gICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhp
c19ldmVudCogYXhpc0V2ZW50ID0gbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlci0+YXhpc0V2ZW50
KCk7CisgICAgaWYgKG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaGFuZGxlRXZlbnQodG91Y2hQ
b2ludCkpIHsKKyAgICAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQg
PSBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmF4aXNFdmVudCgpOwogICAgICAgICBpZiAoYXhp
c0V2ZW50LT50eXBlICE9IHdwZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVfbnVsbCkKICAgICAgICAg
ICAgIHBhZ2UuaGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoYXhp
c0V2ZW50LCBtX3ZpZXcucGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xp
ZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1w
bC5oCmluZGV4IGNhMjFkOGJlNmUxLi4yZWUxMzdjOTcyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuaApAQCAtMTQ0LDggKzE0NCw3IEBA
IHByaXZhdGU6CiAgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2Vy
SW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJpZGU7CiAKICAgICBXS1dQRTo6VmlldyYg
bV92aWV3OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNjcm9sbEdlc3R1cmVDb250cm9sbGVyPiBt
X3Njcm9sbEdlc3R1cmVDb250cm9sbGVyOworICAgIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyJiBt
X3Njcm9sbEdlc3R1cmVDb250cm9sbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2Vz
dHVyZUNvbnRyb2xsZXIuY3BwCmluZGV4IGRhMTJjOGViMzUxLi5hMzEzY2U3YTJlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0
dXJlQ29udHJvbGxlci5jcHAKQEAgLTI3LDE5ICsyNywzOCBAQAogI2luY2x1ZGUgIlNjcm9sbEdl
c3R1cmVDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhci5oPgorI2lu
Y2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxudW1lcmljPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAorU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OkNsaWVudDo6fkNsaWVudCgpID0gZGVmYXVsdDsK
KworU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyKENsaWVu
dCYgY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworICAgIG1fa2luZXRpY3MudGlt
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFJ1bkxvb3A6OlRpbWVyPFNjcm9sbEdlc3R1cmVDb250cm9s
bGVyPj4oUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmRp
c3BhdGNoQ2FsbGJhY2spOworfQorCitTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6flNjcm9sbEdl
c3R1cmVDb250cm9sbGVyKCkKK3sKK30KKwogYm9vbCBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6
aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcqIHRvdWNo
UG9pbnQpCiB7CiAgICAgc3dpdGNoICh0b3VjaFBvaW50LT50eXBlKSB7CiAgICAgY2FzZSB3cGVf
aW5wdXRfdG91Y2hfZXZlbnRfdHlwZV9kb3duOgotICAgICAgICBtX3N0YXJ0LnRpbWUgPSB0b3Vj
aFBvaW50LT50aW1lOwotICAgICAgICBtX3N0YXJ0LnggPSB0b3VjaFBvaW50LT54OwotICAgICAg
ICBtX3N0YXJ0LnkgPSB0b3VjaFBvaW50LT55OwotICAgICAgICBtX29mZnNldC54ID0gdG91Y2hQ
b2ludC0+eDsKLSAgICAgICAgbV9vZmZzZXQueSA9IHRvdWNoUG9pbnQtPnk7CisgICAgeworICAg
ICAgICBpbnQzMl90IHggPSB0b3VjaFBvaW50LT54OworICAgICAgICBpbnQzMl90IHkgPSB0b3Vj
aFBvaW50LT55OworICAgICAgICBtX3N0YXJ0ID0geyB0b3VjaFBvaW50LT50aW1lLCB4LCB5IH07
CisgICAgICAgIG1fb2Zmc2V0ID0geyB4LCB5IH07CisgICAgICAgIG1fa2luZXRpY3MubGFzdCA9
IHsgdG91Y2hQb2ludC0+dGltZSwgeCwgeSB9OworICAgICAgICBtX2tpbmV0aWNzLnZlbG9jaXR5
ID0geyB9OworICAgICAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uID0geyB9OworICAgICAgICBt
X2tpbmV0aWNzLnRpbWVyLT5zdG9wKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgY2FzZSB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfdHlwZV9tb3Rpb246CiAgICAgICAgIGlmICgh
bV9oYW5kbGluZykgewogICAgICAgICAgICAgaW50MzJfdCBkZWx0YVggPSB0b3VjaFBvaW50LT54
IC0gbV9zdGFydC54OwpAQCAtNDksNyArNjgsNyBAQCBib29sIFNjcm9sbEdlc3R1cmVDb250cm9s
bGVyOjpoYW5kbGVFdmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3Jhdwog
ICAgICAgICAgICAgaW50IHBpeGVsc1BlckxpbmVTdGVwID0gV2ViQ29yZTo6U2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpOwogICAgICAgICAgICAgbV9oYW5kbGluZyA9IHN0ZDo6YWJzKGRl
bHRhWCkgPj0gcGl4ZWxzUGVyTGluZVN0ZXAKICAgICAgICAgICAgICAgICB8fCBzdGQ6OmFicyhk
ZWx0YVkpID49IHBpeGVsc1BlckxpbmVTdGVwCi0gICAgICAgICAgICAgICAgfHwgZGVsdGFUaW1l
ID49IDIwMDsKKyAgICAgICAgICAgICAgICB8fCBkZWx0YVRpbWUgPj0gNjQ7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKG1faGFuZGxpbmcpIHsKICAgICAgICAgICAgIG1fYXhpc0V2ZW50ID0gewpA
QCAtNTksOCArNzgsMjUgQEAgYm9vbCBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6aGFuZGxlRXZl
bnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcKICAgICAgICAgICAgIH07
CiAgICAgICAgICAgICBtX29mZnNldC54ID0gdG91Y2hQb2ludC0+eDsKICAgICAgICAgICAgIG1f
b2Zmc2V0LnkgPSB0b3VjaFBvaW50LT55OworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byYgbGFzdCA9IG1fa2luZXRpY3MubGFzdDsKKyAgICAgICAgICAgICAgICBhdXRvJiB2
ZWxvY2l0eSA9IG1fa2luZXRpY3MudmVsb2NpdHk7CisgICAgICAgICAgICAgICAgc3RkOjpyb3Rh
dGUodmVsb2NpdHkueC5iZWdpbigpLCB2ZWxvY2l0eS54LmJlZ2luKCkgKyAxLCB2ZWxvY2l0eS54
LmVuZCgpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnJvdGF0ZSh2ZWxvY2l0eS55LmJlZ2luKCks
IHZlbG9jaXR5LnkuYmVnaW4oKSArIDEsIHZlbG9jaXR5LnkuZW5kKCkpOworICAgICAgICAgICAg
ICAgIHN0ZDo6cm90YXRlKHZlbG9jaXR5LnRpbWUuYmVnaW4oKSwgdmVsb2NpdHkudGltZS5iZWdp
bigpICsgMSwgdmVsb2NpdHkudGltZS5lbmQoKSk7CisKKyAgICAgICAgICAgICAgICB2ZWxvY2l0
eS54LmJhY2soKSA9IHRvdWNoUG9pbnQtPnggLSBsYXN0Lng7CisgICAgICAgICAgICAgICAgdmVs
b2NpdHkueS5iYWNrKCkgPSB0b3VjaFBvaW50LT55IC0gbGFzdC55OworICAgICAgICAgICAgICAg
IHZlbG9jaXR5LnRpbWUuYmFjaygpID0gdG91Y2hQb2ludC0+dGltZSAtIGxhc3QudGltZTsKKwor
ICAgICAgICAgICAgICAgIGxhc3QgPSB7IHRvdWNoUG9pbnQtPnRpbWUsIHRvdWNoUG9pbnQtPngs
IHRvdWNoUG9pbnQtPnkgfTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KKworICAgICAgICBtX2tpbmV0aWNzLmxhc3QgPSB7IHRvdWNoUG9pbnQt
PnRpbWUsIHRvdWNoUG9pbnQtPngsIHRvdWNoUG9pbnQtPnkgfTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGNhc2Ugd3BlX2lucHV0X3RvdWNoX2V2ZW50X3R5cGVfdXA6CiAgICAgICAgIGlm
IChtX2hhbmRsaW5nKSB7CkBAIC02OSw2ICsxMDUsMjAgQEAgYm9vbCBTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9y
YXcKICAgICAgICAgICAgICAgICB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwsCiAgICAg
ICAgICAgICAgICAgMCwgMCwgMCwgMCwgMAogICAgICAgICAgICAgfTsKKworICAgICAgICAgICAg
YXV0byYgdmVsb2NpdHkgPSBtX2tpbmV0aWNzLnZlbG9jaXR5OworICAgICAgICAgICAgdWludDMy
X3QgYWNjdW11bGF0ZWRUaW1lID0gc3RkOjphY2N1bXVsYXRlKHZlbG9jaXR5LnRpbWUuYmVnaW4o
KSwgdmVsb2NpdHkudGltZS5lbmQoKSwgMCk7CisgICAgICAgICAgICBpbnQzMl90IGFjY3VtdWxh
dGVkWCA9IHN0ZDo6YWNjdW11bGF0ZSh2ZWxvY2l0eS54LmJlZ2luKCksIHZlbG9jaXR5LnguZW5k
KCksIDApOworICAgICAgICAgICAgaW50MzJfdCBhY2N1bXVsYXRlZFkgPSBzdGQ6OmFjY3VtdWxh
dGUodmVsb2NpdHkueS5iZWdpbigpLCB2ZWxvY2l0eS55LmVuZCgpLCAwKTsKKyAgICAgICAgICAg
IGRvdWJsZSB0cmFqZWN0b3J5WCA9IDEwMDAuMCAqIGFjY3VtdWxhdGVkWCAvIGFjY3VtdWxhdGVk
VGltZTsKKyAgICAgICAgICAgIGRvdWJsZSB0cmFqZWN0b3J5WSA9IDEwMDAuMCAqIGFjY3VtdWxh
dGVkWSAvIGFjY3VtdWxhdGVkVGltZTsKKworICAgICAgICAgICAgbV9raW5ldGljcy5hcHBsaWNh
dGlvbiA9IHsKKyAgICAgICAgICAgICAgICAgICAgZ19nZXRfbW9ub3RvbmljX3RpbWUoKSwgdG91
Y2hQb2ludC0+dGltZSwgdG91Y2hQb2ludC0+dGltZSwKKyAgICAgICAgICAgICAgICAgICAgeyBt
X3N0YXJ0LngsIHRyYWplY3RvcnlYLCBzdGQ6OmFicyh0cmFqZWN0b3J5WCAqIDAuMikgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyBtX3N0YXJ0LnksIHRyYWplY3RvcnlZLCBzdGQ6OmFicyh0cmFq
ZWN0b3J5WSAqIDAuMikgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICBtX2tpbmV0
aWNzLnRpbWVyLT5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygxNSkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzcsNCArMTI3LDQyIEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRs
ZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAgICAgfQogfQog
Cit2b2lkIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpkaXNwYXRjaENhbGxiYWNrKCkKK3sKKyAg
ICB1aW50MzJfdCB0aW1lT2Zmc2V0ID0gKGdfZ2V0X21vbm90b25pY190aW1lKCkgLSBtX2tpbmV0
aWNzLmFwcGxpY2F0aW9uLmJhc2VNb25vdG9uaWNUaW1lKSAvIDEwMDA7CisgICAgdWludDMyX3Qg
dGltZSA9IG1fa2luZXRpY3MuYXBwbGljYXRpb24uYmFzZVRpbWUgKyB0aW1lT2Zmc2V0OworICAg
IHVpbnQzMl90IHRpbWVEZWx0YSA9IHRpbWUgLSBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLmxhc3RU
aW1lOworICAgIG1fa2luZXRpY3MuYXBwbGljYXRpb24ubGFzdFRpbWUgPSB0aW1lOworCisgICAg
ZG91YmxlIHRyYWplY3RvcnlYVmFsdWUgPSAwOworICAgIGlmICh0aW1lT2Zmc2V0IDwgbV9raW5l
dGljcy5hcHBsaWNhdGlvbi54LmR1cmF0aW9uKSB7CisgICAgICAgIHRyYWplY3RvcnlYVmFsdWUg
PSAtc3RkOjpwb3coZG91YmxlKHRpbWVPZmZzZXQpIC8gbV9raW5ldGljcy5hcHBsaWNhdGlvbi54
LmR1cmF0aW9uLCAyKSArIDE7CisgICAgICAgIHRyYWplY3RvcnlYVmFsdWUgPSBzdGQ6Om1heDxk
b3VibGU+KHRyYWplY3RvcnlYVmFsdWUsIDApOworICAgIH0KKworICAgIGRvdWJsZSB0cmFqZWN0
b3J5WVZhbHVlID0gMDsKKyAgICBpZiAodGltZU9mZnNldCA8IG1fa2luZXRpY3MuYXBwbGljYXRp
b24ueS5kdXJhdGlvbikgeworICAgICAgICB0cmFqZWN0b3J5WVZhbHVlID0gLXN0ZDo6cG93KGRv
dWJsZSh0aW1lT2Zmc2V0KSAvIG1fa2luZXRpY3MuYXBwbGljYXRpb24ueS5kdXJhdGlvbiwgMikg
KyAxOworICAgICAgICB0cmFqZWN0b3J5WVZhbHVlID0gc3RkOjptYXg8ZG91YmxlPih0cmFqZWN0
b3J5WVZhbHVlLCAwKTsKKyAgICB9CisKKyAgICBib29sIGFjdGl2ZVRyYWplY3RvcmllcyA9ICEh
dHJhamVjdG9yeVhWYWx1ZSB8fCAhIXRyYWplY3RvcnlZVmFsdWU7CisKKyAgICBpbnQzMl90IHRy
YWplY3RvcnlZQ2hhbmdlID0gbV9raW5ldGljcy5hcHBsaWNhdGlvbi55LnRyYWplY3RvcnkgKiB0
cmFqZWN0b3J5WVZhbHVlICogdGltZURlbHRhIC8gMTAwMC4wOworICAgIGlmICh0cmFqZWN0b3J5
WUNoYW5nZSkgeworICAgICAgICBzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQgYXhpc0V2ZW50
ID0geworICAgICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9tb3Rpb24sCisgICAg
ICAgICAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLmJhc2VUaW1lICsgdGltZU9mZnNldCwKKyAg
ICAgICAgICAgIG1fa2luZXRpY3MuYXBwbGljYXRpb24ueC5jb29yZGluYXRlLCBtX2tpbmV0aWNz
LmFwcGxpY2F0aW9uLnkuY29vcmRpbmF0ZSwKKyAgICAgICAgICAgIDIsIHRyYWplY3RvcnlZQ2hh
bmdlCisgICAgICAgIH07CisgICAgICAgIG1fY2xpZW50LmRpc3BhdGNoQXhpc0V2ZW50KCZheGlz
RXZlbnQpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBbHNvIGhhbmRsZSBjaGFuZ2UgaW4gdGhl
IGhvcml6b250YWwgdHJhamVjdG9yeS4KKworICAgIGlmIChhY3RpdmVUcmFqZWN0b3JpZXMpCisg
ICAgICAgIG1fa2luZXRpY3MudGltZXItPnN0YXJ0T25lU2hvdChTZWNvbmRzOjpmcm9tTWlsbGlz
ZWNvbmRzKDE1KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5o
CmluZGV4IDljOWY2ZTllM2IxLi42MjZlMTE4YWVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29udHJvbGxlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaApAQCAt
MjUsMTkgKzI1LDM0IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8YXJyYXk+CiAjaW5j
bHVkZSA8d3BlL3dwZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBTY3JvbGxHZXN0dXJlQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAg
U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CisgICAgY2xhc3MgQ2xpZW50IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaEF4aXNFdmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqKSA9
IDA7CisgICAgfTsKKworICAgIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyKENsaWVudCYpOworICAg
IH5TY3JvbGxHZXN0dXJlQ29udHJvbGxlcigpOwogCiAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlz
X2V2ZW50KiBheGlzRXZlbnQoKSB7IHJldHVybiAmbV9heGlzRXZlbnQ7IH0KIAorICAgIGJvb2wg
aXNIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxpbmc7IH0KICAgICBib29sIGhhbmRs
ZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3Kik7CiAKIHByaXZh
dGU6CisgICAgdm9pZCBkaXNwYXRjaENhbGxiYWNrKCk7CisKKyAgICBDbGllbnQmIG1fY2xpZW50
OworCiAgICAgc3RydWN0IHsKICAgICAgICAgdWludDMyX3QgdGltZSB7IDAgfTsKICAgICAgICAg
aW50MzJfdCB4IHsgMCB9OwpAQCAtNDksNiArNjQsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgaW50
MzJfdCB5IHsgMCB9OwogICAgIH0gbV9vZmZzZXQ7CiAKKyAgICBzdHJ1Y3QgeworICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgdWludDMyX3QgdGltZSB7IDAgfTsKKyAgICAgICAgICAgIGlu
dDMyX3QgeCB7IDAgfTsKKyAgICAgICAgICAgIGludDMyX3QgeSB7IDAgfTsKKyAgICAgICAgfSBs
YXN0OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RkOjphcnJheTxpbnQzMl90LCA0
PiB4OworICAgICAgICAgICAgc3RkOjphcnJheTxpbnQzMl90LCA0PiB5OworICAgICAgICAgICAg
c3RkOjphcnJheTx1aW50MzJfdCwgND4gdGltZTsKKyAgICAgICAgfSB2ZWxvY2l0eTsKKworICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgaW50NjRfdCBiYXNlTW9ub3RvbmljVGltZSB7IDAg
fTsKKyAgICAgICAgICAgIHVpbnQzMl90IGJhc2VUaW1lIHsgMCB9OworICAgICAgICAgICAgdWlu
dDMyX3QgbGFzdFRpbWUgeyAwIH07CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg
ICAgIGludDMyX3QgY29vcmRpbmF0ZSB7IDAgfTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdHJh
amVjdG9yeSB7IDAgfTsKKyAgICAgICAgICAgICAgICBkb3VibGUgZHVyYXRpb24geyAwIH07Cisg
ICAgICAgICAgICB9IHgsIHk7CisgICAgICAgIH0gYXBwbGljYXRpb247CisKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJ1bkxvb3A6OlRpbWVyPFNjcm9sbEdlc3R1cmVDb250cm9sbGVyPj4gdGlt
ZXI7CisgICAgfSBtX2tpbmV0aWNzOworCiAgICAgYm9vbCBtX2hhbmRsaW5nIHsgZmFsc2UgfTsK
ICAgICBzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQgbV9heGlzRXZlbnQ7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKaW5kZXggZmZmY2IxMWZlZTQu
LmFmY2MyNzIwNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dQRVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmll
dy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdLV1BFIHsKIAogVmlldzo6Vmlldyhz
dHJ1Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJh
dGlvbiYgYmFzZUNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX2NsaWVudChzdGQ6Om1ha2VfdW5pcXVl
PEFQSTo6Vmlld0NsaWVudD4oKSkKKyAgICAsIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoc3Rk
OjptYWtlX3VuaXF1ZTxTY3JvbGxHZXN0dXJlQ29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9w
YWdlQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8UGFnZUNsaWVudEltcGw+KCp0aGlzKSkKICAgICAs
IG1fc2l6ZSB7IDgwMCwgNjAwIH0KICAgICAsIG1fdmlld1N0YXRlRmxhZ3MgeyBXZWJDb3JlOjpB
Y3Rpdml0eVN0YXRlOjpXaW5kb3dJc0FjdGl2ZSwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNG
b2N1c2VkLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zpc2libGUsIFdlYkNvcmU6OkFjdGl2
aXR5U3RhdGU6OklzSW5XaW5kb3cgfQpAQCAtMTI2LDggKzEyNywyNyBAQCBWaWV3OjpWaWV3KHN0
cnVjdCB3cGVfdmlld19iYWNrZW5kKiBiYWNrZW5kLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0
aW9uJiBiYXNlQwogICAgICAgICAvLyBoYW5kbGVfdG91Y2hfZXZlbnQKICAgICAgICAgW10odm9p
ZCogZGF0YSwgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudCogZXZlbnQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8mIHBhZ2UgPSByZWludGVycHJldF9jYXN0PFZpZXcqPihkYXRhKS0+
cGFnZSgpOwotICAgICAgICAgICAgcGFnZS5oYW5kbGVUb3VjaEV2ZW50KFdlYktpdDo6TmF0aXZl
V2ViVG91Y2hFdmVudChldmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAg
ICAgICBhdXRvJiB2aWV3ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Vmlldyo+KGRhdGEpOworICAgICAg
ICAgICAgYXV0byYgcGFnZSA9IHZpZXcucGFnZSgpOworCisgICAgICAgICAgICBib29sIGhhbmRs
ZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgV2ViS2l0OjpOYXRpdmVXZWJUb3VjaEV2ZW50IG5h
dGl2ZUV2ZW50KGV2ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpOworCisgICAgICAgICAg
ICBhdXRvJiBzY3JvbGxHZXN0dXJlQ29udHJvbGxlciA9ICp2aWV3Lm1fc2Nyb2xsR2VzdHVyZUNv
bnRyb2xsZXI7CisgICAgICAgICAgICBpZiAoc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaXNIYW5k
bGluZygpKSB7CisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9l
dmVudF9yYXcqIHRvdWNoUG9pbnQgPSBuYXRpdmVFdmVudC5uYXRpdmVGYWxsYmFja1RvdWNoUG9p
bnQoKTsKKyAgICAgICAgICAgICAgICBpZiAodG91Y2hQb2ludC0+dHlwZSAhPSB3cGVfaW5wdXRf
dG91Y2hfZXZlbnRfdHlwZV9udWxsICYmCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbEdlc3R1
cmVDb250cm9sbGVyLmhhbmRsZUV2ZW50KHRvdWNoUG9pbnQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd3BlX2lucHV0
X2F4aXNfZXZlbnQqIGF4aXNFdmVudCA9IHNjcm9sbEdlc3R1cmVDb250cm9sbGVyLmF4aXNFdmVu
dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXhpc0V2ZW50LT50eXBlICE9IHdwZV9pbnB1
dF9heGlzX2V2ZW50X3R5cGVfbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UuaGFu
ZGxlV2hlZWxFdmVudChXZWJLaXQ6Ok5hdGl2ZVdlYldoZWVsRXZlbnQoYXhpc0V2ZW50LCBwYWdl
LmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghaGFuZGxlZCkKKyAgICAgICAgICAgICAgICBwYWdlLmhhbmRs
ZVRvdWNoRXZlbnQobmF0aXZlRXZlbnQpOwogICAgICAgICB9LAogICAgICAgICAvLyBwYWRkaW5n
CiAgICAgICAgIG51bGxwdHIsCkBAIC0xODgsNCArMjA4LDEwIEBAIHZvaWQgVmlldzo6Y2xvc2Uo
KQogICAgIG1fcGFnZVByb3h5LT5jbG9zZSgpOwogfQogCit2b2lkIFZpZXc6OmRpc3BhdGNoQXhp
c0V2ZW50KHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogYXhpc0V2ZW50KQoreworICAgIGF1
dG8mIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktp
dDo6TmF0aXZlV2ViV2hlZWxFdmVudChheGlzRXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3Io
KSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXS1dQRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dQRVZpZXcuaAppbmRleCAyYWI0ODUzMGVhMS4uNTVjYmYxYzdlY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpbmdNYW5hZ2VyUHJveHku
aCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIlNjcm9sbEdlc3R1cmVD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9BY3Rpdml0eVN0YXRlLmg+CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzUsNiArMzYsNyBAQAog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0
KiBKU0dsb2JhbENvbnRleHRSZWY7CitzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQ7CiBzdHJ1
Y3Qgd3BlX3ZpZXdfYmFja2VuZDsKIAogbmFtZXNwYWNlIEFQSSB7CkBAIC00MywxMyArNDUsMTQg
QEAgY2xhc3MgVmlld0NsaWVudDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9h
ZFByb3h5OworY2xhc3MgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CiBjbGFzcyBXZWJQYWdlR3Jv
dXA7CiBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIH0KIAogbmFtZXNwYWNlIFdLV1BFIHsKIAotY2xh
c3MgVmlldyA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlZpZXc+
IHsKK2NsYXNzIFZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpWaWV3PiwgcHVibGljIFdlYktpdDo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OkNsaWVudCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFZpZXcqIGNyZWF0ZShzdHJ1Y3Qgd3BlX3ZpZXdfYmFja2Vu
ZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
ICAgICB7CkBAIC03OCwxMyArODEsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RnVsbFNjcmVl
bihib29sIGZ1bGxTY3JlZW5TdGF0ZSkgeyBtX2Z1bGxTY3JlZW5Nb2RlQWN0aXZlID0gZnVsbFNj
cmVlblN0YXRlOyB9OwogI2VuZGlmCiAKKyAgICBXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9s
bGVyJiBzY3JvbGxHZXN0dXJlQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuICptX3Njcm9sbEdl
c3R1cmVDb250cm9sbGVyOyB9CisKIHByaXZhdGU6CiAgICAgVmlldyhzdHJ1Y3Qgd3BlX3ZpZXdf
YmFja2VuZCosIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mKTsKIAogICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAKKyAgICAvLyBTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlcjo6Q2xpZW50CisgICAgdm9pZCBkaXNwYXRjaEF4aXNFdmVudChzdHJ1Y3Qgd3BlX2lu
cHV0X2F4aXNfZXZlbnQqKSBvdmVycmlkZTsKKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlZp
ZXdDbGllbnQ+IG1fY2xpZW50OwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdDo6U2Nyb2xs
R2VzdHVyZUNvbnRyb2xsZXI+IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYktpdDo6UGFnZUNsaWVudEltcGw+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQ
dHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1fcGFnZVByb3h5OwogICAgIFdlYkNvcmU6OkludFNp
emUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAppbmRleCBmNzUyYjVkZDYyZS4uMjAxN2E4
NDk5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2Vs
ZXJhdGVkRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCkBAIC0xNzEsNiArMTcxLDExIEBAIHZvaWQg
QWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6bWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2VkKGNvbnN0
IEludFNpemUmIHNpemUpCiAjZW5kaWYKIH0KIAorYm9vbCBBY2NlbGVyYXRlZERyYXdpbmdBcmVh
OjpzdXBwb3J0c0FzeW5jU2Nyb2xsaW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZv
aWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQogewog
ICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCmluZGV4IDZkNjhi
NWI4OTkxLi5hODAzMjViZDNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaApAQCAtNTQsNiArNTQsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJl
bmNlc1N0b3JlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92ZXJyaWRlOwogCisgICAgYm9vbCBzdXBwb3J0
c0FzeW5jU2Nyb2xsaW5nKCkgb3ZlcnJpZGU7CisKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCkgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRl
eCA0ZWMwZjVlYTFhMy4uODQ5MzY3MDQ0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMzUsNiArMzUsOCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL05pY29zaWFCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTmljb3NpYUltYWdlQmFja2luZ1RleHR1cmVNYXBwZXJJbXBsLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhUGFpbnRpbmdFbmdpbmUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmg+CkBAIC0x
MDQsNiArMTA2LDM2IEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6c2l6ZURpZENoYW5n
ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQogICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQobV9yb290
TGF5ZXIuZ2V0KCkpOwogfQogCit2b2lkIGR1bXBQbGF0Zm9ybUxheWVyKE5pY29zaWE6OkNvbXBv
c2l0aW9uTGF5ZXImIGxheWVyLCB1bnNpZ25lZCBpbmRlbnRhdGlvbikKK3sKKyAgICBhdXRvIHdy
aXRlSW5kZW50YXRpb24gPQorICAgICAgICBbXSh1bnNpZ25lZCBpZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlkOyArK2kpCisgICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgICAgfCIpOworICAgICAgICB9OworCisgICAgbGF5ZXIuYWNj
ZXNzU3RhdGUoCisgICAgICAgIFsmbGF5ZXIsICZ3cml0ZUluZGVudGF0aW9uLCBpbmRlbnRhdGlv
bl0oY29uc3QgTmljb3NpYTo6Q29tcG9zaXRpb25MYXllcjo6TGF5ZXJTdGF0ZSYgc3RhdGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdyaXRlSW5kZW50YXRpb24oaW5kZW50YXRpb24pOworICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsYXllciglcCk6IGlkICVsdSBwb3NpdGlvbiAoJS4y
ZiwlLjJmKSBhbmNob3JQb2ludCAoJS4yZiwlLjJmLCUuMmYpIHNpemUgKCUuMmYsJS4yZilcbiIs
CisgICAgICAgICAgICAgICAgJmxheWVyLCBsYXllci5pZCgpLCBzdGF0ZS5wb3NpdGlvbi54KCks
IHN0YXRlLnBvc2l0aW9uLnkoKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbmNob3JQb2ludC54
KCksIHN0YXRlLmFuY2hvclBvaW50LnkoKSwgc3RhdGUuYW5jaG9yUG9pbnQueigpLAorICAgICAg
ICAgICAgICAgIHN0YXRlLnNpemUud2lkdGgoKSwgc3RhdGUuc2l6ZS5oZWlnaHQoKSk7CisgICAg
ICAgICAgICB3cml0ZUluZGVudGF0aW9uKGluZGVudGF0aW9uKTsKKyAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiICBjaGlsZHJlblslenVdIHJlcGxpY2EgJXAgbWFzayAlcFxuIiwKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5jaGlsZHJlbi5zaXplKCksIHN0YXRlLnJlcGxpY2EuZ2V0KCksIHN0
YXRlLm1hc2suZ2V0KCkpOworICAgICAgICAgICAgd3JpdGVJbmRlbnRhdGlvbihpbmRlbnRhdGlv
bik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgZmxhZ3MgeyAlZCwgJWQsICVkLCAl
ZCwgJWQsICVkIH1cbiIsCisgICAgICAgICAgICAgICAgc3RhdGUuZmxhZ3MuY29udGVudHNPcGFx
dWUsIHN0YXRlLmZsYWdzLmRyYXdzQ29udGVudCwgc3RhdGUuZmxhZ3MuY29udGVudHNWaXNpYmxl
LAorICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdzLmJhY2tmYWNlVmlzaWJsZSwgc3RhdGUuZmxh
Z3MubWFza3NUb0JvdW5kcywgc3RhdGUuZmxhZ3MucHJlc2VydmVzM0QpOworCisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogc3RhdGUuY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgZHVt
cFBsYXRmb3JtTGF5ZXIoKmNoaWxkLCBpbmRlbnRhdGlvbiArIDEpOworICAgICAgICB9KTsKK30K
KwogYm9vbCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMo
KQogewogICAgIFNldEZvclNjb3BlPGJvb2w+IHByb3RlY3RvcihtX2lzRmx1c2hpbmdMYXllckNo
YW5nZXMsIHRydWUpOwpAQCAtMTI0LDE3ICsxNTYsMzggQEAgYm9vbCBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQogCiAgICAgZmx1c2hQZW5kaW5nSW1h
Z2VCYWNraW5nQ2hhbmdlcygpOwogCisjaWYgMAorICAgIGZwcmludGYoc3RkZXJyLCAiQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKClcbiIpOworICAgIGZw
cmludGYoc3RkZXJyLCAiXHRtX3Jvb3RMYXllciAlcCwgbV9yb290TGF5ZXIucGxhdGZvcm1MYXll
cigpICVwXG4iLAorICAgICAgICBtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290TGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSk7CisgICAgZHVtcFBsYXRmb3JtTGF5ZXIoKm1fcm9vdExheWVyLT5wbGF0Zm9y
bUxheWVyKCksIDEpOworI2VuZGlmCisKICAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKICAg
ICAgICAgZGlkU3luYyA9IHRydWU7CiAKICAgICAgICAgbV9zdGF0ZS5uaWNvc2lhLnNjZW5lLT5h
Y2Nlc3NTdGF0ZSgKICAgICAgICAgICAgIFt0aGlzXShOaWNvc2lhOjpTY2VuZTo6U3RhdGUmIHN0
YXRlKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY29tcG9zaXRp
b25MYXllciA6IG1fbmljb3NpYS5zdGF0ZS5sYXllcnMpCisgICAgICAgICAgICAgICAgICAgIGNv
bXBvc2l0aW9uTGF5ZXItPmZsdXNoU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBbXShj
b25zdCBOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8m
IGltcGwgPSBkb3duY2FzdDxOaWNvc2lhOjpCYWNraW5nU3RvcmVUZXh0dXJlTWFwcGVySW1wbD4o
c3RhdGUuYmFja2luZ1N0b3JlLT5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbXBsLmZsdXNoVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmltYWdlQmFja2luZykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBpbXBsID0gZG93bmNhc3Q8Tmlj
b3NpYTo6SW1hZ2VCYWNraW5nVGV4dHVyZU1hcHBlckltcGw+KHN0YXRlLmltYWdlQmFja2luZy0+
aW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5mbHVzaFVwZGF0
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworCiAgICAgICAgICAgICAgICAgKytzdGF0ZS5pZDsKICAgICAgICAgICAgICAgICBz
dGF0ZS5sYXllcnMgPSBtX25pY29zaWEuc3RhdGUubGF5ZXJzOwogICAgICAgICAgICAgICAgIHN0
YXRlLnJvb3RMYXllciA9IG1fbmljb3NpYS5zdGF0ZS5yb290TGF5ZXI7CiAgICAgICAgICAgICB9
KTsKLQogICAgICAgICBtX2NsaWVudC5jb21taXRTY2VuZVN0YXRlKG1fc3RhdGUpOwogCiAgICAg
ICAgIGNsZWFyUGVuZGluZ1N0YXRlQ2hhbmdlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3Jk
aW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaAppbmRleCA0MzA4ZWFlMmZmNi4uMjgxMjYy
YjUxNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29y
ZGluYXRvci5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIGNsYXNz
IFBhaW50aW5nRW5naW5lOworY2xhc3MgU2NlbmVJbnRlZ3JhdGlvbjsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNjEsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250
ZW50UmVjdCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOworICAgICAgICB2aXJ0dWFsIFJlZlB0
cjxOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgPSAwOwogICAg
IH07CiAKICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFdlYkNvcmU6OlBhZ2UqLCBDb21wb3Np
dGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDBhOGJlYzhhMzk4Li4yYTFjY2Yz
MmYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5oCkBAIC03MCw2ICs3MCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpZEZs
dXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0
KSBvdmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoKSBvdmVycmlkZSB7IHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOyB9OwogICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8
Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlvbigpIG92ZXJyaWRlIHsg
cmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHZvaWQgZmx1c2hMYXllcnNBbmRGb3JjZVJlcGFpbnQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCBkOTlmMTZiY2U3NS4uM2U3MDY2NDIy
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYVNjZW5lSW50ZWdyYXRp
b24uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAg
LTU5LDYgKzYwLDcgQEAgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OlRocmVhZGVk
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlAKICAgICA6IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQogICAgICwgbV9jb21wb3NpdG9yQ2xpZW50KCp0aGlzKQog
ICAgICwgbV9zdXJmYWNlKEFjY2VsZXJhdGVkU3VyZmFjZTo6Y3JlYXRlKHdlYlBhZ2UsICp0aGlz
KSkKKyAgICAsIG1fc2NlbmVJbnRlZ3JhdGlvbihhZG9wdFJlZigqbmV3IE5pY29zaWE6OlNjZW5l
SW50ZWdyYXRpb24oKnRoaXMpKSkKICAgICAsIG1fdmlld3BvcnRDb250cm9sbGVyKHdlYlBhZ2Uu
c2l6ZSgpKQogewogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fd2ViUGFnZS5tYWlu
RnJhbWVWaWV3KCkpIHsKQEAgLTg5LDYgKzkxLDcgQEAgVGhyZWFkZWRDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OlRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KFdlYlBhZ2UmIHdlYlAK
IAogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpCiB7
CisgICAgbV9zY2VuZUludGVncmF0aW9uLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9jb21wb3NpdG9y
LT5pbnZhbGlkYXRlKCk7CiAgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRl
KCk7CiAgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKQEAgLTEyMSw2ICsxMjQsMTEgQEAgdm9pZCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aGFuZGxlRGlzcGxheVJlZnJlc2hNb25p
dG9yVXBkYXRlKGJvb2wgaGEKICAgICBtX2NvbXBvc2l0b3ItPmhhbmRsZURpc3BsYXlSZWZyZXNo
TW9uaXRvclVwZGF0ZSgpOwogfQogCitSZWZQdHI8Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4g
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjZW5lSW50ZWdyYXRpb24oKQorewor
ICAgIHJldHVybiBtX3NjZW5lSW50ZWdyYXRpb24uY29weVJlZigpOworfQorCiB1aW50NjRfdCBU
aHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bmF0aXZlU3VyZmFjZUhhbmRsZUZvckNv
bXBvc2l0aW5nKCkKIHsKICAgICBpZiAoIW1fc3VyZmFjZSkKQEAgLTI3Myw2ICsyODEsMTEgQEAg
dm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y29tbWl0U2NlbmVTdGF0ZShj
b25zdCBDb29yZGluYXRlZEdyYXBoaWMKICAgICBtX2NvbXBvc2l0b3ItPnVwZGF0ZVNjZW5lU3Rh
dGUoc3RhdGUpOwogfQogCit2b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpy
ZXF1ZXN0VXBkYXRlKCkKK3sKKyAgICBtX2NvbXBvc2l0b3ItPnJlcXVlc3RVcGRhdGUoKTsKK30K
Kwogdm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0SXNEaXNjYXJkYWJs
ZShib29sIGRpc2NhcmRhYmxlKQogewogICAgIG1faXNEaXNjYXJkYWJsZSA9IGRpc2NhcmRhYmxl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDg3YTdkYTcxN2NkLi5iODQwOGI1Mjk2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNpbXBsZVZp
ZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRocmVhZGVkQ29tcG9zaXRvci5oIgogI2lu
Y2x1ZGUgIlRocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDcsMTAgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFdlYlBhZ2U7CiAKLWNsYXNzIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0IGZpbmFsIDogcHVibGljIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCwgcHVibGljIEFj
Y2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50IHsKK2NsYXNzIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0IGZpbmFsCisgICAgOiBwdWJsaWMgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Cisg
ICAgLCBwdWJsaWMgQWNjZWxlcmF0ZWRTdXJmYWNlOjpDbGllbnQKKyAgICAsIHB1YmxpYyBOaWNv
c2lhOjpTY2VuZUludGVncmF0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IGNyZWF0ZShXZWJQYWdlJik7CiAgICAg
dmlydHVhbCB+VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoKTsKQEAgLTEyMCw2ICsx
MjQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmx1c2hSb290TGF5ZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGUgeyB9CiAgICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNv
bnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOwogCisgICAg
Ly8gTmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbjo6Q2xpZW50CisgICAgdm9pZCByZXF1ZXN0VXBk
YXRlKCkgb3ZlcnJpZGU7CisKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExB
WV9NT05JVE9SKQogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNy
ZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgb3Zl
cnJpZGU7CiAjZW5kaWYKQEAgLTEyNyw2ICsxMzQsOSBAQCBwcml2YXRlOgogICAgIC8vIEFjY2Vs
ZXJhdGVkU3VyZmFjZTo6Q2xpZW50CiAgICAgdm9pZCBmcmFtZUNvbXBsZXRlKCkgb3ZlcnJpZGU7
CiAKKyAgICAvLyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpDbGllbnQKKyAgICBSZWZQdHI8Tmlj
b3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlvbigpIG92ZXJyaWRlOworCiAg
ICAgdWludDY0X3QgbmF0aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKCk7CiAgICAgdm9p
ZCBkaWREZXN0cm95R0xDb250ZXh0KCk7CiAgICAgdm9pZCB3aWxsUmVuZGVyRnJhbWUoKTsKQEAg
LTE0NCw2ICsxNTQsNyBAQCBwcml2YXRlOgogICAgIENvbXBvc2l0b3JDbGllbnQgbV9jb21wb3Np
dG9yQ2xpZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2NlbGVyYXRlZFN1cmZhY2U+IG1fc3Vy
ZmFjZTsKICAgICBSZWZQdHI8VGhyZWFkZWRDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CisgICAg
UmVmPE5pY29zaWE6OlNjZW5lSW50ZWdyYXRpb24+IG1fc2NlbmVJbnRlZ3JhdGlvbjsKICAgICBT
aW1wbGVWaWV3cG9ydENvbnRyb2xsZXIgbV92aWV3cG9ydENvbnRyb2xsZXI7CiAgICAgZmxvYXQg
bV9sYXN0UGFnZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFz
dFNjcm9sbFBvc2l0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21h
a2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCA5NDVkZWRlYzIyZS4uNDUy
NDUxMDg0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlCkBAIC0yNzcsNiArMjc3LDcgQEAgaWYgKEVO
QUJMRV9PUEVOR0wpCiAKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJTkFU
RURfR1JBUEhJQ1MgVFJVRSkKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ09PUkRJ
TkFURURfR1JBUEhJQ1NfVEhSRUFERUQgVFJVRSkKKyAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfTklDT1NJQSBUUlVFKQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9QTFVHSU5fUFJPQ0VT
U19HVEsyKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQppbmRleCBlODcwMTFkNTJkNi4uZmNiNTlkODgwOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zV1BFLmNtYWtlCkBAIC0xMzQsNiArMTM0LDcgQEAgU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX1RFWFRVUkVfTUFQUEVSX0dMIFRSVUUpCiBTRVRfQU5EX0VYUE9TRV9UT19C
VUlMRChVU0VfVElMRURfQkFDS0lOR19TVE9SRSBUUlVFKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTIFRSVUUpCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQgVFJVRSkKK1NFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9OSUNPU0lBIFRSVUUpCiAKIHNldChGT1JXQVJESU5HX0hFQURFUlNfRElS
ICR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMpCiBzZXQoRk9SV0FSRElO
R19IRUFERVJTX1dQRV9ESVIgJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS93cGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>347805</attachid>
            <date>2018-08-22 09:19:49 -0700</date>
            <delta_ts>2018-10-02 05:54:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>platform-layers.patch</filename>
            <type>text/plain</type>
            <size>110650</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCmluZGV4IGIzM2FhMGNkYWZlLi4wZjJkZDRjZmE5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCkBAIC0yNjMs
NyArMjYzLDYgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZVRyZWU6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jaWZuZGVmIE5ERUJVRwogdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkKIHsKICAgICBpZiAoIXRyZWUpCkBA
IC0yODcsNiArMjg2LDQgQEAgdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKICAgICBzaG93U2Nyb2xsaW5nU3RhdGVUcmVl
KCZub2RlLT5zY3JvbGxpbmdTdGF0ZVRyZWUoKSk7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLy8g
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaApp
bmRleCAzYjI1NjE1MWFkNy4uNmFlNmYzM2RiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCkBAIC05OSw5ICs5OSw3IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2lmbmRlZiBOREVCVUcKIHZvaWQg
c2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUq
KTsKIHZvaWQgc2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCmluZGV4IDgzMDM1MzY0OGNlLi5hYzNkOTk4NTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcApAQCAtODcsNiArODcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKCkKIAogICAgIGF1dG8gdHJlZVN0
YXRlID0gc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmNvbW1pdChMYXllclJlcHJlc2VudGF0aW9uOjpQ
bGF0Zm9ybUxheWVyUmVwcmVzZW50YXRpb24pOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdHJlZVN0YXRlID0gV1RGTW92ZSh0cmVlU3RhdGUp
XSgpIG11dGFibGUgeworICAgICAgICAvLyBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CiAgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRl
KFdURk1vdmUodHJlZVN0YXRlKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1N0YXRlTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAzZDY4YWU2NmE4Zi4uMTkwZTU4YWFlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nU3RhdGVO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtMjYsMjIgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6
cmV0YWluUGxhdGZvcm1MYXllcih2b2lkKikKK3ZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6cmV0
YWluUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5ZXJUeXBlZCh0eXBl
bGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPnJlZigpOwogfQogCi12b2lkIExheWVyUmVwcmVz
ZW50YXRpb246OnJlbGVhc2VQbGF0Zm9ybUxheWVyKHZvaWQqKQordm9pZCBMYXllclJlcHJlc2Vu
dGF0aW9uOjpyZWxlYXNlUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5
ZXJUeXBlZCh0eXBlbGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPmRlcmVmKCk7CiB9CiAKIFBs
YXRmb3JtTGF5ZXIqIExheWVyUmVwcmVzZW50YXRpb246Om1ha2VQbGF0Zm9ybUxheWVyVHlwZWQo
dm9pZCogdHlwZWxlc3NMYXllcikKQEAgLTU2LDQgKzU3LDQgQEAgdm9pZCogTGF5ZXJSZXByZXNl
bnRhdGlvbjo6bWFrZVBsYXRmb3JtTGF5ZXJUeXBlbGVzcyhQbGF0Zm9ybUxheWVyKiBsYXllcikK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZi
ZmNhNGRmZDUxLi4wNDEyYTY3OTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFw
aGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRn
cmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oIgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKQEAgLTY2LDQgKzY2LDQgQEAgUmVmPFNjcm9sbGlu
Z1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y3JlYXRlU2Nyb2xs
aW5nVHJlZU5vZGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8v
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmNwcAppbmRleCAyMmNkMWZmNzcxOS4uNTVkMzNkZTA3YTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMjgsOSArMjgs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQ
bGF0Zm9ybUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzUyLDQ0
IEBAIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCkKICAg
ICBzY3JvbGxpbmdUcmVlKCkuZml4ZWRPclN0aWNreU5vZGVSZW1vdmVkKCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQog
eworICAgIGF1dG8mIGZpeGVkTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
PihzdGF0ZU5vZGUpOworCisgICAgaWYgKGZpeGVkTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZv
cm1MYXllciogbGF5ZXIgPSBmaXhlZE5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXll
ciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBmaXhl
ZE5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJl
ZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQordm9pZCBTY3JvbGxp
bmdUcmVlRml4ZWROb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgRmxvYXRQ
b2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9yVmlld3Bv
cnRSZWN0KGZpeGVkUG9zaXRpb25SZWN0KTsKKyAgICBsYXllclBvc2l0aW9uIC09IGN1bXVsYXRp
dmVEZWx0YTsKKworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbExheWVy
LT5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgYW5jaG9yUG9pbnQgPSBzdGF0ZS5hbmNob3JQb2ludDsKKyAgICAgICAgICAgIGF1
dG8mIHNpemUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkKKyAgICAg
ICAgICAgICAgICArIEZsb2F0UG9pbnQoYW5jaG9yUG9pbnQueCgpICogc2l6ZS53aWR0aCgpLCBh
bmNob3JQb2ludC55KCkgKiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9KTsKKworICAgIGlmIChtX2NoaWxkcmVuKSB7CisgICAgICAgIEZs
b2F0U2l6ZSBuZXdEZWx0YSA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25BdExhc3RMYXlvdXQoKSArIGN1bXVsYXRpdmVEZWx0YTsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0Fm
dGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBuZXdEZWx0
YSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmgKaW5kZXggZDBhYTg3OTI0MjIuLjNkNWRiYjUxMDkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlTm9kZS5oIgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xs
aW5nVHJlZUZpeGVkTm9kZSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00
Myw4ICs0NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxk
cmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPE5p
Y29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRml4ZWRQb3NpdGlv
blZpZXdwb3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCBlY2M2ZjMxNzMwNi4u
ODNjM2YyNTYzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nv
b3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3MuY3BwCkBAIC0yOCw3ICsyOCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKworI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVy
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDQsMjUgKzQ3LDE0MCBAQCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0
ZWRHcmFwaGljczo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTgogCiBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6flNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzKCkgPSBkZWZhdWx0OwogCi12b2lkIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRTdGF0ZUJlZm9yZUNo
aWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQoreworICAgIC8vZnBy
aW50ZihzdGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRH
cmFwaGljczo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbigpIGNoYW5nZWQgcHJvcGVydGllcyAl
ZFxuIiwKKyAgICAvLyAgICBzdGF0ZU5vZGUuY2hhbmdlZFByb3BlcnRpZXMoKSk7CisgICAgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihz
dGF0ZU5vZGUpOworICAgIGNvbnN0IGF1dG8mIHNjcm9sbGluZ1N0YXRlTm9kZSA9IGRvd25jYXN0
PFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlPihzdGF0ZU5vZGUpOworCisgICAgaWYg
KHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2Rl
OjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIg
PSBzY3JvbGxpbmdTdGF0ZU5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXllciA9IGRv
d25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJp
bnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogU2Nyb2xsTGF5ZXIgJXAgaWQgJWx1XG4i
LCBtX3Njcm9sbExheWVyLmdldCgpLCBtX3Njcm9sbExheWVyID8gbV9zY3JvbGxMYXllci0+aWQo
KSA6IDApOworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9w
ZXJ0eShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNjcm9sbGVkQ29udGVudHNMYXllcikp
IHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0
ZU5vZGUuc2Nyb2xsZWRDb250ZW50c0xheWVyKCk7CisgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAg
ICAgICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBTY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJXAgaWQgJWx1XG4iLCBtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSwgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgPyBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+aWQoKSA6IDAp
OworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShT
Y3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Q291bnRlclNjcm9sbGluZ0xheWVyKSkg
eworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5jb3VudGVyU2Nyb2xsaW5nTGF5ZXIoKTsKKyAgICAgICAgbV9jb3VudGVyU2Nyb2xsaW5n
TGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAg
ICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQgcHJvcGVydHk6IENvdW50ZXJTY3JvbGxp
bmdMYXllciAlcFxuIiwgbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOworICAgIH0KKyAg
ICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SW5zZXRDbGlwTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6
OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmluc2V0Q2xpcExheWVy
KCk7CisgICAgICAgIG1faW5zZXRDbGlwTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21wb3Np
dGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNoYW5nZWQg
cHJvcGVydHk6IEluc2V0Q2xpcExheWVyICVwXG4iLCBtX2luc2V0Q2xpcExheWVyLmdldCgpKTsK
KyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkNvbnRlbnRTaGFkb3dMYXllcikpIHsKKyAg
ICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUu
Y29udGVudFNoYWRvd0xheWVyKCk7CisgICAgICAgIG1fY29udGVudFNoYWRvd0xheWVyID0gZG93
bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2Zwcmlu
dGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBDb250ZW50U2hhZG93TGF5ZXIgJXBcbiIs
IG1fY29udGVudFNoYWRvd0xheWVyLmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0
YXRlTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05v
ZGU6OkhlYWRlckxheWVyKSkgeworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXll
ciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5oZWFkZXJMYXllcigpOworICAgICAgICBtX2hlYWRlckxh
eWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAg
ICAvL2ZwcmludGYoc3RkZXJyLCAiXHRjaGFuZ2VkIHByb3BlcnR5OiBIZWFkZXJMYXllciAlcFxu
IiwgbV9oZWFkZXJMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5v
ZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpG
b290ZXJMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBz
Y3JvbGxpbmdTdGF0ZU5vZGUuZm9vdGVyTGF5ZXIoKTsKKyAgICAgICAgbV9mb290ZXJMYXllciA9
IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9m
cHJpbnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogRm9vdGVyTGF5ZXIgJXBcbiIsIG1f
Zm9vdGVyTGF5ZXIuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVu
KGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogeworICAgIC8vZnByaW50Zihz
dGRlcnIsICJTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6Y29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKCkgY2hhbmdlZCBwcm9wZXJ0aWVzICVkXG4iLAor
ICAgIC8vICAgIHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKTsKK30KKwordm9pZCBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6aGFuZGxlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYg
KCFjYW5IYXZlU2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxCeSh7
IHdoZWVsRXZlbnQuZGVsdGFYKCksIC13aGVlbEV2ZW50LmRlbHRhWSgpIH0pOworCisgICAgLy8g
VE9ETzoKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVs
RXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICAvLyBzY3JvbGxpbmdUcmVlKCkuaGFuZGxl
V2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7CiB9CiAKIEZsb2F0UG9pbnQgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyB9OworICAgIEFTU0VSVChtX3Njcm9sbExh
eWVyKTsKKworICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb247CisgICAgbV9zY3JvbGxMYXll
ci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKGNvbnN0IE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICBzY3JvbGxQb3NpdGlvbiA9IC1zdGF0ZS5wb3NpdGlvbjsKKyAgICAgICAgfSk7CisgICAg
cmV0dXJuIHNjcm9sbFBvc2l0aW9uOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVk
R3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQog
eworICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29v
cmRpbmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBGbG9hdFBvaW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRl
bnRFZGdlQ29uc3RyYWludHMoY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7Cisg
ICAgc3RkOjpvcHRpb25hbDxGbG9hdFBvaW50PiBsYXlvdXRWaWV3cG9ydE9yaWdpbjsKKyAgICBp
ZiAoc2Nyb2xsaW5nVHJlZSgpLnZpc3VhbFZpZXdwb3J0RW5hYmxlZCgpKSB7CisgICAgICAgIEZs
b2F0UG9pbnQgdmlzaWJsZUNvbnRlbnRPcmlnaW4gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICAgICAg
RmxvYXRSZWN0IG5ld0xheW91dFZpZXdwb3J0ID0gbGF5b3V0Vmlld3BvcnRGb3JTY3JvbGxQb3Np
dGlvbih2aXNpYmxlQ29udGVudE9yaWdpbiwgZnJhbWVTY2FsZUZhY3RvcigpKTsKKyAgICAgICAg
c2V0TGF5b3V0Vmlld3BvcnQobmV3TGF5b3V0Vmlld3BvcnQpOworICAgICAgICBsYXlvdXRWaWV3
cG9ydE9yaWdpbiA9IG5ld0xheW91dFZpZXdwb3J0LmxvY2F0aW9uKCk7CisgICAgfQorCisgICAg
c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnQoKSk7
CisgICAgc2Nyb2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKHNjcm9sbGlu
Z05vZGVJRCgpLCBzY3JvbGxQb3NpdGlvbiwgbGF5b3V0Vmlld3BvcnRPcmlnaW4pOwogfQogCi12
b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGlj
czo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBsYXlvdXRWaWV3cG9ydCkKIHsKKyAgICAvL2ZwcmludGYoc3Rk
ZXJyLCAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6
OnNldFNjcm9sbExheWVyUG9zaXRpb24oKSBwb3NpdGlvbiAoJS4yZiwlLjJmKSBsYXlvdXRWaWV3
cG9ydCAoJS4yZiwlLjJmKXgoJS4yZiwlLjJmKVxuIiwKKyAgICAvLyAgICBzY3JvbGxQb3NpdGlv
bi54KCksIHNjcm9sbFBvc2l0aW9uLnkoKSwKKyAgICAvLyAgICBsYXlvdXRWaWV3cG9ydC54KCks
IGxheW91dFZpZXdwb3J0LnkoKSwgbGF5b3V0Vmlld3BvcnQud2lkdGgoKSwgbGF5b3V0Vmlld3Bv
cnQuaGVpZ2h0KCkpOworCisgICAgYXV0byB1cGRhdGVTY29wZSA9IG1fc2Nyb2xsTGF5ZXItPmNy
ZWF0ZVVwZGF0ZVNjb3BlKCk7CisKKyAgICBBU1NFUlQobV9zY3JvbGxMYXllcik7CisgICAgbV9z
Y3JvbGxMYXllci0+YWNjZXNzU3RhdGUoCisgICAgICAgIFsmc2Nyb2xsUG9zaXRpb25dKE5pY29z
aWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRlKQorICAgICAgICB7CisgICAg
ICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9IC1zY3JvbGxQb3NpdGlvbjsKKyAgICAgICAgICAgIHN0
YXRlLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgRmxv
YXRSZWN0IHZpc2libGVDb250ZW50UmVjdChzY3JvbGxQb3NpdGlvbiwgc2Nyb2xsYWJsZUFyZWFT
aXplKCkpOworICAgIEZsb2F0UmVjdCBmaXhlZFBvc2l0aW9uUmVjdDsKKyAgICBTY3JvbGxCZWhh
dmlvckZvckZpeGVkRWxlbWVudHMgYmVoYXZpb3JGb3JGaXhlZCA9IFN0aWNrVG9WaWV3cG9ydEJv
dW5kczsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCkudmlzdWFsVmlld3BvcnRFbmFibGVkKCkp
CisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0gbGF5b3V0Vmlld3BvcnQ7CisgICAgZWxzZSB7
CisgICAgICAgIGJlaGF2aW9yRm9yRml4ZWQgPSBzY3JvbGxCZWhhdmlvckZvckZpeGVkRWxlbWVu
dHMoKTsKKworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJl
biA9IEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKGVuY2xvc2luZ0xh
eW91dFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KSwgTGF5b3V0U2l6ZSh0b3RhbENvbnRlbnRzU2l6
ZSgpKSwKKyAgICAgICAgICAgIExheW91dFBvaW50KHNjcm9sbFBvc2l0aW9uKSwgc2Nyb2xsT3Jp
Z2luKCksIGZyYW1lU2NhbGVGYWN0b3IoKSwgZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9G
cmFtZSgpLCBiZWhhdmlvckZvckZpeGVkLCBoZWFkZXJIZWlnaHQoKSwgZm9vdGVySGVpZ2h0KCkp
OworCisgICAgICAgIGZpeGVkUG9zaXRpb25SZWN0ID0geyBzY3JvbGxQb3NpdGlvbkZvckZpeGVk
Q2hpbGRyZW4sIHZpc2libGVDb250ZW50UmVjdC5zaXplKCkgfTsKKyAgICB9CisKKyAgICBmbG9h
dCB0b3BDb250ZW50SW5zZXQgPSB0aGlzLT50b3BDb250ZW50SW5zZXQoKTsKKyAgICBpZiAobV9p
bnNldENsaXBMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiB0b3BDb250ZW50SW5z
ZXQpIHsKKyAgICAgICAgLy8gVE9ETzogLi4uCisgICAgfQorCisgICAgaWYgKG1fY2hpbGRyZW4p
IHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAg
Y2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoKnRoaXMsIGZpeGVkUG9zaXRp
b25SZWN0LCBGbG9hdFNpemUoKSk7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjp1cGRhdGVMYXllcnNBZnRlclZpZXdw
b3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkKQEAgLTcxLDQgKzE4OSw0IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnVw
ZGF0ZUxheWVyc0FmdGVyVmlld3BvCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oCmluZGV4IDY1MDg2Y2M5MmJkLi5iZTdiZDY3NmFiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaApAQCAtMjcsMTAgKzI3
LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MgZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZSB7CkBAIC00MSw2ICs0Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3Mo
U2Nyb2xsaW5nVHJlZSYsIFNjcm9sbGluZ05vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQpOwogCisg
ICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9k
ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29tbWl0U3RhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNj
cm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCiAgICAgRmxvYXRQb2ludCBz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDksOCArNTQsMTYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnNBZnRlclZp
ZXdwb3J0Q2hhbmdlKGNvbnN0IEZsb2F0UmVjdCYsIGRvdWJsZSkgb3ZlcnJpZGU7CisKKyAgICBS
ZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxMYXllcjsKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXI7Cisg
ICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fY291bnRlclNjcm9sbGluZ0xh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2luc2V0Q2xpcExh
eWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2NvbnRlbnRTaGFk
b3dMYXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9oZWFkZXJM
YXllcjsKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4gbV9mb290ZXJMYXll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRp
bmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmNwcAppbmRleCAwMzIyZTY3NmE2OC4uOWVkNThlYTBiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJl
ZVN0aWNreU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3Jk
aW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCkBAIC0yOCw5ICsyOCwx
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTdGlja3lO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlU3Rp
Y2t5Tm9kZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWUuaCIKKyNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU92ZXJm
bG93U2Nyb2xsaW5nTm9kZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzU0LDU5IEBAIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp+U2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUoKQogICAgIHNjcm9sbGluZ1RyZWUo
KS5maXhlZE9yU3RpY2t5Tm9kZVJlbW92ZWQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3Rp
Y2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5v
ZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGls
ZHJlbihjb25zdCBTY3JvbGxpbmdTdGF0ZU5vZGUmIHN0YXRlTm9kZSkKIHsKKyAgICBhdXRvJiBz
dGlja3lOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlPihzdGF0ZU5vZGUp
OworCisgICAgaWYgKHN0aWNreU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
Tm9kZTo6U2Nyb2xsTGF5ZXIpKSB7CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxh
eWVyID0gc3RpY2t5Tm9kZS5sYXllcigpOworICAgICAgICBtX3Njcm9sbExheWVyID0gZG93bmNh
c3Q8Tmljb3NpYTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgIH0KKworICAgIGlmIChz
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZTo6Vmll
d3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBzdGlja3lOb2RlLnZp
ZXdwb3J0Q29uc3RyYWludHMoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZTo6
dXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpCit2b2lkIFNjcm9sbGluZ1RyZWVT
dGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGlu
Z1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0aW9uUmVj
dCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgYm9vbCBhZGp1c3RT
dGlja3lMYXllciA9IGZhbHNlOworICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0OworCisg
ICAgaWYgKGlzPFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkp
IHsKKyAgICAgICAgY29uc3RyYWluaW5nUmVjdCA9IEZsb2F0UmVjdChkb3duY2FzdDxTY3JvbGxp
bmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlPigqcGFyZW50KCkpLnNjcm9sbFBvc2l0aW9uKCks
IG1fY29uc3RyYWludHMuY29uc3RyYWluaW5nUmVjdEF0TGFzdExheW91dCgpLnNpemUoKSk7Cisg
ICAgICAgIGFkanVzdFN0aWNreUxheWVyID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGlzPFNjcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU+KCpwYXJlbnQoKSkpIHsKKyAgICAgICAgY29uc3Ry
YWluaW5nUmVjdCA9IGZpeGVkUG9zaXRpb25SZWN0OworICAgICAgICBhZGp1c3RTdGlja3lMYXll
ciA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRTaXplIGRlbHRhRm9yRGVzY2VuZGFudHMgPSBj
dW11bGF0aXZlRGVsdGE7CisKKyAgICBpZiAoYWRqdXN0U3RpY2t5TGF5ZXIpIHsKKyAgICAgICAg
RmxvYXRQb2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9y
Q29uc3RyYWluaW5nUmVjdChjb25zdHJhaW5pbmdSZWN0KTsKKworICAgICAgICBBU1NFUlQobV9z
Y3JvbGxMYXllcik7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXItPmFjY2Vzc1N0YXRlKAorICAgICAg
ICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyOjpM
YXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBh
bmNob3JQb2ludCA9IHN0YXRlLmFuY2hvclBvaW50OworICAgICAgICAgICAgICAgIGF1dG8mIHNp
emUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9
IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmFsaWdubWVudE9mZnNldCgpCisgICAgICAg
ICAgICAgICAgICAgICsgRmxvYXRQb2ludChhbmNob3JQb2ludC54KCkgKiBzaXplLndpZHRoKCks
IGFuY2hvclBvaW50LnkoKSAqIHNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHN0YXRl
LnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgc3RhdGUuZGVsdGEucG9zaXRp
b25DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGRlbHRhRm9yRGVz
Y2VuZGFudHMgPSBsYXllclBvc2l0aW9uIC0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uQXRM
YXN0TGF5b3V0KCkgKyBjdW11bGF0aXZlRGVsdGE7CisgICAgfQorCisgICAgaWYgKG1fY2hpbGRy
ZW4pIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAg
ICAgY2hpbGQtPnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZp
eGVkUG9zaXRpb25SZWN0LCBkZWx0YUZvckRlc2NlbmRhbnRzKTsKKyAgICB9CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCmluZGV4IGYzMTMz
YTcwOGM3Li5lYjE4ZjRjZWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xs
aW5nVHJlZVN0aWNreU5vZGUuaApAQCAtMjcsMTAgKzI3LDEzIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgogCisj
aW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUg
ZmluYWwgOiBwdWJsaWMgU2Nyb2xsaW5nVHJlZU5vZGUgewpAQCAtNDMsOCArNDYsMTEgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBTY3JvbGxp
bmdTdGF0ZU5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0
b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlv
bkxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJh
aW50cyBtX2NvbnN0cmFpbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZQppbmRleCA0YjQ5OTYyMzYwYS4uNDk5ZmVkOGQwNTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpAQCAtMzUsNyArMzUsNiBAQCBp
ZiAoVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTKQogCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvVGlsZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL1RpbGVkQmFja2luZ1N0b3JlLmNwcAogICAgICkKQEAgLTU0LDYgKzUzLDcg
QEAgaWYgKFVTRV9DT09SRElOQVRFRF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9OaWNvc2lhUGFpbnRpbmdFbmdpbmVUaHJlYWRlZC5jcHAKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1MYXllci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmUuY3BwCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uY3BwCiAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmgK
aW5kZXggNDlmMjJkYjRkMWQuLmMxYWNkMDAwMDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFQbGF0Zm9ybUxheWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhUGxhdGZvcm1M
YXllci5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiTmlj
b3NpYVNjZW5lSW50ZWdyYXRpb24uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb24uaD4KQEAgLTUwLDcgKzUxLDI5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXND
b21wb3NpdGlvbkxheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNDb250ZW50TGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdWludDY0
X3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgdXNpbmcgTGF5ZXJJRCA9IHVpbnQ2
NF90OworICAgIExheWVySUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICB2b2lk
IHNldFNjZW5lSW50ZWdyYXRpb24oUmVmUHRyPFNjZW5lSW50ZWdyYXRpb24+JiYgc2NlbmVJbnRl
Z3JhdGlvbikKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3RhdGUubG9jayk7
CisgICAgICAgIG1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbiA9IFdURk1vdmUoc2NlbmVJbnRlZ3Jh
dGlvbik7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFNjZW5lSW50ZWdyYXRpb246OlVw
ZGF0ZVNjb3BlPiBjcmVhdGVVcGRhdGVTY29wZSgpCisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgICAgICBpZiAobV9zdGF0ZS5zY2VuZUludGVncmF0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbi0+Y3JlYXRl
VXBkYXRlU2NvcGUoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9p
ZCByZXF1ZXN0VXBkYXRlKCkKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc3Rh
dGUubG9jayk7CisgICAgICAgIGlmIChtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24pCisgICAgICAg
ICAgICBtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24tPnJlcXVlc3RVcGRhdGUoKTsKKyAgICB9CiAK
IHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBQbGF0Zm9ybUxheWVyKHVpbnQ2NF90KTsKQEAgLTU5
LDYgKzgyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RydWN0IHsKICAgICAgICAgTG9jayBsb2Nr
OworICAgICAgICBSZWZQdHI8U2NlbmVJbnRlZ3JhdGlvbj4gc2NlbmVJbnRlZ3JhdGlvbjsKICAg
ICB9IG1fc3RhdGU7CiB9OwogCkBAIC0xNzMsNiArMTk3LDI0IEBAIHB1YmxpYzoKICAgICAgICAg
fSBkZWJ1Z0JvcmRlcjsKICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2
b2lkIGFjY2Vzc1N0YXRlKGNvbnN0IFQmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihQbGF0Zm9ybUxheWVyOjptX3N0YXRlLmxvY2spOworICAgICAgICBmdW5jdG9y
KG1fc3RhdGUucGVuZGluZyk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICB2b2lkIGFjY2Vzc1N0YXRlQW5kVXBkYXRlKGNvbnN0IFQmIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihQbGF0Zm9ybUxheWVyOjptX3N0YXRlLmxvY2spOworICAg
ICAgICBmdW5jdG9yKG1fc3RhdGUucGVuZGluZyk7CisKKyAgICAgICAgYXV0byYgc2NlbmVJbnRl
Z3JhdGlvbiA9IFBsYXRmb3JtTGF5ZXI6Om1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbjsKKyAgICAg
ICAgaWYgKHNjZW5lSW50ZWdyYXRpb24pCisgICAgICAgICAgICBzY2VuZUludGVncmF0aW9uLT5y
ZXF1ZXN0VXBkYXRlKCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICB2
b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFQmIGZ1bmN0b3IpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRlZ3Jh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29z
aWFTY2VuZUludGVncmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNjg5MmU2NjRmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmNwcApAQCAtMCww
ICsxLDQ5IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmljb3NpYVNjZW5lSW50
ZWdyYXRpb24uaCIKKworbmFtZXNwYWNlIE5pY29zaWEgeworCitTY2VuZUludGVncmF0aW9uOjpT
Y2VuZUludGVncmF0aW9uKENsaWVudCYgY2xpZW50KQoreworICAgIG1fY2xpZW50Lm9iamVjdCA9
ICZjbGllbnQ7Cit9CisKK1NjZW5lSW50ZWdyYXRpb246On5TY2VuZUludGVncmF0aW9uKCkKK3sK
KyAgICBBU1NFUlQoIW1fY2xpZW50Lm9iamVjdCk7Cit9CisKK3ZvaWQgU2NlbmVJbnRlZ3JhdGlv
bjo6aW52YWxpZGF0ZSgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jbGllbnQubG9jayk7
CisgICAgbV9jbGllbnQub2JqZWN0ID0gbnVsbHB0cjsKK30KKwordm9pZCBTY2VuZUludGVncmF0
aW9uOjpyZXF1ZXN0VXBkYXRlKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2NsaWVudC5s
b2NrKTsKKyAgICBpZiAobV9jbGllbnQub2JqZWN0KQorICAgICAgICBtX2NsaWVudC5vYmplY3Qt
PnJlcXVlc3RVcGRhdGUoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFNjZW5lSW50ZWdyYXRpb246
OlVwZGF0ZVNjb3BlPiBTY2VuZUludGVncmF0aW9uOjpjcmVhdGVVcGRhdGVTY29wZSgpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VXBkYXRlU2NvcGU+KG1ha2VSZWYoKnRoaXMpKTsK
K30KKworU2NlbmVJbnRlZ3JhdGlvbjo6Q2xpZW50Ojp+Q2xpZW50KCkgPSBkZWZhdWx0OworCitT
Y2VuZUludGVncmF0aW9uOjpVcGRhdGVTY29wZTo6VXBkYXRlU2NvcGUoUmVmPFNjZW5lSW50ZWdy
YXRpb24+JiYgc2NlbmVJbnRlZ3JhdGlvbikKKyAgICA6IG1fc2NlbmVJbnRlZ3JhdGlvbihXVEZN
b3ZlKHNjZW5lSW50ZWdyYXRpb24pKQorICAgICwgbV9sb2NrZXIobV9zY2VuZUludGVncmF0aW9u
LT5tX2NsaWVudC5sb2NrKQoreworfQorCitTY2VuZUludGVncmF0aW9uOjpVcGRhdGVTY29wZTo6
flVwZGF0ZVNjb3BlKCkKK3sKKyAgICBhdXRvJiBzY2VuZUludGVncmF0aW9uT2JqID0gbV9zY2Vu
ZUludGVncmF0aW9uLmdldCgpOworICAgIGlmIChzY2VuZUludGVncmF0aW9uT2JqLm1fY2xpZW50
Lm9iamVjdCkKKyAgICAgICAgc2NlbmVJbnRlZ3JhdGlvbk9iai5tX2NsaWVudC5vYmplY3QtPnJl
cXVlc3RVcGRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmljb3NpYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRl
Z3JhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNv
c2lhU2NlbmVJbnRlZ3JhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5iZjU5ZmQzMzZmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdyYXRpb24uaApAQCAtMCwwICsx
LDQ1IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIE5pY29zaWEgeworCitjbGFzcyBTY2VuZUludGVncmF0
aW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNjZW5lSW50ZWdyYXRpb24+IHsKK3B1
YmxpYzoKKyAgICBjbGFzcyBDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+
Q2xpZW50KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RVcGRhdGUoKSA9IDA7Cisg
ICAgfTsKKworICAgIFNjZW5lSW50ZWdyYXRpb24oQ2xpZW50Jik7CisgICAgflNjZW5lSW50ZWdy
YXRpb24oKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCByZXF1ZXN0VXBk
YXRlKCk7CisKKyAgICBjbGFzcyBVcGRhdGVTY29wZSB7CisgICAgcHVibGljOgorICAgICAgICBV
cGRhdGVTY29wZShSZWY8U2NlbmVJbnRlZ3JhdGlvbj4mJik7CisgICAgICAgIH5VcGRhdGVTY29w
ZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmPFNjZW5lSW50ZWdyYXRpb24+IG1fc2Nl
bmVJbnRlZ3JhdGlvbjsKKyAgICAgICAgTG9ja0hvbGRlciBtX2xvY2tlcjsKKyAgICB9OworCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFVwZGF0ZVNjb3BlPiBjcmVhdGVVcGRhdGVTY29wZSgpOworCitw
cml2YXRlOgorICAgIHN0cnVjdCB7CisgICAgICAgIExvY2sgbG9jazsKKyAgICAgICAgQ2xpZW50
KiBvYmplY3QgeyBudWxscHRyIH07CisgICAgfSBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIE5pY29zaWEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAKaW5kZXggNTlkYjBmNTkyYWQuLjExN2Q5MTg0NTQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNw
cApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ0VuZ2luZS5oIgog
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIK
ICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjZW5kaWYKQEAg
LTUzLDExICs1NCw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xh
eWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvCiAgICAgcmV0dXJuIGZhY3Rv
cnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQpOwogfQogCi1zdGF0aWMg
Q29vcmRpbmF0ZWRMYXllcklEIHRvQ29vcmRpbmF0ZWRMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQotewotICAgIHJldHVybiBpczxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KGxheWVyKSA/
IGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4oKmxheWVyKS5pZCgpIDogMDsKLX0K
LQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQoKQog
ewogICAgIGlmICghbV9jb29yZGluYXRvcikKQEAgLTY5LDMzICs2NSwyMSBAQCB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZCgpCiAgICAgY2xpZW50KCku
bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQotewotICAgIG1fc2hvdWxkU3luY0xheWVyU3Rh
dGUgPSB0cnVlOwotICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKLX0KLQogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUFuaW1hdGlvbnMoKQogewotICAgIG1fc2hvdWxk
U3luY0FuaW1hdGlvbnMgPSB0cnVlOworICAgIG1fbmljb3NpYS5kZWx0YS5hbmltYXRpb25zQ2hh
bmdlZCA9IHRydWU7CiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwogfQogCiB2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4oKQogewotICAgIG1fc2hvdWxk
U3luY0NoaWxkcmVuID0gdHJ1ZTsKKyAgICBtX25pY29zaWEuZGVsdGEuY2hpbGRyZW5DaGFuZ2Vk
ID0gdHJ1ZTsKICAgICBub3RpZnlGbHVzaFJlcXVpcmVkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0ZXJzKCkKIHsKLSAgICBtX3Nob3VsZFN5bmNG
aWx0ZXJzID0gdHJ1ZTsKLSAgICBub3RpZnlGbHVzaFJlcXVpcmVkKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKQotewotICAgIG1f
c2hvdWxkU3luY0ltYWdlQmFja2luZyA9IHRydWU7CisgICAgbV9uaWNvc2lhLmRlbHRhLmZpbHRl
cnNDaGFuZ2VkID0gdHJ1ZTsKICAgICBub3RpZnlGbHVzaFJlcXVpcmVkKCk7CiB9CiAKQEAgLTEw
NSw4ICs4OSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRVcGRhdGVUaWxl
QnVmZmVycygpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcmVwYWludENvdW50ID0gaW5j
cmVtZW50UmVwYWludENvdW50KCk7Ci0gICAgbV9sYXllclN0YXRlLnJlcGFpbnRDb3VudC5jb3Vu
dCA9IHJlcGFpbnRDb3VudDsKLSAgICBtX2xheWVyU3RhdGUucmVwYWludENvdW50Q2hhbmdlZCA9
IHRydWU7CiAgICAgbV9uaWNvc2lhLnJlcGFpbnRDb3VudGVyLmNvdW50ID0gcmVwYWludENvdW50
OwogICAgIG1fbmljb3NpYS5kZWx0YS5yZXBhaW50Q291bnRlckNoYW5nZWQgPSB0cnVlOwogfQpA
QCAtMTIyLDcgKzEwNCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91
bGRVcGRhdGVWaXNpYmxlUmVjdCgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VHZW9tZXRyeSgpCiB7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIG5v
dGlmeUZsdXNoUmVxdWlyZWQoKTsKICAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwog
fQogCkBAIC0xMzIsMjggKzExNCwyNCBAQCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihUeXBlIGxheWVyVHlwZSwgR3JhcGhpY3NMYXllcgogICAgICwg
bV9pc1B1cmdpbmcoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3QodHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKLSAgICAsIG1fc2hv
dWxkU3luY0NoaWxkcmVuKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCi0g
ICAgLCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcodHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0Fu
aW1hdGlvbnModHJ1ZSkKICAgICAsIG1fbW92aW5nVmlzaWJsZVJlY3QoZmFsc2UpCiAgICAgLCBt
X3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudChmYWxzZSkKICAgICAsIG1fcGVuZGluZ1Zp
c2libGVSZWN0QWRqdXN0bWVudChmYWxzZSkKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Nf
VEhSRUFERUQpCi0gICAgLCBtX3Nob3VsZFN5bmNQbGF0Zm9ybUxheWVyKGZhbHNlKQogICAgICwg
bV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX2Nvb3Jk
aW5hdG9yKDApCiAgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQotICAgICwgbV9w
bGF0Zm9ybUxheWVyKDApCiAgICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcigqdGhpcywgJkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCiB7Ci0g
ICAgc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7CisgICAgc3RhdGlj
IE5pY29zaWE6OlBsYXRmb3JtTGF5ZXI6OkxheWVySUQgbmV4dExheWVySUQgPSAxOwogICAgIG1f
aWQgPSBuZXh0TGF5ZXJJRCsrOwogCiAgICAgbV9uaWNvc2lhLmxheWVyID0gTmljb3NpYTo6Q29t
cG9zaXRpb25MYXllcjo6Y3JlYXRlKG1faWQsCiAgICAgICAgIE5pY29zaWE6OkNvbXBvc2l0aW9u
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgpKTsKKworICAgIC8vIEhleSwg
d2hhdCBjYW4geW91IGRvLgorICAgIG1fbmljb3NpYS5kZWx0YS52YWx1ZSA9IFVJTlRfTUFYOwog
fQogCiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
KQpAQCAtMTYyLDggKzE0MCw2IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6fkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcigpCiAgICAgICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOwogICAgICAg
ICBtX2Nvb3JkaW5hdG9yLT5kZXRhY2hMYXllcih0aGlzKTsKICAgICB9Ci0gICAgQVNTRVJUKCFt
X2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKTsKLSAgICBBU1NFUlQoIW1fbWFpbkJhY2tpbmdTdG9y
ZSk7CiAgICAgQVNTRVJUKCFtX25pY29zaWEuaW1hZ2VCYWNraW5nKTsKICAgICBBU1NFUlQoIW1f
bmljb3NpYS5iYWNraW5nU3RvcmUpOwogICAgIHdpbGxCZURlc3Ryb3llZCgpOwpAQCAtMjI5LDE4
ICsyMDUsMjYgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNv
bnN0IEZsb2F0UG9pbnQmIHApCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFBvc2l0aW9uKHApOwotICAgIG1fbGF5ZXJTdGF0ZS5wb3NpdGlvbkNoYW5nZWQgPSB0cnVl
OwogICAgIG1fbmljb3NpYS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgIGRpZENo
YW5nZUdlb21ldHJ5KCk7CiB9CiAKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBw
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24ocCk7
CisgICAgbV9uaWNvc2lhLmRlbHRhLnBvc2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgc2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKIHsKICAgICBpZiAoYW5j
aG9yUG9pbnQoKSA9PSBwKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRBbmNob3JQb2ludChwKTsKLSAgICBtX2xheWVyU3RhdGUuYW5jaG9yUG9pbnRDaGFuZ2VkID0g
dHJ1ZTsKICAgICBtX25pY29zaWEuZGVsdGEuYW5jaG9yUG9pbnRDaGFuZ2VkID0gdHJ1ZTsKICAg
ICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwogfQpAQCAtMjUxLDcgKzIzNSw2IEBAIHZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKLSAgICBtX2xh
eWVyU3RhdGUuc2l6ZUNoYW5nZWQgPSB0cnVlOwogICAgIG1fbmljb3NpYS5kZWx0YS5zaXplQ2hh
bmdlZCA9IHRydWU7CiAKICAgICBpZiAobWFza0xheWVyKCkpCkBAIC0yNjUsNyArMjQ4LDYgQEAg
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6
c2V0VHJhbnNmb3JtKHQpOwotICAgIG1fbGF5ZXJTdGF0ZS50cmFuc2Zvcm1DaGFuZ2VkID0gdHJ1
ZTsKICAgICBtX25pY29zaWEuZGVsdGEudHJhbnNmb3JtQ2hhbmdlZCA9IHRydWU7CiAKICAgICBk
aWRDaGFuZ2VHZW9tZXRyeSgpOwpAQCAtMjc3LDcgKzI1OSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5U
cmFuc2Zvcm0odCk7Ci0gICAgbV9sYXllclN0YXRlLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCA9
IHRydWU7CiAgICAgbV9uaWNvc2lhLmRlbHRhLmNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZCA9IHRy
dWU7CiAKICAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwpAQCAtMjg5LDggKzI3MCw2IEBAIHZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOwotICAgIG1f
bGF5ZXJTdGF0ZS5wcmVzZXJ2ZXMzRCA9IGI7Ci0gICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdl
ZCA9IHRydWU7CiAgICAgbV9uaWNvc2lhLmRlbHRhLmZsYWdzQ2hhbmdlZCA9IHRydWU7CiAKICAg
ICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwpAQCAtMzAxLDggKzI4MCw2IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKICAgICBpZiAobWFza3NU
b0JvdW5kcygpID09IGIpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRN
YXNrc1RvQm91bmRzKGIpOwotICAgIG1fbGF5ZXJTdGF0ZS5tYXNrc1RvQm91bmRzID0gYjsKLSAg
ICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKICAgICBtX25pY29zaWEuZGVsdGEu
ZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKIAogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CkBAIC0zMTMs
MTEgKzI5MCw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRl
bnQoYm9vbCBiKQogICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQogICAgICAgICByZXR1cm47
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOwotICAgIG1fbGF5ZXJTdGF0
ZS5kcmF3c0NvbnRlbnQgPSBiOwotICAgIG1fbGF5ZXJTdGF0ZS5mbGFnc0NoYW5nZWQgPSB0cnVl
OwogICAgIG1fbmljb3NpYS5kZWx0YS5mbGFnc0NoYW5nZWQgPSB0cnVlOwogCi0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOworICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCkBAIC0z
MjUsMTQgKzMwMCwxMiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNWaXNpYmxlKGJvb2wgYikKICAgICBpZiAoY29udGVudHNBcmVWaXNpYmxlKCkgPT0gYikKICAg
ICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShiKTsK
LSAgICBtX2xheWVyU3RhdGUuY29udGVudHNWaXNpYmxlID0gYjsKLSAgICBtX2xheWVyU3RhdGUu
ZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKICAgICBtX25pY29zaWEuZGVsdGEuZmxhZ3NDaGFuZ2VkID0g
dHJ1ZTsKIAogICAgIGlmIChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnNldENv
bnRlbnRzVmlzaWJsZShiKTsKIAotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBub3Rp
ZnlGbHVzaFJlcXVpcmVkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c09wYXF1ZShib29sIGIpCkBAIC0zNDEsOCArMzE0LDYgQEAgdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgYikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7Ci0gICAgbV9s
YXllclN0YXRlLmNvbnRlbnRzT3BhcXVlID0gYjsKLSAgICBtX2xheWVyU3RhdGUuZmxhZ3NDaGFu
Z2VkID0gdHJ1ZTsKICAgICBtX25pY29zaWEuZGVsdGEuZmxhZ3NDaGFuZ2VkID0gdHJ1ZTsKIAog
ICAgIC8vIERlbWFuZCBhIHJlcGFpbnQgb2YgdGhlIHdob2xlIGxheWVyLgpAQCAtMzUzLDcgKzMy
NCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShi
b29sIGIpCiAgICAgICAgIGFkZFJlcGFpbnRSZWN0KHsgeyB9LCBtX3NpemUgfSk7CiAgICAgfQog
Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsK
IH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0
eShib29sIGIpCkBAIC0zNjIsMTEgKzMzMyw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCBiKQogICAgICAgICByZXR1cm47CiAKICAg
ICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYik7Ci0gICAgbV9sYXllclN0
YXRlLmJhY2tmYWNlVmlzaWJsZSA9IGI7Ci0gICAgbV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCA9
IHRydWU7CiAgICAgbV9uaWNvc2lhLmRlbHRhLmZsYWdzQ2hhbmdlZCA9IHRydWU7CiAKLSAgICBk
aWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQpA
QCAtMzc1LDExICszNDQsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0T3Bh
Y2l0eShmbG9hdCBvcGFjaXR5KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVy
OjpzZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIG1fbGF5ZXJTdGF0ZS5vcGFjaXR5ID0gb3BhY2l0
eTsKLSAgICBtX2xheWVyU3RhdGUub3BhY2l0eUNoYW5nZWQgPSB0cnVlOwogICAgIG1fbmljb3Np
YS5kZWx0YS5vcGFjaXR5Q2hhbmdlZCA9IHRydWU7CiAKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7CisgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKQEAgLTM4OCwx
MSArMzU1LDkgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVj
dChjb25zdCBGbG9hdFJlY3QmIHIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKLSAgICBtX2xheWVyU3RhdGUuY29udGVudHNSZWN0ID0g
cjsKLSAgICBtX2xheWVyU3RhdGUuY29udGVudHNSZWN0Q2hhbmdlZCA9IHRydWU7CiAgICAgbV9u
aWNvc2lhLmRlbHRhLmNvbnRlbnRzUmVjdENoYW5nZWQgPSB0cnVlOwogCi0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVGlsZVNpemUoY29uc3QgRmxvYXRTaXpl
JiBzKQpAQCAtNDAxLDEwICszNjYsOCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNUaWxlU2l6ZShjb25zdCBGbG9hdFNpemUmIHMpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVGlsZVNpemUocyk7Ci0gICAgbV9sYXll
clN0YXRlLmNvbnRlbnRzVGlsZVNpemUgPSBzOwotICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1Rp
bGluZ0NoYW5nZWQgPSB0cnVlOwogICAgIG1fbmljb3NpYS5kZWx0YS5jb250ZW50c1RpbGluZ0No
YW5nZWQgPSB0cnVlOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBub3RpZnlGbHVz
aFJlcXVpcmVkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1RpbGVQaGFzZShjb25zdCBGbG9hdFNpemUmIHApCkBAIC00MTMsMTAgKzM3Niw4IEBAIHZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RpbGVQaGFzZShjb25zdCBG
bG9hdFNpemUmIHApCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzVGlsZVBoYXNlKHApOwotICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50c1RpbGVQaGFzZSA9
IHA7Ci0gICAgbV9sYXllclN0YXRlLmNvbnRlbnRzVGlsaW5nQ2hhbmdlZCA9IHRydWU7CiAgICAg
bV9uaWNvc2lhLmRlbHRhLmNvbnRlbnRzVGlsaW5nQ2hhbmdlZCA9IHRydWU7Ci0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOworICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKIH0KIAogYm9vbCBH
cmFwaGljc0xheWVyOjpzdXBwb3J0c0NvbnRlbnRzVGlsaW5nKCkKQEAgLTQyNywxMyArMzg4LDgg
QEAgYm9vbCBHcmFwaGljc0xheWVyOjpzdXBwb3J0c0NvbnRlbnRzVGlsaW5nKCkKIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB7CiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotI2lmIFVTRShOSUNPU0lBKQogICAg
IGlmIChtX25pY29zaWEuY29udGVudExheWVyKQogICAgICAgICBtX3Nob3VsZFVwZGF0ZVBsYXRm
b3JtTGF5ZXIgPSB0cnVlOwotI2Vsc2UKLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAg
ICBtX3Nob3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIgPSB0cnVlOwotI2VuZGlmCiAjZW5kaWYKIAog
ICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKQEAgLTQ0MywxOSArMzk5LDEyIEBAIHZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCiB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllciwgQ29udGVudHNMYXllclB1cnBvc2UpCiB7CiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTX1RIUkVBREVEKQotI2lmIFVTRShOSUNPU0lBKQogICAgIGF1
dG8qIGNvbnRlbnRMYXllciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllcj4ocGxhdGZv
cm1MYXllcik7CiAgICAgaWYgKG1fbmljb3NpYS5jb250ZW50TGF5ZXIgIT0gY29udGVudExheWVy
KSB7Ci0gICAgICAgIG1fc2hvdWxkU3luY1BsYXRmb3JtTGF5ZXIgPSB0cnVlOwogICAgICAgICBt
X25pY29zaWEuY29udGVudExheWVyID0gY29udGVudExheWVyOwogICAgICAgICBtX25pY29zaWEu
ZGVsdGEuY29udGVudExheWVyQ2hhbmdlZCA9IHRydWU7CiAgICAgfQotI2Vsc2UKLSAgICBpZiAo
bV9wbGF0Zm9ybUxheWVyICE9IHBsYXRmb3JtTGF5ZXIpCi0gICAgICAgIG1fc2hvdWxkU3luY1Bs
YXRmb3JtTGF5ZXIgPSB0cnVlOwogCi0gICAgbV9wbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXll
cjsKLSNlbmRpZgogICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKHBsYXRmb3JtTGF5ZXIpOwpAQCAtNDk5LDExICs0NDgsOSBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3NvbGlkQ29sb3IgPSBjb2xvcjsKLSAgICBt
X2xheWVyU3RhdGUuc29saWRDb2xvciA9IGNvbG9yOwotICAgIG1fbGF5ZXJTdGF0ZS5zb2xpZENv
bG9yQ2hhbmdlZCA9IHRydWU7CiAgICAgbV9uaWNvc2lhLmRlbHRhLnNvbGlkQ29sb3JDaGFuZ2Vk
ID0gdHJ1ZTsKIAotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBub3RpZnlGbHVzaFJl
cXVpcmVkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG93RGVi
dWdCb3JkZXIoYm9vbCBzaG93KQpAQCAtNTEyLDEyICs0NTksMTMgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcihib29sIHNob3cpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcihzaG93KTsKLSAg
ICBtX2xheWVyU3RhdGUuZGVidWdWaXN1YWxzLnNob3dEZWJ1Z0JvcmRlcnMgPSBzaG93OwotICAg
IG1fbGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3VhbHNDaGFuZ2VkID0gdHJ1ZTsKICAgICBtX25pY29zaWEu
ZGVidWdCb3JkZXIudmlzaWJsZSA9IHNob3c7CiAgICAgbV9uaWNvc2lhLmRlbHRhLmRlYnVnQm9y
ZGVyQ2hhbmdlZCA9IHRydWU7CiAKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgaWYg
KG1fbmljb3NpYS5kZWJ1Z0JvcmRlci52aXNpYmxlKQorICAgICAgICB1cGRhdGVEZWJ1Z0luZGlj
YXRvcnMoKTsKKworICAgIG5vdGlmeUZsdXNoUmVxdWlyZWQoKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRlcihib29sIHNob3cpCkBAIC01
MjYsMTIgKzQ3NCwxMCBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1Jl
cGFpbnRDb3VudGVyKGJvb2wgc2hvdykKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NM
YXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOwotICAgIG1fbGF5ZXJTdGF0ZS5yZXBh
aW50Q291bnQuc2hvd1JlcGFpbnRDb3VudGVyID0gc2hvdzsKLSAgICBtX2xheWVyU3RhdGUucmVw
YWludENvdW50Q2hhbmdlZCA9IHRydWU7CiAgICAgbV9uaWNvc2lhLnJlcGFpbnRDb3VudGVyLnZp
c2libGUgPSBzaG93OwogICAgIG1fbmljb3NpYS5kZWx0YS5yZXBhaW50Q291bnRlckNoYW5nZWQg
PSB0cnVlOwogCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIG5vdGlmeUZsdXNoUmVx
dWlyZWQoKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
VG9JbWFnZShJbWFnZSogaW1hZ2UpCkBAIC01NDQsNyArNDkwLDcgQEAgdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgbV9j
b21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSBuYXRpdmVJbWFnZVB0cjsKIAogICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7Ci0gICAgZGlkQ2hhbmdlSW1hZ2VCYWNr
aW5nKCk7CisgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwogfQogCiB2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpAQCAtNTU5
LDE0ICs1MDUsMTAgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXll
cihHcmFwaGljc0xheWVyKiBsYXllcikKIAogICAgIGxheWVyLT5zZXRTaXplKHNpemUoKSk7CiAg
ICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShjb250ZW50c0FyZVZpc2libGUoKSk7Ci0gICAg
YXV0byYgY29vcmRpbmF0ZWRMYXllciA9IGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cj4oKmxheWVyKTsKLSAgICBjb29yZGluYXRlZExheWVyLmRpZENoYW5nZUxheWVyU3RhdGUoKTsK
IAotICAgIG1fbGF5ZXJTdGF0ZS5tYXNrID0gY29vcmRpbmF0ZWRMYXllci5pZCgpOwotICAgIG1f
bGF5ZXJTdGF0ZS5tYXNrQ2hhbmdlZCA9IHRydWU7CiAgICAgbV9uaWNvc2lhLmRlbHRhLm1hc2tD
aGFuZ2VkID0gdHJ1ZTsKIAotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBub3RpZnlG
bHVzaFJlcXVpcmVkKCk7CiB9CiAKIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91
bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKEltYWdlKiBpbWFnZSkgY29uc3QKQEAgLTU4NywxMCAr
NTI5LDggQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGlj
c0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7Ci0gICAgbV9sYXllclN0YXRlLnJl
cGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChsYXllcik7Ci0gICAgbV9sYXllclN0YXRlLnJl
cGxpY2FDaGFuZ2VkID0gdHJ1ZTsKICAgICBtX25pY29zaWEuZGVsdGEucmVwbGljYUNoYW5nZWQg
PSB0cnVlOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBub3RpZnlGbHVzaFJlcXVp
cmVkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3Bs
YXkoKQpAQCAtNjAxLDcgKzU0MSw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXROZWVkc0Rpc3BsYXkoKQogICAgIG1fbmVlZHNEaXNwbGF5LmNvbXBsZXRlTGF5ZXIgPSB0cnVl
OwogICAgIG1fbmVlZHNEaXNwbGF5LnJlY3RzLmNsZWFyKCk7CiAKLSAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7CisgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwogICAgIGFkZFJlcGFpbnRSZWN0
KHsgeyB9LCBtX3NpemUgfSk7CiB9CiAKQEAgLTYyOCw3ICs1NjgsNyBAQCB2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYg
aW5pdGlhbFJlYwogICAgIGVsc2UKICAgICAgICAgcmVjdHNbMF0udW5pdGUocmVjdCk7CiAKLSAg
ICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwogICAg
IGFkZFJlcGFpbnRSZWN0KHJlY3QpOwogfQogCkBAIC02NDYsMTM2ICs1ODYsMjAgQEAgdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgICAgIGNoaWxkLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUocmVjdCk7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQotewot
ICAgIGlmICghbV9zaG91bGRTeW5jQ2hpbGRyZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBtX3No
b3VsZFN5bmNDaGlsZHJlbiA9IGZhbHNlOwotICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbkNoYW5n
ZWQgPSB0cnVlOwotICAgIG1fbmljb3NpYS5kZWx0YS5jaGlsZHJlbkNoYW5nZWQgPSB0cnVlOwot
Ci0gICAgbV9sYXllclN0YXRlLmNoaWxkcmVuLmNsZWFyKCk7Ci0gICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuKCkpCi0gICAgICAgIG1fbGF5ZXJTdGF0ZS5jaGlsZHJlbi5hcHBlbmQodG9D
b29yZGluYXRlZExheWVySUQoY2hpbGQpKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnN5bmNGaWx0ZXJzKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0KLSAgICBt
X2xheWVyU3RhdGUuZmlsdGVycyA9IEdyYXBoaWNzTGF5ZXI6OmZpbHRlcnMoKTsKLSAgICBtX2xh
eWVyU3RhdGUuZmlsdGVyc0NoYW5nZWQgPSB0cnVlOwotICAgIG1fbmljb3NpYS5kZWx0YS5maWx0
ZXJzQ2hhbmdlZCA9IHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
eW5jSW1hZ2VCYWNraW5nKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZykK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IGZhbHNlOwot
Ci0gICAgaWYgKG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKSB7Ci0gICAgICAgIEFTU0VSVCgh
c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsKLSAgICAgICAgQVNTRVJUKG1fY29tcG9zaXRlZElt
YWdlKTsKLQotICAgICAgICBib29sIGltYWdlSW5zdGFuY2VSZXBsYWNlZCA9IG1fY29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcgJiYgKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCkgIT0gQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoKm1fY29t
cG9zaXRlZEltYWdlKSk7Ci0gICAgICAgIGlmIChpbWFnZUluc3RhbmNlUmVwbGFjZWQpCi0gICAg
ICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKLQotICAgICAgICBpZiAoIW1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpIHsKLSAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcgPSBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZCgqbV9j
b21wb3NpdGVkSW1hZ2UpOwotICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+
YWRkSG9zdCgqdGhpcyk7Ci0gICAgICAgICAgICBtX2xheWVyU3RhdGUuaW1hZ2VJRCA9IG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLT5tYXJrRGlydHkoKTsKLSAgICAgICAgbV9sYXllclN0YXRlLmlt
YWdlQ2hhbmdlZCA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlbGVhc2VJbWFnZUJhY2tp
bmdJZk5lZWRlZCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xh
eWVyU3RhdGUoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKLQotICAgIG1fbGF5
ZXJTdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAgbV9s
YXllclN0YXRlLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOwotICAgIG1fbGF5ZXJTdGF0
ZS5tYXNrID0gdG9Db29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJT
dGF0ZS5vcGFjaXR5ID0gb3BhY2l0eSgpOwotICAgIG1fbGF5ZXJTdGF0ZS5yZXBsaWNhID0gdG9D
b29yZGluYXRlZExheWVySUQocmVwbGljYUxheWVyKCkpOwotICAgIG1fbGF5ZXJTdGF0ZS50cmFu
c2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQotICAgIG1fbGF5ZXJTdGF0ZS5hbmNob3JQb2ludCA9IG1f
YWRqdXN0ZWRBbmNob3JQb2ludDsKLSAgICBtX2xheWVyU3RhdGUucG9zID0gbV9hZGp1c3RlZFBv
c2l0aW9uOwotICAgIG1fbGF5ZXJTdGF0ZS5zaXplID0gbV9hZGp1c3RlZFNpemU7Ci0KLSAgICBp
ZiAobV9sYXllclN0YXRlLmZsYWdzQ2hhbmdlZCkgewotICAgICAgICBtX2xheWVyU3RhdGUuY29u
dGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOwotICAgICAgICBtX2xheWVyU3RhdGUuZHJh
d3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7Ci0gICAgICAgIG1fbGF5ZXJTdGF0ZS5jb250ZW50
c1Zpc2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKLSAgICAgICAgbV9sYXllclN0YXRlLmJh
Y2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOwotICAgICAgICBtX2xheWVyU3Rh
dGUubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKLSAgICAgICAgbV9sYXllclN0YXRl
LnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclN0
YXRlLmRlYnVnVmlzdWFsc0NoYW5nZWQpIHsKLSAgICAgICAgbV9sYXllclN0YXRlLmRlYnVnVmlz
dWFscy5zaG93RGVidWdCb3JkZXJzID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsKLSAgICAgICAg
aWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3VhbHMuc2hvd0RlYnVnQm9yZGVycykKLSAgICAgICAg
ICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwotICAgIH0KLSAgICBpZiAobV9sYXllclN0YXRl
LnJlcGFpbnRDb3VudENoYW5nZWQpCi0gICAgICAgIG1fbGF5ZXJTdGF0ZS5yZXBhaW50Q291bnQu
c2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKLX0KLQogdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgd2lkdGgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3Vh
bHMuc2hvd0RlYnVnQm9yZGVycyk7Ci0gICAgaWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3VhbHMu
ZGVidWdCb3JkZXJDb2xvciAhPSBjb2xvcikgewotICAgICAgICBtX2xheWVyU3RhdGUuZGVidWdW
aXN1YWxzLmRlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgbV9sYXllclN0YXRlLmRl
YnVnVmlzdWFsc0NoYW5nZWQgPSB0cnVlOworICAgIEFTU0VSVChtX25pY29zaWEuZGVidWdCb3Jk
ZXIudmlzaWJsZSk7CisgICAgaWYgKG1fbmljb3NpYS5kZWJ1Z0JvcmRlci5jb2xvciAhPSBjb2xv
cikgewogICAgICAgICBtX25pY29zaWEuZGVidWdCb3JkZXIuY29sb3IgPSBjb2xvcjsKICAgICAg
ICAgbV9uaWNvc2lhLmRlbHRhLmRlYnVnQm9yZGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgfQogCi0g
ICAgaWYgKG1fbGF5ZXJTdGF0ZS5kZWJ1Z1Zpc3VhbHMuZGVidWdCb3JkZXJXaWR0aCAhPSB3aWR0
aCkgewotICAgICAgICBtX2xheWVyU3RhdGUuZGVidWdWaXN1YWxzLmRlYnVnQm9yZGVyV2lkdGgg
PSB3aWR0aDsKLSAgICAgICAgbV9sYXllclN0YXRlLmRlYnVnVmlzdWFsc0NoYW5nZWQgPSB0cnVl
OworICAgIGlmIChtX25pY29zaWEuZGVidWdCb3JkZXIud2lkdGggIT0gd2lkdGgpIHsKICAgICAg
ICAgbV9uaWNvc2lhLmRlYnVnQm9yZGVyLndpZHRoID0gd2lkdGg7CiAgICAgICAgIG1fbmljb3Np
YS5kZWx0YS5kZWJ1Z0JvcmRlckNoYW5nZWQgPSB0cnVlOwogICAgIH0KIH0KIAotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc2hv
dWxkU3luY0FuaW1hdGlvbnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkU3luY0Fu
aW1hdGlvbnMgPSBmYWxzZTsKLSAgICBtX2xheWVyU3RhdGUuYW5pbWF0aW9ucyA9IG1fYW5pbWF0
aW9ucy5nZXRBY3RpdmVBbmltYXRpb25zKCk7Ci0gICAgbV9sYXllclN0YXRlLmFuaW1hdGlvbnND
aGFuZ2VkID0gdHJ1ZTsKLSAgICBtX25pY29zaWEuZGVsdGEuYW5pbWF0aW9uc0NoYW5nZWQgPSB0
cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY1BsYXRmb3JtTGF5
ZXIoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jUGxhdGZvcm1MYXllcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zaG91bGRTeW5jUGxhdGZvcm1MYXllciA9IGZhbHNlOwotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDU19USFJFQURFRCkKLSNpZiBVU0UoTklDT1NJQSkKLSNlbHNlCi0g
ICAgbV9sYXllclN0YXRlLnBsYXRmb3JtTGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKLSAgICBpZiAobV9w
bGF0Zm9ybUxheWVyKQotICAgICAgICBtX2xheWVyU3RhdGUucGxhdGZvcm1MYXllclByb3h5ID0g
bV9wbGF0Zm9ybUxheWVyLT5wcm94eSgpOwotI2VuZGlmCi0jZW5kaWYKLX0KLQogdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKQogewogICAgIGlmICgh
bV9zaG91bGRVcGRhdGVQbGF0Zm9ybUxheWVyKQpAQCAtNzgzLDE0ICs2MDcsOCBAQCB2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlUGxhdGZvcm1MYXllcigpCiAKICAgICBtX3No
b3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIgPSBmYWxzZTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCi0jaWYgVVNFKE5JQ09TSUEpCiAgICAgaWYgKG1fbmljb3NpYS5jb250
ZW50TGF5ZXIpCiAgICAgICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsPihtX25pY29zaWEuY29udGVudExheWVyLT5pbXBsKCkpLnN3YXBCdWZmZXJzSWZO
ZWVkZWQoKTsKLSNlbHNlCi0gICAgbV9sYXllclN0YXRlLnBsYXRmb3JtTGF5ZXJVcGRhdGVkID0g
dHJ1ZTsKLSAgICBpZiAobV9wbGF0Zm9ybUxheWVyKQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXIt
PnN3YXBCdWZmZXJzSWZOZWVkZWQoKTsKLSNlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTgwNCwxNiAr
NjIyLDcgQEAgdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKQogICAgIC8vIFNldHMgdGhlIHZhbHVlcy4KICAgICBjb21w
dXRlUGl4ZWxBbGlnbm1lbnQobV9hZGp1c3RlZFBvc2l0aW9uLCBtX2FkanVzdGVkU2l6ZSwgbV9h
ZGp1c3RlZEFuY2hvclBvaW50LCBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0KTsKIAotICAgIC8vIEZJ
WE1FOiB0aGlzIGlzIGNvbW1lbnRlZCBvdXQgdG8gaW1tZWRpYXRlbHkgZGlzYWJsZSBhbnkgb2xk
LXdheSBpbWFnZSB1cGRhdGVzLgotICAgIC8vIEl0IHdpbGwgc29vbiBiZSByZW1vdmVkIGluIGEg
bGFyZ2VyIGNsZWFudXAuCi0gICAgLy8gc3luY0ltYWdlQmFja2luZygpOwotCi0gICAgc3luY0xh
eWVyU3RhdGUoKTsKLSAgICBzeW5jQW5pbWF0aW9ucygpOwogICAgIGNvbXB1dGVUcmFuc2Zvcm1l
ZFZpc2libGVSZWN0KCk7Ci0gICAgc3luY0NoaWxkcmVuKCk7Ci0gICAgc3luY0ZpbHRlcnMoKTsK
LSAgICBzeW5jUGxhdGZvcm1MYXllcigpOwogICAgIHVwZGF0ZVBsYXRmb3JtTGF5ZXIoKTsKIAog
ICAgIC8vIE9ubHkgdW5zZXQgbV9tb3ZpbmdWaXNpYmxlUmVjdCBhZnRlciB3ZSBoYXZlIHVwZGF0
ZWQgdGhlIHZpc2libGUgcmVjdCBhZnRlciB0aGUgYW5pbWF0aW9uIHN0b3BwZWQuCkBAIC05NjUs
MTMgKzc3NCw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIAogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNQZW5kaW5nU3RhdGVDaGFuZ2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCkKIHsKLSAgICAv
LyBGSVhNRTogRm9yIG5vdyB0aGUgYmVzdCB3YXkgZm9yIGxheWVyIHN0YXRlIGNoYW5nZXMgdG8g
dHJpZ2dlciBhbiB1cGRhdGUgaXMgdG8gdXNlCi0gICAgLy8gdGhlIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudDo6c3luY0xheWVyU3RhdGUoKSBtZXRob2QuIFRoaXMgc2hvdWxkIGJlIHNp
bXBsaWZpZWQKLSAgICAvLyBvbmNlIHRoZSBtX2xheWVyU3RhdGUgbWVtYmVyIG9iamVjdCBpcyBy
ZW1vdmVkLgotICAgIGlmIChtX25pY29zaWEucGVyZm9ybUxheWVyU3luYyB8fCBtX2xheWVyU3Rh
dGUuaGFzUGVuZGluZ0NoYW5nZXMoKSkgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5
ZXJTdGF0ZShtX2lkLCBtX2xheWVyU3RhdGUpOwotICAgICAgICByZXNldExheWVyU3RhdGUoKTsK
LSAgICB9CisgICAgaWYgKG1fbmljb3NpYS5wZXJmb3JtTGF5ZXJTeW5jKQorICAgICAgICBtX2Nv
b3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZSgpOwogICAgIG1fbmljb3NpYS5wZXJmb3JtTGF5ZXJT
eW5jID0gZmFsc2U7CiAKICAgICBpZiAobWFza0xheWVyKCkpCkBAIC05ODEsMzIgKzc4NSw2IEBA
IHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0lu
Y2x1ZGluZ1N1YkxheWVycygpCiAgICAgICAgIGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcj4oKmNoaWxkKS5zeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0luY2x1ZGluZ1N1YkxheWVycygp
OwogfQogCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVzZXRMYXllclN0YXRlKCkK
LXsKLSAgICBtX2xheWVyU3RhdGUuY2hhbmdlTWFzayA9IDA7Ci0gICAgbV9sYXllclN0YXRlLnRp
bGVzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX2xheWVyU3RhdGUudGlsZXNUb1JlbW92ZS5jbGVh
cigpOwotICAgIG1fbGF5ZXJTdGF0ZS50aWxlc1RvVXBkYXRlLmNsZWFyKCk7Ci19Ci0KLWJvb2wg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkKLXsKLSAgICBB
U1NFUlQobV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7Ci0gICAgcmV0dXJuIHRyYW5zZm9ybWVk
VmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKEludFJlY3QoY29udGVudHNSZWN0KCkpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRl
ZCgpCi17Ci0gICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgbV9jb29yZGluYXRlZEltYWdl
QmFja2luZy0+cmVtb3ZlSG9zdCgqdGhpcyk7Ci0gICAgbV9jb29yZGluYXRlZEltYWdlQmFja2lu
ZyA9IG51bGxwdHI7Ci0gICAgbV9sYXllclN0YXRlLmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRDsKLSAgICBtX2xheWVyU3RhdGUuaW1hZ2VDaGFuZ2VkID0gdHJ1ZTsK
LX0KLQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpCiB7CiAgICAgaWYgKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKQEAgLTEw
MTgsMTIgKzc5Niw2IEBAIGZsb2F0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZWZmZWN0aXZl
Q29udGVudHNTY2FsZSgpCiAgICAgcmV0dXJuIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRy
YW5zZm9ybXMoKSA/IDEgOiBkZXZpY2VTY2FsZUZhY3RvcigpICogcGFnZVNjYWxlRmFjdG9yKCk7
CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUhh
c1BlbmRpbmdUaWxlQ3JlYXRpb24oKQotewotICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3Rt
ZW50KCk7Ci0gICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwotfQotCiBzdGF0aWMgdm9pZCBjbGFt
cFRvQ29udGVudHNSZWN0SWZSZWN0SXNJbmZpbml0ZShGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgY29udGVudHNTaXplKQogewogICAgIGlmIChyZWN0LndpZHRoKCkgPj0gTGF5b3V0
VW5pdDo6bmVhcmx5TWF4KCkgfHwgcmVjdC53aWR0aCgpIDw9IExheW91dFVuaXQ6Om5lYXJseU1p
bigpKSB7CkBAIC0xMDUyLDM2ICs4MjQsNiBAQCBJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6dHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJl
Y3QocmVjdCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxl
KHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGVGYWN0b3IpCi17Ci0gICAgQVNTRVJUKG1fY29v
cmRpbmF0b3IpOwotICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFu
Z2VzKCkpOwotCi0gICAgVGlsZUNyZWF0aW9uSW5mbyBjcmVhdGlvbkluZm87Ci0gICAgY3JlYXRp
b25JbmZvLnRpbGVJRCA9IHRpbGVJRDsKLSAgICBjcmVhdGlvbkluZm8uc2NhbGUgPSBzY2FsZUZh
Y3RvcjsKLSAgICBtX2xheWVyU3RhdGUudGlsZXNUb0NyZWF0ZS5hcHBlbmQoY3JlYXRpb25JbmZv
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUodWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50
UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwotICAgIEFTU0VS
VChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotCi0gICAgVGlsZVVw
ZGF0ZUluZm8gdGlsZVVwZGF0ZUluZm87Ci0gICAgdGlsZVVwZGF0ZUluZm8udGlsZUlEID0gdGls
ZUlEOwotICAgIHRpbGVVcGRhdGVJbmZvLnRpbGVSZWN0ID0gdGlsZVJlY3Q7Ci0gICAgdGlsZVVw
ZGF0ZUluZm8udXBkYXRlSW5mbyA9IHVwZGF0ZUluZm87Ci0gICAgbV9sYXllclN0YXRlLnRpbGVz
VG9VcGRhdGUuYXBwZW5kKHRpbGVVcGRhdGVJbmZvKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKQotewotICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yKTsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVy
Q2hhbmdlcygpIHx8IG1faXNQdXJnaW5nKTsKLSAgICBtX2xheWVyU3RhdGUudGlsZXNUb1JlbW92
ZS5hcHBlbmQodGlsZUlEKTsKLX0KLQogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVw
ZGF0ZUNvbnRlbnRCdWZmZXJzSW5jbHVkaW5nU3ViTGF5ZXJzKCkKIHsKICAgICBpZiAoQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKiBtYXNrID0gZG93bmNhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyPihtYXNrTGF5ZXIoKSkpCkBAIC0xMjEzLDggKzk1NSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogI2lmbmRlZiBOREVCVUcKICAgICBT
ZXRGb3JTY29wZTxib29sPiB1cGRhdGVNb2RlUHJvdGVjdG9yKG1faXNQdXJnaW5nLCB0cnVlKTsK
ICNlbmRpZgotICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0gICAgbV9wcmV2aW91
c0JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgaWYgKG1fbmljb3NpYS5iYWNraW5nU3RvcmUp
IHsKICAgICAgICAgYXV0byYgbGF5ZXJTdGF0ZSA9IGRvd25jYXN0PE5pY29zaWE6OkJhY2tpbmdT
dG9yZVRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWEuYmFja2luZ1N0b3JlLT5pbXBsKCkpLmxh
eWVyU3RhdGUoKTsKICAgICAgICAgbGF5ZXJTdGF0ZS5pc1B1cmdpbmcgPSB0cnVlOwpAQCAtMTIy
NCw5ICs5NjQsOSBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKCkKICAgICAgICAgbV9uaWNvc2lhLmJhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAg
fQogCi0gICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisgICAgLy8gRklYTUU6IG1f
bmljb3NpYS5pbWFnZUJhY2tpbmcgcHVyZ2UKIAotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsK
KyAgICBub3RpZnlGbHVzaFJlcXVpcmVkKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNv
b3JkaW5hdG9yKQpAQCAtMTI1NCw3ICs5OTQsNyBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Q29vcmRpbmF0b3JJbmNsdWRpbmdTdWJMYXllcnNJZk5lZWRlZChDb29yZGluYQog
ICAgIC8vIGZsYWcgdmFsdWUsIHNvIHRoZSBzY2VuZSB3b24ndCB1cGRhdGUgaXQgYW5kIHRoZSBs
YXllciB3b24ndCBiZSByZW5kZXJlZC4KICAgICAvLwogICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRl
IGhlcmUgdGhlIGxheWVyIGNoYW5nZU1hc2sgc28gdGhlIHNjZW5lIGdldHMgYWxsIHRoZSBjdXJy
ZW50IHZhbHVlcy4KLSAgICBtX2xheWVyU3RhdGUuY2hhbmdlTWFzayA9IFVJTlRfTUFYOworICAg
IG1fbmljb3NpYS5kZWx0YS52YWx1ZSA9IFVJTlRfTUFYOwogCiAgICAgY29vcmRpbmF0b3ItPmF0
dGFjaExheWVyKHRoaXMpOwogICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbigpKQpAQCAt
MTQ0MSw2ICsxMTgxLDEzIEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRp
b25TdGFydGVkVGltZXJGaXJlZCgpCiAgICAgY2xpZW50KCkubm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZCh0aGlzLCAiIiwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lKTsKIH0KIAorI2lmIFVTRShOSUNP
U0lBKQorUGxhdGZvcm1MYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9uaWNvc2lhLmxheWVyLmdldCgpOworfQorI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuaAppbmRleCA3ZDZiNjZkYjNkMi4uMjA5OWQ2Yzc2ZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTI0
LDcgKzI0LDYgQEAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRlICJD
b29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFj
a2luZy5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCkBAIC0zMyw4ICszMiw2
IEBACiAjaW5jbHVkZSAiTmljb3NpYUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9y
bUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgotI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQu
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KIApAQCAtNTAsMTcgKzQ3LDEzIEBAIGNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNv
bnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlZjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UmKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpID0gMDsKICAgICB2aXJ0dWFsIE5p
Y29zaWE6OlBhaW50aW5nRW5naW5lJiBwYWludGluZ0VuZ2luZSgpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllclN0YXRlJikgPSAwOwogfTsKIAotY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKLSAgICAsIHB1YmxpYyBU
aWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpIb3N0IHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIoVHlwZSwgR3JhcGhpY3NMYXllckNsaWVudCYpOwogICAgIHZpcnR1
YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpOwpAQCAtNzYsNiArNjksNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKSBv
dmVycmlkZTsKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKSBvdmVycmlkZTsKICAgICB2b2lk
IHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNQ
b3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNpemUoY29u
c3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKSBvdmVycmlkZTsKQEAgLTExMCw3ICsxMDQsMTEgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwogICAg
IHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCByZXN1bWVBbmltYXRpb25zKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB1c2VzQ29udGVudHNMYXll
cigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllciB8fCBtX25pY29zaWEu
Y29udGVudExheWVyIHx8IG1fY29tcG9zaXRlZEltYWdlOyB9CisgICAgYm9vbCB1c2VzQ29udGVu
dHNMYXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fbmljb3NpYS5jb250ZW50TGF5ZXIg
fHwgbV9jb21wb3NpdGVkSW1hZ2U7IH0KKworI2lmIFVTRShOSUNPU0lBKQorICAgIFBsYXRmb3Jt
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgogCiAgICAgdm9p
ZCBzeW5jUGVuZGluZ1N0YXRlQ2hhbmdlc0luY2x1ZGluZ1N1YkxheWVycygpOwogICAgIHZvaWQg
dXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJMYXllcnMoKTsKQEAgLTExOCwxNiArMTE2
LDEwIEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9C
YXNlKCk7CiAgICAgdm9pZCBjb21wdXRlUGl4ZWxBbGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRp
b24sIEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxp
Z25tZW50T2Zmc2V0KTsKIAotICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KKyAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyOjpMYXllcklEIGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQogCiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZFZpc2libGVSZWN0
KCk7CiAKLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgIHZvaWQgdGlsZWRCYWNr
aW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjcmVh
dGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRl
VGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIG92
ZXJyaWRlOwotCiAgICAgdm9pZCBzZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQqKTsKICAgICB2b2lkIHNldENvb3JkaW5hdG9ySW5jbHVkaW5nU3ViTGF5ZXJzSWZO
ZWVkZWQoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Kik7CiAKQEAgLTEzOSwzNCArMTMx
LDIxIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBpc0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgc3luY1Bs
YXRmb3JtTGF5ZXIoKTsKICAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtTGF5ZXIoKTsKIAogICAgIHZv
aWQgc2V0RGVidWdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCB3aWR0aCkgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKICAgICB2b2lkIGRpZENoYW5nZUFuaW1h
dGlvbnMoKTsKICAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7CiAgICAgdm9pZCBkaWRDaGFu
Z2VDaGlsZHJlbigpOwogICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwotICAgIHZvaWQgZGlk
Q2hhbmdlSW1hZ2VCYWNraW5nKCk7CiAgICAgdm9pZCBkaWRVcGRhdGVUaWxlQnVmZmVycygpOwog
Ci0gICAgdm9pZCByZXNldExheWVyU3RhdGUoKTsKLSAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7
Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwotICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7Ci0g
ICAgdm9pZCBzeW5jRmlsdGVycygpOwotICAgIHZvaWQgc3luY0ltYWdlQmFja2luZygpOwogICAg
IHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKICAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRCdWZmZXJzKCk7CiAKLSAgICB2b2lkIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgp
OwotCiAgICAgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCk7CiAKLSAgICAvLyBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6SG9zdAotICAgIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpIG92ZXJy
aWRlOwogICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0OwogICAgIGJvb2wg
c2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdDsKICAgICBi
b29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKQEAgLTE3OCw4ICsx
NTcsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBmaWx0ZXJzQ2FuQmVDb21wb3NpdGVkKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmKSBjb25zdDsKIAotICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2lk
OwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlIG1fbGF5ZXJTdGF0ZTsKKyAgICBO
aWNvc2lhOjpQbGF0Zm9ybUxheWVyOjpMYXllcklEIG1faWQ7CiAgICAgR3JhcGhpY3NMYXllclRy
YW5zZm9ybSBtX2xheWVyVHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fY2Fj
aGVkSW52ZXJzZVRyYW5zZm9ybTsKICAgICBGbG9hdFNpemUgbV9waXhlbEFsaWdubWVudE9mZnNl
dDsKQEAgLTE5NCwyMiArMTcyLDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBib29sIG1fc2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7CiAgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRl
OiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7Ci0gICAgYm9vbCBtX3Nob3Vs
ZFN5bmNGaWx0ZXJzOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nOiAxOwot
ICAgIGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0aW9uczogMTsKICAgICBib29sIG1fbW92aW5nVmlz
aWJsZVJlY3QgOiAxOwogICAgIGJvb2wgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQg
OiAxOwogICAgIGJvb2wgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50IDogMTsKLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCi0gICAgYm9vbCBtX3Nob3VsZFN5bmNQ
bGF0Zm9ybUxheWVyIDogMTsKICAgICBib29sIG1fc2hvdWxkVXBkYXRlUGxhdGZvcm1MYXllciA6
IDE7Ci0jZW5kaWYKIAogICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogbV9jb29y
ZGluYXRvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFpbkJh
Y2tpbmdTdG9yZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJl
dmlvdXNCYWNraW5nU3RvcmU7Ci0KICAgICBzdHJ1Y3QgewogICAgICAgICBib29sIGNvbXBsZXRl
TGF5ZXIgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8RmxvYXRSZWN0LCAzMj4gcmVjdHM7CkBA
IC0yMTcsOSArMTg1LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJbWFnZT4gbV9jb21wb3Np
dGVkSW1hZ2U7CiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHI7
Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBtX2Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOwogCi0gICAgUGxhdGZvcm1MYXllciogbV9wbGF0Zm9ybUxheWVyOwogICAgIFRpbWVy
IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyOwogICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1f
YW5pbWF0aW9uczsKICAgICBNb25vdG9uaWNUaW1lIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUu
aAppbmRleCA2Zjk2MjRmNGU1ZC4uYmI5ZTc5ZDY3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmgKQEAgLTMwLDE2MSArMzAsMTQg
QEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAotI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiTmljb3NpYUJ1ZmZlci5oIgotI2luY2x1ZGUgIk5pY29zaWFQ
bGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiTmljb3NpYVNjZW5lLmgiCi0jaW5jbHVkZSAiU3Vy
ZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCi0j
aW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19USFJFQURFRCkKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5LmgiCi0jZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIHVpbnQzMl90
IENvb3JkaW5hdGVkTGF5ZXJJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEID0g
MCB9OwotCi10eXBlZGVmIHVpbnQ2NF90IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7Ci1lbnVt
IHsgSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgPSAwIH07Ci0KLXN0cnVjdCBUaWxl
VXBkYXRlSW5mbyB7Ci0gICAgdWludDMyX3QgdGlsZUlEOwotICAgIEludFJlY3QgdGlsZVJlY3Q7
Ci0gICAgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKLX07Ci0KLXN0cnVj
dCBUaWxlQ3JlYXRpb25JbmZvIHsKLSAgICB1aW50MzJfdCB0aWxlSUQ7Ci0gICAgZmxvYXQgc2Nh
bGU7Ci19OwotCi1zdHJ1Y3QgRGVidWdWaXN1YWxzIHsKLSAgICBDb2xvciBkZWJ1Z0JvcmRlckNv
bG9yOwotICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGggeyAwIH07Ci0gICAgYm9vbCBzaG93RGVi
dWdCb3JkZXJzIHsgZmFsc2UgfTsKLX07Ci0KLXN0cnVjdCBSZXBhaW50Q291bnQgewotICAgIHVu
c2lnbmVkIGNvdW50IHsgMCB9OwotICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyIHsgZmFsc2Ug
fTsKLX07Ci0KLXN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJTdGF0ZSB7Ci0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQ6
IDE7Ci0gICAgICAgICAgICBib29sIGFuY2hvclBvaW50Q2hhbmdlZDogMTsKLSAgICAgICAgICAg
IGJvb2wgc2l6ZUNoYW5nZWQ6IDE7Ci0gICAgICAgICAgICBib29sIHRyYW5zZm9ybUNoYW5nZWQ6
IDE7Ci0gICAgICAgICAgICBib29sIGNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlZDogMTsKLSAgICAg
ICAgICAgIGJvb2wgY29udGVudHNSZWN0Q2hhbmdlZDogMTsKLSAgICAgICAgICAgIGJvb2wgb3Bh
Y2l0eUNoYW5nZWQ6IDE7Ci0gICAgICAgICAgICBib29sIHNvbGlkQ29sb3JDaGFuZ2VkOiAxOwot
ICAgICAgICAgICAgYm9vbCBkZWJ1Z1Zpc3VhbHNDaGFuZ2VkOiAxOwotICAgICAgICAgICAgYm9v
bCByZXBsaWNhQ2hhbmdlZDogMTsKLSAgICAgICAgICAgIGJvb2wgbWFza0NoYW5nZWQ6IDE7Ci0g
ICAgICAgICAgICBib29sIGltYWdlQ2hhbmdlZDogMTsKLSAgICAgICAgICAgIGJvb2wgZmxhZ3ND
aGFuZ2VkOiAxOwotICAgICAgICAgICAgYm9vbCBhbmltYXRpb25zQ2hhbmdlZDogMTsKLSAgICAg
ICAgICAgIGJvb2wgZmlsdGVyc0NoYW5nZWQ6IDE7Ci0gICAgICAgICAgICBib29sIGNoaWxkcmVu
Q2hhbmdlZDogMTsKLSAgICAgICAgICAgIGJvb2wgcmVwYWludENvdW50Q2hhbmdlZCA6IDE7Ci0g
ICAgICAgICAgICBib29sIHBsYXRmb3JtTGF5ZXJDaGFuZ2VkOiAxOwotICAgICAgICAgICAgYm9v
bCBwbGF0Zm9ybUxheWVyVXBkYXRlZDogMTsKLSAgICAgICAgICAgIGJvb2wgcGxhdGZvcm1MYXll
clNob3VsZFN3YXBCdWZmZXJzOiAxOwotICAgICAgICAgICAgYm9vbCBpc1Njcm9sbGFibGVDaGFu
Z2VkOiAxOwotICAgICAgICAgICAgYm9vbCBjb250ZW50c1RpbGluZ0NoYW5nZWQ6IDE7Ci0gICAg
ICAgIH07Ci0gICAgICAgIHVuc2lnbmVkIGNoYW5nZU1hc2s7Ci0gICAgfTsKLSAgICB1bmlvbiB7
Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsK
LSAgICAgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKLSAgICAgICAgICAgIGJvb2wgY29u
dGVudHNWaXNpYmxlIDogMTsKLSAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsK
LSAgICAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7Ci0gICAgICAgICAgICBib29sIHBy
ZXNlcnZlczNEIDogMTsKLSAgICAgICAgICAgIGJvb2wgaXNTY3JvbGxhYmxlOiAxOwotICAgICAg
ICB9OwotICAgICAgICB1bnNpZ25lZCBmbGFnczsKLSAgICB9OwotCi0gICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyU3RhdGUoKQotICAgICAgICA6IGNoYW5nZU1hc2soMCkKLSAgICAgICAgLCBj
b250ZW50c09wYXF1ZShmYWxzZSkKLSAgICAgICAgLCBkcmF3c0NvbnRlbnQoZmFsc2UpCi0gICAg
ICAgICwgY29udGVudHNWaXNpYmxlKHRydWUpCi0gICAgICAgICwgYmFja2ZhY2VWaXNpYmxlKHRy
dWUpCi0gICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKLSAgICAgICAgLCBwcmVzZXJ2ZXMz
RChmYWxzZSkKLSAgICAgICAgLCBpc1Njcm9sbGFibGUoZmFsc2UpCi0gICAgICAgICwgb3BhY2l0
eSgwKQotICAgICAgICAsIHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAg
ICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgaW1hZ2VJRChJ
bnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfVEhSRUFERUQpCi0gICAgICAgICwgcGxhdGZvcm1MYXllclByb3h5KDApCi0jZW5kaWYK
LSAgICB7Ci0gICAgfQotCi0gICAgRmxvYXRQb2ludCBwb3M7Ci0gICAgRmxvYXRQb2ludDNEIGFu
Y2hvclBvaW50OwotICAgIEZsb2F0U2l6ZSBzaXplOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsK
LSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0OwotICAgIEZsb2F0U2l6ZSBjb250ZW50c1RpbGVQ
aGFzZTsKLSAgICBGbG9hdFNpemUgY29udGVudHNUaWxlU2l6ZTsKLSAgICBmbG9hdCBvcGFjaXR5
OwotICAgIENvbG9yIHNvbGlkQ29sb3I7Ci0gICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzOwot
ICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIGFuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPHVpbnQz
Ml90PiBjaGlsZHJlbjsKLSAgICBWZWN0b3I8VGlsZUNyZWF0aW9uSW5mbz4gdGlsZXNUb0NyZWF0
ZTsKLSAgICBWZWN0b3I8dWludDMyX3Q+IHRpbGVzVG9SZW1vdmU7Ci0gICAgQ29vcmRpbmF0ZWRM
YXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7Ci0gICAgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotICAgIERlYnVnVmlzdWFscyBkZWJ1Z1Zpc3Vh
bHM7Ci0gICAgUmVwYWludENvdW50IHJlcGFpbnRDb3VudDsKLQotICAgIFZlY3RvcjxUaWxlVXBk
YXRlSW5mbz4gdGlsZXNUb1VwZGF0ZTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDU19U
SFJFQURFRCkKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcGxh
dGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0KLSAgICBib29sIGhhc1BlbmRpbmdDaGFuZ2VzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjaGFuZ2VNYXNrIHx8IHRpbGVzVG9VcGRhdGUu
c2l6ZSgpIHx8IHRpbGVzVG9SZW1vdmUuc2l6ZSgpIHx8IHRpbGVzVG9DcmVhdGUuc2l6ZSgpOwot
ICAgIH0KLX07Ci0KIHN0cnVjdCBDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUgewogICAgIHN0cnVj
dCBOaWNvc2lhU3RhdGUgewogICAgICAgICBSZWZQdHI8Tmljb3NpYTo6U2NlbmU+IHNjZW5lOwog
ICAgIH0gbmljb3NpYTsKLQotICAgIHVpbnQzMl90IHJvb3RDb21wb3NpdGluZ0xheWVyOwotCi0g
ICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5ZXJzVG9DcmVhdGU7Ci0gICAgVmVjdG9y
PHN0ZDo6cGFpcjxDb29yZGluYXRlZExheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0
YXRlPj4gbGF5ZXJzVG9VcGRhdGU7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbGF5
ZXJzVG9SZW1vdmU7Ci0KLSAgICBWZWN0b3I8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4gaW1h
Z2VzVG9DcmVhdGU7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+IGltYWdl
c1RvUmVtb3ZlOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCwgUmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4+PiBpbWFnZXNUb1VwZGF0ZTsKLSAgICBWZWN0b3I8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4gaW1hZ2VzVG9DbGVhcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNThiYTVh
NmEyNC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRl
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTmljb3NpYUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Db29yZGluYXRlZEltYWdlQmFja2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKEltYWdlJiBpbWFnZSkKLXsKLSAgICAv
LyBDb29yZGluYXRlZEltYWdlQmFja2luZyBrZWVwcyBhIFJlZlB0cjxJbWFnZT4gbWVtYmVyLCBz
byB0aGUgc2FtZSBJbWFnZSBwb2ludGVyIGNhbiBub3QgcmVmZXIgdHdvIGRpZmZlcmVudCBpbnN0
YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgcmVsZWFzZXMgdGhlIG1lbWJlci4K
LSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPigm
aW1hZ2UpOwotfQotCi1Db29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoQ2xpZW50JiBjbGllbnQsIFJlZjxJbWFnZT4mJiBpbWFnZSkKLSAgICA6IG1fY2xpZW50
KGNsaWVudCkKLSAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSkp
Ci0gICAgLCBtX2ltYWdlKFdURk1vdmUoaW1hZ2UpKQotICAgICwgbV9jbGVhckNvbnRlbnRzVGlt
ZXIoKnRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmly
ZWQpCi17Ci0gICAgbV9jbGllbnQuY3JlYXRlSW1hZ2VCYWNraW5nKG1faWQpOwotfQotCi1Db29y
ZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkgPSBkZWZhdWx0
OwotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KEhvc3QmIGhvc3QpCi17
Ci0gICAgQVNTRVJUKCFtX2hvc3RzLmNvbnRhaW5zKCZob3N0KSk7Ci0gICAgbV9ob3N0cy5hZGQo
Jmhvc3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KEhv
c3QmIGhvc3QpCi17Ci0gICAgbV9ob3N0cy5yZW1vdmUoJmhvc3QpOwotCi0gICAgaWYgKG1faG9z
dHMuaXNFbXB0eSgpKQotICAgICAgICBtX2NsaWVudC5yZW1vdmVJbWFnZUJhY2tpbmcobV9pZCk7
Ci19Ci0KLXN0YXRpYyBjb25zdCBTZWNvbmRzIGNsZWFyQ29udGVudHNUaW1lckludGVydmFsIHsg
M19zIH07Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSgpCi17Ci0gICAg
Ym9vbCBwcmV2aW91c0lzVmlzaWJsZSA9IG1faXNWaXNpYmxlOwotICAgIG1faXNWaXNpYmxlID0g
c3RkOjphbnlfb2YobV9ob3N0cy5iZWdpbigpLCBtX2hvc3RzLmVuZCgpLAotICAgICAgICBbXShh
dXRvKiBob3N0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaG9zdC0+aW1hZ2VCYWNr
aW5nVmlzaWJsZSgpOwotICAgICAgICB9KTsKLQotICAgIGlmICghbV9pc1Zpc2libGUpIHsKLSAg
ICAgICAgaWYgKHByZXZpb3VzSXNWaXNpYmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fY2xl
YXJDb250ZW50c1RpbWVyLmlzQWN0aXZlKCkpOwotICAgICAgICAgICAgbV9jbGVhckNvbnRlbnRz
VGltZXIuc3RhcnRPbmVTaG90KGNsZWFyQ29udGVudHNUaW1lckludGVydmFsKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBjaGFuZ2VkVG9WaXNpYmxlID0g
IXByZXZpb3VzSXNWaXNpYmxlOwotICAgIGlmIChtX2NsZWFyQ29udGVudHNUaW1lci5pc0FjdGl2
ZSgpKSB7Ci0gICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVyLnN0b3AoKTsKLSAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHRleHR1cmUgaWYgd2UgZGlkbid0IHJlbW92ZSB0
aGUgdGV4dHVyZS4KLSAgICAgICAgY2hhbmdlZFRvVmlzaWJsZSA9IGZhbHNlOwotICAgIH0KLQot
ICAgIGF1dG8gbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpOwotICAgIGlmICghY2hhbmdlZFRvVmlzaWJsZSkgewotICAgICAgICBpZiAoIW1faXNE
aXJ0eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV9uYXRpdmVJbWFnZVB0
ciA9PSBuYXRpdmVJbWFnZVB0cikgewotICAgICAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX25hdGl2ZUltYWdl
UHRyID0gV1RGTW92ZShuYXRpdmVJbWFnZVB0cik7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IE5pY29z
aWE6OkJ1ZmZlcjo6Y3JlYXRlKEludFNpemUobV9pbWFnZS0+c2l6ZSgpKSwgIW1faW1hZ2UtPmN1
cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpID8gTmljb3NpYTo6QnVmZmVyOjpTdXBwb3J0c0Fs
cGhhIDogTmljb3NpYTo6QnVmZmVyOjpOb0ZsYWdzKTsKLSAgICBOaWNvc2lhOjpQYWludGluZ0Nv
bnRleHQ6OnBhaW50KGJ1ZmZlciwKLSAgICAgICAgW3RoaXNdKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgSW50UmVjdCByZWN0IHsgeyB9LCBJbnRTaXpl
IHsgbV9pbWFnZS0+c2l6ZSgpIH0gfTsKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKG1f
aW1hZ2UsIHJlY3QsIHJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKENvbXBvc2l0ZUNvcHkpKTsK
LSAgICAgICAgfSk7Ci0KLSAgICBtX2NsaWVudC51cGRhdGVJbWFnZUJhY2tpbmcobV9pZCwgV1RG
TW92ZShidWZmZXIpKTsKLSAgICBtX2lzRGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoKQotewotICAgIG1fY2xp
ZW50LmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMobV9pZCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGJkNDM5
ODM1My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc1N0YXRlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1l
c3BhY2UgTmljb3NpYSB7Ci1jbGFzcyBCdWZmZXI7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMg
UmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFja2luZz4gewotcHVibGljOgotICAgIGNsYXNz
IENsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8
Tmljb3NpYTo6QnVmZmVyPiYmKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KSA9IDA7Ci0gICAgfTsKLQotICAgIGNsYXNzIEhvc3QgewotICAgIHB1YmxpYzoKLSAgICAgICAg
dmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSA9IDA7Ci0gICAgfTsKLQotICAgIHN0
YXRpYyBSZWY8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDbGllbnQmIGNsaWVudCwg
UmVmPEltYWdlPiYmIGltYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBXVEZNb3ZlKGltYWdlKSkpOwotICAgIH0K
LSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEltYWdlQmFja2luZygpOwotCi0gICAgc3RhdGljIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFn
ZSYpOwotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9Ci0KLSAgICB2b2lkIGFkZEhvc3QoSG9zdCYpOwotICAgIHZvaWQgcmVtb3ZlSG9zdChI
b3N0Jik7Ci0KLSAgICAvLyBXaGVuIGEgbmV3IGltYWdlIGlzIHVwZGF0ZWQgb3IgYW4gYW5pbWF0
ZWQgZ2lmIGlzIHByb2dyZXNzZWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciBjYWxscyBtYXJr
RGlydHkoKS4KLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbV9pc0RpcnR5ID0gdHJ1ZTsgfQotCi0g
ICAgLy8gQ3JlYXRlLCByZW1vdmUgb3IgdXBkYXRlIGl0cyBiYWNraW5nLgotICAgIHZvaWQgdXBk
YXRlKCk7Ci0KLXByaXZhdGU6Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ2xpZW50Jiwg
UmVmPEltYWdlPiYmKTsKLQotICAgIHZvaWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoKTsKLQot
ICAgIENsaWVudCYgbV9jbGllbnQ7Ci0gICAgSGFzaFNldDxIb3N0Kj4gbV9ob3N0czsKLQotICAg
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKLSAgICBSZWY8SW1hZ2U+IG1faW1hZ2U7
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0cjsKLQotICAgIFRpbWVyIG1fY2xl
YXJDb250ZW50c1RpbWVyOwotCi0gICAgYm9vbCBtX2lzRGlydHkgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9pc1Zpc2libGUgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCmluZGV4IDU2OTI2YTJmNGI2Li4yZmU2NmFlYjdjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcApAQCAtNDQ5LDcgKzQ0OSw3
IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUdMUmVzb3VyY2VzKCkKICAg
ICB9CiAKICAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Ci0gICAgbV9yb290TGF5ZXJJRCA9IElu
dmFsaWRDb29yZGluYXRlZExheWVySUQ7CisgICAgbV9yb290TGF5ZXJJRCA9IDA7CiAgICAgbV90
ZXh0dXJlTWFwcGVyID0gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLmgKaW5kZXggNDBiOGI2MzExMGUuLmY1NDQwN2U1ZTA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFQbGF0Zm9y
bUxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhU2NlbmUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJGUFNDb3VudGVy
Lmg+CkBAIC0xMTEsNyArMTEzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI+IG1fcm9vdExheWVyOwogCi0gICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQgeyBXZWJDb3JlOjpJbnZhbGlkQ29vcmRp
bmF0ZWRMYXllcklEIH07CisgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllcjo6TGF5ZXJJRCBtX3Jv
b3RMYXllcklEIHsgMCB9OwogICAgIFdlYkNvcmU6OkNvbG9yIG1fdmlld0JhY2tncm91bmRDb2xv
ciB7IFdlYkNvcmU6OkNvbG9yOjp3aGl0ZSB9OwogCiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ckZQU0NvdW50ZXIgbV9mcHNDb3VudGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3Np
dG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFk
ZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAKaW5kZXggMGIyYjY4YWUxMWUuLjJm
ZjhmM2M3YWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9y
L1RocmVhZGVkQ29tcG9zaXRvci5jcHAKQEAgLTMwOCw2ICszMDgsMTEgQEAgdm9pZCBUaHJlYWRl
ZENvbXBvc2l0b3I6OnVwZGF0ZVNjZW5lU3RhdGUoY29uc3QgQ29vcmRpbmF0ZWRHcmFwaGljc1N0
YXRlJiBzdGF0ZSkKICAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUoKTsK
IH0KIAordm9pZCBUaHJlYWRlZENvbXBvc2l0b3I6OnJlcXVlc3RVcGRhdGUoKQoreworICAgIG1f
Y29tcG9zaXRpbmdSdW5Mb29wLT5zY2hlZHVsZVVwZGF0ZSgpOworfQorCiAjaWYgVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKIFJlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IFRocmVhZGVkQ29tcG9zaXRvcjo6ZGlzcGxheVJlZnJlc2hNb25p
dG9yKFBsYXRmb3JtRGlzcGxheUlEKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3Np
dG9yLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVk
Y29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaAppbmRleCA0MmIyNDZkMmIwNi4uMTM0ODky
YzAzOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVh
ZGVkQ29tcG9zaXRvci5oCkBAIC03Miw2ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERy
YXdzQmFja2dyb3VuZChib29sKTsKIAogICAgIHZvaWQgdXBkYXRlU2NlbmVTdGF0ZShjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKTsKKyAgICB2b2lkIHJlcXVlc3RVcGRh
dGUoKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDY2Y2ZlNzdmZjg3Li42
ZWUwOTk3OTVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9Q
YWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9Q
YWdlQ2xpZW50SW1wbC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IFBhZ2VDbGllbnRJbXBsOjpQYWdlQ2xpZW50SW1wbChXS1dQRTo6VmlldyYgdmlldykKICAgICA6
IG1fdmlldyh2aWV3KQotICAgICwgbV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcihzdGQ6Om1ha2Vf
dW5pcXVlPFNjcm9sbEdlc3R1cmVDb250cm9sbGVyPigpKQorICAgICwgbV9zY3JvbGxHZXN0dXJl
Q29udHJvbGxlcihtX3ZpZXcuc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKSkKIHsKIH0KIApAQCAt
MTkyLDggKzE5Miw4IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRvbmVXaXRoVG91Y2hFdmVudChj
b25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiB0b3VjaEV2ZW50LCBiCiAKICAgICBhdXRvJiBwYWdl
ID0gbV92aWV3LnBhZ2UoKTsKIAotICAgIGlmIChtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyLT5o
YW5kbGVFdmVudCh0b3VjaFBvaW50KSkgewotICAgICAgICBzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNf
ZXZlbnQqIGF4aXNFdmVudCA9IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXItPmF4aXNFdmVudCgp
OworICAgIGlmIChtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmhhbmRsZUV2ZW50KHRvdWNoUG9p
bnQpKSB7CisgICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogYXhpc0V2ZW50ID0g
bV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlci5heGlzRXZlbnQoKTsKICAgICAgICAgaWYgKGF4aXNF
dmVudC0+dHlwZSAhPSB3cGVfaW5wdXRfYXhpc19ldmVudF90eXBlX251bGwpCiAgICAgICAgICAg
ICBwYWdlLmhhbmRsZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNF
dmVudCwgbV92aWV3LnBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSk7CiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwu
aAppbmRleCBjYTIxZDhiZTZlMS4uMmVlMTM3Yzk3MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTE0NCw4ICsxNDQsNyBAQCBw
cml2YXRlOgogICAgIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdXNlcklu
dGVyZmFjZUxheW91dERpcmVjdGlvbigpIG92ZXJyaWRlOwogCiAgICAgV0tXUEU6OlZpZXcmIG1f
dmlldzsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY3JvbGxHZXN0dXJlQ29udHJvbGxlcj4gbV9z
Y3JvbGxHZXN0dXJlQ29udHJvbGxlcjsKKyAgICBTY3JvbGxHZXN0dXJlQ29udHJvbGxlciYgbV9z
Y3JvbGxHZXN0dXJlQ29udHJvbGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9TY3JvbGxHZXN0dXJlQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1
cmVDb250cm9sbGVyLmNwcAppbmRleCBkYTEyYzhlYjM1MS4uYTMxM2NlN2EyZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVy
ZUNvbnRyb2xsZXIuY3BwCkBAIC0yNywxOSArMjcsMzggQEAKICNpbmNsdWRlICJTY3JvbGxHZXN0
dXJlQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8bnVtZXJpYz4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
K1Njcm9sbEdlc3R1cmVDb250cm9sbGVyOjpDbGllbnQ6On5DbGllbnQoKSA9IGRlZmF1bHQ7CisK
K1Njcm9sbEdlc3R1cmVDb250cm9sbGVyOjpTY3JvbGxHZXN0dXJlQ29udHJvbGxlcihDbGllbnQm
IGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKKyAgICBtX2tpbmV0aWNzLnRpbWVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxSdW5Mb29wOjpUaW1lcjxTY3JvbGxHZXN0dXJlQ29udHJvbGxl
cj4+KFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpkaXNw
YXRjaENhbGxiYWNrKTsKK30KKworU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6On5TY3JvbGxHZXN0
dXJlQ29udHJvbGxlcigpCit7Cit9CisKIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6Omhh
bmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3KiB0b3VjaFBv
aW50KQogewogICAgIHN3aXRjaCAodG91Y2hQb2ludC0+dHlwZSkgewogICAgIGNhc2Ugd3BlX2lu
cHV0X3RvdWNoX2V2ZW50X3R5cGVfZG93bjoKLSAgICAgICAgbV9zdGFydC50aW1lID0gdG91Y2hQ
b2ludC0+dGltZTsKLSAgICAgICAgbV9zdGFydC54ID0gdG91Y2hQb2ludC0+eDsKLSAgICAgICAg
bV9zdGFydC55ID0gdG91Y2hQb2ludC0+eTsKLSAgICAgICAgbV9vZmZzZXQueCA9IHRvdWNoUG9p
bnQtPng7Ci0gICAgICAgIG1fb2Zmc2V0LnkgPSB0b3VjaFBvaW50LT55OworICAgIHsKKyAgICAg
ICAgaW50MzJfdCB4ID0gdG91Y2hQb2ludC0+eDsKKyAgICAgICAgaW50MzJfdCB5ID0gdG91Y2hQ
b2ludC0+eTsKKyAgICAgICAgbV9zdGFydCA9IHsgdG91Y2hQb2ludC0+dGltZSwgeCwgeSB9Owor
ICAgICAgICBtX29mZnNldCA9IHsgeCwgeSB9OworICAgICAgICBtX2tpbmV0aWNzLmxhc3QgPSB7
IHRvdWNoUG9pbnQtPnRpbWUsIHgsIHkgfTsKKyAgICAgICAgbV9raW5ldGljcy52ZWxvY2l0eSA9
IHsgfTsKKyAgICAgICAgbV9raW5ldGljcy5hcHBsaWNhdGlvbiA9IHsgfTsKKyAgICAgICAgbV9r
aW5ldGljcy50aW1lci0+c3RvcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAg
IGNhc2Ugd3BlX2lucHV0X3RvdWNoX2V2ZW50X3R5cGVfbW90aW9uOgogICAgICAgICBpZiAoIW1f
aGFuZGxpbmcpIHsKICAgICAgICAgICAgIGludDMyX3QgZGVsdGFYID0gdG91Y2hQb2ludC0+eCAt
IG1fc3RhcnQueDsKQEAgLTQ5LDcgKzY4LDcgQEAgYm9vbCBTY3JvbGxHZXN0dXJlQ29udHJvbGxl
cjo6aGFuZGxlRXZlbnQoY29uc3Qgc3RydWN0IHdwZV9pbnB1dF90b3VjaF9ldmVudF9yYXcKICAg
ICAgICAgICAgIGludCBwaXhlbHNQZXJMaW5lU3RlcCA9IFdlYkNvcmU6OlNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKTsKICAgICAgICAgICAgIG1faGFuZGxpbmcgPSBzdGQ6OmFicyhkZWx0
YVgpID49IHBpeGVsc1BlckxpbmVTdGVwCiAgICAgICAgICAgICAgICAgfHwgc3RkOjphYnMoZGVs
dGFZKSA+PSBwaXhlbHNQZXJMaW5lU3RlcAotICAgICAgICAgICAgICAgIHx8IGRlbHRhVGltZSA+
PSAyMDA7CisgICAgICAgICAgICAgICAgfHwgZGVsdGFUaW1lID49IDY0OwogICAgICAgICB9CiAg
ICAgICAgIGlmIChtX2hhbmRsaW5nKSB7CiAgICAgICAgICAgICBtX2F4aXNFdmVudCA9IHsKQEAg
LTU5LDggKzc4LDI1IEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI6OmhhbmRsZUV2ZW50
KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3CiAgICAgICAgICAgICB9Owog
ICAgICAgICAgICAgbV9vZmZzZXQueCA9IHRvdWNoUG9pbnQtPng7CiAgICAgICAgICAgICBtX29m
ZnNldC55ID0gdG91Y2hQb2ludC0+eTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGF1dG8mIGxhc3QgPSBtX2tpbmV0aWNzLmxhc3Q7CisgICAgICAgICAgICAgICAgYXV0byYgdmVs
b2NpdHkgPSBtX2tpbmV0aWNzLnZlbG9jaXR5OworICAgICAgICAgICAgICAgIHN0ZDo6cm90YXRl
KHZlbG9jaXR5LnguYmVnaW4oKSwgdmVsb2NpdHkueC5iZWdpbigpICsgMSwgdmVsb2NpdHkueC5l
bmQoKSk7CisgICAgICAgICAgICAgICAgc3RkOjpyb3RhdGUodmVsb2NpdHkueS5iZWdpbigpLCB2
ZWxvY2l0eS55LmJlZ2luKCkgKyAxLCB2ZWxvY2l0eS55LmVuZCgpKTsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnJvdGF0ZSh2ZWxvY2l0eS50aW1lLmJlZ2luKCksIHZlbG9jaXR5LnRpbWUuYmVnaW4o
KSArIDEsIHZlbG9jaXR5LnRpbWUuZW5kKCkpOworCisgICAgICAgICAgICAgICAgdmVsb2NpdHku
eC5iYWNrKCkgPSB0b3VjaFBvaW50LT54IC0gbGFzdC54OworICAgICAgICAgICAgICAgIHZlbG9j
aXR5LnkuYmFjaygpID0gdG91Y2hQb2ludC0+eSAtIGxhc3QueTsKKyAgICAgICAgICAgICAgICB2
ZWxvY2l0eS50aW1lLmJhY2soKSA9IHRvdWNoUG9pbnQtPnRpbWUgLSBsYXN0LnRpbWU7CisKKyAg
ICAgICAgICAgICAgICBsYXN0ID0geyB0b3VjaFBvaW50LT50aW1lLCB0b3VjaFBvaW50LT54LCB0
b3VjaFBvaW50LT55IH07CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CisKKyAgICAgICAgbV9raW5ldGljcy5sYXN0ID0geyB0b3VjaFBvaW50LT50
aW1lLCB0b3VjaFBvaW50LT54LCB0b3VjaFBvaW50LT55IH07CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBjYXNlIHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBlX3VwOgogICAgICAgICBpZiAo
bV9oYW5kbGluZykgewpAQCAtNjksNiArMTA1LDIwIEBAIGJvb2wgU2Nyb2xsR2VzdHVyZUNvbnRy
b2xsZXI6OmhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnRfcmF3
CiAgICAgICAgICAgICAgICAgd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlwZV9udWxsLAogICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDAsIDAKICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGF1
dG8mIHZlbG9jaXR5ID0gbV9raW5ldGljcy52ZWxvY2l0eTsKKyAgICAgICAgICAgIHVpbnQzMl90
IGFjY3VtdWxhdGVkVGltZSA9IHN0ZDo6YWNjdW11bGF0ZSh2ZWxvY2l0eS50aW1lLmJlZ2luKCks
IHZlbG9jaXR5LnRpbWUuZW5kKCksIDApOworICAgICAgICAgICAgaW50MzJfdCBhY2N1bXVsYXRl
ZFggPSBzdGQ6OmFjY3VtdWxhdGUodmVsb2NpdHkueC5iZWdpbigpLCB2ZWxvY2l0eS54LmVuZCgp
LCAwKTsKKyAgICAgICAgICAgIGludDMyX3QgYWNjdW11bGF0ZWRZID0gc3RkOjphY2N1bXVsYXRl
KHZlbG9jaXR5LnkuYmVnaW4oKSwgdmVsb2NpdHkueS5lbmQoKSwgMCk7CisgICAgICAgICAgICBk
b3VibGUgdHJhamVjdG9yeVggPSAxMDAwLjAgKiBhY2N1bXVsYXRlZFggLyBhY2N1bXVsYXRlZFRp
bWU7CisgICAgICAgICAgICBkb3VibGUgdHJhamVjdG9yeVkgPSAxMDAwLjAgKiBhY2N1bXVsYXRl
ZFkgLyBhY2N1bXVsYXRlZFRpbWU7CisKKyAgICAgICAgICAgIG1fa2luZXRpY3MuYXBwbGljYXRp
b24gPSB7CisgICAgICAgICAgICAgICAgICAgIGdfZ2V0X21vbm90b25pY190aW1lKCksIHRvdWNo
UG9pbnQtPnRpbWUsIHRvdWNoUG9pbnQtPnRpbWUsCisgICAgICAgICAgICAgICAgICAgIHsgbV9z
dGFydC54LCB0cmFqZWN0b3J5WCwgc3RkOjphYnModHJhamVjdG9yeVggKiAwLjIpIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsgbV9zdGFydC55LCB0cmFqZWN0b3J5WSwgc3RkOjphYnModHJhamVj
dG9yeVkgKiAwLjIpIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgbV9raW5ldGlj
cy50aW1lci0+c3RhcnRPbmVTaG90KFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoMTUpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTc3LDQgKzEyNyw0MiBAQCBib29sIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpoYW5kbGVF
dmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdwogICAgIH0KIH0KIAor
dm9pZCBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hDYWxsYmFjaygpCit7CisgICAg
dWludDMyX3QgdGltZU9mZnNldCA9IChnX2dldF9tb25vdG9uaWNfdGltZSgpIC0gbV9raW5ldGlj
cy5hcHBsaWNhdGlvbi5iYXNlTW9ub3RvbmljVGltZSkgLyAxMDAwOworICAgIHVpbnQzMl90IHRp
bWUgPSBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLmJhc2VUaW1lICsgdGltZU9mZnNldDsKKyAgICB1
aW50MzJfdCB0aW1lRGVsdGEgPSB0aW1lIC0gbV9raW5ldGljcy5hcHBsaWNhdGlvbi5sYXN0VGlt
ZTsKKyAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLmxhc3RUaW1lID0gdGltZTsKKworICAgIGRv
dWJsZSB0cmFqZWN0b3J5WFZhbHVlID0gMDsKKyAgICBpZiAodGltZU9mZnNldCA8IG1fa2luZXRp
Y3MuYXBwbGljYXRpb24ueC5kdXJhdGlvbikgeworICAgICAgICB0cmFqZWN0b3J5WFZhbHVlID0g
LXN0ZDo6cG93KGRvdWJsZSh0aW1lT2Zmc2V0KSAvIG1fa2luZXRpY3MuYXBwbGljYXRpb24ueC5k
dXJhdGlvbiwgMikgKyAxOworICAgICAgICB0cmFqZWN0b3J5WFZhbHVlID0gc3RkOjptYXg8ZG91
YmxlPih0cmFqZWN0b3J5WFZhbHVlLCAwKTsKKyAgICB9CisKKyAgICBkb3VibGUgdHJhamVjdG9y
eVlWYWx1ZSA9IDA7CisgICAgaWYgKHRpbWVPZmZzZXQgPCBtX2tpbmV0aWNzLmFwcGxpY2F0aW9u
LnkuZHVyYXRpb24pIHsKKyAgICAgICAgdHJhamVjdG9yeVlWYWx1ZSA9IC1zdGQ6OnBvdyhkb3Vi
bGUodGltZU9mZnNldCkgLyBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnkuZHVyYXRpb24sIDIpICsg
MTsKKyAgICAgICAgdHJhamVjdG9yeVlWYWx1ZSA9IHN0ZDo6bWF4PGRvdWJsZT4odHJhamVjdG9y
eVlWYWx1ZSwgMCk7CisgICAgfQorCisgICAgYm9vbCBhY3RpdmVUcmFqZWN0b3JpZXMgPSAhIXRy
YWplY3RvcnlYVmFsdWUgfHwgISF0cmFqZWN0b3J5WVZhbHVlOworCisgICAgaW50MzJfdCB0cmFq
ZWN0b3J5WUNoYW5nZSA9IG1fa2luZXRpY3MuYXBwbGljYXRpb24ueS50cmFqZWN0b3J5ICogdHJh
amVjdG9yeVlWYWx1ZSAqIHRpbWVEZWx0YSAvIDEwMDAuMDsKKyAgICBpZiAodHJhamVjdG9yeVlD
aGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50IGF4aXNFdmVudCA9
IHsKKyAgICAgICAgICAgIHdwZV9pbnB1dF9heGlzX2V2ZW50X3R5cGVfbW90aW9uLAorICAgICAg
ICAgICAgbV9raW5ldGljcy5hcHBsaWNhdGlvbi5iYXNlVGltZSArIHRpbWVPZmZzZXQsCisgICAg
ICAgICAgICBtX2tpbmV0aWNzLmFwcGxpY2F0aW9uLnguY29vcmRpbmF0ZSwgbV9raW5ldGljcy5h
cHBsaWNhdGlvbi55LmNvb3JkaW5hdGUsCisgICAgICAgICAgICAyLCB0cmFqZWN0b3J5WUNoYW5n
ZQorICAgICAgICB9OworICAgICAgICBtX2NsaWVudC5kaXNwYXRjaEF4aXNFdmVudCgmYXhpc0V2
ZW50KTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQWxzbyBoYW5kbGUgY2hhbmdlIGluIHRoZSBo
b3Jpem9udGFsIHRyYWplY3RvcnkuCisKKyAgICBpZiAoYWN0aXZlVHJhamVjdG9yaWVzKQorICAg
ICAgICBtX2tpbmV0aWNzLnRpbWVyLT5zdGFydE9uZVNob3QoU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcygxNSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaApp
bmRleCA5YzlmNmU5ZTNiMS4uNjI2ZTExOGFlY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgKQEAgLTI1
LDE5ICsyNSwzNCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgPGFycmF5PgogI2luY2x1
ZGUgPHdwZS93cGUuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIgewogcHVibGljOgotICAgIFNj
cm9sbEdlc3R1cmVDb250cm9sbGVyKCkgPSBkZWZhdWx0OworICAgIGNsYXNzIENsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hBeGlzRXZlbnQoc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KikgPSAw
OworICAgIH07CisKKyAgICBTY3JvbGxHZXN0dXJlQ29udHJvbGxlcihDbGllbnQmKTsKKyAgICB+
U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKTsKIAogICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19l
dmVudCogYXhpc0V2ZW50KCkgeyByZXR1cm4gJm1fYXhpc0V2ZW50OyB9CiAKKyAgICBib29sIGlz
SGFuZGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsaW5nOyB9CiAgICAgYm9vbCBoYW5kbGVF
dmVudChjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdyopOwogCiBwcml2YXRl
OgorICAgIHZvaWQgZGlzcGF0Y2hDYWxsYmFjaygpOworCisgICAgQ2xpZW50JiBtX2NsaWVudDsK
KwogICAgIHN0cnVjdCB7CiAgICAgICAgIHVpbnQzMl90IHRpbWUgeyAwIH07CiAgICAgICAgIGlu
dDMyX3QgeCB7IDAgfTsKQEAgLTQ5LDYgKzY0LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIGludDMy
X3QgeSB7IDAgfTsKICAgICB9IG1fb2Zmc2V0OwogCisgICAgc3RydWN0IHsKKyAgICAgICAgc3Ry
dWN0IHsKKyAgICAgICAgICAgIHVpbnQzMl90IHRpbWUgeyAwIH07CisgICAgICAgICAgICBpbnQz
Ml90IHggeyAwIH07CisgICAgICAgICAgICBpbnQzMl90IHkgeyAwIH07CisgICAgICAgIH0gbGFz
dDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8aW50MzJfdCwgND4g
eDsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8aW50MzJfdCwgND4geTsKKyAgICAgICAgICAgIHN0
ZDo6YXJyYXk8dWludDMyX3QsIDQ+IHRpbWU7CisgICAgICAgIH0gdmVsb2NpdHk7CisKKyAgICAg
ICAgc3RydWN0IHsKKyAgICAgICAgICAgIGludDY0X3QgYmFzZU1vbm90b25pY1RpbWUgeyAwIH07
CisgICAgICAgICAgICB1aW50MzJfdCBiYXNlVGltZSB7IDAgfTsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGxhc3RUaW1lIHsgMCB9OworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IGNvb3JkaW5hdGUgeyAwIH07CisgICAgICAgICAgICAgICAgZG91YmxlIHRyYWpl
Y3RvcnkgeyAwIH07CisgICAgICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uIHsgMCB9OworICAg
ICAgICAgICAgfSB4LCB5OworICAgICAgICB9IGFwcGxpY2F0aW9uOworCisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxSdW5Mb29wOjpUaW1lcjxTY3JvbGxHZXN0dXJlQ29udHJvbGxlcj4+IHRpbWVy
OworICAgIH0gbV9raW5ldGljczsKKwogICAgIGJvb2wgbV9oYW5kbGluZyB7IGZhbHNlIH07CiAg
ICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50IG1fYXhpc0V2ZW50OwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCmluZGV4IGZmZmNiMTFmZWU0Li5h
ZmNjMjcyMDVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9X
UEVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcu
Y3BwCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXS1dQRSB7CiAKIFZpZXc6OlZpZXcoc3Ry
dWN0IHdwZV92aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRp
b24mIGJhc2VDb25maWd1cmF0aW9uKQogICAgIDogbV9jbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxB
UEk6OlZpZXdDbGllbnQ+KCkpCisgICAgLCBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyKHN0ZDo6
bWFrZV91bmlxdWU8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+KCp0aGlzKSkKICAgICAsIG1fcGFn
ZUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFBhZ2VDbGllbnRJbXBsPigqdGhpcykpCiAgICAgLCBt
X3NpemUgeyA4MDAsIDYwMCB9CiAgICAgLCBtX3ZpZXdTdGF0ZUZsYWdzIHsgV2ViQ29yZTo6QWN0
aXZpdHlTdGF0ZTo6V2luZG93SXNBY3RpdmUsIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9j
dXNlZCwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlLCBXZWJDb3JlOjpBY3Rpdml0
eVN0YXRlOjpJc0luV2luZG93IH0KQEAgLTEyNiw4ICsxMjcsMjcgQEAgVmlldzo6VmlldyhzdHJ1
Y3Qgd3BlX3ZpZXdfYmFja2VuZCogYmFja2VuZCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgYmFzZUMKICAgICAgICAgLy8gaGFuZGxlX3RvdWNoX2V2ZW50CiAgICAgICAgIFtdKHZvaWQq
IGRhdGEsIHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZlbnQqIGV2ZW50KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvJiBwYWdlID0gcmVpbnRlcnByZXRfY2FzdDxWaWV3Kj4oZGF0YSktPnBh
Z2UoKTsKLSAgICAgICAgICAgIHBhZ2UuaGFuZGxlVG91Y2hFdmVudChXZWJLaXQ6Ok5hdGl2ZVdl
YlRvdWNoRXZlbnQoZXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSkpOworICAgICAgICAg
ICAgYXV0byYgdmlldyA9ICpyZWludGVycHJldF9jYXN0PFZpZXcqPihkYXRhKTsKKyAgICAgICAg
ICAgIGF1dG8mIHBhZ2UgPSB2aWV3LnBhZ2UoKTsKKworICAgICAgICAgICAgYm9vbCBoYW5kbGVk
ID0gZmFsc2U7CisKKyAgICAgICAgICAgIFdlYktpdDo6TmF0aXZlV2ViVG91Y2hFdmVudCBuYXRp
dmVFdmVudChldmVudCwgcGFnZS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKworICAgICAgICAgICAg
YXV0byYgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIgPSAqdmlldy5tX3Njcm9sbEdlc3R1cmVDb250
cm9sbGVyOworICAgICAgICAgICAgaWYgKHNjcm9sbEdlc3R1cmVDb250cm9sbGVyLmlzSGFuZGxp
bmcoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRfdG91Y2hfZXZl
bnRfcmF3KiB0b3VjaFBvaW50ID0gbmF0aXZlRXZlbnQubmF0aXZlRmFsbGJhY2tUb3VjaFBvaW50
KCk7CisgICAgICAgICAgICAgICAgaWYgKHRvdWNoUG9pbnQtPnR5cGUgIT0gd3BlX2lucHV0X3Rv
dWNoX2V2ZW50X3R5cGVfbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBzY3JvbGxHZXN0dXJl
Q29udHJvbGxlci5oYW5kbGVFdmVudCh0b3VjaFBvaW50KSkgeworICAgICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHdwZV9pbnB1dF9h
eGlzX2V2ZW50KiBheGlzRXZlbnQgPSBzY3JvbGxHZXN0dXJlQ29udHJvbGxlci5heGlzRXZlbnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF4aXNFdmVudC0+dHlwZSAhPSB3cGVfaW5wdXRf
YXhpc19ldmVudF90eXBlX251bGwpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLmhhbmRs
ZVdoZWVsRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJXaGVlbEV2ZW50KGF4aXNFdmVudCwgcGFnZS5k
ZXZpY2VTY2FsZUZhY3RvcigpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgICAgICAgICAgcGFnZS5oYW5kbGVU
b3VjaEV2ZW50KG5hdGl2ZUV2ZW50KTsKICAgICAgICAgfSwKICAgICAgICAgLy8gcGFkZGluZwog
ICAgICAgICBudWxscHRyLApAQCAtMTg4LDQgKzIwOCwxMCBAQCB2b2lkIFZpZXc6OmNsb3NlKCkK
ICAgICBtX3BhZ2VQcm94eS0+Y2xvc2UoKTsKIH0KIAordm9pZCBWaWV3OjpkaXNwYXRjaEF4aXNF
dmVudChzdHJ1Y3Qgd3BlX2lucHV0X2F4aXNfZXZlbnQqIGF4aXNFdmVudCkKK3sKKyAgICBhdXRv
JiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIHBhZ2UuaGFuZGxlV2hlZWxFdmVudChXZWJLaXQ6
Ok5hdGl2ZVdlYldoZWVsRXZlbnQoYXhpc0V2ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkp
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV0tXUEUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XUEVWaWV3LmgKaW5kZXggMmFiNDg1MzBlYTEuLjU1Y2JmMWM3ZWNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuaApAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkNvbXBvc2l0aW5nTWFuYWdlclByb3h5Lmgi
CiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJTY3JvbGxHZXN0dXJlQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
QWN0aXZpdHlTdGF0ZS5oPgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTM1LDYgKzM2LDcgQEAKICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCog
SlNHbG9iYWxDb250ZXh0UmVmOworc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50Owogc3RydWN0
IHdwZV92aWV3X2JhY2tlbmQ7CiAKIG5hbWVzcGFjZSBBUEkgewpAQCAtNDMsMTMgKzQ1LDE0IEBA
IGNsYXNzIFZpZXdDbGllbnQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQ
cm94eTsKK2NsYXNzIFNjcm9sbEdlc3R1cmVDb250cm9sbGVyOwogY2xhc3MgV2ViUGFnZUdyb3Vw
OwogY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiB9CiAKIG5hbWVzcGFjZSBXS1dQRSB7CiAKLWNsYXNz
IFZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpWaWV3PiB7
CitjbGFzcyBWaWV3IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6
Vmlldz4sIHB1YmxpYyBXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyOjpDbGllbnQgewog
cHVibGljOgogICAgIHN0YXRpYyBWaWV3KiBjcmVhdGUoc3RydWN0IHdwZV92aWV3X2JhY2tlbmQq
IGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCiAg
ICAgewpAQCAtNzgsMTMgKzgxLDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZ1bGxTY3JlZW4o
Ym9vbCBmdWxsU2NyZWVuU3RhdGUpIHsgbV9mdWxsU2NyZWVuTW9kZUFjdGl2ZSA9IGZ1bGxTY3Jl
ZW5TdGF0ZTsgfTsKICNlbmRpZgogCisgICAgV2ViS2l0OjpTY3JvbGxHZXN0dXJlQ29udHJvbGxl
ciYgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiAqbV9zY3JvbGxHZXN0
dXJlQ29udHJvbGxlcjsgfQorCiBwcml2YXRlOgogICAgIFZpZXcoc3RydWN0IHdwZV92aWV3X2Jh
Y2tlbmQqLCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CiAKICAgICB2b2lkIHNldFNp
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwogCisgICAgLy8gU2Nyb2xsR2VzdHVyZUNvbnRy
b2xsZXI6OkNsaWVudAorICAgIHZvaWQgZGlzcGF0Y2hBeGlzRXZlbnQoc3RydWN0IHdwZV9pbnB1
dF9heGlzX2V2ZW50Kikgb3ZlcnJpZGU7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3
Q2xpZW50PiBtX2NsaWVudDsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlNjcm9sbEdl
c3R1cmVDb250cm9sbGVyPiBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRy
PFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKICAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fc2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Fj
Y2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKaW5kZXggZjc1MmI1ZGQ2MmUuLjIwMTdhODQ5
OWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVy
YXRlZERyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcApAQCAtMTcxLDYgKzE3MSwxMSBAQCB2b2lkIEFj
Y2VsZXJhdGVkRHJhd2luZ0FyZWE6Om1haW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJ
bnRTaXplJiBzaXplKQogI2VuZGlmCiB9CiAKK2Jvb2wgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6
c3VwcG9ydHNBc3luY1Njcm9sbGluZygpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lk
IEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6OmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCkKIHsKICAg
ICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaAppbmRleCA2ZDY4YjVi
ODk5MS4uYTgwMzI1YmQzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmgKQEAgLTU0LDYgKzU0LDggQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgdXBkYXRlUHJlZmVyZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5j
ZXNTdG9yZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgbWFpbkZyYW1lQ29udGVudFNpemVDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKIAorICAgIGJvb2wgc3VwcG9ydHNB
c3luY1Njcm9sbGluZygpIG92ZXJyaWRlOworCiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZh
Y3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRSb290
Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKaW5kZXgg
NmJhOTU3NThjMDkuLjc4MjZiYmFkMGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKQEAgLTEwNyw2ICsxMDcsMzYgQEAgdm9p
ZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIG5l
d1NpemUpCiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZChtX3Jvb3RMYXllci5nZXQoKSk7CiB9CiAK
K3ZvaWQgZHVtcFBsYXRmb3JtTGF5ZXIoTmljb3NpYTo6Q29tcG9zaXRpb25MYXllciYgbGF5ZXIs
IHVuc2lnbmVkIGluZGVudGF0aW9uKQoreworICAgIGF1dG8gd3JpdGVJbmRlbnRhdGlvbiA9Cisg
ICAgICAgIFtdKHVuc2lnbmVkIGlkKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaWQ7ICsraSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiAgICB8Iik7CisgICAgICAgIH07CisKKyAgICBsYXllci5hY2Nlc3NTdGF0ZSgKKyAgICAgICAg
WyZsYXllciwgJndyaXRlSW5kZW50YXRpb24sIGluZGVudGF0aW9uXShjb25zdCBOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgd3JpdGVJbmRlbnRhdGlvbihpbmRlbnRhdGlvbik7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgImxheWVyKCVwKTogaWQgJWx1IHBvc2l0aW9uICglLjJmLCUuMmYpIGFuY2hvclBvaW50
ICglLjJmLCUuMmYsJS4yZikgc2l6ZSAoJS4yZiwlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAm
bGF5ZXIsIGxheWVyLmlkKCksIHN0YXRlLnBvc2l0aW9uLngoKSwgc3RhdGUucG9zaXRpb24ueSgp
LAorICAgICAgICAgICAgICAgIHN0YXRlLmFuY2hvclBvaW50LngoKSwgc3RhdGUuYW5jaG9yUG9p
bnQueSgpLCBzdGF0ZS5hbmNob3JQb2ludC56KCksCisgICAgICAgICAgICAgICAgc3RhdGUuc2l6
ZS53aWR0aCgpLCBzdGF0ZS5zaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHdyaXRlSW5kZW50
YXRpb24oaW5kZW50YXRpb24pOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIGNoaWxk
cmVuWyV6dV0gcmVwbGljYSAlcCBtYXNrICVwXG4iLAorICAgICAgICAgICAgICAgIHN0YXRlLmNo
aWxkcmVuLnNpemUoKSwgc3RhdGUucmVwbGljYS5nZXQoKSwgc3RhdGUubWFzay5nZXQoKSk7Cisg
ICAgICAgICAgICB3cml0ZUluZGVudGF0aW9uKGluZGVudGF0aW9uKTsKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiICBmbGFncyB7ICVkLCAlZCwgJWQsICVkLCAlZCwgJWQgfVxuIiwKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5mbGFncy5jb250ZW50c09wYXF1ZSwgc3RhdGUuZmxhZ3MuZHJh
d3NDb250ZW50LCBzdGF0ZS5mbGFncy5jb250ZW50c1Zpc2libGUsCisgICAgICAgICAgICAgICAg
c3RhdGUuZmxhZ3MuYmFja2ZhY2VWaXNpYmxlLCBzdGF0ZS5mbGFncy5tYXNrc1RvQm91bmRzLCBz
dGF0ZS5mbGFncy5wcmVzZXJ2ZXMzRCk7CisKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQg
OiBzdGF0ZS5jaGlsZHJlbikKKyAgICAgICAgICAgICAgICBkdW1wUGxhdGZvcm1MYXllcigqY2hp
bGQsIGluZGVudGF0aW9uICsgMSk7CisgICAgICAgIH0pOworfQorCiBib29sIENvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpCiB7CiAgICAgU2V0Rm9yU2Nv
cGU8Ym9vbD4gcHJvdGVjdG9yKG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcywgdHJ1ZSk7CkBAIC0x
MjUsNyArMTU1LDEyIEBAIGJvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkKICAgICBjb29yZGluYXRlZExheWVyLnVwZGF0ZUNvbnRlbnRCdWZmZXJz
SW5jbHVkaW5nU3ViTGF5ZXJzKCk7CiAgICAgY29vcmRpbmF0ZWRMYXllci5zeW5jUGVuZGluZ1N0
YXRlQ2hhbmdlc0luY2x1ZGluZ1N1YkxheWVycygpOwogCi0gICAgZmx1c2hQZW5kaW5nSW1hZ2VC
YWNraW5nQ2hhbmdlcygpOworI2lmIDAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbXBvc2l0aW5n
Q29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpXG4iKTsKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIlx0bV9yb290TGF5ZXIgJXAsIG1fcm9vdExheWVyLnBsYXRmb3JtTGF5ZXIoKSAl
cFxuIiwKKyAgICAgICAgbV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdExheWVyLT5wbGF0Zm9ybUxh
eWVyKCkpOworICAgIGR1bXBQbGF0Zm9ybUxheWVyKCptX3Jvb3RMYXllci0+cGxhdGZvcm1MYXll
cigpLCAxKTsKKyNlbmRpZgogCiAgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7CiAgICAgICAg
IGRpZFN5bmMgPSB0cnVlOwpAQCAtMTYzLDggKzE5OCw2IEBAIGJvb2wgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgIG1fY2xpZW50LmNvbW1pdFNjZW5lU3RhdGUobV9zdGF0ZSk7Ci0KLSAgICAgICAgY2xl
YXJQZW5kaW5nU3RhdGVDaGFuZ2VzKCk7CiAgICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFs
c2U7CiAgICAgfQogCkBAIC0xOTEsMTggKzIyNCw2IEBAIGRvdWJsZSBDb21wb3NpdGluZ0Nvb3Jk
aW5hdG9yOjpuZXh0QW5pbWF0aW9uU2VydmljZVRpbWUoKSBjb25zdAogICAgIHJldHVybiBzdGQ6
Om1heDxkb3VibGU+KDAuLCBNaW5pbWFsVGltZW91dEZvckFuaW1hdGlvbnMgLSB0aW1lc3RhbXAo
KSArIG1fbGFzdEFuaW1hdGlvblNlcnZpY2VUaW1lKTsKIH0KIAotdm9pZCBDb21wb3NpdGluZ0Nv
b3JkaW5hdG9yOjpjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKQotewotICAgIG1fc3RhdGUubGF5
ZXJzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICBtX3N0YXRlLmxheWVyc1RvVXBkYXRlLmNsZWFyKCk7
Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1JlbW92ZS5jbGVhcigpOwotCi0gICAgbV9zdGF0ZS5pbWFn
ZXNUb0NyZWF0ZS5jbGVhcigpOwotICAgIG1fc3RhdGUuaW1hZ2VzVG9SZW1vdmUuY2xlYXIoKTsK
LSAgICBtX3N0YXRlLmltYWdlc1RvVXBkYXRlLmNsZWFyKCk7Ci0gICAgbV9zdGF0ZS5pbWFnZXNU
b0NsZWFyLmNsZWFyKCk7Ci19Ci0KIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6aW5pdGlh
bGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQogewogICAgIGlmIChtX2RpZEluaXRp
YWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKQEAgLTIxMCw3ICsyMzEsNiBAQCB2b2lkIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVk
KCkKIAogICAgIGF1dG8mIHJvb3RMYXllciA9IGRvd25jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcj4oKm1fcm9vdExheWVyKTsKICAgICBtX25pY29zaWEuc3RhdGUucm9vdExheWVyID0gcm9v
dExheWVyLmNvbXBvc2l0aW9uTGF5ZXIoKTsKLSAgICBtX3N0YXRlLnJvb3RDb21wb3NpdGluZ0xh
eWVyID0gcm9vdExheWVyLmlkKCk7CiAgICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXIgPSB0cnVlOwogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKIH0KQEAgLTIyNyw1
NyArMjQ3LDkgQEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjcmVhdGVSb290TGF5ZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShzaXplKTsKIH0K
IAotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRl
ZExheWVySUQgaWQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllclN0YXRlJiBzdGF0ZSkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9zdGF0ZS5sYXllcnNUb1VwZGF0ZS5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoaWQsIHN0YXRlKSk7Ci19Ci0KLVJlZjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQoSW1hZ2UmIGltYWdlKQotewotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1h
Z2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKGltYWdlKTsKLSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faW1hZ2VCYWNraW5ncy5lbnN1cmUo
aW1hZ2VJRCwgW3RoaXMsICZpbWFnZV0gewotICAgICAgICByZXR1cm4gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OmNyZWF0ZSgqdGhpcywgaW1hZ2UpOwotICAgIH0pOwotICAgIHJldHVybiAqYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0KLQotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQot
ewotICAgIG1fc3RhdGUuaW1hZ2VzVG9DcmVhdGUuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQsIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+JiYgYnVmZmVyKQot
ewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3N0YXRlLmltYWdlc1RvVXBk
YXRlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpbWFnZUlELCBXVEZNb3ZlKGJ1ZmZlcikpKTsKLX0K
LQotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3ZvaWQgQ29tcG9zaXRpbmdDb29y
ZGluYXRvcjo6c3luY0xheWVyU3RhdGUoKQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3N0YXRlLmltYWdlc1RvQ2xlYXIuYXBwZW5kKGltYWdlSUQpOwotfQotCi12b2lk
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsK
LSAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdlSUQpOwotCi0gICAgbV9zdGF0ZS5pbWFn
ZXNUb1JlbW92ZS5hcHBlbmQoaW1hZ2VJRCk7Ci0KLSAgICBzaXplX3QgaW1hZ2VJRFBvc2l0aW9u
ID0gbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLmZpbmQoaW1hZ2VJRCk7Ci0gICAgaWYgKGltYWdlSURQ
b3NpdGlvbiAhPSBub3RGb3VuZCkKLSAgICAgICAgbV9zdGF0ZS5pbWFnZXNUb0NsZWFyLnJlbW92
ZShpbWFnZUlEUG9zaXRpb24pOwotfQotCi12b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmZs
dXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQotewotICAgIGZvciAoYXV0byYgaW1hZ2VC
YWNraW5nIDogbV9pbWFnZUJhY2tpbmdzLnZhbHVlcygpKQotICAgICAgICBpbWFnZUJhY2tpbmct
PnVwZGF0ZSgpOwogfQogCiB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCkBAIC0zMDIsNyArMjc0LDYgQEAgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+IENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OmNyZWF0ZUdy
YXBoaWNzTGF5ZXIoR3JhcGgKICAgICBsYXllci0+c2V0Q29vcmRpbmF0b3IodGhpcyk7CiAgICAg
bV9uaWNvc2lhLnN0YXRlLmxheWVycy5hZGQobGF5ZXItPmNvbXBvc2l0aW9uTGF5ZXIoKSk7CiAg
ICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQoKSwgbGF5ZXIpOwotICAgIG1fc3Rh
dGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgpKTsKICAgICBsYXllci0+c2V0TmVl
ZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKICAgICBub3RpZnlGbHVzaFJlcXVpcmVkKGxheWVy
KTsKICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzTGF5ZXI+KGxheWVyKTsKQEAg
LTM0MywxNCArMzE0LDYgQEAgdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hMYXll
cihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogCiAgICAgbV9uaWNvc2lhLnN0YXRl
LmxheWVycy5yZW1vdmUobGF5ZXItPmNvbXBvc2l0aW9uTGF5ZXIoKSk7CiAgICAgbV9yZWdpc3Rl
cmVkTGF5ZXJzLnJlbW92ZShsYXllci0+aWQoKSk7Ci0KLSAgICBzaXplX3QgaW5kZXggPSBtX3N0
YXRlLmxheWVyc1RvQ3JlYXRlLmZpbmQobGF5ZXItPmlkKCkpOwotICAgIGlmIChpbmRleCAhPSBu
b3RGb3VuZCkgewotICAgICAgICBtX3N0YXRlLmxheWVyc1RvQ3JlYXRlLnJlbW92ZShpbmRleCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlLmxheWVyc1RvUmVtb3ZlLmFw
cGVuZChsYXllci0+aWQoKSk7CiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZChsYXllcik7CiB9CiAK
QEAgLTM1OSwyMyArMzIyLDE2IEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6YXR0YWNo
TGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBsYXllci0+c2V0Q29v
cmRpbmF0b3IodGhpcyk7CiAgICAgbV9uaWNvc2lhLnN0YXRlLmxheWVycy5hZGQobGF5ZXItPmNv
bXBvc2l0aW9uTGF5ZXIoKSk7CiAgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllci0+aWQo
KSwgbGF5ZXIpOwotICAgIG1fc3RhdGUubGF5ZXJzVG9DcmVhdGUuYXBwZW5kKGxheWVyLT5pZCgp
KTsKICAgICBsYXllci0+c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKICAgICBub3Rp
ZnlGbHVzaFJlcXVpcmVkKGxheWVyKTsKIH0KIAotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
OjpyZW5kZXJOZXh0RnJhbWUoKQotewotfQotCiB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnB1cmdlQmFja2luZ1N0b3JlcygpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gcHVyZ2luZ1Rv
Z2dsZShtX2lzUHVyZ2luZywgdHJ1ZSk7CiAKICAgICBmb3IgKGF1dG8mIHJlZ2lzdGVyZWRMYXll
ciA6IG1fcmVnaXN0ZXJlZExheWVycy52YWx1ZXMoKSkKICAgICAgICAgcmVnaXN0ZXJlZExheWVy
LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwog
fQogCiBOaWNvc2lhOjpQYWludGluZ0VuZ2luZSYgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6cGFp
bnRpbmdFbmdpbmUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5n
Q29vcmRpbmF0b3IuaAppbmRleCA0MzA4ZWFlMmZmNi4uOWNiMzUwNGI2ZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0zMSwx
NSArMzEsMTYgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFBvaW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaD4KIAogbmFtZXNwYWNlIE5pY29z
aWEgewogY2xhc3MgUGFpbnRpbmdFbmdpbmU7CitjbGFzcyBTY2VuZUludGVncmF0aW9uOwogfQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Myw2IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Q2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rv
cnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOwog
cHVibGljOgpAQCAtNjEsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50
UmVjdCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpID0g
MDsKICAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgPSAwOworICAgICAgICB2aXJ0dWFsIFJlZlB0cjxO
aWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgPSAwOwogICAgIH07
CiAKICAgICBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yKFdlYkNvcmU6OlBhZ2UqLCBDb21wb3NpdGlu
Z0Nvb3JkaW5hdG9yOjpDbGllbnQmKTsKQEAgLTc0LDcgKzc1LDYgQEAgcHVibGljOgogICAgIHZv
aWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCByZW5k
ZXJOZXh0RnJhbWUoKTsKIAogICAgIHZvaWQgY3JlYXRlUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQpAQCAtOTUsMjcgKzk1LDE4IEBAIHByaXZh
dGU6CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKICAgICBm
bG9hdCBwYWdlU2NhbGVGYWN0b3IoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIC8vIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjpDbGllbnQKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0
ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8
Tmljb3NpYTo6QnVmZmVyPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5n
Q29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQK
ICAgICBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KICAgICBXZWJDb3JlOjpGbG9hdFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlZjxXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6
SW1hZ2UmKSBvdmVycmlkZTsKICAgICB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgTmljb3NpYTo6UGFp
bnRpbmdFbmdpbmUmIHBhaW50aW5nRW5naW5lKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzeW5jTGF5
ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllclN0YXRlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgp
IG92ZXJyaWRlOwogCiAgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3Jl
OjpHcmFwaGljc0xheWVyOjpUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVk
KCk7Ci0gICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0gICAgdm9p
ZCBjbGVhclBlbmRpbmdTdGF0ZUNoYW5nZXMoKTsKIAogICAgIHZvaWQgcHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CiAKQEAgLTEzNCw4ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIH0gbV9uaWNvc2lhOwog
ICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSBtX3N0YXRlOwogCi0gICAgSGFz
aE1hcDxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKLSAgICBIYXNoTWFwPFdlYkNvcmU6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZz4+IG1faW1hZ2VCYWNraW5nczsKKyAgICBIYXNoTWFwPE5pY29zaWE6OlBsYXRmb3Jt
TGF5ZXI6OkxheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVn
aXN0ZXJlZExheWVyczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOaWNvc2lhOjpQYWludGluZ0Vu
Z2luZT4gbV9wYWludGluZ0VuZ2luZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDcwOTJmYzUzMjBiLi5hNjhl
MGYzZWQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMTQ5LDcgKzE0OSw2IEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoYm9vbCBmb3JjZVJlcGFpbnQpCiB7CiAgICAg
bV9pc1dhaXRpbmdGb3JSZW5kZXJlciA9IGZhbHNlOwogICAgIGJvb2wgc2NoZWR1bGVkV2hpbGVX
YWl0aW5nRm9yUmVuZGVyZXIgPSBzdGQ6OmV4Y2hhbmdlKG1fc2NoZWR1bGVkV2hpbGVXYWl0aW5n
Rm9yUmVuZGVyZXIsIGZhbHNlKTsKLSAgICBtX2Nvb3JkaW5hdG9yLnJlbmRlck5leHRGcmFtZSgp
OwogCiAgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmMuY2FsbGJhY2tJRCkgewogICAgICAgICAv
LyBJZiB0aGUgYXN5bmNocm9ub3VzIGZvcmNlLXJlcGFpbnQgbmVlZHMgYSBzZXBhcmF0ZSBmcmVz
aCBmbHVzaCwgaXQgd2FzIGR1ZSB0bwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggMGE4YmVjOGEzOTguLjJhMWNjZjMyZjE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGlkRmx1c2hS
b290TGF5ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QpIG92
ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpIG92ZXJyaWRlIHsgc2NoZWR1
bGVMYXllckZsdXNoKCk7IH07CiAgICAgdm9pZCBjb21taXRTY2VuZVN0YXRlKGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYpIG92ZXJyaWRlOworICAgIFJlZlB0cjxOaWNv
c2lhOjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbnVsbHB0cjsgfQogCiAgICAgdm9pZCBmbHVzaExheWVyc0FuZEZvcmNlUmVwYWludCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IGQ5OWYxNmJjZTc1Li4zZTcwNjY0MjI1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTks
NiArNjAsNyBAQCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6VGhyZWFkZWRDb29y
ZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUAogICAgIDogQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0KHdlYlBhZ2UpCiAgICAgLCBtX2NvbXBvc2l0b3JDbGllbnQoKnRoaXMpCiAgICAg
LCBtX3N1cmZhY2UoQWNjZWxlcmF0ZWRTdXJmYWNlOjpjcmVhdGUod2ViUGFnZSwgKnRoaXMpKQor
ICAgICwgbV9zY2VuZUludGVncmF0aW9uKGFkb3B0UmVmKCpuZXcgTmljb3NpYTo6U2NlbmVJbnRl
Z3JhdGlvbigqdGhpcykpKQogICAgICwgbV92aWV3cG9ydENvbnRyb2xsZXIod2ViUGFnZS5zaXpl
KCkpCiB7CiAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdlLm1haW5GcmFt
ZVZpZXcoKSkgewpAQCAtODksNiArOTEsNyBAQCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSYgd2ViUAogCiB2
b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKIHsKKyAg
ICBtX3NjZW5lSW50ZWdyYXRpb24tPmludmFsaWRhdGUoKTsKICAgICBtX2NvbXBvc2l0b3ItPmlu
dmFsaWRhdGUoKTsKICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKTsK
ICAgICBtX3N1cmZhY2UgPSBudWxscHRyOwpAQCAtMTIxLDYgKzEyNCwxMSBAQCB2b2lkIFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpoYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0b3JV
cGRhdGUoYm9vbCBoYQogICAgIG1fY29tcG9zaXRvci0+aGFuZGxlRGlzcGxheVJlZnJlc2hNb25p
dG9yVXBkYXRlKCk7CiB9CiAKK1JlZlB0cjxOaWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NlbmVJbnRlZ3JhdGlvbigpCit7CisgICAg
cmV0dXJuIG1fc2NlbmVJbnRlZ3JhdGlvbi5jb3B5UmVmKCk7Cit9CisKIHVpbnQ2NF90IFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpuYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9z
aXRpbmcoKQogewogICAgIGlmICghbV9zdXJmYWNlKQpAQCAtMjczLDYgKzI4MSwxMSBAQCB2b2lk
IFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpjb21taXRTY2VuZVN0YXRlKGNvbnN0
IENvb3JkaW5hdGVkR3JhcGhpYwogICAgIG1fY29tcG9zaXRvci0+dXBkYXRlU2NlbmVTdGF0ZShz
dGF0ZSk7CiB9CiAKK3ZvaWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlcXVl
c3RVcGRhdGUoKQoreworICAgIG1fY29tcG9zaXRvci0+cmVxdWVzdFVwZGF0ZSgpOworfQorCiB2
b2lkIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRJc0Rpc2NhcmRhYmxlKGJv
b2wgZGlzY2FyZGFibGUpCiB7CiAgICAgbV9pc0Rpc2NhcmRhYmxlID0gZGlzY2FyZGFibGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmgKaW5kZXggODdhN2RhNzE3Y2QuLmI4NDA4YjUyOTYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU2ltcGxlVmlld3Bv
cnRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFkZWRDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL05p
Y29zaWFTY2VuZUludGVncmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw3ICs0NywxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgV2ViUGFnZTsKIAotY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhv
c3QgZmluYWwgOiBwdWJsaWMgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LCBwdWJsaWMgQWNjZWxl
cmF0ZWRTdXJmYWNlOjpDbGllbnQgeworY2xhc3MgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QgZmluYWwKKyAgICA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QKKyAgICAs
IHB1YmxpYyBBY2NlbGVyYXRlZFN1cmZhY2U6OkNsaWVudAorICAgICwgcHVibGljIE5pY29zaWE6
OlNjZW5lSW50ZWdyYXRpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxUaHJl
YWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UmKTsKICAgICB2aXJ0
dWFsIH5UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwpAQCAtMTIwLDYgKzEyNCw5
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGbHVzaFJvb3RMYXllcihjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3Qg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7CiAKKyAgICAvLyBO
aWNvc2lhOjpTY2VuZUludGVncmF0aW9uOjpDbGllbnQKKyAgICB2b2lkIHJlcXVlc3RVcGRhdGUo
KSBvdmVycmlkZTsKKwogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRl
RGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBvdmVycmlk
ZTsKICNlbmRpZgpAQCAtMTI3LDYgKzEzNCw5IEBAIHByaXZhdGU6CiAgICAgLy8gQWNjZWxlcmF0
ZWRTdXJmYWNlOjpDbGllbnQKICAgICB2b2lkIGZyYW1lQ29tcGxldGUoKSBvdmVycmlkZTsKIAor
ICAgIC8vIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OkNsaWVudAorICAgIFJlZlB0cjxOaWNvc2lh
OjpTY2VuZUludGVncmF0aW9uPiBzY2VuZUludGVncmF0aW9uKCkgb3ZlcnJpZGU7CisKICAgICB1
aW50NjRfdCBuYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoKTsKICAgICB2b2lkIGRp
ZERlc3Ryb3lHTENvbnRleHQoKTsKICAgICB2b2lkIHdpbGxSZW5kZXJGcmFtZSgpOwpAQCAtMTQ0
LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgQ29tcG9zaXRvckNsaWVudCBtX2NvbXBvc2l0b3JD
bGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2VsZXJhdGVkU3VyZmFjZT4gbV9zdXJmYWNl
OwogICAgIFJlZlB0cjxUaHJlYWRlZENvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsKKyAgICBSZWY8
Tmljb3NpYTo6U2NlbmVJbnRlZ3JhdGlvbj4gbV9zY2VuZUludGVncmF0aW9uOwogICAgIFNpbXBs
ZVZpZXdwb3J0Q29udHJvbGxlciBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKICAgICBmbG9hdCBtX2xh
c3RQYWdlU2NhbGVGYWN0b3IgeyAxIH07CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9sYXN0U2Ny
b2xsUG9zaXRpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351378</attachid>
            <date>2018-10-02 05:54:02 -0700</date>
            <delta_ts>2018-10-02 05:54:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>platform-layers.patch</filename>
            <type>text/plain</type>
            <size>58380</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRl
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCmluZGV4IGIzM2FhMGNkYWZlLi4wZjJkZDRjZmE5NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCkBAIC0yNjMs
NyArMjYzLDYgQEAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBTY3JvbGxpbmdTdGF0ZVRyZWU6OnN0YXRl
Tm9kZUZvcklEKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi0jaWZuZGVmIE5ERUJVRwogdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkKIHsKICAgICBpZiAoIXRyZWUpCkBA
IC0yODcsNiArMjg2LDQgQEAgdm9pZCBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKICAgICBzaG93U2Nyb2xsaW5nU3RhdGVUcmVl
KCZub2RlLT5zY3JvbGxpbmdTdGF0ZVRyZWUoKSk7CiB9CiAKLSNlbmRpZgotCiAjZW5kaWYgLy8g
RU5BQkxFKEFTWU5DX1NDUk9MTElORykgfHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaApp
bmRleCAzYjI1NjE1MWFkNy4uNmFlNmYzM2RiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCkBAIC05OSw5ICs5OSw3IEBAIHBy
aXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2lmbmRlZiBOREVCVUcKIHZvaWQg
c2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWUq
KTsKIHZvaWQgc2hvd1Njcm9sbGluZ1N0YXRlVHJlZShjb25zdCBXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKLSNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykg
fHwgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCmluZGV4IDgzMDM1MzY0OGNlLi5hYzNkOTk4NTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdDb29yZGlu
YXRvckNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nQ29vcmRpbmF0b3JDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcApAQCAtODcsNiArODcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
Q29vcmRpbmF0ZWRHcmFwaGljczo6Y29tbWl0VHJlZVN0YXRlKCkKIAogICAgIGF1dG8gdHJlZVN0
YXRlID0gc2Nyb2xsaW5nU3RhdGVUcmVlKCktPmNvbW1pdChMYXllclJlcHJlc2VudGF0aW9uOjpQ
bGF0Zm9ybUxheWVyUmVwcmVzZW50YXRpb24pOwogICAgIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0
Y2goW3RocmVhZGVkU2Nyb2xsaW5nVHJlZSwgdHJlZVN0YXRlID0gV1RGTW92ZSh0cmVlU3RhdGUp
XSgpIG11dGFibGUgeworICAgICAgICAvLyBzaG93U2Nyb2xsaW5nU3RhdGVUcmVlKHRyZWVTdGF0
ZS5nZXQoKSk7CiAgICAgICAgIHRocmVhZGVkU2Nyb2xsaW5nVHJlZS0+Y29tbWl0VHJlZVN0YXRl
KFdURk1vdmUodHJlZVN0YXRlKSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1N0YXRlTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
Y29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAppbmRleCAzZDY4YWU2NmE4Zi4uMTkwZTU4YWFlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nU3RhdGVO
b2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdTdGF0ZU5vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmNwcApAQCAtMjYsMjIgKzI2LDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nU3RhdGVOb2RlLmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdTdGF0ZVRy
ZWUuaCIKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIk5pY29zaWFQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6
cmV0YWluUGxhdGZvcm1MYXllcih2b2lkKikKK3ZvaWQgTGF5ZXJSZXByZXNlbnRhdGlvbjo6cmV0
YWluUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5ZXJUeXBlZCh0eXBl
bGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPnJlZigpOwogfQogCi12b2lkIExheWVyUmVwcmVz
ZW50YXRpb246OnJlbGVhc2VQbGF0Zm9ybUxheWVyKHZvaWQqKQordm9pZCBMYXllclJlcHJlc2Vu
dGF0aW9uOjpyZWxlYXNlUGxhdGZvcm1MYXllcih2b2lkKiB0eXBlbGVzc0xheWVyKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbWFrZVBsYXRmb3JtTGF5
ZXJUeXBlZCh0eXBlbGVzc0xheWVyKSkKKyAgICAgICAgbGF5ZXItPmRlcmVmKCk7CiB9CiAKIFBs
YXRmb3JtTGF5ZXIqIExheWVyUmVwcmVzZW50YXRpb246Om1ha2VQbGF0Zm9ybUxheWVyVHlwZWQo
dm9pZCogdHlwZWxlc3NMYXllcikKQEAgLTU2LDQgKzU3LDQgQEAgdm9pZCogTGF5ZXJSZXByZXNl
bnRhdGlvbjo6bWFrZVBsYXRmb3JtTGF5ZXJUeXBlbGVzcyhQbGF0Zm9ybUxheWVyKiBsYXllcikK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVDb29yZGlu
YXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDZi
ZmNhNGRmZDUxLi4wNDEyYTY3OTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFw
aGljcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRn
cmFwaGljcy9TY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlQ29vcmRp
bmF0ZWRHcmFwaGljcy5oIgogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlRml4ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKQEAgLTY2LDQgKzY2LDQgQEAgUmVmPFNjcm9sbGlu
Z1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlQ29vcmRpbmF0ZWRHcmFwaGljczo6Y3JlYXRlU2Nyb2xs
aW5nVHJlZU5vZGUKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8v
IEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
b29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmNwcAppbmRleCAyMmNkMWZmNzcxOS4uNTVkMzNkZTA3YTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5n
VHJlZUZpeGVkTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29v
cmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4ZWROb2RlLmNwcApAQCAtMjgsOSArMjgs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdUcmVlRml4ZWRO
b2RlLmgiCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlRml4
ZWROb2RlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIk5pY29zaWFQ
bGF0Zm9ybUxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMTQgKzUyLDQ0
IEBAIFNjcm9sbGluZ1RyZWVGaXhlZE5vZGU6On5TY3JvbGxpbmdUcmVlRml4ZWROb2RlKCkKICAg
ICBzY3JvbGxpbmdUcmVlKCkuZml4ZWRPclN0aWNreU5vZGVSZW1vdmVkKCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nVHJlZUZpeGVkTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTdGF0ZU5vZGUmKQordm9pZCBTY3JvbGxpbmdUcmVlRml4ZWROb2RlOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQog
eworICAgIGF1dG8mIGZpeGVkTm9kZSA9IGRvd25jYXN0PFNjcm9sbGluZ1N0YXRlRml4ZWROb2Rl
PihzdGF0ZU5vZGUpOworCisgICAgaWYgKGZpeGVkTm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Ny
b2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZv
cm1MYXllciogbGF5ZXIgPSBmaXhlZE5vZGUubGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxMYXll
ciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICB9CisK
KyAgICBpZiAoc3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZpeGVk
Tm9kZTo6Vmlld3BvcnRDb25zdHJhaW50cykpCisgICAgICAgIG1fY29uc3RyYWludHMgPSBmaXhl
ZE5vZGUudmlld3BvcnRDb25zdHJhaW50cygpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVGaXhl
ZE5vZGU6OnVwZGF0ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJl
ZU5vZGUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmKQordm9pZCBTY3JvbGxp
bmdUcmVlRml4ZWROb2RlOjp1cGRhdGVMYXllcnNBZnRlckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNj
cm9sbGluZ1RyZWVOb2RlJiBjaGFuZ2VkTm9kZSwgY29uc3QgRmxvYXRSZWN0JiBmaXhlZFBvc2l0
aW9uUmVjdCwgY29uc3QgRmxvYXRTaXplJiBjdW11bGF0aXZlRGVsdGEpCiB7CisgICAgRmxvYXRQ
b2ludCBsYXllclBvc2l0aW9uID0gbV9jb25zdHJhaW50cy5sYXllclBvc2l0aW9uRm9yVmlld3Bv
cnRSZWN0KGZpeGVkUG9zaXRpb25SZWN0KTsKKyAgICBsYXllclBvc2l0aW9uIC09IGN1bXVsYXRp
dmVEZWx0YTsKKworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbExheWVy
LT5hY2Nlc3NTdGF0ZSgKKyAgICAgICAgW3RoaXMsICZsYXllclBvc2l0aW9uXShOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyOjpMYXllclN0YXRlJiBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgYW5jaG9yUG9pbnQgPSBzdGF0ZS5hbmNob3JQb2ludDsKKyAgICAgICAgICAgIGF1
dG8mIHNpemUgPSBzdGF0ZS5zaXplOworCisgICAgICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9u
ID0gbGF5ZXJQb3NpdGlvbiAtIG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkKKyAgICAg
ICAgICAgICAgICArIEZsb2F0UG9pbnQoYW5jaG9yUG9pbnQueCgpICogc2l6ZS53aWR0aCgpLCBh
bmNob3JQb2ludC55KCkgKiBzaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9KTsKKworICAgIGlmIChtX2NoaWxkcmVuKSB7CisgICAgICAgIEZs
b2F0U2l6ZSBuZXdEZWx0YSA9IGxheWVyUG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9z
aXRpb25BdExhc3RMYXlvdXQoKSArIGN1bXVsYXRpdmVEZWx0YTsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6ICptX2NoaWxkcmVuKQorICAgICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyc0Fm
dGVyQW5jZXN0b3JDaGFuZ2UoY2hhbmdlZE5vZGUsIGZpeGVkUG9zaXRpb25SZWN0LCBuZXdEZWx0
YSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYg
Ly8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRml4
ZWROb2RlLmgKaW5kZXggZDBhYTg3OTI0MjIuLjU5YmNmZjRiNzM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1Ry
ZWVGaXhlZE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGaXhlZE5vZGUuaApAQCAtMjcsMTAgKzI3LDE3IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCiAKICNpbmNsdWRlICJTY3JvbGxp
bmdUcmVlTm9kZS5oIgogCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29uc3RyYWludHMuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBOaWNvc2lhIHsKK2NsYXNzIENvbXBvc2l0
aW9uTGF5ZXI7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2Nyb2xsaW5nVHJl
ZUZpeGVkTm9kZSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00Myw4ICs1
MCwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNv
bnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJz
QWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBTY3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOworCisgICAgUmVmUHRyPE5pY29zaWE6
OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgRml4ZWRQb3NpdGlvblZpZXdw
b3J0Q29uc3RyYWludHMgbV9jb25zdHJhaW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyNlbmRpZiAvLyBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJh
bWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCBlY2M2ZjMxNzMwNi4uMWY0OGVh
Y2ViMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5h
dGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3Jh
cGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nvb3JkaW5hdGVk
Z3JhcGhpY3MvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhp
Y3MuY3BwCkBAIC0yOCw3ICsyOCwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmgiCiAK
LSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KSAmJiBVU0UoTklDT1NJQSkKKworI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCisjaW5jbHVkZSAiTmljb3NpYVBsYXRm
b3JtTGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCwyNSArNDgsMTQwIEBA
IFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOCiAKIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05v
ZGVDb29yZGluYXRlZEdyYXBoaWNzOjp+U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNv
b3JkaW5hdGVkR3JhcGhpY3MoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikKK3ZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZUNvb3JkaW5hdGVkR3JhcGhpY3M6OmNvbW1pdFN0YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Ny
b2xsaW5nU3RhdGVOb2RlJiBzdGF0ZU5vZGUpCit7CisgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKCkgY2hhbmdlZCBwcm9wZXJ0aWVzICVkXG4iLAorICAgIC8vICAg
IHN0YXRlTm9kZS5jaGFuZ2VkUHJvcGVydGllcygpKTsKKyAgICBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKHN0YXRlTm9kZSk7CisgICAg
Y29uc3QgYXV0byYgc2Nyb2xsaW5nU3RhdGVOb2RlID0gZG93bmNhc3Q8U2Nyb2xsaW5nU3RhdGVG
cmFtZVNjcm9sbGluZ05vZGU+KHN0YXRlTm9kZSk7CisKKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVO
b2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZU5vZGU6OlNjcm9sbExheWVyKSkg
eworICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRl
Tm9kZS5sYXllcigpOworICAgICAgICBtX3Njcm9sbExheWVyID0gZG93bmNhc3Q8Tmljb3NpYTo6
Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2ZwcmludGYoc3RkZXJyLCAiXHRj
aGFuZ2VkIHByb3BlcnR5OiBTY3JvbGxMYXllciAlcCBpZCAlbHVcbiIsIG1fc2Nyb2xsTGF5ZXIu
Z2V0KCksIG1fc2Nyb2xsTGF5ZXIgPyBtX3Njcm9sbExheWVyLT5pZCgpIDogMCk7CisgICAgfQor
ICAgIGlmIChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsZWRDb250ZW50c0xheWVyKSkgeworICAgICAgICBOaWNv
c2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5zY3JvbGxlZENv
bnRlbnRzTGF5ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgPSBkb3duY2Fz
dDxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50Zihz
dGRlcnIsICJcdGNoYW5nZWQgcHJvcGVydHk6IFNjcm9sbGVkQ29udGVudHNMYXllciAlcCBpZCAl
bHVcbiIsIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLmdldCgpLCBtX3Njcm9sbGVkQ29udGVudHNM
YXllciA/IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5pZCgpIDogMCk7CisgICAgfQorICAgIGlm
IChzY3JvbGxpbmdTdGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlOjpDb3VudGVyU2Nyb2xsaW5nTGF5ZXIpKSB7CisgICAgICAgIE5pY29z
aWE6OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3RhdGVOb2RlLmNvdW50ZXJTY3Jv
bGxpbmdMYXllcigpOworICAgICAgICBtX2NvdW50ZXJTY3JvbGxpbmdMYXllciA9IGRvd25jYXN0
PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVyKTsKKyAgICAgICAgLy9mcHJpbnRmKHN0
ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogQ291bnRlclNjcm9sbGluZ0xheWVyICVwXG4iLCBt
X2NvdW50ZXJTY3JvbGxpbmdMYXllci5nZXQoKSk7CisgICAgfQorICAgIGlmIChzY3JvbGxpbmdT
dGF0ZU5vZGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdO
b2RlOjpJbnNldENsaXBMYXllcikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciog
bGF5ZXIgPSBzY3JvbGxpbmdTdGF0ZU5vZGUuaW5zZXRDbGlwTGF5ZXIoKTsKKyAgICAgICAgbV9p
bnNldENsaXBMYXllciA9IGRvd25jYXN0PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+KGxheWVy
KTsKKyAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlx0Y2hhbmdlZCBwcm9wZXJ0eTogSW5zZXRD
bGlwTGF5ZXIgJXBcbiIsIG1faW5zZXRDbGlwTGF5ZXIuZ2V0KCkpOworICAgIH0KKyAgICBpZiAo
c2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6Q29udGVudFNoYWRvd0xheWVyKSkgeworICAgICAgICBOaWNvc2lhOjpQ
bGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRlTm9kZS5jb250ZW50U2hhZG93TGF5
ZXIoKTsKKyAgICAgICAgbV9jb250ZW50U2hhZG93TGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRlcnIsICJcdGNo
YW5nZWQgcHJvcGVydHk6IENvbnRlbnRTaGFkb3dMYXllciAlcFxuIiwgbV9jb250ZW50U2hhZG93
TGF5ZXIuZ2V0KCkpOworICAgIH0KKyAgICBpZiAoc2Nyb2xsaW5nU3RhdGVOb2RlLmhhc0NoYW5n
ZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6SGVhZGVyTGF5ZXIp
KSB7CisgICAgICAgIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXIqIGxheWVyID0gc2Nyb2xsaW5nU3Rh
dGVOb2RlLmhlYWRlckxheWVyKCk7CisgICAgICAgIG1faGVhZGVyTGF5ZXIgPSBkb3duY2FzdDxO
aWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPihsYXllcik7CisgICAgICAgIC8vZnByaW50ZihzdGRl
cnIsICJcdGNoYW5nZWQgcHJvcGVydHk6IEhlYWRlckxheWVyICVwXG4iLCBtX2hlYWRlckxheWVy
LmdldCgpKTsKKyAgICB9CisgICAgaWYgKHNjcm9sbGluZ1N0YXRlTm9kZS5oYXNDaGFuZ2VkUHJv
cGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkZvb3RlckxheWVyKSkgewor
ICAgICAgICBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyKiBsYXllciA9IHNjcm9sbGluZ1N0YXRlTm9k
ZS5mb290ZXJMYXllcigpOworICAgICAgICBtX2Zvb3RlckxheWVyID0gZG93bmNhc3Q8Tmljb3Np
YTo6Q29tcG9zaXRpb25MYXllcj4obGF5ZXIpOworICAgICAgICAvL2ZwcmludGYoc3RkZXJyLCAi
XHRjaGFuZ2VkIHByb3BlcnR5OiBGb290ZXJMYXllciAlcFxuIiwgbV9mb290ZXJMYXllci5nZXQo
KSk7CisgICAgfQorfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29y
ZGluYXRlZEdyYXBoaWNzOjpjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5n
U3RhdGVOb2RlJiBzdGF0ZU5vZGUpCiB7CisgICAgLy9mcHJpbnRmKHN0ZGVyciwgIlNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpjb21taXRTdGF0ZUFm
dGVyQ2hpbGRyZW4oKSBjaGFuZ2VkIHByb3BlcnRpZXMgJWRcbiIsCisgICAgLy8gICAgc3RhdGVO
b2RlLmNoYW5nZWRQcm9wZXJ0aWVzKCkpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBpZiAoIWNhbkhhdmVTY3JvbGxi
YXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbEJ5KHsgd2hlZWxFdmVudC5kZWx0
YVgoKSwgLXdoZWVsRXZlbnQuZGVsdGFZKCkgfSk7CisKKyAgICAvLyBUT0RPOgorICAgIC8vIHNj
cm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hlZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5n
Tm9kZUlEKCkpOworICAgIC8vIHNjcm9sbGluZ1RyZWUoKS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uo
d2hlZWxFdmVudC5waGFzZSgpKTsKIH0KIAogRmxvYXRQb2ludCBTY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAog
ewotICAgIHJldHVybiB7IH07CisgICAgQVNTRVJUKG1fc2Nyb2xsTGF5ZXIpOworCisgICAgRmxv
YXRQb2ludCBzY3JvbGxQb3NpdGlvbjsKKyAgICBtX3Njcm9sbExheWVyLT5hY2Nlc3NTdGF0ZSgK
KyAgICAgICAgWyZzY3JvbGxQb3NpdGlvbl0oY29uc3QgTmljb3NpYTo6Q29tcG9zaXRpb25MYXll
cjo6TGF5ZXJTdGF0ZSYgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uID0gLXN0YXRlLnBvc2l0aW9uOworICAgICAgICB9KTsKKyAgICByZXR1cm4gc2Nyb2xsUG9z
aXRpb247CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5h
dGVkR3JhcGhpY3M6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKQordm9pZCBT
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6c2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7CisgICAgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24pOwogfQog
Ci12b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNz
OjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZs
b2F0UG9pbnQmKQordm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0
ZWRHcmFwaGljczo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50
cyhjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKKyAgICBzdGQ6Om9wdGlvbmFs
PEZsb2F0UG9pbnQ+IGxheW91dFZpZXdwb3J0T3JpZ2luOworICAgIGlmIChzY3JvbGxpbmdUcmVl
KCkudmlzdWFsVmlld3BvcnRFbmFibGVkKCkpIHsKKyAgICAgICAgRmxvYXRQb2ludCB2aXNpYmxl
Q29udGVudE9yaWdpbiA9IHNjcm9sbFBvc2l0aW9uOworICAgICAgICBGbG9hdFJlY3QgbmV3TGF5
b3V0Vmlld3BvcnQgPSBsYXlvdXRWaWV3cG9ydEZvclNjcm9sbFBvc2l0aW9uKHZpc2libGVDb250
ZW50T3JpZ2luLCBmcmFtZVNjYWxlRmFjdG9yKCkpOworICAgICAgICBzZXRMYXlvdXRWaWV3cG9y
dChuZXdMYXlvdXRWaWV3cG9ydCk7CisgICAgICAgIGxheW91dFZpZXdwb3J0T3JpZ2luID0gbmV3
TGF5b3V0Vmlld3BvcnQubG9jYXRpb24oKTsKKyAgICB9CisKKyAgICBzZXRTY3JvbGxMYXllclBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBsYXlvdXRWaWV3cG9ydCgpKTsKKyAgICBzY3JvbGxpbmdU
cmVlKCkuc2Nyb2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoc2Nyb2xsaW5nTm9kZUlEKCksIHNjcm9s
bFBvc2l0aW9uLCBsYXlvdXRWaWV3cG9ydE9yaWdpbik7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZUNvb3JkaW5hdGVkR3JhcGhpY3M6OnNldFNjcm9sbExheWVyUG9z
aXRpb24oY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIFNjcm9sbGlu
Z1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzOjpzZXRTY3JvbGxMYXll
clBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIGxheW91dFZpZXdwb3J0KQogeworICAgIC8vZnByaW50ZihzdGRlcnIsICJTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6c2V0U2Nyb2xsTGF5ZXJQ
b3NpdGlvbigpIHBvc2l0aW9uICglLjJmLCUuMmYpIGxheW91dFZpZXdwb3J0ICglLjJmLCUuMmYp
eCglLjJmLCUuMmYpXG4iLAorICAgIC8vICAgIHNjcm9sbFBvc2l0aW9uLngoKSwgc2Nyb2xsUG9z
aXRpb24ueSgpLAorICAgIC8vICAgIGxheW91dFZpZXdwb3J0LngoKSwgbGF5b3V0Vmlld3BvcnQu
eSgpLCBsYXlvdXRWaWV3cG9ydC53aWR0aCgpLCBsYXlvdXRWaWV3cG9ydC5oZWlnaHQoKSk7CisK
KyAgICBhdXRvIHVwZGF0ZVNjb3BlID0gbV9zY3JvbGxMYXllci0+Y3JlYXRlVXBkYXRlU2NvcGUo
KTsKKworICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAgICBtX3Njcm9sbExheWVyLT5hY2Nl
c3NTdGF0ZSgKKyAgICAgICAgWyZzY3JvbGxQb3NpdGlvbl0oTmljb3NpYTo6Q29tcG9zaXRpb25M
YXllcjo6TGF5ZXJTdGF0ZSYgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlLnBv
c2l0aW9uID0gLXNjcm9sbFBvc2l0aW9uOworICAgICAgICAgICAgc3RhdGUuZGVsdGEucG9zaXRp
b25DaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICBGbG9hdFJlY3QgdmlzaWJsZUNv
bnRlbnRSZWN0KHNjcm9sbFBvc2l0aW9uLCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7CisgICAgRmxv
YXRSZWN0IGZpeGVkUG9zaXRpb25SZWN0OworICAgIFNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVt
ZW50cyBiZWhhdmlvckZvckZpeGVkID0gU3RpY2tUb1ZpZXdwb3J0Qm91bmRzOworCisgICAgaWYg
KHNjcm9sbGluZ1RyZWUoKS52aXN1YWxWaWV3cG9ydEVuYWJsZWQoKSkKKyAgICAgICAgZml4ZWRQ
b3NpdGlvblJlY3QgPSBsYXlvdXRWaWV3cG9ydDsKKyAgICBlbHNlIHsKKyAgICAgICAgYmVoYXZp
b3JGb3JGaXhlZCA9IHNjcm9sbEJlaGF2aW9yRm9yRml4ZWRFbGVtZW50cygpOworCisgICAgICAg
IEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb25Gb3JGaXhlZENoaWxkcmVuID0gRnJhbWVWaWV3Ojpz
Y3JvbGxQb3NpdGlvbkZvckZpeGVkUG9zaXRpb24oZW5jbG9zaW5nTGF5b3V0UmVjdCh2aXNpYmxl
Q29udGVudFJlY3QpLCBMYXlvdXRTaXplKHRvdGFsQ29udGVudHNTaXplKCkpLAorICAgICAgICAg
ICAgTGF5b3V0UG9pbnQoc2Nyb2xsUG9zaXRpb24pLCBzY3JvbGxPcmlnaW4oKSwgZnJhbWVTY2Fs
ZUZhY3RvcigpLCBmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCksIGJlaGF2aW9y
Rm9yRml4ZWQsIGhlYWRlckhlaWdodCgpLCBmb290ZXJIZWlnaHQoKSk7CisKKyAgICAgICAgZml4
ZWRQb3NpdGlvblJlY3QgPSB7IHNjcm9sbFBvc2l0aW9uRm9yRml4ZWRDaGlsZHJlbiwgdmlzaWJs
ZUNvbnRlbnRSZWN0LnNpemUoKSB9OworICAgIH0KKworICAgIGZsb2F0IHRvcENvbnRlbnRJbnNl
dCA9IHRoaXMtPnRvcENvbnRlbnRJbnNldCgpOworICAgIGlmIChtX2luc2V0Q2xpcExheWVyICYm
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyICYmIHRvcENvbnRlbnRJbnNldCkgeworICAgICAgICAv
LyBUT0RPOiAuLi4KKyAgICB9CisKKyAgICBpZiAobV9jaGlsZHJlbikgeworICAgICAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCisgICAgICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZSgqdGhpcywgZml4ZWRQb3NpdGlvblJlY3QsIEZsb2F0U2l6
ZSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZUNv
b3JkaW5hdGVkR3JhcGhpY3M6OnVwZGF0ZUxheWVyc0FmdGVyVmlld3BvcnRDaGFuZ2UoY29uc3Qg
RmxvYXRSZWN0JiwgZG91YmxlKQpAQCAtNzEsNCArMTkwLDQgQEAgdm9pZCBTY3JvbGxpbmdUcmVl
RnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljczo6dXBkYXRlTGF5ZXJzQWZ0ZXJW
aWV3cG8KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5D
X1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8vIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5J
Q09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGlu
YXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdy
YXBoaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBo
aWNzL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmgK
aW5kZXggNjUwODZjYzkyYmQuLmJlN2JkNjc2YWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVGcmFtZVNj
cm9sbGluZ05vZGVDb29yZGluYXRlZEdyYXBoaWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcy5oCkBAIC0yNywxMCArMjcsMTIgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKIAogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGUuaCIKIAorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRp
bmF0ZWRHcmFwaGljcyBmaW5hbCA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdO
b2RlIHsKQEAgLTQxLDYgKzQzLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlQ29vcmRpbmF0ZWRHcmFwaGljcyhTY3JvbGxpbmdUcmVlJiwg
U2Nyb2xsaW5nTm9kZVR5cGUsIFNjcm9sbGluZ05vZGVJRCk7CiAKKyAgICB2b2lkIGNvbW1pdFN0
YXRlQmVmb3JlQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2RlJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBjb21taXRTdGF0ZUFmdGVyQ2hpbGRyZW4oY29uc3QgU2Nyb2xsaW5nU3RhdGVOb2Rl
Jikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jikgb3ZlcnJpZGU7CiAKICAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC00OSw4ICs1NCwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0
U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyc0FmdGVyVmlld3BvcnRDaGFuZ2UoY29u
c3QgRmxvYXRSZWN0JiwgZG91YmxlKSBvdmVycmlkZTsKKworICAgIFJlZlB0cjxOaWNvc2lhOjpD
b21wb3NpdGlvbkxheWVyPiBtX3Njcm9sbExheWVyOworICAgIFJlZlB0cjxOaWNvc2lhOjpDb21w
b3NpdGlvbkxheWVyPiBtX3Njcm9sbGVkQ29udGVudHNMYXllcjsKKyAgICBSZWZQdHI8Tmljb3Np
YTo6Q29tcG9zaXRpb25MYXllcj4gbV9jb3VudGVyU2Nyb2xsaW5nTGF5ZXI7CisgICAgUmVmUHRy
PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1faW5zZXRDbGlwTGF5ZXI7CisgICAgUmVmUHRy
PE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fY29udGVudFNoYWRvd0xheWVyOworICAgIFJl
ZlB0cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2hlYWRlckxheWVyOworICAgIFJlZlB0
cjxOaWNvc2lhOjpDb21wb3NpdGlvbkxheWVyPiBtX2Zvb3RlckxheWVyOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Nj
cm9sbGluZ1RyZWVTdGlja3lOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L2Nvb3JkaW5hdGVkZ3JhcGhpY3MvU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuY3BwCmluZGV4IDAz
MjJlNjc2YTY4Li45ZWQ1OGVhMGIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9T
Y3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5jcHAKQEAgLTI4LDkgKzI4LDEzIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGUuaCIKIAotI2lmIEVO
QUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBF
TkFCTEUoQVNZTkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVT
RShOSUNPU0lBKQogCisjaW5jbHVkZSAiU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
LmgiCisjaW5jbHVkZSAiTmljb3NpYVBsYXRmb3JtTGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01MCwxNCArNTQsNTkgQEAgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6On5TY3Jv
bGxpbmdUcmVlU3RpY2t5Tm9kZSgpCiAgICAgc2Nyb2xsaW5nVHJlZSgpLmZpeGVkT3JTdGlja3lO
b2RlUmVtb3ZlZCgpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjpjb21taXRT
dGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpCit2b2lkIFNjcm9s
bGluZ1RyZWVTdGlja3lOb2RlOjpjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9s
bGluZ1N0YXRlTm9kZSYgc3RhdGVOb2RlKQogeworICAgIGF1dG8mIHN0aWNreU5vZGUgPSBkb3du
Y2FzdDxTY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGU+KHN0YXRlTm9kZSk7CisKKyAgICBpZiAoc3Rp
Y2t5Tm9kZS5oYXNDaGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVOb2RlOjpTY3JvbGxMYXll
cikpIHsKKyAgICAgICAgTmljb3NpYTo6UGxhdGZvcm1MYXllciogbGF5ZXIgPSBzdGlja3lOb2Rl
LmxheWVyKCk7CisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBkb3duY2FzdDxOaWNvc2lhOjpDb21w
b3NpdGlvbkxheWVyPihsYXllcik7CisgICAgfQorCisgICAgaWYgKHN0YXRlTm9kZS5oYXNDaGFu
Z2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVTdGlja3lOb2RlOjpWaWV3cG9ydENvbnN0cmFpbnRz
KSkKKyAgICAgICAgbV9jb25zdHJhaW50cyA9IHN0aWNreU5vZGUudmlld3BvcnRDb25zdHJhaW50
cygpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlOjp1cGRhdGVMYXllcnNBZnRl
ckFuY2VzdG9yQ2hhbmdlKGNvbnN0IFNjcm9sbGluZ1RyZWVOb2RlJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRTaXplJikKK3ZvaWQgU2Nyb2xsaW5nVHJlZVN0aWNreU5vZGU6OnVwZGF0
ZUxheWVyc0FmdGVyQW5jZXN0b3JDaGFuZ2UoY29uc3QgU2Nyb2xsaW5nVHJlZU5vZGUmIGNoYW5n
ZWROb2RlLCBjb25zdCBGbG9hdFJlY3QmIGZpeGVkUG9zaXRpb25SZWN0LCBjb25zdCBGbG9hdFNp
emUmIGN1bXVsYXRpdmVEZWx0YSkKIHsKKyAgICBib29sIGFkanVzdFN0aWNreUxheWVyID0gZmFs
c2U7CisgICAgRmxvYXRSZWN0IGNvbnN0cmFpbmluZ1JlY3Q7CisKKyAgICBpZiAoaXM8U2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZT4oKnBhcmVudCgpKSkgeworICAgICAgICBjb25z
dHJhaW5pbmdSZWN0ID0gRmxvYXRSZWN0KGRvd25jYXN0PFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Nj
cm9sbGluZ05vZGU+KCpwYXJlbnQoKSkuc2Nyb2xsUG9zaXRpb24oKSwgbV9jb25zdHJhaW50cy5j
b25zdHJhaW5pbmdSZWN0QXRMYXN0TGF5b3V0KCkuc2l6ZSgpKTsKKyAgICAgICAgYWRqdXN0U3Rp
Y2t5TGF5ZXIgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaXM8U2Nyb2xsaW5nVHJlZUZyYW1lU2Ny
b2xsaW5nTm9kZT4oKnBhcmVudCgpKSkgeworICAgICAgICBjb25zdHJhaW5pbmdSZWN0ID0gZml4
ZWRQb3NpdGlvblJlY3Q7CisgICAgICAgIGFkanVzdFN0aWNreUxheWVyID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBGbG9hdFNpemUgZGVsdGFGb3JEZXNjZW5kYW50cyA9IGN1bXVsYXRpdmVEZWx0YTsK
KworICAgIGlmIChhZGp1c3RTdGlja3lMYXllcikgeworICAgICAgICBGbG9hdFBvaW50IGxheWVy
UG9zaXRpb24gPSBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25Gb3JDb25zdHJhaW5pbmdSZWN0
KGNvbnN0cmFpbmluZ1JlY3QpOworCisgICAgICAgIEFTU0VSVChtX3Njcm9sbExheWVyKTsKKyAg
ICAgICAgbV9zY3JvbGxMYXllci0+YWNjZXNzU3RhdGUoCisgICAgICAgICAgICBbdGhpcywgJmxh
eWVyUG9zaXRpb25dKE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3RhdGUmIHN0YXRl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8mIGFuY2hvclBvaW50ID0gc3Rh
dGUuYW5jaG9yUG9pbnQ7CisgICAgICAgICAgICAgICAgYXV0byYgc2l6ZSA9IHN0YXRlLnNpemU7
CisKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbiAt
IG1fY29uc3RyYWludHMuYWxpZ25tZW50T2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgKyBG
bG9hdFBvaW50KGFuY2hvclBvaW50LngoKSAqIHNpemUud2lkdGgoKSwgYW5jaG9yUG9pbnQueSgp
ICogc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgc3RhdGUucG9zaXRpb24gPSBwb3Np
dGlvbjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5kZWx0YS5wb3NpdGlvbkNoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgZGVsdGFGb3JEZXNjZW5kYW50cyA9IGxheWVy
UG9zaXRpb24gLSBtX2NvbnN0cmFpbnRzLmxheWVyUG9zaXRpb25BdExhc3RMYXlvdXQoKSArIGN1
bXVsYXRpdmVEZWx0YTsKKyAgICB9CisKKyAgICBpZiAobV9jaGlsZHJlbikgeworICAgICAgICBm
b3IgKGF1dG8mIGNoaWxkIDogKm1fY2hpbGRyZW4pCisgICAgICAgICAgICBjaGlsZC0+dXBkYXRl
TGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjaGFuZ2VkTm9kZSwgZml4ZWRQb3NpdGlvblJlY3Qs
IGRlbHRhRm9yRGVzY2VuZGFudHMpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorI2VuZGlmIC8vIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpICYmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlj
a3lOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRlZGdyYXBo
aWNzL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgKaW5kZXggZjMxMzNhNzA4YzcuLmViMThmNGNl
ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jb29yZGluYXRl
ZGdyYXBoaWNzL1Njcm9sbGluZ1RyZWVTdGlja3lOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvY29vcmRpbmF0ZWRncmFwaGljcy9TY3JvbGxpbmdUcmVlU3RpY2t5Tm9k
ZS5oCkBAIC0yNywxMCArMjcsMTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJ
QSkKIAogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCiAKKyNpbmNsdWRlICJTY3JvbGxp
bmdDb25zdHJhaW50cy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZSBmaW5hbCA6IHB1YmxpYyBT
Y3JvbGxpbmdUcmVlTm9kZSB7CkBAIC00Myw4ICs0NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBjb21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92
ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzQWZ0ZXJBbmNlc3RvckNoYW5nZShjb25zdCBT
Y3JvbGxpbmdUcmVlTm9kZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYpIG92
ZXJyaWRlOworCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI+IG1fc2Nyb2xs
TGF5ZXI7CisgICAgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIG1fY29uc3RyYWlu
dHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoQVNZ
TkNfU0NST0xMSU5HKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYgLy8gRU5B
QkxFKEFTWU5DX1NDUk9MTElORykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0Uo
TklDT1NJQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBw
ZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmlu
ZGV4IGJmZTQ0ZjkyNDJhLi40OTlmZWQ4ZDA1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9UZXh0dXJlTWFwcGVyLmNtYWtlCkBAIC01Myw2ICs1Myw3IEBAIGlmIChVU0VfQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBh
aW50aW5nRW5naW5lVGhyZWFkZWQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvTmljb3NpYVBsYXRmb3JtTGF5ZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvTmljb3NpYVNjZW5lLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFTY2VuZUludGVncmF0aW9uLmNwcAogCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENh
aXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKaW5kZXggZjQ1ZWQzYmYzNWQuLjRjNzM4YzNjMDFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgK
QEAgLTkwLDYgKzkwLDEyIEBAIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc1N1cmZhY2Uz
RDsKIGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0M0QgPSAwOwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVj
dCA9IDA7CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgTmljb3NpYSB7Citj
bGFzcyBHQzNETGF5ZXI7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RXh0ZW5zaW9uczNEOwogI2lmICFQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKQEAg
LTE1MDIsNiArMTUwOCw3IEBAIHByaXZhdGU6CiAjZWxpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAg
ICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyPiBtX3RleG1hcExheWVy
OworICAgIFJlZlB0cjxOaWNvc2lhOjpHQzNETGF5ZXI+IG1fY29udGVudExheWVyOwogI2Vsc2UK
ICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRmb3Jt
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3Np
YVBsYXRmb3JtTGF5ZXIuaAppbmRleCBiZTNhNTI1N2E0Yi4uMDkyNzIwMDU1NjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVBsYXRm
b3JtTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L05pY29zaWFQbGF0Zm9ybUxheWVyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGbG9h
dFBvaW50M0QuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGbG9hdFNpemUu
aCIKKyNpbmNsdWRlICJOaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgpAQCAtNTMsNiArNTQsMjcgQEAgcHVibGljOgogICAg
IHVzaW5nIExheWVySUQgPSB1aW50NjRfdDsKICAgICBMYXllcklEIGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pZDsgfQogCisgICAgdm9pZCBzZXRTY2VuZUludGVncmF0aW9uKFJlZlB0cjxTY2VuZUlu
dGVncmF0aW9uPiYmIHNjZW5lSW50ZWdyYXRpb24pCisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgICAgICBtX3N0YXRlLnNjZW5lSW50ZWdyYXRpb24g
PSBXVEZNb3ZlKHNjZW5lSW50ZWdyYXRpb24pOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTY2VuZUludGVncmF0aW9uOjpVcGRhdGVTY29wZT4gY3JlYXRlVXBkYXRlU2NvcGUoKQorICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgaWYg
KG1fc3RhdGUuc2NlbmVJbnRlZ3JhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXRlLnNj
ZW5lSW50ZWdyYXRpb24tPmNyZWF0ZVVwZGF0ZVNjb3BlKCk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIHZvaWQgcmVxdWVzdFVwZGF0ZSgpCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3N0YXRlLmxvY2spOworICAgICAgICBpZiAobV9zdGF0ZS5zY2Vu
ZUludGVncmF0aW9uKQorICAgICAgICAgICAgbV9zdGF0ZS5zY2VuZUludGVncmF0aW9uLT5yZXF1
ZXN0VXBkYXRlKCk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgUGxhdGZvcm1M
YXllcih1aW50NjRfdCk7CiAKQEAgLTYwLDYgKzgyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3Ry
dWN0IHsKICAgICAgICAgTG9jayBsb2NrOworICAgICAgICBSZWZQdHI8U2NlbmVJbnRlZ3JhdGlv
bj4gc2NlbmVJbnRlZ3JhdGlvbjsKICAgICB9IG1fc3RhdGU7CiB9OwogCkBAIC0xMzcsNyArMTYw
LDcgQEAgcHVibGljOgogICAgICAgICB9IGZsYWdzOwogCiAgICAgICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgcG9zaXRpb247Ci0gICAgICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCBhbmNob3JQb2lu
dDsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50IHsgMC41LCAwLjUs
IDAgfTsKICAgICAgICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemU7CiAKICAgICAgICAgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwpAQCAtMTQ3LDcgKzE3MCw3IEBAIHB1
YmxpYzoKICAgICAgICAgV2ViQ29yZTo6RmxvYXRTaXplIGNvbnRlbnRzVGlsZVBoYXNlOwogICAg
ICAgICBXZWJDb3JlOjpGbG9hdFNpemUgY29udGVudHNUaWxlU2l6ZTsKIAotICAgICAgICBmbG9h
dCBvcGFjaXR5IHsgMCB9OworICAgICAgICBmbG9hdCBvcGFjaXR5IHsgMS4wIH07CiAgICAgICAg
IFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7CiAKICAgICAgICAgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyBmaWx0ZXJzOwpAQCAtMTc0LDYgKzE5NywxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0g
ZGVidWdCb3JkZXI7CiAgICAgfTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBhY2Nlc3NTdGF0ZShjb25zdCBUJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoUGxhdGZvcm1MYXllcjo6bV9zdGF0ZS5sb2NrKTsKKyAgICAgICAgZnVuY3Rvciht
X3N0YXRlLnBlbmRpbmcpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAg
dm9pZCB1cGRhdGVTdGF0ZShjb25zdCBUJiBmdW5jdG9yKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50ZWdy
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNv
c2lhU2NlbmVJbnRlZ3JhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjY4OTJlNjY0ZjEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9OaWNvc2lhU2NlbmVJbnRlZ3JhdGlvbi5jcHAKQEAgLTAs
MCArMSw0OSBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5pY29zaWFTY2VuZUlu
dGVncmF0aW9uLmgiCisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKworU2NlbmVJbnRlZ3JhdGlvbjo6
U2NlbmVJbnRlZ3JhdGlvbihDbGllbnQmIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudC5vYmplY3Qg
PSAmY2xpZW50OworfQorCitTY2VuZUludGVncmF0aW9uOjp+U2NlbmVJbnRlZ3JhdGlvbigpCit7
CisgICAgQVNTRVJUKCFtX2NsaWVudC5vYmplY3QpOworfQorCit2b2lkIFNjZW5lSW50ZWdyYXRp
b246OmludmFsaWRhdGUoKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fY2xpZW50LmxvY2sp
OworICAgIG1fY2xpZW50Lm9iamVjdCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgU2NlbmVJbnRlZ3Jh
dGlvbjo6cmVxdWVzdFVwZGF0ZSgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9jbGllbnQu
bG9jayk7CisgICAgaWYgKG1fY2xpZW50Lm9iamVjdCkKKyAgICAgICAgbV9jbGllbnQub2JqZWN0
LT5yZXF1ZXN0VXBkYXRlKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxTY2VuZUludGVncmF0aW9u
OjpVcGRhdGVTY29wZT4gU2NlbmVJbnRlZ3JhdGlvbjo6Y3JlYXRlVXBkYXRlU2NvcGUoKQorewor
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFVwZGF0ZVNjb3BlPihtYWtlUmVmKCp0aGlzKSk7
Cit9CisKK1NjZW5lSW50ZWdyYXRpb246OkNsaWVudDo6fkNsaWVudCgpID0gZGVmYXVsdDsKKwor
U2NlbmVJbnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU6OlVwZGF0ZVNjb3BlKFJlZjxTY2VuZUludGVn
cmF0aW9uPiYmIHNjZW5lSW50ZWdyYXRpb24pCisgICAgOiBtX3NjZW5lSW50ZWdyYXRpb24oV1RG
TW92ZShzY2VuZUludGVncmF0aW9uKSkKKyAgICAsIG1fbG9ja2VyKG1fc2NlbmVJbnRlZ3JhdGlv
bi0+bV9jbGllbnQubG9jaykKK3sKK30KKworU2NlbmVJbnRlZ3JhdGlvbjo6VXBkYXRlU2NvcGU6
On5VcGRhdGVTY29wZSgpCit7CisgICAgYXV0byYgc2NlbmVJbnRlZ3JhdGlvbk9iaiA9IG1fc2Nl
bmVJbnRlZ3JhdGlvbi5nZXQoKTsKKyAgICBpZiAoc2NlbmVJbnRlZ3JhdGlvbk9iai5tX2NsaWVu
dC5vYmplY3QpCisgICAgICAgIHNjZW5lSW50ZWdyYXRpb25PYmoubV9jbGllbnQub2JqZWN0LT5y
ZXF1ZXN0VXBkYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5pY29zaWEKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmljb3NpYVNjZW5lSW50
ZWdyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvTmlj
b3NpYVNjZW5lSW50ZWdyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uYmY1OWZkMzM2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL05pY29zaWFTY2VuZUludGVncmF0aW9uLmgKQEAgLTAsMCAr
MSw0NSBAQAorI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBOaWNvc2lhIHsKKworY2xhc3MgU2NlbmVJbnRlZ3Jh
dGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTY2VuZUludGVncmF0aW9uPiB7Citw
dWJsaWM6CisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fkNsaWVudCgpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0VXBkYXRlKCkgPSAwOwor
ICAgIH07CisKKyAgICBTY2VuZUludGVncmF0aW9uKENsaWVudCYpOworICAgIH5TY2VuZUludGVn
cmF0aW9uKCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgcmVxdWVzdFVw
ZGF0ZSgpOworCisgICAgY2xhc3MgVXBkYXRlU2NvcGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
VXBkYXRlU2NvcGUoUmVmPFNjZW5lSW50ZWdyYXRpb24+JiYpOworICAgICAgICB+VXBkYXRlU2Nv
cGUoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZjxTY2VuZUludGVncmF0aW9uPiBtX3Nj
ZW5lSW50ZWdyYXRpb247CisgICAgICAgIExvY2tIb2xkZXIgbV9sb2NrZXI7CisgICAgfTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxVcGRhdGVTY29wZT4gY3JlYXRlVXBkYXRlU2NvcGUoKTsKKwor
cHJpdmF0ZToKKyAgICBzdHJ1Y3QgeworICAgICAgICBMb2NrIGxvY2s7CisgICAgICAgIENsaWVu
dCogb2JqZWN0IHsgbnVsbHB0ciB9OworICAgIH0gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBOaWNvc2lhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5
ZXIuY3BwCmluZGV4IDQ1YTE4MTEzM2M0Li5jOWVjMDI3YTVkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHQzNEUGxhdGZv
cm1MYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJHQzNEUGxhdGZvcm1MYXllci5jcHAKQEAgLTkwLDYgKzkwLDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQog
ICAgIG1fY29udGV4dC5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CiB9CiAjZWxzZQorI2lmIDAKIHZv
aWQgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyOjpwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCiB7CiAg
ICAgQVNTRVJUKG1fZ2xDb250ZXh0KTsKQEAgLTExNSw2ICsxMTYsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJHQzNEUGxhdGZvcm1MYXllcjo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciYgdGV4dHVyZQogICAgIHRleG1hcEdMLmRyYXdUZXh0dXJlKG1fY29udGV4dC5tX3RleHR1cmUs
IGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKICNlbmRp
ZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiB9CisjZW5kaWYKICNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1NfVEhSRUFERUQpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaAppbmRleCBlNDkyYTI1
MTNkNi4uYTcxMzUyYTU3NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0MzRFBsYXRmb3JtTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdDM0RQbGF0
Zm9ybUxheWVyLmgKQEAgLTMxLDcgKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
R0xDb250ZXh0OwogY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKIAotY2xh
c3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyIDogcHVibGljIFBsYXRmb3JtTGF5ZXIg
eworY2xhc3MgVGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9ybUxheWVyIDogcHVibGljIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlcgorewogcHVibGljOgogICAgIFRleHR1cmVN
YXBwZXJHQzNEUGxhdGZvcm1MYXllcihHcmFwaGljc0NvbnRleHQzRCYsIEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJTdHlsZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckdDM0RQbGF0Zm9y
bUxheWVyKCk7CkBAIC00Myw4ICs0NCwxMCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CiAjZWxzZQorI2lmIDAKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkp
OwogI2VuZGlmCisjZW5kaWYKIAogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQzRCYgbV9j
b250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRleCAxOTYyOTdiZDg1Yy4uYzYx
YjdlNzU5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC02NTQsNCArNjU0LDIy
IEBAIGJvb2wgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1l
IHRpbWUpCiAgICAgcmV0dXJuIGFwcGxpY2F0aW9uUmVzdWx0cy5oYXNSdW5uaW5nQW5pbWF0aW9u
czsKIH0KIAordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmR1bXAodW5zaWduZWQgaW5kZW50YXRp
b24pCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudGF0aW9uOyArK2kpCisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAiKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInwtVGV4
TWFwTGF5ZXIoJXUpIHBvc2l0aW9uICglLjJmLCUuMmYpIGFuY2hvciAoJS4yZiwlLjJmLCUuMmYp
IHNpemUgKCUuMmYsJS4yZikgb3BhY2l0eSAlLjJmXG4iLAorICAgICAgICBtX2lkLCBtX3N0YXRl
LnBvcy54KCksIG1fc3RhdGUucG9zLnkoKSwKKyAgICAgICAgbV9zdGF0ZS5hbmNob3JQb2ludC54
KCksIG1fc3RhdGUuYW5jaG9yUG9pbnQueSgpLCBtX3N0YXRlLmFuY2hvclBvaW50LnooKSwKKyAg
ICAgICAgbV9zdGF0ZS5zaXplLndpZHRoKCksIG1fc3RhdGUuc2l6ZS5oZWlnaHQoKSwgbV9zdGF0
ZS5vcGFjaXR5KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnRhdGlvbjsg
KytpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIik7CisgICAgZnByaW50ZihzdGRlcnIs
ICJ8LS0tIGRyYXdzQ29udGVudCAlZCBjb250ZW50c0FyZVZpc2libGUgJWRcbiIsCisgICAgICAg
IG1fc3RhdGUuZHJhd3NDb250ZW50LCBtX3N0YXRlLmNvbnRlbnRzVmlzaWJsZSk7CisKKyAgICBm
b3IgKGF1dG8qIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgY2hpbGQtPmR1bXAoaW5kZW50
YXRpb24gKyAxKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4IGVhMjU5YmEx
MDA2Li45MjU3YTEzOTc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaApAQCAtOTcsNiArOTcs
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZENoaWxkKFRleHR1cmVNYXBwZXJMYXllciopOwog
CisgICAgdm9pZCBkdW1wKHVuc2lnbmVkKTsKKwogcHJpdmF0ZToKICAgICBjb25zdCBUZXh0dXJl
TWFwcGVyTGF5ZXImIHJvb3RMYXllcigpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKaW5kZXggYzY2ZTQ2MzYyMDAuLjY0
NTIwMmQ3YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlci5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXIoUmVmUHRyPEJpdG1hcFRleHR1cmU+JiYgdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdM
OjpGbGFncyBmbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDBjZmQ5ZjA1ZGRlLi45ZDNhODc4MWMxYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
CkBAIC04MSw3ICs4MSw4IEBAIHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGUodWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsCiB7CiAgICAgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7
CiAgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT52YWx1ZS5zZXRCYWNr
QnVmZmVyKHRpbGVSZWN0LCBzb3VyY2VSZWN0LCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCk7Cisg
ICAgaWYgKGl0ICE9IG1fdGlsZXMuZW5kKCkpCisgICAgICAgIGl0LT52YWx1ZS5zZXRCYWNrQnVm
ZmVyKHRpbGVSZWN0LCBzb3VyY2VSZWN0LCBXVEZNb3ZlKGJ1ZmZlciksIG9mZnNldCk7CiB9CiAK
IHZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmNwcAppbmRleCBmMjVjN2I4YTJiMy4uMTZhZTIxZDNkYjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0y
MjcsNiArMjI3LDE2IEBAIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwKQogICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7CiB9CiAKK3Zv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAg
ICBHcmFwaGljc0xheWVyOjpzeW5jUG9zaXRpb24ocCk7CisgICAgbV9uaWNvc2lhLmRlbHRhLnBv
c2l0aW9uQ2hhbmdlZCA9IHRydWU7CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsK
K30KKwogdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0
IEZsb2F0UG9pbnQzRCYgcCkKIHsKICAgICBpZiAoYW5jaG9yUG9pbnQoKSA9PSBwKQpAQCAtMTIw
MSw2ICsxMjExLDEzIEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1c2VzQ29udGVu
dHNMYXllcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fbmljb3NpYS5jb250ZW50TGF5ZXIgfHwgbV9j
b21wb3NpdGVkSW1hZ2U7CiB9CiAKKyNpZiBVU0UoTklDT1NJQSkKK1BsYXRmb3JtTGF5ZXIqIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbmljb3NpYS5sYXllci5nZXQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKaW5kZXggY2M2
ZWI2MDU0ZTYuLjMyNmQyMzNjNzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwgUmVmPEdyYXBoaWNzTGF5ZXI+JiYp
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgc3lu
Y1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJyaWRlOwpAQCAtMTA3LDYgKzEwOCwxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCB1c2Vz
Q29udGVudHNMYXllcigpIGNvbnN0IG92ZXJyaWRlOwogCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCisK
ICAgICB2b2lkIHN5bmNQZW5kaW5nU3RhdGVDaGFuZ2VzSW5jbHVkaW5nU3ViTGF5ZXJzKCk7CiAg
ICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVyc0luY2x1ZGluZ1N1YkxheWVycygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaAppbmRleCBkNGJiNTgyNjhmZS4uZjU0NDA3
ZTVlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SW50U2l6ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmljb3NpYVBsYXRmb3JtTGF5ZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL05pY29zaWFTY2VuZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVy
ZU1hcHBlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlckZQU0NvdW50ZXIuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21w
b3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3Bw
CmluZGV4IDBiMmI2OGFlMTFlLi4yZmY4ZjNjN2FlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRD
b21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuY3BwCkBAIC0zMDgsNiAr
MzA4LDExIEBAIHZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjp1cGRhdGVTY2VuZVN0YXRlKGNvbnN0
IENvb3JkaW5hdGVkR3JhcGhpY3NTdGF0ZSYgc3RhdGUpCiAgICAgbV9jb21wb3NpdGluZ1J1bkxv
b3AtPnNjaGVkdWxlVXBkYXRlKCk7CiB9CiAKK3ZvaWQgVGhyZWFkZWRDb21wb3NpdG9yOjpyZXF1
ZXN0VXBkYXRlKCkKK3sKKyAgICBtX2NvbXBvc2l0aW5nUnVuTG9vcC0+c2NoZWR1bGVVcGRhdGUo
KTsKK30KKwogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1Ip
CiBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBUaHJlYWRlZENvbXBvc2l0
b3I6OmRpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21w
b3NpdG9yL1RocmVhZGVkQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWRDb21wb3NpdG9yLmgKaW5k
ZXggNDJiMjQ2ZDJiMDYuLjEzNDg5MmMwMzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3RocmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBv
c2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL3Ro
cmVhZGVkY29tcG9zaXRvci9UaHJlYWRlZENvbXBvc2l0b3IuaApAQCAtNzIsNiArNzIsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCk7CiAKICAgICB2b2lkIHVw
ZGF0ZVNjZW5lU3RhdGUoY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJik7
CisgICAgdm9pZCByZXF1ZXN0VXBkYXRlKCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmNw
cAppbmRleCA2NmNmZTc3ZmY4Ny4uNmVlMDk5Nzk1YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvUGFnZUNsaWVudEltcGwuY3BwCkBAIC00MCw3ICs0MCw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBQYWdlQ2xpZW50SW1wbDo6UGFnZUNsaWVudEltcGwoV0tX
UEU6OlZpZXcmIHZpZXcpCiAgICAgOiBtX3ZpZXcodmlldykKLSAgICAsIG1fc2Nyb2xsR2VzdHVy
ZUNvbnRyb2xsZXIoc3RkOjptYWtlX3VuaXF1ZTxTY3JvbGxHZXN0dXJlQ29udHJvbGxlcj4oKSkK
KyAgICAsIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIobV92aWV3LnNjcm9sbEdlc3R1cmVDb250
cm9sbGVyKCkpCiB7CiB9CiAKQEAgLTE5Miw4ICsxOTIsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBs
Ojpkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgdG91Y2hFdmVu
dCwgYgogCiAgICAgYXV0byYgcGFnZSA9IG1fdmlldy5wYWdlKCk7CiAKLSAgICBpZiAobV9zY3Jv
bGxHZXN0dXJlQ29udHJvbGxlci0+aGFuZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKLSAgICAgICAg
c3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQgPSBtX3Njcm9sbEdlc3R1cmVD
b250cm9sbGVyLT5heGlzRXZlbnQoKTsKKyAgICBpZiAobV9zY3JvbGxHZXN0dXJlQ29udHJvbGxl
ci5oYW5kbGVFdmVudCh0b3VjaFBvaW50KSkgeworICAgICAgICBzdHJ1Y3Qgd3BlX2lucHV0X2F4
aXNfZXZlbnQqIGF4aXNFdmVudCA9IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50
KCk7CiAgICAgICAgIGlmIChheGlzRXZlbnQtPnR5cGUgIT0gd3BlX2lucHV0X2F4aXNfZXZlbnRf
dHlwZV9udWxsKQogICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdlYktpdDo6TmF0
aXZlV2ViV2hlZWxFdmVudChheGlzRXZlbnQsIG1fdmlldy5wYWdlKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSkpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggY2EyMWQ4YmU2ZTEuLjJlZTEzN2M5NzIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1BhZ2VDbGllbnRJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9QYWdlQ2xpZW50SW1wbC5o
CkBAIC0xNDQsOCArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpVc2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oKSBvdmVycmlkZTsK
IAogICAgIFdLV1BFOjpWaWV3JiBtX3ZpZXc7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Nyb2xs
R2VzdHVyZUNvbnRyb2xsZXI+IG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CisgICAgU2Nyb2xs
R2VzdHVyZUNvbnRyb2xsZXImIG1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS93cGUvU2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaAppbmRleCA5YzlmNmU5ZTNiMS4uNzQ5
M2EwNDgxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvU2Ny
b2xsR2VzdHVyZUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
d3BlL1Njcm9sbEdlc3R1cmVDb250cm9sbGVyLmgKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgog
CiAgICAgc3RydWN0IHdwZV9pbnB1dF9heGlzX2V2ZW50KiBheGlzRXZlbnQoKSB7IHJldHVybiAm
bV9heGlzRXZlbnQ7IH0KIAorICAgIGJvb2wgaXNIYW5kbGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFuZGxpbmc7IH0KICAgICBib29sIGhhbmRsZUV2ZW50KGNvbnN0IHN0cnVjdCB3cGVfaW5wdXRf
dG91Y2hfZXZlbnRfcmF3Kik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XUEVWaWV3LmNwcAppbmRleCBmZmZjYjExZmVlNC4uMmY3YTk4NWY5OGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVX
ZWJUb3VjaEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIlNjcm9sbEdlc3R1cmVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDx3cGUvd3BlLmg+CkBAIC00
Myw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXS1dQRSB7CiAKIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92
aWV3X2JhY2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VD
b25maWd1cmF0aW9uKQogICAgIDogbV9jbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OlZpZXdD
bGllbnQ+KCkpCisgICAgLCBtX3Njcm9sbEdlc3R1cmVDb250cm9sbGVyKHN0ZDo6bWFrZV91bmlx
dWU8U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXI+KCkpCiAgICAgLCBtX3BhZ2VDbGllbnQoc3RkOjpt
YWtlX3VuaXF1ZTxQYWdlQ2xpZW50SW1wbD4oKnRoaXMpKQogICAgICwgbV9zaXplIHsgODAwLCA2
MDAgfQogICAgICwgbV92aWV3U3RhdGVGbGFncyB7IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6Oldp
bmRvd0lzQWN0aXZlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQsIFdlYkNvcmU6
OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNJbldp
bmRvdyB9CkBAIC0xMjYsOCArMTI4LDI3IEBAIFZpZXc6OlZpZXcoc3RydWN0IHdwZV92aWV3X2Jh
Y2tlbmQqIGJhY2tlbmQsIGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGJhc2VDCiAgICAg
ICAgIC8vIGhhbmRsZV90b3VjaF9ldmVudAogICAgICAgICBbXSh2b2lkKiBkYXRhLCBzdHJ1Y3Qg
d3BlX2lucHV0X3RvdWNoX2V2ZW50KiBldmVudCkKICAgICAgICAgewotICAgICAgICAgICAgYXV0
byYgcGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Vmlldyo+KGRhdGEpLT5wYWdlKCk7Ci0gICAgICAg
ICAgICBwYWdlLmhhbmRsZVRvdWNoRXZlbnQoV2ViS2l0OjpOYXRpdmVXZWJUb3VjaEV2ZW50KGV2
ZW50LCBwYWdlLmRldmljZVNjYWxlRmFjdG9yKCkpKTsKKyAgICAgICAgICAgIGF1dG8mIHZpZXcg
PSAqcmVpbnRlcnByZXRfY2FzdDxWaWV3Kj4oZGF0YSk7CisgICAgICAgICAgICBhdXRvJiBwYWdl
ID0gdmlldy5wYWdlKCk7CisKKyAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisg
ICAgICAgICAgICBXZWJLaXQ6Ok5hdGl2ZVdlYlRvdWNoRXZlbnQgbmF0aXZlRXZlbnQoZXZlbnQs
IHBhZ2UuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisKKyAgICAgICAgICAgIGF1dG8mIHNjcm9sbEdl
c3R1cmVDb250cm9sbGVyID0gKnZpZXcubV9zY3JvbGxHZXN0dXJlQ29udHJvbGxlcjsKKyAgICAg
ICAgICAgIGlmIChzY3JvbGxHZXN0dXJlQ29udHJvbGxlci5pc0hhbmRsaW5nKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgd3BlX2lucHV0X3RvdWNoX2V2ZW50X3JhdyogdG91Y2hQ
b2ludCA9IG5hdGl2ZUV2ZW50Lm5hdGl2ZUZhbGxiYWNrVG91Y2hQb2ludCgpOworICAgICAgICAg
ICAgICAgIGlmICh0b3VjaFBvaW50LT50eXBlICE9IHdwZV9pbnB1dF90b3VjaF9ldmVudF90eXBl
X251bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuaGFu
ZGxlRXZlbnQodG91Y2hQb2ludCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3cGVfaW5wdXRfYXhpc19ldmVudCogYXhp
c0V2ZW50ID0gc2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXIuYXhpc0V2ZW50KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChheGlzRXZlbnQtPnR5cGUgIT0gd3BlX2lucHV0X2F4aXNfZXZlbnRfdHlw
ZV9udWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5oYW5kbGVXaGVlbEV2ZW50KFdl
YktpdDo6TmF0aXZlV2ViV2hlZWxFdmVudChheGlzRXZlbnQsIHBhZ2UuZGV2aWNlU2NhbGVGYWN0
b3IoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFoYW5kbGVkKQorICAgICAgICAgICAgICAgIHBhZ2UuaGFuZGxlVG91Y2hFdmVudChuYXRp
dmVFdmVudCk7CiAgICAgICAgIH0sCiAgICAgICAgIC8vIHBhZGRpbmcKICAgICAgICAgbnVsbHB0
ciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmgKaW5kZXggMmFiNDg1
MzBlYTEuLmRiZjM2NjYyYjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dQRVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dQ
RVZpZXcuaApAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBWaWV3Q2xpZW50OwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIERvd25sb2FkUHJveHk7CitjbGFzcyBTY3JvbGxHZXN0dXJlQ29udHJv
bGxlcjsKIGNsYXNzIFdlYlBhZ2VHcm91cDsKIGNsYXNzIFdlYlByb2Nlc3NQb29sOwogfQpAQCAt
NzgsNiArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGdWxsU2NyZWVuKGJvb2wgZnVsbFNj
cmVlblN0YXRlKSB7IG1fZnVsbFNjcmVlbk1vZGVBY3RpdmUgPSBmdWxsU2NyZWVuU3RhdGU7IH07
CiAjZW5kaWYKIAorICAgIFdlYktpdDo6U2Nyb2xsR2VzdHVyZUNvbnRyb2xsZXImIHNjcm9sbEdl
c3R1cmVDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gKm1fc2Nyb2xsR2VzdHVyZUNvbnRyb2xs
ZXI7IH0KKwogcHJpdmF0ZToKICAgICBWaWV3KHN0cnVjdCB3cGVfdmlld19iYWNrZW5kKiwgY29u
c3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwogCkBAIC04NSw2ICs4OCw3IEBAIHByaXZhdGU6
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiBtX2NsaWVudDsKIAorICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlNjcm9sbEdlc3R1cmVDb250cm9sbGVyPiBtX3Njcm9s
bEdlc3R1cmVDb250cm9sbGVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBt
X3BhZ2VQcm94eTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJl
YS5jcHAKaW5kZXggZjc1MmI1ZGQ2MmUuLmY1YmZjMDBiMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVh
LmNwcApAQCAtMTcxLDYgKzE3MSwxMSBAQCB2b2lkIEFjY2VsZXJhdGVkRHJhd2luZ0FyZWE6Om1h
aW5GcmFtZUNvbnRlbnRTaXplQ2hhbmdlZChjb25zdCBJbnRTaXplJiBzaXplKQogI2VuZGlmCiB9
CiAKK2Jvb2wgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6c3VwcG9ydHNBc3luY1Njcm9sbGluZygp
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgQWNjZWxlcmF0ZWREcmF3aW5nQXJlYTo6
bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQogewogICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0
ZWREcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxl
cmF0ZWREcmF3aW5nQXJlYS5oCmluZGV4IDZkNjhiNWI4OTkxLi5hODAzMjViZDNiNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5n
QXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVk
RHJhd2luZ0FyZWEuaApAQCAtNTQsNiArNTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRh
dGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBtYWluRnJhbWVDb250ZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
IG92ZXJyaWRlOwogCisgICAgYm9vbCBzdXBwb3J0c0FzeW5jU2Nyb2xsaW5nKCkgb3ZlcnJpZGU7
CisKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3Rv
cnkoKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCBhZTM3ODMzYmQyYy4uMzZiMzI2YjE5MjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmNwcApAQCAtMTA3LDYgKzEwNywzNiBAQCB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6
OnNpemVEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKICAgICBub3RpZnlGbHVzaFJl
cXVpcmVkKG1fcm9vdExheWVyLmdldCgpKTsKIH0KIAordm9pZCBkdW1wUGxhdGZvcm1MYXllcihO
aWNvc2lhOjpDb21wb3NpdGlvbkxheWVyJiBsYXllciwgdW5zaWduZWQgaW5kZW50YXRpb24pCit7
CisgICAgYXV0byB3cml0ZUluZGVudGF0aW9uID0KKyAgICAgICAgW10odW5zaWduZWQgaWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpZDsgKytpKQor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgIHwiKTsKKyAgICAgICAgfTsKKwor
ICAgIGxheWVyLmFjY2Vzc1N0YXRlKAorICAgICAgICBbJmxheWVyLCAmd3JpdGVJbmRlbnRhdGlv
biwgaW5kZW50YXRpb25dKGNvbnN0IE5pY29zaWE6OkNvbXBvc2l0aW9uTGF5ZXI6OkxheWVyU3Rh
dGUmIHN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICB3cml0ZUluZGVudGF0aW9uKGluZGVu
dGF0aW9uKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGF5ZXIoJXApOiBpZCAlbHUg
cG9zaXRpb24gKCUuMmYsJS4yZikgYW5jaG9yUG9pbnQgKCUuMmYsJS4yZiwlLjJmKSBzaXplICgl
LjJmLCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICZsYXllciwgbGF5ZXIuaWQoKSwgc3RhdGUu
cG9zaXRpb24ueCgpLCBzdGF0ZS5wb3NpdGlvbi55KCksCisgICAgICAgICAgICAgICAgc3RhdGUu
YW5jaG9yUG9pbnQueCgpLCBzdGF0ZS5hbmNob3JQb2ludC55KCksIHN0YXRlLmFuY2hvclBvaW50
LnooKSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaXplLndpZHRoKCksIHN0YXRlLnNpemUuaGVp
Z2h0KCkpOworICAgICAgICAgICAgd3JpdGVJbmRlbnRhdGlvbihpbmRlbnRhdGlvbik7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgY2hpbGRyZW5bJXp1XSByZXBsaWNhICVwIG1hc2sg
JXBcbiIsCisgICAgICAgICAgICAgICAgc3RhdGUuY2hpbGRyZW4uc2l6ZSgpLCBzdGF0ZS5yZXBs
aWNhLmdldCgpLCBzdGF0ZS5tYXNrLmdldCgpKTsKKyAgICAgICAgICAgIHdyaXRlSW5kZW50YXRp
b24oaW5kZW50YXRpb24pOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIGZsYWdzIHsg
JWQsICVkLCAlZCwgJWQsICVkLCAlZCB9XG4iLAorICAgICAgICAgICAgICAgIHN0YXRlLmZsYWdz
LmNvbnRlbnRzT3BhcXVlLCBzdGF0ZS5mbGFncy5kcmF3c0NvbnRlbnQsIHN0YXRlLmZsYWdzLmNv
bnRlbnRzVmlzaWJsZSwKKyAgICAgICAgICAgICAgICBzdGF0ZS5mbGFncy5iYWNrZmFjZVZpc2li
bGUsIHN0YXRlLmZsYWdzLm1hc2tzVG9Cb3VuZHMsIHN0YXRlLmZsYWdzLnByZXNlcnZlczNEKTsK
KworICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IHN0YXRlLmNoaWxkcmVuKQorICAgICAg
ICAgICAgICAgIGR1bXBQbGF0Zm9ybUxheWVyKCpjaGlsZCwgaW5kZW50YXRpb24gKyAxKTsKKyAg
ICAgICAgfSk7Cit9CisKIGJvb2wgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkKIHsKICAgICBTZXRGb3JTY29wZTxib29sPiBwcm90ZWN0b3IobV9pc0Zs
dXNoaW5nTGF5ZXJDaGFuZ2VzLCB0cnVlKTsKQEAgLTEyNSw2ICsxNTUsMTMgQEAgYm9vbCBDb21w
b3NpdGluZ0Nvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQogICAgIGNvb3Jk
aW5hdGVkTGF5ZXIudXBkYXRlQ29udGVudEJ1ZmZlcnNJbmNsdWRpbmdTdWJMYXllcnMoKTsKICAg
ICBjb29yZGluYXRlZExheWVyLnN5bmNQZW5kaW5nU3RhdGVDaGFuZ2VzSW5jbHVkaW5nU3ViTGF5
ZXJzKCk7CiAKKyNpZiAwCisgICAgZnByaW50ZihzdGRlcnIsICJDb21wb3NpdGluZ0Nvb3JkaW5h
dG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKVxuIik7CisgICAgZnByaW50ZihzdGRlcnIs
ICJcdG1fcm9vdExheWVyICVwLCBtX3Jvb3RMYXllci5wbGF0Zm9ybUxheWVyKCkgJXBcbiIsCisg
ICAgICAgIG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigpKTsK
KyAgICBkdW1wUGxhdGZvcm1MYXllcigqbV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSwgMSk7
CisjZW5kaWYKKwogICAgIGlmIChtX3Nob3VsZFN5bmNGcmFtZSkgewogICAgICAgICBkaWRTeW5j
ID0gdHJ1ZTsKIApAQCAtMjM1LDcgKzI3MiwxMSBAQCBSZWY8R3JhcGhpY3NMYXllcj4gQ29tcG9z
aXRpbmdDb29yZGluYXRvcjo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyOjpUeQog
ewogICAgIGF1dG8gbGF5ZXIgPSBhZG9wdFJlZigqbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihsYXllclR5cGUsIGNsaWVudCkpOwogICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsK
LSAgICBtX25pY29zaWEuc3RhdGUubGF5ZXJzLmFkZChsYXllci0+Y29tcG9zaXRpb25MYXllcigp
KTsKKyAgICB7CisgICAgICAgIGF1dG8mIGNvbXBvc2l0aW9uTGF5ZXIgPSBsYXllci0+Y29tcG9z
aXRpb25MYXllcigpOworICAgICAgICBtX25pY29zaWEuc3RhdGUubGF5ZXJzLmFkZChjb21wb3Np
dGlvbkxheWVyKTsKKyAgICAgICAgY29tcG9zaXRpb25MYXllci0+c2V0U2NlbmVJbnRlZ3JhdGlv
bihtX2NsaWVudC5zY2VuZUludGVncmF0aW9uKCkpOworICAgIH0KICAgICBtX3JlZ2lzdGVyZWRM
YXllcnMuYWRkKGxheWVyLT5pZCgpLCBsYXllci5wdHIoKSk7CiAgICAgbGF5ZXItPnNldE5lZWRz
VmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7CiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZChsYXllci5w
dHIoKSk7CkBAIC0yODksMTAgKzMzMCw2IEBAIHZvaWQgQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6
YXR0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBub3RpZnlG
bHVzaFJlcXVpcmVkKGxheWVyKTsKIH0KIAotdm9pZCBDb21wb3NpdGluZ0Nvb3JkaW5hdG9yOjpy
ZW5kZXJOZXh0RnJhbWUoKQotewotfQotCiB2b2lkIENvbXBvc2l0aW5nQ29vcmRpbmF0b3I6OnB1
cmdlQmFja2luZ1N0b3JlcygpCiB7CiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gcHVyZ2luZ1RvZ2ds
ZShtX2lzUHVyZ2luZywgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29t
cG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IGI0YTBkMTU0NGQ1Li5lZjVjYzA3OTNlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmgK
QEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgUGFpbnRpbmdF
bmdpbmU7CitjbGFzcyBTY2VuZUludGVncmF0aW9uOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC02MCw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZsdXNo
Um9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0KSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgUmVmUHRyPE5pY29zaWE6
OlNjZW5lSW50ZWdyYXRpb24+IHNjZW5lSW50ZWdyYXRpb24oKSA9IDA7CiAgICAgfTsKIAogICAg
IENvbXBvc2l0aW5nQ29vcmRpbmF0b3IoV2ViQ29yZTo6UGFnZSosIENvbXBvc2l0aW5nQ29vcmRp
bmF0b3I6OkNsaWVudCYpOwpAQCAtNzMsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXZp
Y2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKIAogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOwogCiAgICAgdm9pZCBjcmVhdGVSb290TGF5ZXIoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNzA5MmZjNTMyMGIuLmE2OGUw
ZjNlZDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwCkBAIC0xNDksNyArMTQ5LDYgQEAgdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZShib29sIGZvcmNlUmVwYWludCkKIHsKICAgICBt
X2lzV2FpdGluZ0ZvclJlbmRlcmVyID0gZmFsc2U7CiAgICAgYm9vbCBzY2hlZHVsZWRXaGlsZVdh
aXRpbmdGb3JSZW5kZXJlciA9IHN0ZDo6ZXhjaGFuZ2UobV9zY2hlZHVsZWRXaGlsZVdhaXRpbmdG
b3JSZW5kZXJlciwgZmFsc2UpOwotICAgIG1fY29vcmRpbmF0b3IucmVuZGVyTmV4dEZyYW1lKCk7
CiAKICAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luYy5jYWxsYmFja0lEKSB7CiAgICAgICAgIC8v
IElmIHRoZSBhc3luY2hyb25vdXMgZm9yY2UtcmVwYWludCBuZWVkcyBhIHNlcGFyYXRlIGZyZXNo
IGZsdXNoLCBpdCB3YXMgZHVlIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCAwYThiZWM4YTM5OC4uMmExY2NmMzJmMTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuaApAQCAtNzAsNiArNzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaWRGbHVzaFJv
b3RMYXllcihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKCkgb3ZlcnJpZGUgeyBzY2hlZHVs
ZUxheWVyRmx1c2goKTsgfTsKICAgICB2b2lkIGNvbW1pdFNjZW5lU3RhdGUoY29uc3QgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlJikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPE5pY29z
aWE6OlNjZW5lSW50ZWdyYXRpb24+IHNjZW5lSW50ZWdyYXRpb24oKSBvdmVycmlkZSB7IHJldHVy
biBudWxscHRyOyB9CiAKICAgICB2b2lkIGZsdXNoTGF5ZXJzQW5kRm9yY2VSZXBhaW50KCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9UaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggNTAwZWYxNGRkNjMuLjFkOTZmZWZjYjMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldl
YlBhZ2UuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFTY2VuZUludGVncmF0aW9uLmg+
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01OSw2
ICs2MCw3IEBAIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpUaHJlYWRlZENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQCiAgICAgOiBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Qod2ViUGFnZSkKICAgICAsIG1fY29tcG9zaXRvckNsaWVudCgqdGhpcykKICAgICAs
IG1fc3VyZmFjZShBY2NlbGVyYXRlZFN1cmZhY2U6OmNyZWF0ZSh3ZWJQYWdlLCAqdGhpcykpCisg
ICAgLCBtX3NjZW5lSW50ZWdyYXRpb24oYWRvcHRSZWYoKm5ldyBOaWNvc2lhOjpTY2VuZUludGVn
cmF0aW9uKCp0aGlzKSkpCiAgICAgLCBtX3ZpZXdwb3J0Q29udHJvbGxlcih3ZWJQYWdlLnNpemUo
KSkKIHsKICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UubWFpbkZyYW1l
VmlldygpKSB7CkBAIC04OSw2ICs5MSw3IEBAIFRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlJiB3ZWJQCiAKIHZv
aWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQogeworICAg
IG1fc2NlbmVJbnRlZ3JhdGlvbi0+aW52YWxpZGF0ZSgpOwogICAgIG1fY29tcG9zaXRvci0+aW52
YWxpZGF0ZSgpOwogICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSgpOwog
ICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7CkBAIC0xMjEsNiArMTI0LDExIEBAIHZvaWQgVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmhhbmRsZURpc3BsYXlSZWZyZXNoTW9uaXRvclVw
ZGF0ZShib29sIGhhCiAgICAgbV9jb21wb3NpdG9yLT5oYW5kbGVEaXNwbGF5UmVmcmVzaE1vbml0
b3JVcGRhdGUoKTsKIH0KIAorUmVmUHRyPE5pY29zaWE6OlNjZW5lSW50ZWdyYXRpb24+IFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2VuZUludGVncmF0aW9uKCkKK3sKKyAgICBy
ZXR1cm4gbV9zY2VuZUludGVncmF0aW9uLmNvcHlSZWYoKTsKK30KKwogdWludDY0X3QgVGhyZWFk
ZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3Np
dGluZygpCiB7CiAgICAgaWYgKCFtX3N1cmZhY2UpCkBAIC0yNzMsNiArMjgxLDExIEBAIHZvaWQg
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNvbW1pdFNjZW5lU3RhdGUoY29uc3Qg
Q29vcmRpbmF0ZWRHcmFwaGljCiAgICAgbV9jb21wb3NpdG9yLT51cGRhdGVTY2VuZVN0YXRlKHN0
YXRlKTsKIH0KIAordm9pZCBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVxdWVz
dFVwZGF0ZSgpCit7CisgICAgbV9jb21wb3NpdG9yLT5yZXF1ZXN0VXBkYXRlKCk7Cit9CisKIHZv
aWQgVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldElzRGlzY2FyZGFibGUoYm9v
bCBkaXNjYXJkYWJsZSkKIHsKICAgICBtX2lzRGlzY2FyZGFibGUgPSBkaXNjYXJkYWJsZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhyZWFkZWRDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QuaAppbmRleCA4N2E3ZGE3MTdjZC4uYjg0MDhiNTI5NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VGhyZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJTaW1wbGVWaWV3cG9y
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaHJlYWRlZENvbXBvc2l0b3IuaCIKICNpbmNsdWRl
ICJUaHJlYWRlZERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTmlj
b3NpYVNjZW5lSW50ZWdyYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDcgKzQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBXZWJQYWdlOwogCi1jbGFzcyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dCBmaW5hbCA6IHB1YmxpYyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QsIHB1YmxpYyBBY2NlbGVy
YXRlZFN1cmZhY2U6OkNsaWVudCB7CitjbGFzcyBUaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCBmaW5hbAorICAgIDogcHVibGljIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdAorICAgICwg
cHVibGljIEFjY2VsZXJhdGVkU3VyZmFjZTo6Q2xpZW50CisgICAgLCBwdWJsaWMgTmljb3NpYTo6
U2NlbmVJbnRlZ3JhdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFRocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVhdGUoV2ViUGFnZSYpOwogICAgIHZpcnR1
YWwgflRocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0KCk7CkBAIC0xMjAsNiArMTI0LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZEZsdXNoUm9vdExheWVyKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpIG92ZXJyaWRlIHsgfQogICAgIHZvaWQgY29tbWl0U2NlbmVTdGF0ZShjb25zdCBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU3RhdGUmKSBvdmVycmlkZTsKIAorICAgIC8vIE5p
Y29zaWE6OlNjZW5lSW50ZWdyYXRpb246OkNsaWVudAorICAgIHZvaWQgcmVxdWVzdFVwZGF0ZSgp
IG92ZXJyaWRlOworCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9O
SVRPUikKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRl
OwogI2VuZGlmCkBAIC0xMjcsNiArMTM0LDkgQEAgcHJpdmF0ZToKICAgICAvLyBBY2NlbGVyYXRl
ZFN1cmZhY2U6OkNsaWVudAogICAgIHZvaWQgZnJhbWVDb21wbGV0ZSgpIG92ZXJyaWRlOwogCisg
ICAgLy8gQ29tcG9zaXRpbmdDb29yZGluYXRvcjo6Q2xpZW50CisgICAgUmVmUHRyPE5pY29zaWE6
OlNjZW5lSW50ZWdyYXRpb24+IHNjZW5lSW50ZWdyYXRpb24oKSBvdmVycmlkZTsKKwogICAgIHVp
bnQ2NF90IG5hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygpOwogICAgIHZvaWQgZGlk
RGVzdHJveUdMQ29udGV4dCgpOwogICAgIHZvaWQgd2lsbFJlbmRlckZyYW1lKCk7CkBAIC0xNDQs
NiArMTU0LDcgQEAgcHJpdmF0ZToKICAgICBDb21wb3NpdG9yQ2xpZW50IG1fY29tcG9zaXRvckNs
aWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZWxlcmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7
CiAgICAgUmVmUHRyPFRocmVhZGVkQ29tcG9zaXRvcj4gbV9jb21wb3NpdG9yOworICAgIFJlZjxO
aWNvc2lhOjpTY2VuZUludGVncmF0aW9uPiBtX3NjZW5lSW50ZWdyYXRpb247CiAgICAgU2ltcGxl
Vmlld3BvcnRDb250cm9sbGVyIG1fdmlld3BvcnRDb250cm9sbGVyOwogICAgIGZsb2F0IG1fbGFz
dFBhZ2VTY2FsZUZhY3RvciB7IDEgfTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RTY3Jv
bGxQb3NpdGlvbjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>