<?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>163576</bug_id>
          
          <creation_ts>2016-10-17 17:55:25 -0700</creation_ts>
          <short_desc>WTF should make it easier to create threads that die automatically after inactivity</short_desc>
          <delta_ts>2016-10-18 19:39:19 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>163562</blocked>
    
    <blocked>163615</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1241281</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-17 17:55:25 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241295</commentid>
    <comment_count>1</comment_count>
      <attachid>291908</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-17 18:38:02 -0700</bug_when>
    <thetext>Created attachment 291908
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241532</commentid>
    <comment_count>2</comment_count>
      <attachid>291964</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 11:55:20 -0700</bug_when>
    <thetext>Created attachment 291964
seems to work

Obviously, I have to test this more.  But it seems to work so far.  It&apos;s really exciting to see it stop and then restart its threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241534</commentid>
    <comment_count>3</comment_count>
      <attachid>291964</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 12:01:26 -0700</bug_when>
    <thetext>Comment on attachment 291964
seems to work

This is meant to be ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241535</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 12:03:58 -0700</bug_when>
    <thetext>Attachment 291964 did not pass style-queue:


ERROR: Source/WTF/wtf/AutomaticThread.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ParallelHelperPool.cpp:203:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/AutomaticThread.cpp:100:  &apos;preserveThisForThread&apos; is incorrectly named. It should be named &apos;protectedThis&apos;.  [readability/naming/protected] [4]
ERROR: Source/WTF/wtf/AutomaticThread.cpp:107:  &apos;preserveThisInThread&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPreserveThisForThread&apos;.  [readability/naming/protected] [4]
ERROR: Source/WTF/wtf/AutomaticThread.cpp:120:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241542</commentid>
    <comment_count>5</comment_count>
      <attachid>291964</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-10-18 12:16:46 -0700</bug_when>
    <thetext>Comment on attachment 291964
seems to work

r=me.
This is a really nice and clean solution to an issue we&apos;ve had for ages. Can&apos;t wait to see some nice and short crash dumps :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241545</commentid>
    <comment_count>6</comment_count>
      <attachid>291967</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 12:23:52 -0700</bug_when>
    <thetext>Created attachment 291967
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241546</commentid>
    <comment_count>7</comment_count>
      <attachid>291967</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 12:24:06 -0700</bug_when>
    <thetext>Comment on attachment 291967
the patch

Already reviewed, did not mean to r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241550</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-18 12:26:27 -0700</bug_when>
    <thetext>Attachment 291967 did not pass style-queue:


ERROR: Source/WTF/wtf/AutomaticThread.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/WTF/wtf/ParallelHelperPool.cpp:203:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/AutomaticThread.cpp:100:  &apos;preserveThisForThread&apos; is incorrectly named. It should be named &apos;protectedThis&apos;.  [readability/naming/protected] [4]
ERROR: Source/WTF/wtf/AutomaticThread.cpp:107:  &apos;preserveThisInThread&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPreserveThisForThread&apos;.  [readability/naming/protected] [4]
ERROR: Source/WTF/wtf/AutomaticThread.cpp:120:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 5 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241581</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 13:20:10 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/207480</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241612</commentid>
    <comment_count>10</comment_count>
      <attachid>291967</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-10-18 14:08:28 -0700</bug_when>
    <thetext>Comment on attachment 291967
the patch

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

Aww yiss!

&gt; Source/WTF/wtf/AutomaticThread.cpp:130
&gt; +                        double timeout = monotonicallyIncreasingTime() + 1;

This probably needs to be a bit longer. FWIW, experiment shows that libdispatch uses 4s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241779</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 19:38:44 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 291967 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=291967&amp;action=review
&gt; 
&gt; Aww yiss!
&gt; 
&gt; &gt; Source/WTF/wtf/AutomaticThread.cpp:130
&gt; &gt; +                        double timeout = monotonicallyIncreasingTime() + 1;
&gt; 
&gt; This probably needs to be a bit longer. FWIW, experiment shows that
&gt; libdispatch uses 4s.

If this patch is not a regression, then I think 1sec is good.  So far, I&apos;m not seeing any hints of regression.  It was neutral when I tested locally, and the bots that have come back with data agree that it is neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241780</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-18 19:39:19 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Comment on attachment 291967 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=291967&amp;action=review
&gt; &gt; 
&gt; &gt; Aww yiss!
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/AutomaticThread.cpp:130
&gt; &gt; &gt; +                        double timeout = monotonicallyIncreasingTime() + 1;
&gt; &gt; 
&gt; &gt; This probably needs to be a bit longer. FWIW, experiment shows that
&gt; &gt; libdispatch uses 4s.
&gt; 
&gt; If this patch is not a regression, then I think 1sec is good.  So far, I&apos;m
&gt; not seeing any hints of regression.  It was neutral when I tested locally,
&gt; and the bots that have come back with data agree that it is neutral.

Of course, that may change with https://bugs.webkit.org/show_bug.cgi?id=163615.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291908</attachid>
            <date>2016-10-17 18:38:02 -0700</date>
            <delta_ts>2016-10-18 11:55:20 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25596</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjA3NDI0KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0Yg
LyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVm
Q291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZB
NTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4
RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5o
ICovOyB9OworCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEVG
MURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovOyB9OworCQkwRjQzRDhG
MjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyog
QXV0b21hdGljVGhyZWFkLmggKi87IH07CiAJCTBGNDU3MDQzMUJFNUI1OEYwMDYyQTYyOSAvKiBE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9ycy5oICovOyB9OwogCQkwRjQ1
NzA0NTFCRTgzNDQxMDA2MkE2MjkgLyogQnViYmxlU29ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NTcwNDQxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1
YmJsZVNvcnQuaCAqLzsgfTsKIAkJMEY3MjVDQUMxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcyNUNB
QjFDNTA0NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLzsgfTsKQEAgLTM2Niw2ICszNjgsOCBA
QAogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4
QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJB
MyAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtS
YW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0M0Q4RUYxREI1QUREQzAw
MTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjQzRDhGMDFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzA0MjFCRTVCNThGMDA2MkE2MjkgLyogRG9taW5hdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEb21pbmF0b3JzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQ0MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJi
bGVTb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1YmJsZVNvcnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8q
IFJhbmdlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJhbmdlU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MzksNiArODQzLDggQEAKIAkJCQlBOEE0
NzI1RDE1MUE4MjVBMDA0MTIzRkYgLyogQXRvbWljcy5oICovLAogCQkJCTE0Njk0MTlBMTZFQUIx
MEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLywKIAkJCQkxNDY5NDE5QjE2RUFCMTBB
MDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tICovLAorCQkJCTBGNDNEOEVGMURCNUFE
REMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovLAorCQkJCTBGNDNEOEYwMURCNUFE
REMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAqLywKIAkJCQlEQ0VFMjIwNDFDRUI5ODY5
MDAwQzIzOTYgLyogQmFja3dhcmRzR3JhcGguaCAqLywKIAkJCQkwRkIxNEUxODE4MEZBMjE4MDA5
QjZCNEQgLyogQmFnLmggKi8sCiAJCQkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1Rv
SGFzaE1hcC5oICovLApAQCAtMTMzMCw2ICsxMzM2LDcgQEAKIAkJCQkyNjE0N0IwQTE1RERDQ0RD
MDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJN0NERDdGRjgxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDREQ3RkZBMTg2RDJBNTQwMDc0MzNDRCAvKiBJdGVyYXRvclJhbmdlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjQzRDhGMjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGlj
VGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0FDOTFBODE4OTQyRkM0MDAyNDQ5MzkgLyog
TENoYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOUVCMDYzMUQ1NTI4NDIwMEM4MkVGNyAvKiBM
RUJEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzBEQTA4NTE3OTlGMDREMDA1MjlBOUIg
LyogTGlzdER1bXAuaCBpbiBIZWFkZXJzICovLApAQCAtMTYzNCw2ICsxNjQxLDcgQEAKIAkJCQlB
NUJBMTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDQzMTUxQTgyNUIwMDQxMjNGRiAvKiBTdHJpbmdTdGF0aWNz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRv
bWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTk5M0UxOUQ3OTU4RDAwQzIz
OTBCIC8qIFN0cmluZ1ZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MzRCRDUxOEExRjE2
OTAwRDBENkExIC8qIFN0cmluZ1ZpZXdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkzNEJE
MzE4QTFFOEMzMDBEMEQ2QTEgLyogU3RyaW5nVmlld09iakMubW0gaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRvbWF0aWNUaHJlYWQuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK1JlZjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1dG9tYXRpY1Ro
cmVhZENvbmRpdGlvbigpKTsKK30KKworQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpBdXRvbWF0
aWNUaHJlYWRDb25kaXRpb24oKQoreworfQorCitBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246On5B
dXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKQoreworfQorCit2b2lkIEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjo6bm90aWZ5QWxsKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKK3sKKyAgICBtX2Nv
bmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAKKyAgICBmb3IgKEF1dG9tYXRpY1RocmVhZCogdGhy
ZWFkIDogbV90aHJlYWRzKQorICAgICAgICB0aHJlYWQtPnN0YXJ0KGxvY2tlcik7CisgICAgbV90
aHJlYWRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjphZGQo
Y29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCogdGhyZWFkKQoreworICAgIEFTU0VS
VCghbV90aHJlYWRzLmNvbnRhaW5zKHRocmVhZCkpOworICAgIG1fdGhyZWFkcy5hcHBlbmQodGhy
ZWFkKTsKK30KKwordm9pZCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OnJlbW92ZShjb25zdCBM
b2NrSG9sZGVyJiwgQXV0b21hdGljVGhyZWFkKiB0aHJlYWQpCit7CisgICAgQVNTRVJUKG1fdGhy
ZWFkcy5jb250YWlucyh0aHJlYWQpKTsKKyAgICBtX3RocmVhZHMucmVtb3ZlRmlyc3QodGhyZWFk
KTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkcy5jb250YWlucyh0aHJlYWQpKTsKK30KKworYm9vbCBB
dXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNvbnRhaW5zKGNvbnN0IExvY2tIb2xkZXImLCBBdXRv
bWF0aWNUaHJlYWQqIHRocmVhZCkKK3sKKyAgICByZXR1cm4gbV90aHJlYWRzLmNvbnRhaW5zKHRo
cmVhZCk7Cit9CisKK0F1dG9tYXRpY1RocmVhZDo6QXV0b21hdGljVGhyZWFkKCkKK3sKK30KKwor
QXV0b21hdGljVGhyZWFkOjp+QXV0b21hdGljVGhyZWFkKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxv
Y2tlcigqbV9sb2NrKTsKKyAgICAKKyAgICAvLyBUaGUgdGhyZWFkIHdpbGwgaG9sZCBhIHJlZmVy
ZW5jZSB0byB0aGlzIHJpZ2h0IHVwIHVudGlsIGl0IGRlY2lkZXMgdG8gc2h1dCBkb3duLCBhdCB3
aGljaAorICAgIC8vIHBvaW50IGl0IHdpbGwgbnVsbCB0aGlzIG91dC4KKyAgICBSRUxFQVNFX0FT
U0VSVCghbV90aHJlYWQpOworICAgIAorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSdyZSBp
biBhIHdhaXRpbmcgc3RhdGUgd2l0aCB0aGUgdGhyZWFkIHNodXQgZG93bi4gVGhpcyBpcyBhIGdv
b2Z5IHdheSB0bworICAgIC8vIGRpZSwgYnV0IGl0IGNvdWxkIGhhcHBlbi4KKyAgICBtX2NvbmRp
dGlvbi0+cmVtb3ZlKGxvY2tlciwgdGhpcyk7Cit9CisKK3ZvaWQgQXV0b21hdGljVGhyZWFkOjpq
b2luKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICB3aGlsZSAobV9p
c1J1bm5pbmcpCisgICAgICAgIG1faXNSdW5uaW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKK30K
Kwordm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKQoreworICAg
IFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IHByZXNlcnZlVGhpc0ZvclRocmVhZCA9IHRoaXM7Cisg
ICAgCisgICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICJXVEY6OkF1dG9tYXRp
Y1RocmVhZCIsCisgICAgICAgIFs9XSAoKSB7CisgICAgICAgICAgICBSZWZQdHI8QXV0b21hdGlj
VGhyZWFkPiBwcmVzZXJ2ZVRoaXNJblRocmVhZCA9IHByZXNlcnZlVGhpc0ZvclRocmVhZDsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdGhyZWFkKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uLT5jb250YWlucyh0aGlzKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdoZW4gcmV0dXJuaW5n
LCBkbyAicmV0dXJuIHNodXRkb3duKGxvY2tlcikiLgorICAgICAgICAgICAgYXV0byBoaWJlcm5h
dGUgPSBbJl0gKGNvbnN0IExvY2tIb2xkZXImKSB7CisgICAgICAgICAgICAgICAgbV90aHJlYWQg
PSAwOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBzdG9w
ID0gWyZdIChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpIHsKKyAgICAgICAgICAgICAgICBtX2lz
UnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1faXNSdW5uaW5nQ29uZGl0aW9uLm5v
dGlmeUFsbCgpOworICAgICAgICAgICAgICAgIGhpYmVybmF0ZShsb2NrZXIpOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBv
bGxSZXN1bHQgcmVzdWx0ID0gcG9sbChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpXb3JrKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQb2xsUmVz
dWx0OjpTdG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKGxvY2tl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0gUG9s
bFJlc3VsdDo6V2FpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaHV0IHRoZSB0aHJl
YWQgZG93biBhZnRlciBvbmUgc2Vjb25kLgorICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IHRpbWVvdXQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSArIDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGF3b2tlbkJ5Tm90aWZ5ID0gbV9jb25kaXRpb24ud2FpdChsb2Nr
ZXIsIHRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhd29rZW5CeU5vdGlm
eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5hZGQobG9ja2Vy
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGliZXJuYXRlKGxv
Y2tlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV29y
a1Jlc3VsdCByZXN1bHQgPSB3b3JrKCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBX
b3JrUmVzdWx0OjpTdG9wKSB7CisgICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KCptX2xvY2spOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcChsb2NrZXIpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0g
V29ya1Jlc3VsdDo6Q29udGludWUpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICBk
ZXRhdGNoVGhyZWFkKG1fdGhyZWFkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0F1dG9tYXRpY1RocmVhZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0F1dG9tYXRpY1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0F1
dG9tYXRpY1RocmVhZF9oCisjZGVmaW5lIFdURl9BdXRvbWF0aWNUaHJlYWRfaAorCisjaW5jbHVk
ZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCisvLyBPZnRlbiwgd2UgY3JlYXRlIHRocmVhZHMgdGhhdCBoYXZlIHRoaXMgYXMgdGhlaXIg
Ym9keToKKy8vCisvLyAgICAgZm9yICg7OykgeworLy8gICAgICAgICB7CisvLyAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworLy8gICAgICAgICAgICAgZm9yICg7Oykgewor
Ly8gIFsxXSAgICAgICAgICAgIHN0dWZmIHRoYXQgY291bGQgYnJlYWssIHJldHVybiwgb3IgZmFs
bCB0aHJvdWdoOworLy8gICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsK
Ky8vICAgICAgICAgICAgIH0KKy8vICAgICAgICAgfQorLy8gICAgICAgICAKKy8vICBbMl0gICAg
ZG8gd29yazsKKy8vICAgICB9CisvLworLy8gV2hlbiB3ZSBkbyB0aGlzLCB3ZSBkb24ndCBhbHdh
eXMgZG8gYSBnb29kIGpvYiBvZiBtYW5hZ2luZyB0aGlzIHRocmVhZCdzIGxpZmV0aW1lLCB3aGlj
aCBtYXkgbGVhZAorLy8gdG8gdGhpcyB0aHJlYWQgc2l0dGluZyBhcm91bmQgZXZlbiB3aGVuIGl0
IGlzIG5vdCBuZWVkZWQuCisvLworLy8gQXV0b21hdGljVGhyZWFkIGlzIGhlcmUgdG8gaGVscCB5
b3UgaW4gdGhlc2Ugc2l0dWF0aW9ucy4gSXQgZW5jYXBzdWxhdGVzIGEgbG9jaywgYSBjb25kaXRp
b24KKy8vIHZhcmlhYmxlLCBhbmQgYSB0aHJlYWQuIEl0IHdpbGwgYXV0b21hdGljYWxseSBzaHV0
IHRoZSB0aHJlYWQgZG93biBhZnRlciAxIHNlY29uZCBvZiBpbmFjdGl2aXR5LgorLy8gWW91IHVz
ZSBBdXRvbWF0aWNUaHJlYWQgYnkgc3ViY2xhc3NpbmcgaXQsIGFuZCBwdXQgYW55IHN0YXRlIHRo
YXQgaXMgbmVlZGVkIGJldHdlZW4gWzFdIGFuZCBbMl0KKy8vIGluIHRoZSBzdWJjbGFzcy4KKy8v
CisvLyBUaGUgdGVybWlub2xvZ3kgd2UgdXNlIGlzOgorLy8KKy8vIFsxXSBQb2xsUmVzdWx0IEF1
dG9tYXRpY1RocmVhZDo6cG9sbCgpCisvLyBbMl0gV29yZFJlc3VsdCBBdXRvbWF0aWNUaHJlYWQ6
OndvcmsoKQorLy8KKy8vIE5vdGUgdGhhdCBwb2xsKCkgYW5kIHdvcmsoKSBtYXkgbm90IGJlIGNh
bGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQgZXZlcnkgdGltZSwgc2luY2UgdGhpcyB3aWxsIHNodXQK
Ky8vIGRvd24gdGhlIHRocmVhZCBhcyBuZWNlc3NhcnkuIFRoaXMgaXMgbGVnYWwgc2luY2UgbV9j
b25kaXRpb24ud2FpdChtX2xvY2spIGNhbiBkcm9wIHRoZSBsb2NrLCBhbmQKKy8vIHNvIHRoZXJl
IGlzIG5vIHJlYXNvbiB0byBrZWVwIHRoZSB0aHJlYWQgYXJvdW5kLgorCitjbGFzcyBBdXRvbWF0
aWNUaHJlYWQ7CisKK2NsYXNzIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxBdXRvbWF0aWNUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgUmVmPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gY3JlYXRlKCk7CisgICAg
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKTsKKyAg
ICAKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlBbGwoY29uc3QgTG9ja0hvbGRl
ciYpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQXV0b21hdGljVGhyZWFkOwor
ICAgIAorICAgIFdURl9FWFBPUlRfUFJJVkFURSBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKTsK
KworICAgIHZvaWQgYWRkKGNvbnN0IExvY2tIb2xkZXImLCBBdXRvbWF0aWNUaHJlYWQqKTsKKyAg
ICB2b2lkIHJlbW92ZShjb25zdCBMb2NrSG9sZGVyJiwgQXV0b21hdGljVGhyZWFkKik7CisgICAg
Ym9vbCBjb250YWlucyhjb25zdCBMb2NrSG9sZGVyJiwgQXV0b21hdGljVGhyZWFkKik7CisgICAg
CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIFZlY3RvcjxBdXRvbWF0aWNUaHJlYWQq
PiBtX3RocmVhZHM7Cit9OworCitjbGFzcyBXVEZfRVhQT1JUX1BSSVZBVEUgQXV0b21hdGljVGhy
ZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEF1dG9tYXRpY1RocmVhZD4geworcHVi
bGljOgorICAgIC8vIFRoaXMgbG9naWNhbGx5IGNyZWF0ZXMgdGhlIHRocmVhZCwgYnV0IGluIHJl
YWxpdHkgdGhlIHRocmVhZCB3b24ndCBiZSBjcmVhdGVkIHVudGlsIHNvbWVvbmUKKyAgICAvLyBj
YWxscyBub3RpZnkoKS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgQXV0b21hdGljVGhyZWFkKEJv
eDxMb2NrPiwgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4pOworICAgIAorICAgIC8v
IE5vdGUgdGhhdCBpZiB5b3UgZHJvcCBhbGwgb2YgeW91ciByZWZlcmVuY2VzIHRvIGFuIEF1dG9t
YXRpY1RocmVhZCB0aGVuIGFzIHNvb24gYXMgdGhlcmUgaXMgYQorICAgIC8vIHNlY29uZCBkdXJp
bmcgd2hpY2ggaXQgZG9lc24ndCBnZXQgd29rZW4gdXAsIGl0IHdpbGwgc2ltcGx5IGRpZSBvbiBp
dHMgb3duLgorICAgIHZpcnR1YWwgfkF1dG9tYXRpY1RocmVhZCgpOworICAgIAorICAgIHZvaWQg
am9pbigpOworICAgIAorcHJvdGVjdGVkOgorICAgIC8vIFRvIHVuZGVyc3RhbmQgUG9sbFJlc3Vs
dCBhbmQgV29ya1Jlc3VsdCwgaW1hZ2luZSB0aGF0IHBvbGwoKSBhbmQgd29yaygpIGFyZSBiZWlu
ZyBjYWxsZWQgbGlrZQorICAgIC8vIHNvOgorICAgIC8vCisgICAgLy8gdm9pZCBBdXRvbWF0aWNU
aHJlYWQ6OnJ1blRocmVhZCgpCisgICAgLy8geworICAgIC8vICAgICBmb3IgKDs7KSB7CisgICAg
Ly8gICAgICAgICB7CisgICAgLy8gICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICAvLyAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgLy8gICAgICAgICAgICAgICAg
IFBvbGxSZXN1bHQgcmVzdWx0ID0gcG9sbCgpOworICAgIC8vICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0ID09IFBvbGxSZXN1bHQ6OldvcmspCisgICAgLy8gICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpT
dG9wKQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgIC8vICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0gUG9sbFJlc3VsdDo6V2FpdCk7CisgICAg
Ly8gICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICAvLyAgICAg
ICAgICAgICB9CisgICAgLy8gICAgICAgICB9CisgICAgLy8gICAgICAgICAKKyAgICAvLyAgICAg
ICAgIFdvcmtSZXN1bHQgcmVzdWx0ID0gd29yaygpOworICAgIC8vICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBXb3JrUmVzdWx0OjpTdG9wKQorICAgIC8vICAgICAgICAgICAgIHJldHVybjsKKyAgICAv
LyAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7
CisgICAgLy8gICAgIH0KKyAgICAvLyB9CisgICAgCisgICAgZW51bSBjbGFzcyBQb2xsUmVzdWx0
IHsgV29yaywgU3RvcCwgV2FpdCB9OworICAgIHZpcnR1YWwgUG9sbFJlc3VsdCBwb2xsKGNvbnN0
IExvY2tIb2xkZXImKSA9IDA7CisgICAgCisgICAgZW51bSBjbGFzcyBXb3JrUmVzdWx0IHsgQ29u
dGludWUsIFN0b3AgfTsKKyAgICB2aXJ0dWFsIFdvcmtSZXN1bHQgd29yaygpID0gMDsKKyAgICAK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjsKKyAg
ICAKKyAgICB2b2lkIHN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICAKKyAgICBCb3g8TG9j
az4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IG1fY29uZGl0
aW9uOworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQgeyAwIH07CisgICAgYm9vbCBtX2lz
UnVubmluZyB7IHRydWUgfTsKKyAgICBDb25kaXRpb24gbV9pc1J1bm5pbmdDb25kaXRpb247Cit9
OworCisvLyBUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyBmb3IgY3JlYXRlQXV0b21hdGljVGhyZWFk
LgordGVtcGxhdGU8dHlwZW5hbWUgUG9sbEZ1bmMsIHR5cGVuYW1lIFdvcmtGdW5jPgorY2xhc3Mg
QXV0b21hdGljVGhyZWFkRnVuY0ltcGwgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKK3B1Ymxp
YzoKKyAgICBBdXRvbWF0aWNUaHJlYWRGdW5jSW1wbCgKKyAgICAgICAgQm94PExvY2s+IGxvY2ss
IFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwKKyAgICAgICAgY29u
c3QgUG9sbEZ1bmMmIHBvbGxGdW5jLCBjb25zdCBXb3JrRnVuYyYgd29ya0Z1bmMpCisgICAgICAg
IDogQXV0b21hdGljVGhyZWFkKGxvY2ssIGNvbmRpdGlvbikKKyAgICAgICAgLCBtX3BvbGxGdW5j
KHBvbGxGdW5jKQorICAgICAgICAsIG1fd29ya0Z1bmMod29ya0Z1bmMpCisgICAgeworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgTG9ja0hvbGRlciYg
bG9ja2VyKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9sbEZ1bmMobG9ja2Vy
KTsKKyAgICB9CisgICAgCisgICAgV29ya1Jlc3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3dvcmtGdW5jKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBQ
b2xsRnVuYyBtX3BvbGxGdW5jOworICAgIFdvcmtGdW5jIG1fd29ya0Z1bmM7Cit9OworCisvLyBU
b2dldGhlciB3aXRoIEJveDw+LCB5b3UgY2FuIHVzZSB0aGlzIHRvIGVhc2lseSB3cml0ZSBjb2Rl
IHRoYXQgc2hhcmVzIHN0YXRlIGJldHdlZW4gdGhlIHBvbGwgYW5kCisvLyB3b3JrIGZ1bmN0aW9u
czoKKy8vCisvLyBzdHJ1Y3QgU3RhdGUgeworLy8gICAgIGludCB4OworLy8gICAgIGRvdWJsZSB5
OworLy8gfTsKKy8vIGF1dG8gc3RhdGUgPSBCb3g8U3RhdGU+OjpjcmVhdGUoKTsKKy8vIFJlZlB0
cjxBdXRvbWF0aWNUaHJlYWQ+IHRocmVhZCA9IGNyZWF0ZUF1dG9tYXRpY1RocmVhZCgKKy8vICAg
ICBsb2NrLCBjb25kaXRpb24sCisvLyAgICAgWz1dIChjb25zdCBMb2NrSG9sZGVyJikgLT4gQXV0
b21hdGljVGhyZWFkOjpQb2xsUmVzdWx0IHsKKy8vICAgICAgICAgIHN0YXRlLT54ID0gLi4uOwor
Ly8gICAgIH0sCisvLyAgICAgWz1dICgpIC0+IEF1dG9tYXRpY1RocmVhZDo6V29ya1Jlc3VsdCB7
CisvLyAgICAgICAgICAuLi4gPSBzdGF0ZS0+eDsKKy8vICAgICB9KTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFBvbGxGdW5jLCB0eXBlbmFtZSBXb3JrRnVuYz4KK1JlZjxBdXRvbWF0aWNUaHJlYWQ+IGNy
ZWF0ZUF1dG9tYXRpY1RocmVhZCgKKyAgICBCb3g8TG9jaz4gbG9jaywgUmVmUHRyPEF1dG9tYXRp
Y1RocmVhZENvbmRpdGlvbj4gY29uZGl0aW9uLAorICAgIGNvbnN0IFBvbGxGdW5jJiBwb2xsRnVu
YywgY29uc3QgV29ya0Z1bmMmIHdvcmtGdW5jKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXV0b21hdGljVGhyZWFkRnVuY0ltcGw8UG9sbEZ1bmMsIFdvcmtGdW5jPihsb2NrLCBjb25kaXRp
b24sIHBvbGxGdW5jLCB3b3JrRnVuYykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpBdXRvbWF0aWNUaHJlYWQ7Cit1c2luZyBXVEY6OkF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjsKK3VzaW5nIFdURjo6Y3JlYXRlQXV0b21hdGljVGhyZWFkOworCisjZW5kaWYgLy8gV1RG
X0F1dG9tYXRpY1RocmVhZF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
MDc0MjQpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMiw2ICsyLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQVNDSUlDVHlwZS5oCiAgICAgQXNz
ZXJ0aW9ucy5oCiAgICAgQXRvbWljcy5oCisgICAgQXV0b21hdGljVGhyZWFkLmgKICAgICBCYWNr
d2FyZHNHcmFwaC5oCiAgICAgQmFnLmgKICAgICBCYWdUb0hhc2hNYXAuaApAQCAtMTczLDYgKzE3
NCw3IEBAIHNldChXVEZfSEVBREVSUwogc2V0KFdURl9TT1VSQ0VTCiAgICAgQXNzZXJ0aW9ucy5j
cHAKICAgICBBdG9taWNzLmNwcAorICAgIEF1dG9tYXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0
b3IuY3BwCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuY3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIu
Y3BwCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAJKHJldmlzaW9uIDIw
NzQyNCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQsMTQgKzM0LDE0IEBAIG5hbWVzcGFjZSBXVEYgewogUGFyYWxsZWxIZWxwZXJDbGll
bnQ6OlBhcmFsbGVsSGVscGVyQ2xpZW50KFJlZlB0cjxQYXJhbGxlbEhlbHBlclBvb2w+IHBvb2wp
CiAgICAgOiBtX3Bvb2wocG9vbCkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1f
bG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fcG9vbC0+bV9sb2NrKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV9wb29sLT5tX2lzRHlpbmcpOwogICAgIG1fcG9vbC0+bV9jbGllbnRzLmFw
cGVuZCh0aGlzKTsKIH0KIAogUGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNs
aWVudCgpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX3Bvb2wtPm1fbG9jayk7CiAgICAgZmluaXNoKGxvY2tlcik7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcG9vbC0+bV9jbGllbnRzLnNpemUoKTsgKytp
KSB7CkBAIC01NSw3ICs1NSw3IEBAIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxw
ZXJDbGkKIAogdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdHI8U2hhcmVk
VGFzazx2b2lkICgpPj4gdGFzaykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1f
bG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fcG9vbC0+bV9sb2NrKTsKICAgICBSRUxF
QVNFX0FTU0VSVCghbV90YXNrKTsKICAgICBtX3Rhc2sgPSB0YXNrOwogICAgIG1fcG9vbC0+ZGlk
TWFrZVdvcmtBdmFpbGFibGUobG9ja2VyKTsKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBQYXJhbGxl
bEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdAogCiB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50
OjpmaW5pc2goKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9wb29sLT5tX2xvY2spOwogICAgIGZpbmlzaChsb2NrZXIp
OwogfQogCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRvU29t
ZUhlbHBpbmcKIHsKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkICgpPj4gdGFzazsKICAgICB7
Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoKm1fcG9vbC0+bV9sb2NrKTsKICAgICAgICAgdGFzayA9IGNsYWltVGFz
ayhsb2NrZXIpOwogICAgICAgICBpZiAoIXRhc2spCiAgICAgICAgICAgICByZXR1cm47CkBAIC05
MSw3ICs5MSw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25zdCAKIHsK
ICAgICBtX3Rhc2sgPSBudWxscHRyOwogICAgIHdoaWxlIChtX251bUFjdGl2ZSkKLSAgICAgICAg
bV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+bV9sb2NrKTsKKyAg
ICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KCptX3Bvb2wtPm1fbG9j
ayk7CiB9CiAKIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQgKCk+PiBQYXJhbGxlbEhlbHBlckNsaWVu
dDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQg
UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVmUHQKICAgICB0YXNrLT5ydW4oKTsKIAog
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9wb29sLT5tX2xvY2spOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX251bUFjdGl2ZSk7CiAgICAgICAgIC8vIE5vIG5ldyB0YXNrIGNvdWxkIGhhdmUgYmVl
biBpbnN0YWxsZWQsIHNpbmNlIHdlIHdlcmUgc3RpbGwgYWN0aXZlLgogICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV90YXNrIHx8IG1fdGFzayA9PSB0YXNrKTsKQEAgLTEyMyw2ICsxMjMsOCBAQCB2
b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0CiB9CiAKIFBhcmFsbGVsSGVs
cGVyUG9vbDo6UGFyYWxsZWxIZWxwZXJQb29sKCkKKyAgICA6IG1fbG9jayhCb3g8TG9jaz46OmNy
ZWF0ZSgpKQorICAgICwgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjo6Y3JlYXRlKCkpCiB7CiB9CiAKQEAgLTEzMSwxOCArMTMzLDE4IEBAIFBhcmFsbGVs
SGVscGVyUG9vbDo6flBhcmFsbGVsSGVscGVyUG9vbCgKICAgICBSRUxFQVNFX0FTU0VSVChtX2Ns
aWVudHMuaXNFbXB0eSgpKTsKICAgICAKICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAgICBt
X2lzRHlpbmcgPSB0cnVlOwotICAgICAgICBtX3dvcmtBdmFpbGFibGVDb25kaXRpb24ubm90aWZ5
QWxsKCk7CisgICAgICAgIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbi0+bm90aWZ5QWxsKCk7CiAg
ICAgfQogCi0gICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBtX3Ro
cmVhZHMpCi0gICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIp
OworICAgIGZvciAoUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4mIHRocmVhZCA6IG1fdGhyZWFkcykK
KyAgICAgICAgdGhyZWFkLT5qb2luKCk7CiB9CiAKIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpl
bnN1cmVUaHJlYWRzKHVuc2lnbmVkIG51bVRocmVhZHMpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICBpZiAobnVt
VGhyZWFkcyA8IG1fbnVtVGhyZWFkcykKICAgICAgICAgcmV0dXJuOwogICAgIG1fbnVtVGhyZWFk
cyA9IG51bVRocmVhZHM7CkBAIC0xNTUsNyArMTU3LDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlclBv
b2w6OmRvU29tZUhlbHBpbmcoKQogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7CiAg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCAoKT4+IHRhc2s7CiAgICAgewotICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2Nr
KTsKICAgICAgICAgY2xpZW50ID0gZ2V0Q2xpZW50V2l0aFRhc2sobG9ja2VyKTsKICAgICAgICAg
aWYgKCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjgsMzUgKzE3MCwzMiBAQCB2
b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZG9Tb21lSGVscGluZygpCiB2b2lkIFBhcmFsbGVsSGVs
cGVyUG9vbDo6ZGlkTWFrZVdvcmtBdmFpbGFibGUoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAg
d2hpbGUgKG1fbnVtVGhyZWFkcyA+IG1fdGhyZWFkcy5zaXplKCkpIHsKLSAgICAgICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAotICAgICAgICAgICAg
IldURiBQYXJhbGxlbCBIZWxwZXIgVGhyZWFkIiwKLSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0g
ICAgICAgICAgICAgICAgaGVscGVyVGhyZWFkQm9keSgpOworICAgICAgICBzdHJ1Y3QgU3RhdGUg
eworICAgICAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudCB7IG51bGxwdHIgfTsK
KyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQgKCk+PiB0YXNrOworICAgICAgICB9
OworICAgICAgICBhdXRvIHN0YXRlID0gQm94PFN0YXRlPjo6Y3JlYXRlKCk7CisgICAgICAgIFJl
ZjxBdXRvbWF0aWNUaHJlYWQ+IHRocmVhZCA9IGNyZWF0ZUF1dG9tYXRpY1RocmVhZCgKKyAgICAg
ICAgICAgIG1fbG9jaywgbV9jb25kaXRpb24sCisgICAgICAgICAgICBbPV0gKGNvbnN0IExvY2tI
b2xkZXImIGxvY2tlcikgLT4gQXV0b21hdGljVGhyZWFkOjpQb2xsUmVzdWx0IHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9pc0R5aW5nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXV0b21h
dGljVGhyZWFkOjpQb2xsUmVzdWx0OjpTdG9wOworICAgICAgICAgICAgICAgIGlmIChQYXJhbGxl
bEhlbHBlckNsaWVudCogcmVzdWx0ID0gZ2V0Q2xpZW50V2l0aFRhc2sobG9ja2VyKSkgeworICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS0+Y2xpZW50ID0gcmVzdWx0OworICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS0+dGFzayA9IHJlc3VsdC0+Y2xhaW1UYXNrKGxvY2tlcik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBBdXRvbWF0aWNUaHJlYWQ6OlBvbGxSZXN1bHQ6Oldvcms7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBBdXRvbWF0aWNUaHJlYWQ6OlBv
bGxSZXN1bHQ6OldhaXQ7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWz1dICgpIC0+IEF1
dG9tYXRpY1RocmVhZDo6V29ya1Jlc3VsdCB7CisgICAgICAgICAgICAgICAgc3RhdGUtPmNsaWVu
dC0+cnVuVGFzayhzdGF0ZS0+dGFzayk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmNsaWVudCA9
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgc3RhdGUtPnRhc2sgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIHJldHVybiBBdXRvbWF0aWNUaHJlYWQ6OldvcmtSZXN1bHQ6OkNvbnRpbnVlOwog
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIG1fdGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmll
cik7Ci0gICAgfQotICAgIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKLX0K
LQotdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZHkoKQotewotICAgIGZv
ciAoOzspIHsKLSAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKLSAgICAgICAg
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCAoKT4+IHRhc2s7Ci0KLSAgICAgICAgewotICAgICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgIGNsaWVudCA9IHdhaXRG
b3JDbGllbnRXaXRoVGFzayhsb2NrZXIpOwotICAgICAgICAgICAgaWYgKCFjbGllbnQpIHsKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2lzRHlpbmcpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGFzayA9IGNsaWVudC0+Y2xh
aW1UYXNrKGxvY2tlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBjbGllbnQtPnJ1blRhc2sodGFz
ayk7CisgICAgICAgIG1fdGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKICAgICB9CisgICAgbV93b3Jr
QXZhaWxhYmxlQ29uZGl0aW9uLT5ub3RpZnlBbGwoKTsKIH0KIAogYm9vbCBQYXJhbGxlbEhlbHBl
clBvb2w6Omhhc0NsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKQEAgLTIy
MiwyMCArMjIxLDUgQEAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVsSGVscGVyUG9vbAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1QYXJhbGxlbEhlbHBlckNsaWVudCogUGFyYWxsZWxI
ZWxwZXJQb29sOjp3YWl0Rm9yQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYgbG9ja2Vy
KQotewotICAgIGZvciAoOzspIHsKLSAgICAgICAgLy8gSXQgbWlnaHQgYmUgcXVpdHRpbicgdGlt
ZS4KLSAgICAgICAgaWYgKG1faXNEeWluZykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIGlmIChQYXJhbGxlbEhlbHBlckNsaWVudCogcmVzdWx0ID0gZ2V0Q2xpZW50V2l0
aFRhc2sobG9ja2VyKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgLy8g
V2FpdCB1bnRpbCB3b3JrIGJlY29tZXMgYXZhaWxhYmxlLgotICAgICAgICBtX3dvcmtBdmFpbGFi
bGVDb25kaXRpb24ud2FpdChtX2xvY2spOwotICAgIH0KLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lvbiAyMDc0MjQp
CisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Niw2ICsyNiw3IEBACiAjaWZuZGVmIFBhcmFsbGVsSGVscGVyUG9vbF9oCiAjZGVmaW5lIFBhcmFs
bGVsSGVscGVyUG9vbF9oCiAKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0Nv
bmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpAQCAtMTg4LDIwICsxODksMTkgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ7CiAKICAgICB2b2lkIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGNvbnN0IExv
Y2tIb2xkZXImKTsKLSAgICB2b2lkIGhlbHBlclRocmVhZEJvZHkoKTsKIAogICAgIGJvb2wgaGFz
Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOwogICAgIFBhcmFsbGVsSGVscGVyQ2xp
ZW50KiBnZXRDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgUGFyYWxsZWxI
ZWxwZXJDbGllbnQqIHdhaXRGb3JDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CiAg
ICAgCi0gICAgTG9jayBtX2xvY2s7Ci0gICAgQ29uZGl0aW9uIG1fd29ya0F2YWlsYWJsZUNvbmRp
dGlvbjsKKyAgICBCb3g8TG9jaz4gbV9sb2NrOyAvLyBBdXRvbWF0aWNUaHJlYWQgd2FudHMgdGhp
cyBpbiBhIGJveCBmb3Igc2FmZXR5LgorICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b24+IG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbjsKICAgICBDb25kaXRpb24gbV93b3JrQ29tcGxl
dGVDb25kaXRpb247CiAKICAgICBXZWFrUmFuZG9tIG1fcmFuZG9tOwogICAgIAogICAgIFZlY3Rv
cjxQYXJhbGxlbEhlbHBlckNsaWVudCo+IG1fY2xpZW50czsKLSAgICBWZWN0b3I8VGhyZWFkSWRl
bnRpZmllcj4gbV90aHJlYWRzOworICAgIFZlY3RvcjxSZWZQdHI8QXV0b21hdGljVGhyZWFkPj4g
bV90aHJlYWRzOwogICAgIHVuc2lnbmVkIG1fbnVtVGhyZWFkcyB7IDAgfTsgLy8gVGhpcyBjYW4g
YmUgbGFyZ2VyIHRoYW4gbV90aHJlYWRzLnNpemUoKSBiZWNhdXNlIHdlIHN0YXJ0IHRocmVhZHMg
b25seSBvbmNlIHRoZXJlIGlzIHdvcmsuCiAgICAgYm9vbCBtX2lzRHlpbmcgeyBmYWxzZSB9Owog
fTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291964</attachid>
            <date>2016-10-18 11:55:20 -0700</date>
            <delta_ts>2016-10-18 12:23:52 -0700</delta_ts>
            <desc>seems to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31693</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NDc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE2LTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byBjcmVhdGUgdGhyZWFkcyB0aGF0IGRpZSBhdXRv
bWF0aWNhbGx5IGFmdGVyIGluYWN0aXZpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkZWQgYSBzbGVlcFNlY29uZHMoKSBmdW5jdGlv
biwgd2hpY2ggbWFkZSBpdCBlYXNpZXIgZm9yIG1lIHRvIHRlc3QgdGhpcyBjaGFuZ2UuCisgICAg
ICAgIAorICAgICAgICBUaGUgV1RGIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBjaGFuZ2UgaG93IHRo
ZSBKU0MgR0MgbWFuYWdlcyB0aHJlYWRzOiB0aGUgR0MgdGhyZWFkcyB3aWxsIG5vdworICAgICAg
ICBzaHV0IGRvd24gYXV0b21hdGljYWxseSBhZnRlciAxIHNlY29uZCBvZiBpbmFjdGl2aXR5LiBN
YXliZSB0aGlzIHdpbGwgc2F2ZSBzb21lIG1lbW9yeS4KKworICAgICAgICAqIGpzYy5jcHA6Cisg
ICAgICAgIChHbG9iYWxPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKGZ1bmN0aW9u
U2xlZXBTZWNvbmRzKToKKwogMjAxNi0xMC0xNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIERGRyBhbmQgRlRMIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBEaXJlY3RD
YWxsIElDcyB3aGVuIHRoZXkgcHJvdmVkIHRoZSBjYWxsZWUgb3IgaXRzIGV4ZWN1dGFibGUKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDc0MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE5LDYgKzcxOSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSopOwogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZUFycmF5KEV4
ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25T
bGVlcFNlY29uZHMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkpTQ1N0YWNrKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HQ0FuZFN3ZWVwKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GdWxsR0MoRXhlY1N0YXRlKik7CkBA
IC05NDMsNiArOTQ0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJl
YWRGaWxlIiwgZnVuY3Rpb25SZWFkRmlsZSwgMik7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
cmVhZCIsIGZ1bmN0aW9uUmVhZEZpbGUsIDIpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNo
ZWNrU3ludGF4IiwgZnVuY3Rpb25DaGVja1N5bnRheCwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAic2xlZXBTZWNvbmRzIiwgZnVuY3Rpb25TbGVlcFNlY29uZHMsIDEpOwogICAgICAgICBh
ZGRGdW5jdGlvbih2bSwgImpzY1N0YWNrIiwgZnVuY3Rpb25KU0NTdGFjaywgMSk7CiAgICAgICAg
IGFkZEZ1bmN0aW9uKHZtLCAicmVhZGxpbmUiLCBmdW5jdGlvblJlYWRsaW5lLCAwKTsKICAgICAg
ICAgYWRkRnVuY3Rpb24odm0sICJwcmVjaXNlVGltZSIsIGZ1bmN0aW9uUHJlY2lzZVRpbWUsIDAp
OwpAQCAtMTM2OCw2ICsxMzcwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25EZXMKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhl
eGVjLCB0b1N0cmluZygiPEJ1dHRlcmZseTogIiwgUmF3UG9pbnRlcihvYmplY3QtPmJ1dHRlcmZs
eSgpKSwgIjsgcHVibGljIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRBcnJheUxlbmd0aCgpLCAiOyB2
ZWN0b3IgbGVuZ3RoOiAiLCBvYmplY3QtPmdldFZlY3Rvckxlbmd0aCgpLCAiPiIpKSk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TbGVlcFNlY29uZHMoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMSkKKyAgICAg
ICAgc2xlZXAoZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIGNsYXNzIEZ1bmN0aW9uSlNDU3Rh
Y2tGdW5jdG9yIHsKIHB1YmxpYzoKICAgICBGdW5jdGlvbkpTQ1N0YWNrRnVuY3RvcihTdHJpbmdC
dWlsZGVyJiB0cmFjZSkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc0MjQpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE2LTEwLTE4ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0
IGVhc2llciB0byBjcmVhdGUgdGhyZWFkcyB0aGF0IGRpZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGlu
YWN0aXZpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgRm9yIGEgbG9uZyB0aW1lIG5vdywgSSd2ZSBiZWVuIGFkZGluZyB0aHJlYWRzIHRv
IFdURi9KU0MgYW5kIGVhY2ggdGltZSBJIGRvIHRoaXMsIEkgZmVlbAorICAgICAgICBndWlsdHkg
YmVjYXVzZSB0aG9zZSB0aHJlYWRzIGRvbid0IHNodXQgZG93biB3aGVuIHRoZXkgYXJlIGluYWN0
aXZlLiBGb3IgZXhhbXBsZSwgaW4gYnVnCisgICAgICAgIDE2MzU2MiwgSSBuZWVkIHRvIGFkZCBh
IG5ldyBHQyB0aHJlYWQuIFRoZXJlIHdpbGwgYmUgb25lIG9mIHRoZW0gcGVyIFZNLiBUaGlzIG1l
YW5zIHRoYXQgYQorICAgICAgICBKU0MgQVBJIGNsaWVudCB0aGF0IHN0YXJ0cyBhIGxvdCBvZiBW
TXMgd2lsbCBoYXZlIGEgbG90IG9mIHRocmVhZHMuIEkgZG9uJ3QgdGhpbmsgdGhhdCdzCisgICAg
ICAgIGdvb2QuCisgICAgICAgIAorICAgICAgICBBIGNvbW1vbiBwYXR0ZXJuIGZvciBhbGwgb2Yg
dGhlc2UgdGhyZWFkcyBpcyB0aGF0IHRoZXkgaGF2ZSBzb21lIHdlbGwtZGVmaW5lZCB0cmlnZ2Vy
IHRoYXQKKyAgICAgICAgY2F1c2VzIHRoZW0gdG8gcnVuLiBUaGlzIHRyaWdnZXIgaGFzIGEgbG9j
aywgYSBjb25kaXRpb24gdmFyaWFibGUsIHNvbWUgbG9naWMgdGhhdCBkZXRlcm1pbmVzCisgICAg
ICAgIGlmIHRoZXJlIGlzIHdvcmsgdG8gZG8sIGFuZCB0aGVuIG9mIGNvdXJzZSB0aGUgbG9naWMg
Zm9yIHRoZSB0aHJlYWQncyBhY3R1YWwgd29yay4gVGhlIHRocmVhZAorICAgICAgICBib2RpZXMg
dXN1YWxseSBsb29rIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgIHZvaWQgVGhpbmd5Ojpy
dW5UaHJlYWQoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICAgICAgV29yayB3b3JrOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFo
YXNXb3JrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbmQud2FpdChtX2xvY2spOwor
ICAgICAgICAgICAgICAgICAgICB3b3JrID0gdGFrZVdvcmsoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZG9Xb3JrKHdvcmspOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBJZiB5b3UgbG9vayBhdCBQYXJhbGxlbEhlbHBlclBvb2wgKHRo
ZSBHQydzIHRocmVhZHMpIGFuZCBERkc6OldvcmtsaXN0IChzb21lIG9mIHRoZSBKSVQncworICAg
ICAgICB0aHJlYWRzKSwgeW91IHdpbGwgc2VlIHRoaXMgcGF0dGVybi4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgY2hhbmdlIGFkZHMgYSBuZXcga2luZCBvZiB0aHJlYWQsIGNhbGxlZCBBdXRvbWF0
aWNUaHJlYWQsIHRoYXQgbGV0cyB5b3Ugd3JpdGUgdGhyZWFkcyB0bworICAgICAgICB0aGlzIHBh
dHRlcm4gd2hpbGUgZ2V0dGluZyBhdXRvbWF0aWMgdGhyZWFkIHNodXRkb3duIGZvciBmcmVlOiBp
bnN0ZWFkIG9mIGp1c3Qgd2FpdGluZyBvbiBhCisgICAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZSwg
QXV0b21hdGljVGhyZWFkIHdpbGwgaGF2ZSBhIHRpbWVvdXQgdGhhdCBjYXVzZXMgdGhlIHRocmVh
ZCB0byBkaWUuIFRoZQorICAgICAgICBjb25kaXRpb24gdmFyaWFibGUgYXNzb2NpYXRlZCB3aXRo
IEF1dG9tYXRpY1RocmVhZCwgY2FsbGVkIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbiwgaXMgc21h
cnQKKyAgICAgICAgZW5vdWdoIHRvIHJlc3RhcnQgYW55IHRocmVhZHMgdGhhdCBoYXZlIGRlY2lk
ZWQgdG8gc3RvcCBkdWUgdG8gaW5hY3Rpdml0eS4gVGhlIGluYWN0aXZpdHkKKyAgICAgICAgdGhy
ZXNob2xkIGlzIGN1cnJlbnQganVzdCAxIHNlY29uZC4KKyAgICAgICAgCisgICAgICAgIEluIHRo
aXMgcGF0Y2ggSSBvbmx5IGFkb3B0IEF1dG9tYXRpY1RocmVhZCBmb3IgUGFyYWxsZWxIZWxwZXJQ
b29sLiBJIHBsYW4gdG8gYWRvcHQgaXQgaW4gbW9yZQorICAgICAgICBwbGFjZXMgc29vbi4KKwor
ICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9B
dXRvbWF0aWNUaHJlYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFk
Q29uZGl0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OkF1dG9tYXRpY1RocmVhZENvbmRpdGlvbik6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1Ro
cmVhZENvbmRpdGlvbjo6fkF1dG9tYXRpY1RocmVhZENvbmRpdGlvbik6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5QWxsKToKKyAgICAgICAgKFdURjo6QXV0
b21hdGljVGhyZWFkQ29uZGl0aW9uOjphZGQpOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb246OnJlbW92ZSk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJlYWQ6OkF1dG9tYXRp
Y1RocmVhZCk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6fkF1dG9tYXRpY1RocmVh
ZCk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6am9pbik6CisgICAgICAgIChXVEY6
OkF1dG9tYXRpY1RocmVhZDo6c3RhcnQpOgorICAgICAgICAqIHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aDogQWRkZWQuCisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9Q
YXJhbGxlbEhlbHBlclBvb2wuY3BwOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVu
dDo6UGFyYWxsZWxIZWxwZXJDbGllbnQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNs
aWVudDo6flBhcmFsbGVsSGVscGVyQ2xpZW50KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxw
ZXJDbGllbnQ6OnNldFRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6
ZmluaXNoKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhlbHBp
bmcpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayk6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6UGFyYWxsZWxIZWxwZXJQb29sKToKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjp+UGFyYWxsZWxIZWxwZXJQb29sKToKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjplbnN1cmVUaHJlYWRzKToKKyAgICAgICAgKFdU
Rjo6UGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKToKKyAgICAgICAgKFdURjo6UGFy
YWxsZWxIZWxwZXJQb29sOjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
SGVscGVyUG9vbDo6ZGlkTWFrZVdvcmtBdmFpbGFibGUpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEhlbHBlclBvb2w6OndhaXRGb3JDbGllbnRXaXRoVGFzayk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oOgorCiAyMDE2LTEwLTE1ICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWVzc2FnZUV2ZW50J3Mgc291cmNlIHByb3Bl
cnR5IHNob3VsZCBiZSBhIChET01XaW5kb3cgb3IgTWVzc2FnZVBvcnQpPyByYXRoZXIgdGhhbiBh
IEV2ZW50VGFyZ2V0PwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMDc0MjQpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAJCTBGMkI2NkE2MTdC
NkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8q
IERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUz
RiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJ
MEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAv
KiBXZWFrUmFuZG9tLmggKi87IH07CisJCTBGNDNEOEYxMURCNUFEREMwMDEwOEZCNiAvKiBBdXRv
bWF0aWNUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi87
IH07CisJCTBGNDNEOEYyMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDNEOEYwMURCNUFE
REMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuaCAqLzsgfTsKIAkJMEY0NTcwNDMxQkU1QjU4
RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDU3MDQyMUJFNUI1OEYwMDYyQTYyOSAvKiBEb21pbmF0b3JzLmgg
Ki87IH07CiAJCTBGNDU3MDQ1MUJFODM0NDEwMDYyQTYyOSAvKiBCdWJibGVTb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ1NzA0NDFCRTgzNDQx
MDA2MkE2MjkgLyogQnViYmxlU29ydC5oICovOyB9OwogCQkwRjcyNUNBQzFDNTA0NjE2MDBBRDk0
M0EgLyogUmFuZ2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzI1Q0FCMUM1MDQ2MTYwMEFEOTQzQSAvKiBSYW5nZVNldC5oICovOyB9OwpAQCAt
MzY2LDYgKzM2OCw4IEBACiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNTAxNjMx
QkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQz
RDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9tYXRpY1RocmVhZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNDNEOEYwMURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNU
aHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b21hdGljVGhyZWFk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDU3MDQyMUJFNUI1OEYwMDYyQTYy
OSAvKiBEb21pbmF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvbWlu
YXRvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDQxQkU4MzQ0MTAw
NjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnViYmxlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcyNUNBQjFDNTA0
NjE2MDBBRDk0M0EgLyogUmFuZ2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmFuZ2VTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgzOSw2ICs4NDMs
OCBAQAogCQkJCUE4QTQ3MjVEMTUxQTgyNUEwMDQxMjNGRiAvKiBBdG9taWNzLmggKi8sCiAJCQkJ
MTQ2OTQxOUExNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbC5oICovLAogCQkJCTE0
Njk0MTlCMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMubW0gKi8sCisJCQkJ
MEY0M0Q4RUYxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgKi8sCisJCQkJ
MEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovLAogCQkJCURD
RUUyMjA0MUNFQjk4NjkwMDBDMjM5NiAvKiBCYWNrd2FyZHNHcmFwaC5oICovLAogCQkJCTBGQjE0
RTE4MTgwRkEyMTgwMDlCNkI0RCAvKiBCYWcuaCAqLywKIAkJCQkwRkIxNEUxQTE4MTBFMURBMDA5
QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8sCkBAIC0xMzMwLDYgKzEzMzYsNyBAQAogCQkJCTI2
MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGODE4NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFw
dG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRkExODZEMkE1NDAwNzQzM0NEIC8qIEl0
ZXJhdG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDNEOEYyMURCNUFEREMwMDEwOEZC
NiAvKiBBdXRvbWF0aWNUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQUM5MUE4MTg5NDJG
QzQwMDI0NDkzOSAvKiBMQ2hhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5RUIwNjMxRDU1Mjg0
MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MERBMDg1MTc5
OUYwNEQwMDUyOUE5QiAvKiBMaXN0RHVtcC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjM0LDYgKzE2
NDEsNyBAQAogCQkJCUE1QkExNUYzMTgyNDMzQTkwMEE4MkU2OSAvKiBTdHJpbmdNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkwRkREQkZBNzE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0NDMxNTFBODI1QjAwNDEyM0ZGIC8q
IFN0cmluZ1N0YXRpY3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY0M0Q4RjExREI1QUREQzAw
MTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOTkz
RTE5RDc5NThEMDBDMjM5MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
MzkzNEJENTE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzOTM0QkQzMThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3T2JqQy5tbSBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1dG9tYXRpY1RocmVhZC5o
IgorCisjaW5jbHVkZSAiRGF0YUxvZy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uPiBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKSk7Cit9CisKK0F1dG9tYXRpY1Ro
cmVhZENvbmRpdGlvbjo6QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uKCkKK3sKK30KKworQXV0b21h
dGljVGhyZWFkQ29uZGl0aW9uOjp+QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uKCkKK3sKK30KKwor
dm9pZCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246Om5vdGlmeUFsbChjb25zdCBMb2NrSG9sZGVy
JiBsb2NrZXIpCit7CisgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgCisgICAgZm9y
IChBdXRvbWF0aWNUaHJlYWQqIHRocmVhZCA6IG1fdGhyZWFkcykKKyAgICAgICAgdGhyZWFkLT5z
dGFydChsb2NrZXIpOworICAgIG1fdGhyZWFkcy5jbGVhcigpOworfQorCit2b2lkIEF1dG9tYXRp
Y1RocmVhZENvbmRpdGlvbjo6YWRkKGNvbnN0IExvY2tIb2xkZXImLCBBdXRvbWF0aWNUaHJlYWQq
IHRocmVhZCkKK3sKKyAgICBBU1NFUlQoIW1fdGhyZWFkcy5jb250YWlucyh0aHJlYWQpKTsKKyAg
ICBtX3RocmVhZHMuYXBwZW5kKHRocmVhZCk7Cit9CisKK3ZvaWQgQXV0b21hdGljVGhyZWFkQ29u
ZGl0aW9uOjpyZW1vdmUoY29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCogdGhyZWFk
KQoreworICAgIEFTU0VSVChtX3RocmVhZHMuY29udGFpbnModGhyZWFkKSk7CisgICAgbV90aHJl
YWRzLnJlbW92ZUZpcnN0KHRocmVhZCk7CisgICAgQVNTRVJUKCFtX3RocmVhZHMuY29udGFpbnMo
dGhyZWFkKSk7Cit9CisKK2Jvb2wgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjb250YWlucyhj
b25zdCBMb2NrSG9sZGVyJiwgQXV0b21hdGljVGhyZWFkKiB0aHJlYWQpCit7CisgICAgcmV0dXJu
IG1fdGhyZWFkcy5jb250YWlucyh0aHJlYWQpOworfQorCitBdXRvbWF0aWNUaHJlYWQ6OkF1dG9t
YXRpY1RocmVhZChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIEJveDxMb2NrPiBsb2NrLCBSZWZQ
dHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24pCisgICAgOiBtX2xvY2sobG9j
aykKKyAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikKK3sKKyAgICBtX2NvbmRpdGlvbi0+YWRk
KGxvY2tlciwgdGhpcyk7Cit9CisKK0F1dG9tYXRpY1RocmVhZDo6fkF1dG9tYXRpY1RocmVhZCgp
Cit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgCisgICAgLy8gSXQncyBw
b3NzaWJsZSB0aGF0IHdlJ3JlIGluIGEgd2FpdGluZyBzdGF0ZSB3aXRoIHRoZSB0aHJlYWQgc2h1
dCBkb3duLiBUaGlzIGlzIGEgZ29vZnkgd2F5IHRvCisgICAgLy8gZGllLCBidXQgaXQgY291bGQg
aGFwcGVuLgorICAgIG1fY29uZGl0aW9uLT5yZW1vdmUobG9ja2VyLCB0aGlzKTsKK30KKwordm9p
ZCBBdXRvbWF0aWNUaHJlYWQ6OmpvaW4oKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworICAgIHdoaWxlIChtX2lzUnVubmluZykKKyAgICAgICAgbV9pc1J1bm5pbmdDb25kaXRp
b24ud2FpdCgqbV9sb2NrKTsKK30KKwordm9pZCBBdXRvbWF0aWNUaHJlYWQ6OnN0YXJ0KGNvbnN0
IExvY2tIb2xkZXImKQoreworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWQ+IHByZXNlcnZlVGhp
c0ZvclRocmVhZCA9IHRoaXM7CisgICAgCisgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWQgPSBj
cmVhdGVUaHJlYWQoCisgICAgICAgICJXVEY6OkF1dG9tYXRpY1RocmVhZCIsCisgICAgICAgIFs9
XSAoKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJSdW5uaW5nIGF1dG9tYXRpYyB0aHJlYWQhXG4iKTsKKyAgICAgICAgICAgIFJlZlB0cjxBdXRv
bWF0aWNUaHJlYWQ+IHByZXNlcnZlVGhpc0luVGhyZWFkID0gcHJlc2VydmVUaGlzRm9yVGhyZWFk
OworICAgICAgICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2NvbmRpdGlvbi0+
Y29udGFpbnMobG9ja2VyLCB0aGlzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGF1dG8gc3RvcCA9IFsmXSAoY29uc3QgTG9ja0hvbGRlciYpIHsKKyAgICAgICAg
ICAgICAgICBtX2lzUnVubmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1faXNSdW5uaW5n
Q29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBvbGxSZXN1bHQgcmVzdWx0ID0gcG9sbChs
b2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQb2xsUmVzdWx0
OjpXb3JrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpTdG9wKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKGxvY2tlcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0gUG9sbFJlc3VsdDo6V2FpdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTaHV0IHRoZSB0aHJlYWQgZG93biBhZnRlciBvbmUgc2Vjb25k
LgorICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWVvdXQgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF3b2tl
bkJ5Tm90aWZ5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi0+bV9j
b25kaXRpb24ud2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKCptX2xvY2ssIHRpbWVvdXQp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhd29rZW5CeU5vdGlmeSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJHb2luZyB0byBzbGVlcCFcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5hZGQobG9ja2VyLCB0aGlzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgV29ya1Jlc3VsdCByZXN1bHQgPSB3b3JrKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpTdG9wKSB7CisgICAgICAgICAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RvcChsb2NrZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQgPT0gV29ya1Jlc3VsdDo6Q29udGludWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICBkZXRhY2hUaHJlYWQodGhyZWFkKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV1RGX0F1dG9tYXRpY1RocmVhZF9oCisjZGVmaW5lIFdURl9BdXRvbWF0aWNUaHJl
YWRfaAorCisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gT2Z0ZW4sIHdl
IGNyZWF0ZSB0aHJlYWRzIHRoYXQgaGF2ZSB0aGlzIGFzIHRoZWlyIGJvZHk6CisvLworLy8gICAg
IGZvciAoOzspIHsKKy8vICAgICAgICAgeworLy8gICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKy8vICAgICAgICAgICAgIGZvciAoOzspIHsKKy8vICBbMV0gICAgICAgICAg
ICBzdHVmZiB0aGF0IGNvdWxkIGJyZWFrLCByZXR1cm4sIG9yIGZhbGwgdGhyb3VnaDsKKy8vICAg
ICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1fbG9jayk7CisvLyAgICAgICAgICAgICB9
CisvLyAgICAgICAgIH0KKy8vICAgICAgICAgCisvLyAgWzJdICAgIGRvIHdvcms7CisvLyAgICAg
fQorLy8KKy8vIFdoZW4gd2UgZG8gdGhpcywgd2UgZG9uJ3QgYWx3YXlzIGRvIGEgZ29vZCBqb2Ig
b2YgbWFuYWdpbmcgdGhpcyB0aHJlYWQncyBsaWZldGltZSwgd2hpY2ggbWF5IGxlYWQKKy8vIHRv
IHRoaXMgdGhyZWFkIHNpdHRpbmcgYXJvdW5kIGV2ZW4gd2hlbiBpdCBpcyBub3QgbmVlZGVkLgor
Ly8KKy8vIEF1dG9tYXRpY1RocmVhZCBpcyBoZXJlIHRvIGhlbHAgeW91IGluIHRoZXNlIHNpdHVh
dGlvbnMuIEl0IGVuY2Fwc3VsYXRlcyBhIGxvY2ssIGEgY29uZGl0aW9uCisvLyB2YXJpYWJsZSwg
YW5kIGEgdGhyZWFkLiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2h1dCB0aGUgdGhyZWFkIGRvd24g
YWZ0ZXIgMSBzZWNvbmQgb2YgaW5hY3Rpdml0eS4KKy8vIFlvdSB1c2UgQXV0b21hdGljVGhyZWFk
IGJ5IHN1YmNsYXNzaW5nIGl0LCBhbmQgcHV0IGFueSBzdGF0ZSB0aGF0IGlzIG5lZWRlZCBiZXR3
ZWVuIFsxXSBhbmQgWzJdCisvLyBpbiB0aGUgc3ViY2xhc3MuCisvLworLy8gVGhlIHRlcm1pbm9s
b2d5IHdlIHVzZSBpczoKKy8vCisvLyBbMV0gUG9sbFJlc3VsdCBBdXRvbWF0aWNUaHJlYWQ6OnBv
bGwoKQorLy8gWzJdIFdvcmRSZXN1bHQgQXV0b21hdGljVGhyZWFkOjp3b3JrKCkKKy8vCisvLyBO
b3RlIHRoYXQgcG9sbCgpIGFuZCB3b3JrKCkgbWF5IG5vdCBiZSBjYWxsZWQgb24gdGhlIHNhbWUg
dGhyZWFkIGV2ZXJ5IHRpbWUsIHNpbmNlIHRoaXMgd2lsbCBzaHV0CisvLyBkb3duIHRoZSB0aHJl
YWQgYXMgbmVjZXNzYXJ5LiBUaGlzIGlzIGxlZ2FsIHNpbmNlIG1fY29uZGl0aW9uLndhaXQobV9s
b2NrKSBjYW4gZHJvcCB0aGUgbG9jaywgYW5kCisvLyBzbyB0aGVyZSBpcyBubyByZWFzb24gdG8g
a2VlcCB0aGUgdGhyZWFkIGFyb3VuZC4KKworY2xhc3MgQXV0b21hdGljVGhyZWFkOworCitjbGFz
cyBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
QXV0b21hdGljVGhyZWFkPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFU
RSBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjcmVhdGUoKTsKKyAgICAKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgfkF1dG9tYXRpY1RocmVhZENvbmRpdGlvbigpOworICAgIAorICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGlmeUFsbChjb25zdCBMb2NrSG9sZGVyJik7Cisg
ICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBdXRvbWF0aWNUaHJlYWQ7CisgICAgCisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbigpOworCisgICAg
dm9pZCBhZGQoY29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCopOworICAgIHZvaWQg
cmVtb3ZlKGNvbnN0IExvY2tIb2xkZXImLCBBdXRvbWF0aWNUaHJlYWQqKTsKKyAgICBib29sIGNv
bnRhaW5zKGNvbnN0IExvY2tIb2xkZXImLCBBdXRvbWF0aWNUaHJlYWQqKTsKKyAgICAKKyAgICBD
b25kaXRpb24gbV9jb25kaXRpb247CisgICAgVmVjdG9yPEF1dG9tYXRpY1RocmVhZCo+IG1fdGhy
ZWFkczsKK307CisKK2NsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBBdXRvbWF0aWNUaHJlYWQgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXV0b21hdGljVGhyZWFkPiB7CitwdWJsaWM6Cisg
ICAgLy8gTm90ZSB0aGF0IGlmIHlvdSBkcm9wIGFsbCBvZiB5b3VyIHJlZmVyZW5jZXMgdG8gYW4g
QXV0b21hdGljVGhyZWFkIHRoZW4gYXMgc29vbiBhcyB0aGVyZSBpcyBhCisgICAgLy8gc2Vjb25k
IGR1cmluZyB3aGljaCBpdCBkb2Vzbid0IGdldCB3b2tlbiB1cCwgaXQgd2lsbCBzaW1wbHkgZGll
IG9uIGl0cyBvd24uCisgICAgdmlydHVhbCB+QXV0b21hdGljVGhyZWFkKCk7CisgICAgCisgICAg
dm9pZCBqb2luKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgLy8gVGhpcyBsb2dpY2FsbHkgY3Jl
YXRlcyB0aGUgdGhyZWFkLCBidXQgaW4gcmVhbGl0eSB0aGUgdGhyZWFkIHdvbid0IGJlIGNyZWF0
ZWQgdW50aWwgc29tZW9uZQorICAgIC8vIGNhbGxzIG5vdGlmeSgpLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBBdXRvbWF0aWNUaHJlYWQoY29uc3QgTG9ja0hvbGRlciYsIEJveDxMb2NrPiwgUmVm
UHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4pOworICAgIAorICAgIC8vIFRvIHVuZGVyc3Rh
bmQgUG9sbFJlc3VsdCBhbmQgV29ya1Jlc3VsdCwgaW1hZ2luZSB0aGF0IHBvbGwoKSBhbmQgd29y
aygpIGFyZSBiZWluZyBjYWxsZWQgbGlrZQorICAgIC8vIHNvOgorICAgIC8vCisgICAgLy8gdm9p
ZCBBdXRvbWF0aWNUaHJlYWQ6OnJ1blRocmVhZCgpCisgICAgLy8geworICAgIC8vICAgICBmb3Ig
KDs7KSB7CisgICAgLy8gICAgICAgICB7CisgICAgLy8gICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAvLyAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgLy8gICAg
ICAgICAgICAgICAgIFBvbGxSZXN1bHQgcmVzdWx0ID0gcG9sbCgpOworICAgIC8vICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IFBvbGxSZXN1bHQ6OldvcmspCisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQ
b2xsUmVzdWx0OjpTdG9wKQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
IC8vICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0gUG9sbFJlc3VsdDo6
V2FpdCk7CisgICAgLy8gICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsK
KyAgICAvLyAgICAgICAgICAgICB9CisgICAgLy8gICAgICAgICB9CisgICAgLy8gICAgICAgICAK
KyAgICAvLyAgICAgICAgIFdvcmtSZXN1bHQgcmVzdWx0ID0gd29yaygpOworICAgIC8vICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpTdG9wKQorICAgIC8vICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAvLyAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0
OjpDb250aW51ZSk7CisgICAgLy8gICAgIH0KKyAgICAvLyB9CisgICAgCisgICAgZW51bSBjbGFz
cyBQb2xsUmVzdWx0IHsgV29yaywgU3RvcCwgV2FpdCB9OworICAgIHZpcnR1YWwgUG9sbFJlc3Vs
dCBwb2xsKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CisgICAgCisgICAgZW51bSBjbGFzcyBXb3Jr
UmVzdWx0IHsgQ29udGludWUsIFN0b3AgfTsKKyAgICB2aXJ0dWFsIFdvcmtSZXN1bHQgd29yaygp
ID0gMDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjsKKyAgICAKKyAgICB2b2lkIHN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICAK
KyAgICBCb3g8TG9jaz4gbV9sb2NrOworICAgIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b24+IG1fY29uZGl0aW9uOworICAgIGJvb2wgbV9pc1J1bm5pbmcgeyB0cnVlIH07CisgICAgQ29u
ZGl0aW9uIG1faXNSdW5uaW5nQ29uZGl0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6QXV0b21hdGljVGhyZWFkOworCisjZW5kaWYgLy8gV1RGX0F1dG9tYXRpY1Ro
cmVhZF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDc0MjQpCisrKyBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcg
QEAgc2V0KFdURl9IRUFERVJTCiAgICAgQVNDSUlDVHlwZS5oCiAgICAgQXNzZXJ0aW9ucy5oCiAg
ICAgQXRvbWljcy5oCisgICAgQXV0b21hdGljVGhyZWFkLmgKICAgICBCYWNrd2FyZHNHcmFwaC5o
CiAgICAgQmFnLmgKICAgICBCYWdUb0hhc2hNYXAuaApAQCAtMTczLDYgKzE3NCw3IEBAIHNldChX
VEZfSEVBREVSUwogc2V0KFdURl9TT1VSQ0VTCiAgICAgQXNzZXJ0aW9ucy5jcHAKICAgICBBdG9t
aWNzLmNwcAorICAgIEF1dG9tYXRpY1RocmVhZC5jcHAKICAgICBCaXRWZWN0b3IuY3BwCiAgICAg
Q29tcGlsYXRpb25UaHJlYWQuY3BwCiAgICAgQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAJKHJldmlzaW9uIDIwNzQyNCkKKysrIFNv
dXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhcmFsbGVsSGVscGVyUG9v
bC5oIgogCisjaW5jbHVkZSAiQXV0b21hdGljVGhyZWFkLmgiCiAjaW5jbHVkZSAiRGF0YUxvZy5o
IgogI2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCiAKQEAgLTM0LDE0ICszNSwxNCBAQCBu
YW1lc3BhY2UgV1RGIHsKIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpQYXJhbGxlbEhlbHBlckNsaWVu
dChSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPiBwb29sKQogICAgIDogbV9wb29sKHBvb2wpCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCptX3Bvb2wtPm1fbG9jayk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcG9vbC0+bV9p
c0R5aW5nKTsKICAgICBtX3Bvb2wtPm1fY2xpZW50cy5hcHBlbmQodGhpcyk7CiB9CiAKIFBhcmFs
bGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGllbnQoKQogewotICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9wb29s
LT5tX2xvY2spOwogICAgIGZpbmlzaChsb2NrZXIpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3Bvb2wtPm1fY2xpZW50cy5zaXplKCk7ICsraSkgewpAQCAtNTUsNyArNTYsNyBAQCBQ
YXJhbGxlbEhlbHBlckNsaWVudDo6flBhcmFsbGVsSGVscGVyQ2xpCiAKIHZvaWQgUGFyYWxsZWxI
ZWxwZXJDbGllbnQ6OnNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCAoKT4+IHRhc2spCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgIExvY2tIb2xkZXIg
bG9ja2VyKCptX3Bvb2wtPm1fbG9jayk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGFzayk7CiAg
ICAgbV90YXNrID0gdGFzazsKICAgICBtX3Bvb2wtPmRpZE1ha2VXb3JrQXZhaWxhYmxlKGxvY2tl
cik7CkBAIC02Myw3ICs2NCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldFRhc2so
UmVmUHQKIAogdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNoKCkKIHsKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
cG9vbC0+bV9sb2NrKTsKICAgICBmaW5pc2gobG9ja2VyKTsKIH0KIApAQCAtNzEsNyArNzIsNyBA
QCB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nCiB7CiAgICAgUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCAoKT4+IHRhc2s7CiAgICAgewotICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX3Bvb2wt
Pm1fbG9jayk7CiAgICAgICAgIHRhc2sgPSBjbGFpbVRhc2sobG9ja2VyKTsKICAgICAgICAgaWYg
KCF0YXNrKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTEsNyArOTIsNyBAQCB2b2lkIFBhcmFs
bGVsSGVscGVyQ2xpZW50OjpmaW5pc2goY29uc3QgCiB7CiAgICAgbV90YXNrID0gbnVsbHB0cjsK
ICAgICB3aGlsZSAobV9udW1BY3RpdmUpCi0gICAgICAgIG1fcG9vbC0+bV93b3JrQ29tcGxldGVD
b25kaXRpb24ud2FpdChtX3Bvb2wtPm1fbG9jayk7CisgICAgICAgIG1fcG9vbC0+bV93b3JrQ29t
cGxldGVDb25kaXRpb24ud2FpdCgqbV9wb29sLT5tX2xvY2spOwogfQogCiBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkICgpPj4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayhjb25zdCBMb2Nr
SG9sZGVyJikKQEAgLTExMSw3ICsxMTIsNyBAQCB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpy
dW5UYXNrKFJlZlB0CiAgICAgdGFzay0+cnVuKCk7CiAKICAgICB7Ci0gICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
cG9vbC0+bV9sb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOwogICAg
ICAgICAvLyBObyBuZXcgdGFzayBjb3VsZCBoYXZlIGJlZW4gaW5zdGFsbGVkLCBzaW5jZSB3ZSB3
ZXJlIHN0aWxsIGFjdGl2ZS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGFzayB8fCBtX3Rh
c2sgPT0gdGFzayk7CkBAIC0xMjMsNiArMTI0LDggQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVu
dDo6cnVuVGFzayhSZWZQdAogfQogCiBQYXJhbGxlbEhlbHBlclBvb2w6OlBhcmFsbGVsSGVscGVy
UG9vbCgpCisgICAgOiBtX2xvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKKyAgICAsIG1fd29ya0F2
YWlsYWJsZUNvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQogewog
fQogCkBAIC0xMzEsMTggKzEzNCwxOCBAQCBQYXJhbGxlbEhlbHBlclBvb2w6On5QYXJhbGxlbEhl
bHBlclBvb2woCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jbGllbnRzLmlzRW1wdHkoKSk7CiAgICAg
CiAgICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKICAgICAgICAgbV9pc0R5aW5nID0gdHJ1ZTsKLSAgICAg
ICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgICAgICBtX3dvcmtB
dmFpbGFibGVDb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwogICAgIH0KIAotICAgIGZvciAo
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogbV90aHJlYWRzKQotICAgICAgICB3
YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKKyAgICBmb3IgKFJlZlB0
cjxBdXRvbWF0aWNUaHJlYWQ+JiB0aHJlYWQgOiBtX3RocmVhZHMpCisgICAgICAgIHRocmVhZC0+
am9pbigpOwogfQogCiB2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZW5zdXJlVGhyZWFkcyh1bnNp
Z25lZCBudW1UaHJlYWRzKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgaWYgKG51bVRocmVhZHMgPCBtX251bVRo
cmVhZHMpCiAgICAgICAgIHJldHVybjsKICAgICBtX251bVRocmVhZHMgPSBudW1UaHJlYWRzOwpA
QCAtMTU1LDcgKzE1OCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5n
KCkKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OwogICAgIFJlZlB0cjxTaGFyZWRU
YXNrPHZvaWQgKCk+PiB0YXNrOwogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIGNsaWVu
dCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7CiAgICAgICAgIGlmICghY2xpZW50KQogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMTY1LDM4ICsxNjgsNDYgQEAgdm9pZCBQYXJhbGxlbEhlbHBl
clBvb2w6OmRvU29tZUhlbHBpbmcoKQogICAgIGNsaWVudC0+cnVuVGFzayh0YXNrKTsKIH0KIAot
dm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmRpZE1ha2VXb3JrQXZhaWxhYmxlKGNvbnN0IExvY2tI
b2xkZXImKQotewotICAgIHdoaWxlIChtX251bVRocmVhZHMgPiBtX3RocmVhZHMuc2l6ZSgpKSB7
Ci0gICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVh
ZCgKLSAgICAgICAgICAgICJXVEYgUGFyYWxsZWwgSGVscGVyIFRocmVhZCIsCi0gICAgICAgICAg
ICBbdGhpc10gKCkgewotICAgICAgICAgICAgICAgIGhlbHBlclRocmVhZEJvZHkoKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICBtX3RocmVhZHMuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOwot
ICAgIH0KLSAgICBtX3dvcmtBdmFpbGFibGVDb25kaXRpb24ubm90aWZ5QWxsKCk7Ci19Ci0KLXZv
aWQgUGFyYWxsZWxIZWxwZXJQb29sOjpoZWxwZXJUaHJlYWRCb2R5KCkKLXsKLSAgICBmb3IgKDs7
KSB7Ci0gICAgICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgICAgIFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQgKCk+PiB0YXNrOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgICAgICBjbGllbnQgPSB3YWl0Rm9yQ2xp
ZW50V2l0aFRhc2sobG9ja2VyKTsKLSAgICAgICAgICAgIGlmICghY2xpZW50KSB7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pc0R5aW5nKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhc2sgPSBjbGllbnQtPmNsYWltVGFz
ayhsb2NrZXIpOworY2xhc3MgUGFyYWxsZWxIZWxwZXJQb29sOjpUaHJlYWQgOiBwdWJsaWMgQXV0
b21hdGljVGhyZWFkIHsKK3B1YmxpYzoKKyAgICBUaHJlYWQoY29uc3QgTG9ja0hvbGRlciYgbG9j
a2VyLCBQYXJhbGxlbEhlbHBlclBvb2wmIHBvb2wpCisgICAgICAgIDogQXV0b21hdGljVGhyZWFk
KGxvY2tlciwgcG9vbC5tX2xvY2ssIHBvb2wubV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uKQorICAg
ICAgICAsIG1fcG9vbChwb29sKQorICAgIHsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
UG9sbFJlc3VsdCBwb2xsKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX3Bvb2wubV9pc0R5aW5nKQorICAgICAgICAgICAgcmV0dXJuIFBvbGxS
ZXN1bHQ6OlN0b3A7CisgICAgICAgIG1fY2xpZW50ID0gbV9wb29sLmdldENsaWVudFdpdGhUYXNr
KGxvY2tlcik7CisgICAgICAgIGlmIChtX2NsaWVudCkgeworICAgICAgICAgICAgbV90YXNrID0g
bV9jbGllbnQtPmNsYWltVGFzayhsb2NrZXIpOworICAgICAgICAgICAgcmV0dXJuIFBvbGxSZXN1
bHQ6Oldvcms7CiAgICAgICAgIH0KLQotICAgICAgICBjbGllbnQtPnJ1blRhc2sodGFzayk7Cisg
ICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpXYWl0OworICAgIH0KKyAgICAKKyAgICBXb3JrUmVz
dWx0IHdvcmsoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9jbGllbnQtPnJ1blRhc2sobV90
YXNrKTsKKyAgICAgICAgbV9jbGllbnQgPSBudWxscHRyOworICAgICAgICBtX3Rhc2sgPSBudWxs
cHRyOworICAgICAgICByZXR1cm4gV29ya1Jlc3VsdDo6Q29udGludWU7CiAgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBQYXJhbGxlbEhlbHBlclBvb2wmIG1fcG9vbDsKKyAgICBQYXJhbGxlbEhl
bHBlckNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCAoKT4+IG1fdGFzazsKK307CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkaWRNYWtl
V29ya0F2YWlsYWJsZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCit7CisgICAgd2hpbGUgKG1f
bnVtVGhyZWFkcyA+IG1fdGhyZWFkcy5zaXplKCkpCisgICAgICAgIG1fdGhyZWFkcy5hcHBlbmQo
YWRvcHRSZWYobmV3IFRocmVhZChsb2NrZXIsICp0aGlzKSkpOworICAgIG1fd29ya0F2YWlsYWJs
ZUNvbmRpdGlvbi0+bm90aWZ5QWxsKGxvY2tlcik7CiB9CiAKIGJvb2wgUGFyYWxsZWxIZWxwZXJQ
b29sOjpoYXNDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCkBAIC0yMjIs
MjAgKzIzMyw1IEBAIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBQYXJhbGxlbEhlbHBlclBvb2wKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUGFyYWxsZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVsSGVs
cGVyUG9vbDo6d2FpdEZvckNsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikK
LXsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIC8vIEl0IG1pZ2h0IGJlIHF1aXR0aW4nIHRpbWUu
Ci0gICAgICAgIGlmIChtX2lzRHlpbmcpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBpZiAoUGFyYWxsZWxIZWxwZXJDbGllbnQqIHJlc3VsdCA9IGdldENsaWVudFdpdGhU
YXNrKGxvY2tlcikpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIC8vIFdh
aXQgdW50aWwgd29yayBiZWNvbWVzIGF2YWlsYWJsZS4KLSAgICAgICAgbV93b3JrQXZhaWxhYmxl
Q29uZGl0aW9uLndhaXQobV9sb2NrKTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgog
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkocmV2aXNpb24gMjA3NDI0KQor
KysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBQYXJhbGxlbEhlbHBlclBvb2xfaAogI2RlZmluZSBQYXJhbGxl
bEhlbHBlclBvb2xfaAogCisjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9Db25k
aXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
QEAgLTM3LDYgKzM4LDkgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK2NsYXNzIEF1dG9tYXRpY1Ro
cmVhZDsKK2NsYXNzIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjsKKwogLy8gQSBQYXJhbGxlbEhl
bHBlclBvb2wgaXMgYSBzaGFyZWQgcG9vbCBvZiB0aHJlYWRzIHRoYXQgY2FuIGJlIGFza2VkIHRv
IGhlbHAgd2l0aCBzb21lIGZpbml0ZS10aW1lCiAvLyBwYXJhbGxlbCBhY3Rpdml0eS4gSXQncyBk
ZXNpZ25lZCB0byB3b3JrIHdlbGwgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgY29uY3VycmVudCB0
YXNrcyB0aGF0IG1heQogLy8gYWxsIHdhbnQgcGFyYWxsZWwgaGVscC4gSW4gdGhhdCBjYXNlLCB3
ZSBkb24ndCB3YW50IGVhY2ggdGFzayB0byBzdGFydCBpdHMgb3duIHRocmVhZCBwb29sLiBJdCdz
CkBAIC0xODYsMjIgKzE5MCwyMyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50OworICAgIGNsYXNzIFRocmVhZDsKKyAgICBmcmllbmQg
Y2xhc3MgVGhyZWFkOwogCiAgICAgdm9pZCBkaWRNYWtlV29ya0F2YWlsYWJsZShjb25zdCBMb2Nr
SG9sZGVyJik7Ci0gICAgdm9pZCBoZWxwZXJUaHJlYWRCb2R5KCk7CiAKICAgICBib29sIGhhc0Ns
aWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICBQYXJhbGxlbEhlbHBlckNsaWVu
dCogZ2V0Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOwogICAgIFBhcmFsbGVsSGVs
cGVyQ2xpZW50KiB3YWl0Rm9yQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOwogICAg
IAotICAgIExvY2sgbV9sb2NrOwotICAgIENvbmRpdGlvbiBtX3dvcmtBdmFpbGFibGVDb25kaXRp
b247CisgICAgQm94PExvY2s+IG1fbG9jazsgLy8gQXV0b21hdGljVGhyZWFkIHdhbnRzIHRoaXMg
aW4gYSBib3ggZm9yIHNhZmV0eS4KKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9u
PiBtX3dvcmtBdmFpbGFibGVDb25kaXRpb247CiAgICAgQ29uZGl0aW9uIG1fd29ya0NvbXBsZXRl
Q29uZGl0aW9uOwogCiAgICAgV2Vha1JhbmRvbSBtX3JhbmRvbTsKICAgICAKICAgICBWZWN0b3I8
UGFyYWxsZWxIZWxwZXJDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgVmVjdG9yPFRocmVhZElkZW50
aWZpZXI+IG1fdGhyZWFkczsKKyAgICBWZWN0b3I8UmVmUHRyPEF1dG9tYXRpY1RocmVhZD4+IG1f
dGhyZWFkczsKICAgICB1bnNpZ25lZCBtX251bVRocmVhZHMgeyAwIH07IC8vIFRoaXMgY2FuIGJl
IGxhcmdlciB0aGFuIG1fdGhyZWFkcy5zaXplKCkgYmVjYXVzZSB3ZSBzdGFydCB0aHJlYWRzIG9u
bHkgb25jZSB0aGVyZSBpcyB3b3JrLgogICAgIGJvb2wgbV9pc0R5aW5nIHsgZmFsc2UgfTsKIH07
Cg==
</data>
<flag name="review"
          id="315070"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291967</attachid>
            <date>2016-10-18 12:23:52 -0700</date>
            <delta_ts>2016-10-18 12:24:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32384</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3NDc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE2LTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBtYWtlIGl0IGVhc2llciB0byBjcmVhdGUgdGhyZWFkcyB0aGF0IGRpZSBhdXRv
bWF0aWNhbGx5IGFmdGVyIGluYWN0aXZpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MzU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMg
S2xpbmcuCisgICAgICAgIAorICAgICAgICBBZGRlZCBhIHNsZWVwU2Vjb25kcygpIGZ1bmN0aW9u
LCB3aGljaCBtYWRlIGl0IGVhc2llciBmb3IgbWUgdG8gdGVzdCB0aGlzIGNoYW5nZS4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBXVEYgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIGNoYW5nZSBob3cgdGhl
IEpTQyBHQyBtYW5hZ2VzIHRocmVhZHM6IHRoZSBHQyB0aHJlYWRzIHdpbGwgbm93CisgICAgICAg
IHNodXQgZG93biBhdXRvbWF0aWNhbGx5IGFmdGVyIDEgc2Vjb25kIG9mIGluYWN0aXZpdHkuIE1h
eWJlIHRoaXMgd2lsbCBzYXZlIHNvbWUgbWVtb3J5LgorCisgICAgICAgICoganNjLmNwcDoKKyAg
ICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoZnVuY3Rpb25T
bGVlcFNlY29uZHMpOgorCiAyMDE2LTEwLTE4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIENsZWFudXAgV2FzbSBtZW1vcnkuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcAkocmV2aXNpb24gMjA3NDc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Myw2ICs4NDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmVBcnJheShFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2xlZXBTZWNvbmRz
KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25KU0NTdGFjayhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uR0NBbmRTd2VlcChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRnVsbEdDKEV4ZWNTdGF0ZSopOwpAQCAtMTA2Nyw2ICsx
MDY4LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInJlYWRGaWxlIiwg
ZnVuY3Rpb25SZWFkRmlsZSwgMik7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAicmVhZCIsIGZ1
bmN0aW9uUmVhZEZpbGUsIDIpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNoZWNrU3ludGF4
IiwgZnVuY3Rpb25DaGVja1N5bnRheCwgMSk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2xl
ZXBTZWNvbmRzIiwgZnVuY3Rpb25TbGVlcFNlY29uZHMsIDEpOwogICAgICAgICBhZGRGdW5jdGlv
bih2bSwgImpzY1N0YWNrIiwgZnVuY3Rpb25KU0NTdGFjaywgMSk7CiAgICAgICAgIGFkZEZ1bmN0
aW9uKHZtLCAicmVhZGxpbmUiLCBmdW5jdGlvblJlYWRsaW5lLCAwKTsKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJwcmVjaXNlVGltZSIsIGZ1bmN0aW9uUHJlY2lzZVRpbWUsIDApOwpAQCAtMTQ5
Myw2ICsxNDk1LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZXMK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCB0b1N0
cmluZygiPEJ1dHRlcmZseTogIiwgUmF3UG9pbnRlcihvYmplY3QtPmJ1dHRlcmZseSgpKSwgIjsg
cHVibGljIGxlbmd0aDogIiwgb2JqZWN0LT5nZXRBcnJheUxlbmd0aCgpLCAiOyB2ZWN0b3IgbGVu
Z3RoOiAiLCBvYmplY3QtPmdldFZlY3Rvckxlbmd0aCgpLCAiPiIpKSk7CiB9CiAKK0VuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TbGVlcFNlY29uZHMoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMSkKKyAgICAgICAgc2xlZXAo
ZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIGNsYXNzIEZ1bmN0aW9uSlNDU3RhY2tGdW5jdG9y
IHsKIHB1YmxpYzoKICAgICBGdW5jdGlvbkpTQ1N0YWNrRnVuY3RvcihTdHJpbmdCdWlsZGVyJiB0
cmFjZSkKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDc0NzYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE2LTEwLTE4ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgV1RGIHNob3VsZCBtYWtlIGl0IGVhc2llciB0
byBjcmVhdGUgdGhyZWFkcyB0aGF0IGRpZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGluYWN0aXZpdHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzU3Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCisgICAgICAgIAorICAgICAgICBG
b3IgYSBsb25nIHRpbWUgbm93LCBJJ3ZlIGJlZW4gYWRkaW5nIHRocmVhZHMgdG8gV1RGL0pTQyBh
bmQgZWFjaCB0aW1lIEkgZG8gdGhpcywgSSBmZWVsCisgICAgICAgIGd1aWx0eSBiZWNhdXNlIHRo
b3NlIHRocmVhZHMgZG9uJ3Qgc2h1dCBkb3duIHdoZW4gdGhleSBhcmUgaW5hY3RpdmUuIEZvciBl
eGFtcGxlLCBpbiBidWcKKyAgICAgICAgMTYzNTYyLCBJIG5lZWQgdG8gYWRkIGEgbmV3IEdDIHRo
cmVhZC4gVGhlcmUgd2lsbCBiZSBvbmUgb2YgdGhlbSBwZXIgVk0uIFRoaXMgbWVhbnMgdGhhdCBh
CisgICAgICAgIEpTQyBBUEkgY2xpZW50IHRoYXQgc3RhcnRzIGEgbG90IG9mIFZNcyB3aWxsIGhh
dmUgYSBsb3Qgb2YgdGhyZWFkcy4gSSBkb24ndCB0aGluayB0aGF0J3MKKyAgICAgICAgZ29vZC4K
KyAgICAgICAgCisgICAgICAgIEEgY29tbW9uIHBhdHRlcm4gZm9yIGFsbCBvZiB0aGVzZSB0aHJl
YWRzIGlzIHRoYXQgdGhleSBoYXZlIHNvbWUgd2VsbC1kZWZpbmVkIHRyaWdnZXIgdGhhdAorICAg
ICAgICBjYXVzZXMgdGhlbSB0byBydW4uIFRoaXMgdHJpZ2dlciBoYXMgYSBsb2NrLCBhIGNvbmRp
dGlvbiB2YXJpYWJsZSwgc29tZSBsb2dpYyB0aGF0IGRldGVybWluZXMKKyAgICAgICAgaWYgdGhl
cmUgaXMgd29yayB0byBkbywgYW5kIHRoZW4gb2YgY291cnNlIHRoZSBsb2dpYyBmb3IgdGhlIHRo
cmVhZCdzIGFjdHVhbCB3b3JrLiBUaGUgdGhyZWFkCisgICAgICAgIGJvZGllcyB1c3VhbGx5IGxv
b2sgbGlrZSB0aGlzOgorICAgICAgICAKKyAgICAgICAgdm9pZCBUaGluZ3k6OnJ1blRocmVhZCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBXb3Jr
IHdvcms7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWhhc1dvcmsoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZC53YWl0KG1fbG9jayk7CisgICAgICAgICAg
ICAgICAgICAgIHdvcmsgPSB0YWtlV29yaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBkb1dvcmsod29yayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIElmIHlvdSBsb29rIGF0IFBhcmFsbGVsSGVscGVyUG9vbCAodGhlIEdDJ3MgdGhy
ZWFkcykgYW5kIERGRzo6V29ya2xpc3QgKHNvbWUgb2YgdGhlIEpJVCdzCisgICAgICAgIHRocmVh
ZHMpLCB5b3Ugd2lsbCBzZWUgdGhpcyBwYXR0ZXJuLgorICAgICAgICAKKyAgICAgICAgVGhpcyBj
aGFuZ2UgYWRkcyBhIG5ldyBraW5kIG9mIHRocmVhZCwgY2FsbGVkIEF1dG9tYXRpY1RocmVhZCwg
dGhhdCBsZXRzIHlvdSB3cml0ZSB0aHJlYWRzIHRvCisgICAgICAgIHRoaXMgcGF0dGVybiB3aGls
ZSBnZXR0aW5nIGF1dG9tYXRpYyB0aHJlYWQgc2h1dGRvd24gZm9yIGZyZWU6IGluc3RlYWQgb2Yg
anVzdCB3YWl0aW5nIG9uIGEKKyAgICAgICAgY29uZGl0aW9uIHZhcmlhYmxlLCBBdXRvbWF0aWNU
aHJlYWQgd2lsbCBoYXZlIGEgdGltZW91dCB0aGF0IGNhdXNlcyB0aGUgdGhyZWFkIHRvIGRpZS4g
VGhlCisgICAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggQXV0b21hdGlj
VGhyZWFkLCBjYWxsZWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uLCBpcyBzbWFydAorICAgICAg
ICBlbm91Z2ggdG8gcmVzdGFydCBhbnkgdGhyZWFkcyB0aGF0IGhhdmUgZGVjaWRlZCB0byBzdG9w
IGR1ZSB0byBpbmFjdGl2aXR5LiBUaGUgaW5hY3Rpdml0eQorICAgICAgICB0aHJlc2hvbGQgaXMg
Y3VycmVudCBqdXN0IDEgc2Vjb25kLgorICAgICAgICAKKyAgICAgICAgSW4gdGhpcyBwYXRjaCBJ
IG9ubHkgYWRvcHQgQXV0b21hdGljVGhyZWFkIGZvciBQYXJhbGxlbEhlbHBlclBvb2wuIEkgcGxh
biB0byBhZG9wdCBpdCBpbiBtb3JlCisgICAgICAgIHBsYWNlcyBzb29uLgorCisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1Ro
cmVhZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6QXV0b21h
dGljVGhyZWFkQ29uZGl0aW9uKToKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkQ29uZGl0
aW9uOjp+QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uKToKKyAgICAgICAgKFdURjo6QXV0b21hdGlj
VGhyZWFkQ29uZGl0aW9uOjpub3RpZnlBbGwpOgorICAgICAgICAoV1RGOjpBdXRvbWF0aWNUaHJl
YWRDb25kaXRpb246OmFkZCk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjb250
YWlucyk6CisgICAgICAgIChXVEY6OkF1dG9tYXRpY1RocmVhZDo6QXV0b21hdGljVGhyZWFkKToK
KyAgICAgICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjp+QXV0b21hdGljVGhyZWFkKToKKyAgICAg
ICAgKFdURjo6QXV0b21hdGljVGhyZWFkOjpqb2luKToKKyAgICAgICAgKFdURjo6QXV0b21hdGlj
VGhyZWFkOjpzdGFydCk6CisgICAgICAgICogd3RmL0F1dG9tYXRpY1RocmVhZC5oOiBBZGRlZC4K
KyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL1BhcmFsbGVsSGVs
cGVyUG9vbC5jcHA6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpQYXJhbGxl
bEhlbHBlckNsaWVudCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFy
YWxsZWxIZWxwZXJDbGllbnQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6
c2V0VGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2gpOgor
ICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZyk6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKToKKyAgICAgICAgKFdURjo6
UGFyYWxsZWxIZWxwZXJQb29sOjpQYXJhbGxlbEhlbHBlclBvb2wpOgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEhlbHBlclBvb2w6On5QYXJhbGxlbEhlbHBlclBvb2wpOgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEhlbHBlclBvb2w6OmVuc3VyZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEhlbHBlclBvb2w6OmRvU29tZUhlbHBpbmcpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBl
clBvb2w6OlRocmVhZDo6VGhyZWFkKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29s
OjpkaWRNYWtlV29ya0F2YWlsYWJsZSk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9v
bDo6aGVscGVyVGhyZWFkQm9keSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVs
cGVyUG9vbDo6d2FpdEZvckNsaWVudFdpdGhUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
UGFyYWxsZWxIZWxwZXJQb29sLmg6CisKIDIwMTYtMTAtMTggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBTVkdDU1NQYXJzZXI6IG1faW1wbGlj
aXRTaG9ydGhhbmQgdmFsdWUgaXMgbm90IHJlc2V0IGFmdGVyIGFkZGluZyB0aGUgc2hvcnRoYW5k
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIwNzQ3NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKIAkJMEYyQjY2QTYxN0I2QjRG
QjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9OwogCQkwRjM1
MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdl
YWtSYW5kb20uaCAqLzsgfTsKKwkJMEY0M0Q4RjExREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRp
Y1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQzRDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCAqLzsgfTsK
KwkJMEY0M0Q4RjIxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0M0Q4RjAxREI1QUREQzAw
MTA4RkI2IC8qIEF1dG9tYXRpY1RocmVhZC5oICovOyB9OwogCQkwRjQ1NzA0MzFCRTVCNThGMDA2
MkE2MjkgLyogRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8qIERvbWluYXRvcnMuaCAqLzsg
fTsKIAkJMEY0NTcwNDUxQkU4MzQ0MTAwNjJBNjI5IC8qIEJ1YmJsZVNvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDU3MDQ0MUJFODM0NDEwMDYy
QTYyOSAvKiBCdWJibGVTb3J0LmggKi87IH07CiAJCTBGNzI1Q0FDMUM1MDQ2MTYwMEFEOTQzQSAv
KiBSYW5nZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MjVDQUIxQzUwNDYxNjAwQUQ5NDNBIC8qIFJhbmdlU2V0LmggKi87IH07CkBAIC0zNjYs
NiArMzY4LDggQEAKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM1MDE2MzFCQjI1
OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWFrUmFuZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDNEOEVG
MURCNUFEREMwMDEwOEZCNiAvKiBBdXRvbWF0aWNUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQXV0b21hdGljVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY0M0Q4RjAxREI1QUREQzAwMTA4RkI2IC8qIEF1dG9tYXRpY1RocmVh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRvbWF0aWNUaHJlYWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NTcwNDIxQkU1QjU4RjAwNjJBNjI5IC8q
IERvbWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRG9taW5hdG9y
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ1NzA0NDFCRTgzNDQxMDA2MkE2
MjkgLyogQnViYmxlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWJi
bGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzI1Q0FCMUM1MDQ2MTYw
MEFEOTQzQSAvKiBSYW5nZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
YW5nZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM5LDYgKzg0Myw4IEBA
CiAJCQkJQThBNDcyNUQxNTFBODI1QTAwNDEyM0ZGIC8qIEF0b21pY3MuaCAqLywKIAkJCQkxNDY5
NDE5QTE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmggKi8sCiAJCQkJMTQ2OTQx
OUIxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1hYy5tbSAqLywKKwkJCQkwRjQz
RDhFRjFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCAqLywKKwkJCQkwRjQz
RDhGMDFEQjVBRERDMDAxMDhGQjYgLyogQXV0b21hdGljVGhyZWFkLmggKi8sCiAJCQkJRENFRTIy
MDQxQ0VCOTg2OTAwMEMyMzk2IC8qIEJhY2t3YXJkc0dyYXBoLmggKi8sCiAJCQkJMEZCMTRFMTgx
ODBGQTIxODAwOUI2QjREIC8qIEJhZy5oICovLAogCQkJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0
RCAvKiBCYWdUb0hhc2hNYXAuaCAqLywKQEAgLTEzMzAsNiArMTMzNiw3IEBACiAJCQkJMjYxNDdC
MEExNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDREQ3RkY4MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3Jz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGQTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0
b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0M0Q4RjIxREI1QUREQzAwMTA4RkI2IC8q
IEF1dG9tYXRpY1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBQzkxQTgxODk0MkZDNDAw
MjQ0OTM5IC8qIExDaGFyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzlFQjA2MzFENTUyODQyMDBD
ODJFRjcgLyogTEVCRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0
RDAwNTI5QTlCIC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAqLywKQEAgLTE2MzQsNiArMTY0MSw3
IEBACiAJCQkJQTVCQTE1RjMxODI0MzNBOTAwQTgyRTY5IC8qIFN0cmluZ01hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVh
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0MzE1MUE4MjVCMDA0MTIzRkYgLyogU3Ry
aW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjQzRDhGMTFEQjVBRERDMDAxMDhG
QjYgLyogQXV0b21hdGljVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5OTNFMTlE
Nzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0
QkQ1MThBMUYxNjkwMEQwRDZBMSAvKiBTdHJpbmdWaWV3Q0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTM5MzRCRDMxOEExRThDMzAwRDBENkExIC8qIFN0cmluZ1ZpZXdPYmpDLm1tIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXV0b21hdGljVGhyZWFkLmgiCisK
KyNpbmNsdWRlICJEYXRhTG9nLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisKK1JlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+
IEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbigpKTsKK30KKworQXV0b21hdGljVGhyZWFk
Q29uZGl0aW9uOjpBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKQoreworfQorCitBdXRvbWF0aWNU
aHJlYWRDb25kaXRpb246On5BdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKQoreworfQorCit2b2lk
IEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5QWxsKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlcikKK3sKKyAgICBtX2NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAKKyAgICBmb3IgKEF1
dG9tYXRpY1RocmVhZCogdGhyZWFkIDogbV90aHJlYWRzKQorICAgICAgICB0aHJlYWQtPnN0YXJ0
KGxvY2tlcik7CisgICAgbV90aHJlYWRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgQXV0b21hdGljVGhy
ZWFkQ29uZGl0aW9uOjphZGQoY29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCogdGhy
ZWFkKQoreworICAgIEFTU0VSVCghbV90aHJlYWRzLmNvbnRhaW5zKHRocmVhZCkpOworICAgIG1f
dGhyZWFkcy5hcHBlbmQodGhyZWFkKTsKK30KKwordm9pZCBBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OnJlbW92ZShjb25zdCBMb2NrSG9sZGVyJiwgQXV0b21hdGljVGhyZWFkKiB0aHJlYWQpCit7
CisgICAgQVNTRVJUKG1fdGhyZWFkcy5jb250YWlucyh0aHJlYWQpKTsKKyAgICBtX3RocmVhZHMu
cmVtb3ZlRmlyc3QodGhyZWFkKTsKKyAgICBBU1NFUlQoIW1fdGhyZWFkcy5jb250YWlucyh0aHJl
YWQpKTsKK30KKworYm9vbCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNvbnRhaW5zKGNvbnN0
IExvY2tIb2xkZXImLCBBdXRvbWF0aWNUaHJlYWQqIHRocmVhZCkKK3sKKyAgICByZXR1cm4gbV90
aHJlYWRzLmNvbnRhaW5zKHRocmVhZCk7Cit9CisKK0F1dG9tYXRpY1RocmVhZDo6QXV0b21hdGlj
VGhyZWFkKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxB
dXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbikKKyAgICA6IG1fbG9jayhsb2NrKQor
ICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKQoreworICAgIG1fY29uZGl0aW9uLT5hZGQobG9j
a2VyLCB0aGlzKTsKK30KKworQXV0b21hdGljVGhyZWFkOjp+QXV0b21hdGljVGhyZWFkKCkKK3sK
KyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAKKyAgICAvLyBJdCdzIHBvc3Np
YmxlIHRoYXQgd2UncmUgaW4gYSB3YWl0aW5nIHN0YXRlIHdpdGggdGhlIHRocmVhZCBzaHV0IGRv
d24uIFRoaXMgaXMgYSBnb29meSB3YXkgdG8KKyAgICAvLyBkaWUsIGJ1dCBpdCBjb3VsZCBoYXBw
ZW4uCisgICAgbV9jb25kaXRpb24tPnJlbW92ZShsb2NrZXIsIHRoaXMpOworfQorCit2b2lkIEF1
dG9tYXRpY1RocmVhZDo6am9pbigpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7
CisgICAgd2hpbGUgKG1faXNSdW5uaW5nKQorICAgICAgICBtX2lzUnVubmluZ0NvbmRpdGlvbi53
YWl0KCptX2xvY2spOworfQorCit2b2lkIEF1dG9tYXRpY1RocmVhZDo6c3RhcnQoY29uc3QgTG9j
a0hvbGRlciYpCit7CisgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZD4gcHJlc2VydmVUaGlzRm9y
VGhyZWFkID0gdGhpczsKKyAgICAKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZCA9IGNyZWF0
ZVRocmVhZCgKKyAgICAgICAgIldURjo6QXV0b21hdGljVGhyZWFkIiwKKyAgICAgICAgWz1dICgp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlJ1
bm5pbmcgYXV0b21hdGljIHRocmVhZCFcbiIpOworICAgICAgICAgICAgUmVmUHRyPEF1dG9tYXRp
Y1RocmVhZD4gcHJlc2VydmVUaGlzSW5UaHJlYWQgPSBwcmVzZXJ2ZVRoaXNGb3JUaHJlYWQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcigqbV9sb2NrKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fY29uZGl0aW9uLT5jb250
YWlucyhsb2NrZXIsIHRoaXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYXV0byBzdG9wID0gWyZdIChjb25zdCBMb2NrSG9sZGVyJikgeworICAgICAgICAgICAg
ICAgIG1faXNSdW5uaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbV9pc1J1bm5pbmdDb25k
aXRpb24ubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgICAgICAgICAgICAgUG9sbFJlc3VsdCByZXN1bHQgPSBwb2xsKGxvY2tl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IFBvbGxSZXN1bHQ6Oldv
cmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IFBvbGxSZXN1bHQ6OlN0b3ApCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0b3AobG9ja2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpXYWl0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFNodXQgdGhlIHRocmVhZCBkb3duIGFmdGVyIG9uZSBzZWNvbmQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZW91dCA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXdva2VuQnlO
b3RpZnkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29uZGl0aW9uLT5tX2NvbmRp
dGlvbi53YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMoKm1fbG9jaywgdGltZW91dCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF3b2tlbkJ5Tm90aWZ5KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkdvaW5nIHRvIHNsZWVwIVxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jb25kaXRpb24tPmFkZChsb2NrZXIsIHRoaXMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBXb3JrUmVzdWx0IHJlc3VsdCA9IHdvcmsoKTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IFdvcmtSZXN1bHQ6OlN0b3ApIHsKKyAgICAgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9w
KGxvY2tlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCA9PSBXb3JrUmVzdWx0OjpDb250aW51ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgIGRldGFjaFRocmVhZCh0aHJlYWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBXVEZfQXV0b21hdGljVGhyZWFkX2gKKyNkZWZpbmUgV1RGX0F1dG9tYXRpY1RocmVhZF9o
CisKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBPZnRlbiwgd2UgY3Jl
YXRlIHRocmVhZHMgdGhhdCBoYXZlIHRoaXMgYXMgdGhlaXIgYm9keToKKy8vCisvLyAgICAgZm9y
ICg7OykgeworLy8gICAgICAgICB7CisvLyAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOworLy8gICAgICAgICAgICAgZm9yICg7OykgeworLy8gIFsxXSAgICAgICAgICAgIHN0
dWZmIHRoYXQgY291bGQgYnJlYWssIHJldHVybiwgb3IgZmFsbCB0aHJvdWdoOworLy8gICAgICAg
ICAgICAgICAgIG1fY29uZGl0aW9uLndhaXQobV9sb2NrKTsKKy8vICAgICAgICAgICAgIH0KKy8v
ICAgICAgICAgfQorLy8gICAgICAgICAKKy8vICBbMl0gICAgZG8gd29yazsKKy8vICAgICB9Cisv
LworLy8gV2hlbiB3ZSBkbyB0aGlzLCB3ZSBkb24ndCBhbHdheXMgZG8gYSBnb29kIGpvYiBvZiBt
YW5hZ2luZyB0aGlzIHRocmVhZCdzIGxpZmV0aW1lLCB3aGljaCBtYXkgbGVhZAorLy8gdG8gdGhp
cyB0aHJlYWQgc2l0dGluZyBhcm91bmQgZXZlbiB3aGVuIGl0IGlzIG5vdCBuZWVkZWQuCisvLwor
Ly8gQXV0b21hdGljVGhyZWFkIGlzIGhlcmUgdG8gaGVscCB5b3UgaW4gdGhlc2Ugc2l0dWF0aW9u
cy4gSXQgZW5jYXBzdWxhdGVzIGEgbG9jaywgYSBjb25kaXRpb24KKy8vIHZhcmlhYmxlLCBhbmQg
YSB0aHJlYWQuIEl0IHdpbGwgYXV0b21hdGljYWxseSBzaHV0IHRoZSB0aHJlYWQgZG93biBhZnRl
ciAxIHNlY29uZCBvZiBpbmFjdGl2aXR5LgorLy8gWW91IHVzZSBBdXRvbWF0aWNUaHJlYWQgYnkg
c3ViY2xhc3NpbmcgaXQsIGFuZCBwdXQgYW55IHN0YXRlIHRoYXQgaXMgbmVlZGVkIGJldHdlZW4g
WzFdIGFuZCBbMl0KKy8vIGluIHRoZSBzdWJjbGFzcy4KKy8vCisvLyBUaGUgdGVybWlub2xvZ3kg
d2UgdXNlIGlzOgorLy8KKy8vIFsxXSBQb2xsUmVzdWx0IEF1dG9tYXRpY1RocmVhZDo6cG9sbCgp
CisvLyBbMl0gV29yZFJlc3VsdCBBdXRvbWF0aWNUaHJlYWQ6OndvcmsoKQorLy8KKy8vIE5vdGUg
dGhhdCBwb2xsKCkgYW5kIHdvcmsoKSBtYXkgbm90IGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0aHJl
YWQgZXZlcnkgdGltZSwgc2luY2UgdGhpcyB3aWxsIHNodXQKKy8vIGRvd24gdGhlIHRocmVhZCBh
cyBuZWNlc3NhcnkuIFRoaXMgaXMgbGVnYWwgc2luY2UgbV9jb25kaXRpb24ud2FpdChtX2xvY2sp
IGNhbiBkcm9wIHRoZSBsb2NrLCBhbmQKKy8vIHNvIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBrZWVw
IHRoZSB0aHJlYWQgYXJvdW5kLgorCitjbGFzcyBBdXRvbWF0aWNUaHJlYWQ7CisKK2NsYXNzIEF1
dG9tYXRpY1RocmVhZENvbmRpdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdXRv
bWF0aWNUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIFJl
ZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNyZWF0ZSgpOworICAgIAorICAgIFdURl9F
WFBPUlRfUFJJVkFURSB+QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uKCk7CisgICAgCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5QWxsKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEF1dG9tYXRpY1RocmVhZDsKKyAgICAKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uKCk7CisKKyAgICB2b2lk
IGFkZChjb25zdCBMb2NrSG9sZGVyJiwgQXV0b21hdGljVGhyZWFkKik7CisgICAgdm9pZCByZW1v
dmUoY29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCopOworICAgIGJvb2wgY29udGFp
bnMoY29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCopOworICAgIAorICAgIENvbmRp
dGlvbiBtX2NvbmRpdGlvbjsKKyAgICBWZWN0b3I8QXV0b21hdGljVGhyZWFkKj4gbV90aHJlYWRz
OworfTsKKworY2xhc3MgV1RGX0VYUE9SVF9QUklWQVRFIEF1dG9tYXRpY1RocmVhZCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdXRvbWF0aWNUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICAv
LyBOb3RlIHRoYXQgaWYgeW91IGRyb3AgYWxsIG9mIHlvdXIgcmVmZXJlbmNlcyB0byBhbiBBdXRv
bWF0aWNUaHJlYWQgdGhlbiBhcyBzb29uIGFzIHRoZXJlIGlzIGEKKyAgICAvLyBzZWNvbmQgZHVy
aW5nIHdoaWNoIGl0IGRvZXNuJ3QgZ2V0IHdva2VuIHVwLCBpdCB3aWxsIHNpbXBseSBkaWUgb24g
aXRzIG93bi4gVGhpcyBpcyBhCisgICAgLy8gcGVybWFuZW50IGtpbmQgb2YgZGVhdGggd2hlcmUg
dGhlIEF1dG9tYXRpY1RocmVhZCBvYmplY3QgZ29lcyBhd2F5LCByYXRoZXIgdGhhbiB0aGUgdGVt
cG9yYXJ5CisgICAgLy8ga2luZCBvZiBkZWF0aCB3aGVyZSBBdXRvbWF0aWNUaHJlYWQgbGl2ZXMg
YnV0IGl0cyB1bmRlcmx5aW5nIHRocmVhZCBkaWVzLiBBbGwgeW91IGhhdmUgdG8gZG8KKyAgICAv
LyB0byBwcmV2ZW50IHBlcm1hbmVudCBkZWF0aCBpcyBrZWVwIGEgcmVmIHRvIEF1dG9tYXRpY1Ro
cmVhZC4gQXQgdGltZSBvZiB3cml0aW5nLCBldmVyeSB1c2VyIG9mCisgICAgLy8gQXV0b21hdGlj
VGhyZWFkIGtlZXBzIGEgcmVmIHRvIGl0IGFuZCBkb2VzIGpvaW4oKSBhcyBwYXJ0IG9mIHRoZSBz
aHV0ZG93biBwcm9jZXNzLCBzbyBvbmx5IHRoZQorICAgIC8vIHRlbXBvcmFyeSBraW5kIG9mIGF1
dG9tYXRpYyBkZWF0aCBoYXBwZW5zIGluIHByYWN0aWNlLiBXZSBrZWVwIHRoZSBwZXJtYW5lbnQg
ZGVhdGggZmVhdHVyZQorICAgIC8vIGJlY2F1c2UgaXQgbGVhZHMgdG8gYW4gZWFzeS10by11bmRl
cnN0YW5kIHJlZmVyZW5jZSBjb3VudGluZyBkaXNjaXBsaW5lIChBdXRvbWF0aWNUaHJlYWQgaG9s
ZHMKKyAgICAvLyBzdHJvbmcgcmVmIHRvIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbiBhbmQgdGhl
IHVuZGVybHlpbmcgdGhyZWFkIGhvbGRzIGEgc3Ryb25nIHJlZiB0bworICAgIC8vIEF1dG9tYXRp
Y1RocmVhZCkuCisgICAgdmlydHVhbCB+QXV0b21hdGljVGhyZWFkKCk7CisgICAgCisgICAgdm9p
ZCBqb2luKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgLy8gVGhpcyBsb2dpY2FsbHkgY3JlYXRl
cyB0aGUgdGhyZWFkLCBidXQgaW4gcmVhbGl0eSB0aGUgdGhyZWFkIHdvbid0IGJlIGNyZWF0ZWQg
dW50aWwgc29tZW9uZQorICAgIC8vIGNhbGxzIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90
aWZ5QWxsKCkuCisgICAgQXV0b21hdGljVGhyZWFkKGNvbnN0IExvY2tIb2xkZXImLCBCb3g8TG9j
az4sIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+KTsKKyAgICAKKyAgICAvLyBUbyB1
bmRlcnN0YW5kIFBvbGxSZXN1bHQgYW5kIFdvcmtSZXN1bHQsIGltYWdpbmUgdGhhdCBwb2xsKCkg
YW5kIHdvcmsoKSBhcmUgYmVpbmcgY2FsbGVkIGxpa2UKKyAgICAvLyBzbzoKKyAgICAvLworICAg
IC8vIHZvaWQgQXV0b21hdGljVGhyZWFkOjpydW5UaHJlYWQoKQorICAgIC8vIHsKKyAgICAvLyAg
ICAgZm9yICg7OykgeworICAgIC8vICAgICAgICAgeworICAgIC8vICAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgLy8gICAgICAgICAgICAgZm9yICg7OykgeworICAg
IC8vICAgICAgICAgICAgICAgICBQb2xsUmVzdWx0IHJlc3VsdCA9IHBvbGwoKTsKKyAgICAvLyAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBQb2xsUmVzdWx0OjpXb3JrKQorICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgLy8gICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gUG9sbFJlc3VsdDo6U3RvcCkKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAvLyAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0ID09IFBvbGxS
ZXN1bHQ6OldhaXQpOworICAgIC8vICAgICAgICAgICAgICAgICBtX2NvbmRpdGlvbi53YWl0KG1f
bG9jayk7CisgICAgLy8gICAgICAgICAgICAgfQorICAgIC8vICAgICAgICAgfQorICAgIC8vICAg
ICAgICAgCisgICAgLy8gICAgICAgICBXb3JrUmVzdWx0IHJlc3VsdCA9IHdvcmsoKTsKKyAgICAv
LyAgICAgICAgIGlmIChyZXN1bHQgPT0gV29ya1Jlc3VsdDo6U3RvcCkKKyAgICAvLyAgICAgICAg
ICAgICByZXR1cm47CisgICAgLy8gICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQgPT0gV29y
a1Jlc3VsdDo6Q29udGludWUpOworICAgIC8vICAgICB9CisgICAgLy8gfQorICAgIAorICAgIGVu
dW0gY2xhc3MgUG9sbFJlc3VsdCB7IFdvcmssIFN0b3AsIFdhaXQgfTsKKyAgICB2aXJ0dWFsIFBv
bGxSZXN1bHQgcG9sbChjb25zdCBMb2NrSG9sZGVyJikgPSAwOworICAgIAorICAgIGVudW0gY2xh
c3MgV29ya1Jlc3VsdCB7IENvbnRpbnVlLCBTdG9wIH07CisgICAgdmlydHVhbCBXb3JrUmVzdWx0
IHdvcmsoKSA9IDA7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBdXRvbWF0aWNU
aHJlYWRDb25kaXRpb247CisgICAgCisgICAgdm9pZCBzdGFydChjb25zdCBMb2NrSG9sZGVyJik7
CisgICAgCisgICAgQm94PExvY2s+IG1fbG9jazsKKyAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFk
Q29uZGl0aW9uPiBtX2NvbmRpdGlvbjsKKyAgICBib29sIG1faXNSdW5uaW5nIHsgdHJ1ZSB9Owor
ICAgIENvbmRpdGlvbiBtX2lzUnVubmluZ0NvbmRpdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OkF1dG9tYXRpY1RocmVhZDsKKworI2VuZGlmIC8vIFdURl9BdXRv
bWF0aWNUaHJlYWRfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA3NDc2
KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEFTQ0lJQ1R5cGUuaAogICAgIEFzc2VydGlv
bnMuaAogICAgIEF0b21pY3MuaAorICAgIEF1dG9tYXRpY1RocmVhZC5oCiAgICAgQmFja3dhcmRz
R3JhcGguaAogICAgIEJhZy5oCiAgICAgQmFnVG9IYXNoTWFwLmgKQEAgLTE3Myw2ICsxNzQsNyBA
QCBzZXQoV1RGX0hFQURFUlMKIHNldChXVEZfU09VUkNFUwogICAgIEFzc2VydGlvbnMuY3BwCiAg
ICAgQXRvbWljcy5jcHAKKyAgICBBdXRvbWF0aWNUaHJlYWQuY3BwCiAgICAgQml0VmVjdG9yLmNw
cAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENyb3NzVGhyZWFkQ29waWVyLmNwcApJ
bmRleDogU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCShyZXZpc2lvbiAyMDc0NzYp
CisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXJhbGxlbEhl
bHBlclBvb2wuaCIKIAorI2luY2x1ZGUgIkF1dG9tYXRpY1RocmVhZC5oIgogI2luY2x1ZGUgIkRh
dGFMb2cuaCIKICNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgogCkBAIC0zNCwxNCArMzUs
MTQgQEAgbmFtZXNwYWNlIFdURiB7CiBQYXJhbGxlbEhlbHBlckNsaWVudDo6UGFyYWxsZWxIZWxw
ZXJDbGllbnQoUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gcG9vbCkKICAgICA6IG1fcG9vbChw
b29sKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqbV9wb29sLT5tX2xvY2spOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Bv
b2wtPm1faXNEeWluZyk7CiAgICAgbV9wb29sLT5tX2NsaWVudHMuYXBwZW5kKHRoaXMpOwogfQog
CiBQYXJhbGxlbEhlbHBlckNsaWVudDo6flBhcmFsbGVsSGVscGVyQ2xpZW50KCkKIHsKLSAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIo
Km1fcG9vbC0+bV9sb2NrKTsKICAgICBmaW5pc2gobG9ja2VyKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9wb29sLT5tX2NsaWVudHMuc2l6ZSgpOyArK2kpIHsKQEAgLTU1LDcgKzU2
LDcgQEAgUGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNsaQogCiB2b2lkIFBh
cmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQgKCk+PiB0
YXNrKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqbV9wb29sLT5tX2xvY2spOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Rh
c2spOwogICAgIG1fdGFzayA9IHRhc2s7CiAgICAgbV9wb29sLT5kaWRNYWtlV29ya0F2YWlsYWJs
ZShsb2NrZXIpOwpAQCAtNjMsNyArNjQsNyBAQCB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpz
ZXRUYXNrKFJlZlB0CiAKIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaCgpCiB7Ci0g
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX3Bvb2wtPm1fbG9jayk7CiAgICAgZmluaXNoKGxvY2tlcik7CiB9CiAKQEAgLTcxLDcg
KzcyLDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZwogewogICAg
IFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQgKCk+PiB0YXNrOwogICAgIHsKLSAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigq
bV9wb29sLT5tX2xvY2spOwogICAgICAgICB0YXNrID0gY2xhaW1UYXNrKGxvY2tlcik7CiAgICAg
ICAgIGlmICghdGFzaykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkxLDcgKzkyLDcgQEAgdm9p
ZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNoKGNvbnN0IAogewogICAgIG1fdGFzayA9IG51
bGxwdHI7CiAgICAgd2hpbGUgKG1fbnVtQWN0aXZlKQotICAgICAgICBtX3Bvb2wtPm1fd29ya0Nv
bXBsZXRlQ29uZGl0aW9uLndhaXQobV9wb29sLT5tX2xvY2spOworICAgICAgICBtX3Bvb2wtPm1f
d29ya0NvbXBsZXRlQ29uZGl0aW9uLndhaXQoKm1fcG9vbC0+bV9sb2NrKTsKIH0KIAogUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCAoKT4+IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2soY29u
c3QgTG9ja0hvbGRlciYpCkBAIC0xMTEsNyArMTEyLDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNs
aWVudDo6cnVuVGFzayhSZWZQdAogICAgIHRhc2stPnJ1bigpOwogCiAgICAgewotICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX3Bvb2wtPm1fbG9jayk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbnVtQWN0aXZl
KTsKICAgICAgICAgLy8gTm8gbmV3IHRhc2sgY291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCwgc2lu
Y2Ugd2Ugd2VyZSBzdGlsbCBhY3RpdmUuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Rhc2sg
fHwgbV90YXNrID09IHRhc2spOwpAQCAtMTIzLDYgKzEyNCw4IEBAIHZvaWQgUGFyYWxsZWxIZWxw
ZXJDbGllbnQ6OnJ1blRhc2soUmVmUHQKIH0KIAogUGFyYWxsZWxIZWxwZXJQb29sOjpQYXJhbGxl
bEhlbHBlclBvb2woKQorICAgIDogbV9sb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCisgICAgLCBt
X3dvcmtBdmFpbGFibGVDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUo
KSkKIHsKIH0KIApAQCAtMTMxLDE4ICsxMzQsMTggQEAgUGFyYWxsZWxIZWxwZXJQb29sOjp+UGFy
YWxsZWxIZWxwZXJQb29sKAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY2xpZW50cy5pc0VtcHR5KCkp
OwogICAgIAogICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CiAgICAgICAgIG1faXNEeWluZyA9IHRydWU7
Ci0gICAgICAgIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKKyAgICAgICAg
bV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLT5ub3RpZnlBbGwobG9ja2VyKTsKICAgICB9CiAKLSAg
ICBmb3IgKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA6IG1fdGhyZWFkcykKLSAg
ICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgZm9y
IChSZWZQdHI8QXV0b21hdGljVGhyZWFkPiYgdGhyZWFkIDogbV90aHJlYWRzKQorICAgICAgICB0
aHJlYWQtPmpvaW4oKTsKIH0KIAogdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmVuc3VyZVRocmVh
ZHModW5zaWduZWQgbnVtVGhyZWFkcykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2sp
OworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgIGlmIChudW1UaHJlYWRzIDwg
bV9udW1UaHJlYWRzKQogICAgICAgICByZXR1cm47CiAgICAgbV9udW1UaHJlYWRzID0gbnVtVGhy
ZWFkczsKQEAgLTE1NSw3ICsxNTgsNyBAQCB2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZG9Tb21l
SGVscGluZygpCiAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKICAgICBSZWZQdHI8
U2hhcmVkVGFzazx2b2lkICgpPj4gdGFzazsKICAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwogICAgICAg
ICBjbGllbnQgPSBnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpOwogICAgICAgICBpZiAoIWNsaWVu
dCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2NSwzOCArMTY4LDQ2IEBAIHZvaWQgUGFyYWxs
ZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKCkKICAgICBjbGllbnQtPnJ1blRhc2sodGFzayk7
CiB9CiAKLXZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkaWRNYWtlV29ya0F2YWlsYWJsZShjb25z
dCBMb2NrSG9sZGVyJikKLXsKLSAgICB3aGlsZSAobV9udW1UaHJlYWRzID4gbV90aHJlYWRzLnNp
emUoKSkgewotICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgPSBjcmVh
dGVUaHJlYWQoCi0gICAgICAgICAgICAiV1RGIFBhcmFsbGVsIEhlbHBlciBUaHJlYWQiLAotICAg
ICAgICAgICAgW3RoaXNdICgpIHsKLSAgICAgICAgICAgICAgICBoZWxwZXJUaHJlYWRCb2R5KCk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgbV90aHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlm
aWVyKTsKLSAgICB9Ci0gICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOwot
fQotCi12b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6aGVscGVyVGhyZWFkQm9keSgpCi17Ci0gICAg
Zm9yICg7OykgewotICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OwotICAgICAg
ICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkICgpPj4gdGFzazsKLQotICAgICAgICB7Ci0gICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwotICAgICAgICAgICAgY2xpZW50ID0gd2Fp
dEZvckNsaWVudFdpdGhUYXNrKGxvY2tlcik7Ci0gICAgICAgICAgICBpZiAoIWNsaWVudCkgewot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faXNEeWluZyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0YXNrID0gY2xpZW50LT5j
bGFpbVRhc2sobG9ja2VyKTsKK2NsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDo6VGhyZWFkIDogcHVi
bGljIEF1dG9tYXRpY1RocmVhZCB7CitwdWJsaWM6CisgICAgVGhyZWFkKGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKQorICAgICAgICA6IEF1dG9tYXRp
Y1RocmVhZChsb2NrZXIsIHBvb2wubV9sb2NrLCBwb29sLm1fd29ya0F2YWlsYWJsZUNvbmRpdGlv
bikKKyAgICAgICAgLCBtX3Bvb2wocG9vbCkKKyAgICB7CisgICAgfQorICAgIAorcHJvdGVjdGVk
OgorICAgIFBvbGxSZXN1bHQgcG9sbChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAobV9wb29sLm1faXNEeWluZykKKyAgICAgICAgICAgIHJldHVy
biBQb2xsUmVzdWx0OjpTdG9wOworICAgICAgICBtX2NsaWVudCA9IG1fcG9vbC5nZXRDbGllbnRX
aXRoVGFzayhsb2NrZXIpOworICAgICAgICBpZiAobV9jbGllbnQpIHsKKyAgICAgICAgICAgIG1f
dGFzayA9IG1fY2xpZW50LT5jbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgICAgIHJldHVybiBQ
b2xsUmVzdWx0OjpXb3JrOwogICAgICAgICB9Ci0KLSAgICAgICAgY2xpZW50LT5ydW5UYXNrKHRh
c2spOworICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsKKyAgICB9CisgICAgCisgICAg
V29ya1Jlc3VsdCB3b3JrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fY2xpZW50LT5ydW5U
YXNrKG1fdGFzayk7CisgICAgICAgIG1fY2xpZW50ID0gbnVsbHB0cjsKKyAgICAgICAgbV90YXNr
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgUGFyYWxsZWxIZWxwZXJQb29sJiBtX3Bvb2w7CisgICAgUGFy
YWxsZWxIZWxwZXJDbGllbnQqIG1fY2xpZW50IHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQgKCk+PiBtX3Rhc2s7Cit9OworCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6
ZGlkTWFrZVdvcmtBdmFpbGFibGUoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQoreworICAgIHdo
aWxlIChtX251bVRocmVhZHMgPiBtX3RocmVhZHMuc2l6ZSgpKQorICAgICAgICBtX3RocmVhZHMu
YXBwZW5kKGFkb3B0UmVmKG5ldyBUaHJlYWQobG9ja2VyLCAqdGhpcykpKTsKKyAgICBtX3dvcmtB
dmFpbGFibGVDb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwogfQogCiBib29sIFBhcmFsbGVs
SGVscGVyUG9vbDo6aGFzQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQpA
QCAtMjIyLDIwICsyMzMsNSBAQCBQYXJhbGxlbEhlbHBlckNsaWVudCogUGFyYWxsZWxIZWxwZXJQ
b29sCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVBhcmFsbGVsSGVscGVyQ2xpZW50KiBQYXJh
bGxlbEhlbHBlclBvb2w6OndhaXRGb3JDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIpCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICAvLyBJdCBtaWdodCBiZSBxdWl0dGlu
JyB0aW1lLgotICAgICAgICBpZiAobV9pc0R5aW5nKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgaWYgKFBhcmFsbGVsSGVscGVyQ2xpZW50KiByZXN1bHQgPSBnZXRDbGll
bnRXaXRoVGFzayhsb2NrZXIpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAg
ICAvLyBXYWl0IHVudGlsIHdvcmsgYmVjb21lcyBhdmFpbGFibGUuCi0gICAgICAgIG1fd29ya0F2
YWlsYWJsZUNvbmRpdGlvbi53YWl0KG1fbG9jayk7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIApJbmRleDogU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgJKHJldmlzaW9uIDIw
NzQ3NikKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUGFyYWxsZWxIZWxwZXJQb29sX2gKICNkZWZpbmUg
UGFyYWxsZWxIZWxwZXJQb29sX2gKIAorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3
dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC0zNyw2ICszOCw5IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitjbGFzcyBBdXRv
bWF0aWNUaHJlYWQ7CitjbGFzcyBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb247CisKIC8vIEEgUGFy
YWxsZWxIZWxwZXJQb29sIGlzIGEgc2hhcmVkIHBvb2wgb2YgdGhyZWFkcyB0aGF0IGNhbiBiZSBh
c2tlZCB0byBoZWxwIHdpdGggc29tZSBmaW5pdGUtdGltZQogLy8gcGFyYWxsZWwgYWN0aXZpdHku
IEl0J3MgZGVzaWduZWQgdG8gd29yayB3ZWxsIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGNvbmN1
cnJlbnQgdGFza3MgdGhhdCBtYXkKIC8vIGFsbCB3YW50IHBhcmFsbGVsIGhlbHAuIEluIHRoYXQg
Y2FzZSwgd2UgZG9uJ3Qgd2FudCBlYWNoIHRhc2sgdG8gc3RhcnQgaXRzIG93biB0aHJlYWQgcG9v
bC4gSXQncwpAQCAtMTg2LDIyICsxOTAsMjMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBQYXJhbGxlbEhlbHBlckNsaWVudDsKKyAgICBjbGFzcyBUaHJlYWQ7CisgICAg
ZnJpZW5kIGNsYXNzIFRocmVhZDsKIAogICAgIHZvaWQgZGlkTWFrZVdvcmtBdmFpbGFibGUoY29u
c3QgTG9ja0hvbGRlciYpOwotICAgIHZvaWQgaGVscGVyVGhyZWFkQm9keSgpOwogCiAgICAgYm9v
bCBoYXNDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgUGFyYWxsZWxIZWxw
ZXJDbGllbnQqIGdldENsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICBQYXJh
bGxlbEhlbHBlckNsaWVudCogd2FpdEZvckNsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXIm
KTsKICAgICAKLSAgICBMb2NrIG1fbG9jazsKLSAgICBDb25kaXRpb24gbV93b3JrQXZhaWxhYmxl
Q29uZGl0aW9uOworICAgIEJveDxMb2NrPiBtX2xvY2s7IC8vIEF1dG9tYXRpY1RocmVhZCB3YW50
cyB0aGlzIGluIGEgYm94IGZvciBzYWZldHkuCisgICAgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uOwogICAgIENvbmRpdGlvbiBtX3dvcmtD
b21wbGV0ZUNvbmRpdGlvbjsKIAogICAgIFdlYWtSYW5kb20gbV9yYW5kb207CiAgICAgCiAgICAg
VmVjdG9yPFBhcmFsbGVsSGVscGVyQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIFZlY3RvcjxUaHJl
YWRJZGVudGlmaWVyPiBtX3RocmVhZHM7CisgICAgVmVjdG9yPFJlZlB0cjxBdXRvbWF0aWNUaHJl
YWQ+PiBtX3RocmVhZHM7CiAgICAgdW5zaWduZWQgbV9udW1UaHJlYWRzIHsgMCB9OyAvLyBUaGlz
IGNhbiBiZSBsYXJnZXIgdGhhbiBtX3RocmVhZHMuc2l6ZSgpIGJlY2F1c2Ugd2Ugc3RhcnQgdGhy
ZWFkcyBvbmx5IG9uY2UgdGhlcmUgaXMgd29yay4KICAgICBib29sIG1faXNEeWluZyB7IGZhbHNl
IH07CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>