<?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>81923</bug_id>
          
          <creation_ts>2012-03-22 09:04:09 -0700</creation_ts>
          <short_desc>Web Inspector: Migrate InspectorCSSAgent to strict protocol types</short_desc>
          <delta_ts>2012-03-26 07:05:04 -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 Inspector (Deprecated)</component>
          <version>528+ (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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>585351</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-22 09:04:09 -0700</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585493</commentid>
    <comment_count>1</comment_count>
      <attachid>133297</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-22 11:11:06 -0700</bug_when>
    <thetext>Created attachment 133297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>585521</commentid>
    <comment_count>2</comment_count>
      <attachid>133297</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-22 11:31:43 -0700</bug_when>
    <thetext>Comment on attachment 133297
Patch

Attachment 133297 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12117147</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>586190</commentid>
    <comment_count>3</comment_count>
      <attachid>133449</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-23 02:38:32 -0700</bug_when>
    <thetext>Created attachment 133449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587547</commentid>
    <comment_count>4</comment_count>
      <attachid>133449</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-26 02:05:02 -0700</bug_when>
    <thetext>Comment on attachment 133449
Patch

Rejecting attachment 133449 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 file Source/WebCore/inspector/InspectorStyleSheet.cpp
Hunk #11 FAILED at 837.
Hunk #12 succeeded at 918 (offset -1 lines).
Hunk #13 succeeded at 932 (offset -1 lines).
1 out of 13 hunks FAILED -- saving rejects to file Source/WebCore/inspector/InspectorStyleSheet.cpp.rej
patching file Source/WebCore/inspector/InspectorStyleSheet.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Pavel Feld...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/12132669</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587692</commentid>
    <comment_count>5</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-03-26 07:05:04 -0700</bug_when>
    <thetext>Committed r112087: &lt;http://trac.webkit.org/changeset/112087&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133297</attachid>
            <date>2012-03-22 11:11:06 -0700</date>
            <delta_ts>2012-03-23 02:38:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81923-20120322221104.patch</filename>
            <type>text/plain</type>
            <size>47910</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY4ZTkyMjk3MWM1NzE0
ZjU2Y2UzNjM5ZmI5NDExZmM1Y2YzYzc3NC4uMzk4ZDFiNzk1NjljZTUwYzRhOTJkNmZjNDQ1NTkz
N2MxOGEwODk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAzLTIyICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTWlncmF0ZSBJbnNwZWN0b3JDU1NBZ2VudCB0byBzdHJpY3QgcHJvdG9jb2wgdHlwZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxOTIzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwOgorICAgICAgICAoU2VsZWN0b3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvZmlsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnN0b3BTZWxlY3RvclByb2ZpbGVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hl
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9y
UnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvckNTU0FnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZFNvdXJj
ZVJhbmdlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTWVkaWFPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNo
ZWV0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjphc1Byb3RvY29sVmFsdWUp
OgorICAgICAgICAoSW5zcGVjdG9yU3R5bGUpOgorICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVl
dCk6CisKIDIwMTItMDMtMjIgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW50cm9kdWNlIFNjcmlwdEJvdW5kL1NjcmlwdFVu
Ym91bmQgZXZlbnRzIGluIFNjcmlwdE1hcHBpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IGVjOTc1MmU5YTFjNmEyMDZj
N2EyMTE2NGJmZWQ0MDVhNzNhZjQ2MjEuLjA0YjE2ZjQ1MmI1OTY1NmY1NTBjNjEyZDMxNmM5ODcw
ZTlhMDBmYzEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CkBAIC01OSw3ICs1OSw3IEBAIFRZUEVfTkFNRV9GSVhfTUFQID0gewog
VFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFsiUnVudGltZS5SZW1vdGVP
YmplY3QiLCAiUnVudGltZS5Qcm9wZXJ0eURlc2NyaXB0b3IiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiRGVidWdnZXIuRnVuY3Rpb25EZXRhaWxzIiwgIkRlYnVn
Z2VyLkNhbGxGcmFtZSJdKQogCi1TVFJJQ1RfRU5BQkxFRF9ET01BSU5TID0gWyJEZWJ1Z2dlciIs
ICJQYWdlIl0KK1NUUklDVF9FTkFCTEVEX0RPTUFJTlMgPSBbIkNTUyIsICJEZWJ1Z2dlciIsICJQ
YWdlIl0KIAogCiBjbWRsaW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA4YTQy
OWY1ZDE1MGM3NTBlNmNkYWZiMzM4ZjBlZDExZTYxMGZkYTQ4Li5kY2E4MWNhY2FjNmIzODdkZWVh
NmY5Mzk3YzBhY2VlMjQyZjYwNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0
b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JTdGF0ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5o
IgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTExMyw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydFNlbGVjdG9yKGNvbnN0IENTU1N0eWxlUnVsZSopOwogICAgIHZvaWQgY29tbWl0U2Vs
ZWN0b3IoYm9vbCk7CiAgICAgdm9pZCBjb21taXRTZWxlY3RvclRpbWUoKTsKLSAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gdG9JbnNwZWN0b3JPYmpl
Y3QoKSBjb25zdDsKIAogcHJpdmF0ZToKIApAQCAtMjAxLDkgKzIwMiw5IEBAIGlubGluZSB2b2lk
IFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKCkKICAgICBpdC0+c2Vjb25kLnRv
dGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gU2VsZWN0b3JQcm9maWxlOjp0b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0CitQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQcm9maWxlOjp0
b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBz
ZWxlY3RvclByb2ZpbGVEYXRhID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50
cnk+ID4gc2VsZWN0b3JQcm9maWxlRGF0YSA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT46OmNyZWF0ZSgpOwogICAgIGZvciAoUnVsZU1h
dGNoaW5nU3RhdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5i
ZWdpbigpOyBpdCAhPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4gZW50cnkgPSBU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgIC5zZXRTZWxlY3RvcihpdC0+c2Vjb25kLnNlbGVjdG9yKQpAQCAtMjEyLDcgKzIxMyw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9y
T2JqZWN0KCkgY29uc3QKICAgICAgICAgICAgIC5zZXRUaW1lKGl0LT5zZWNvbmQudG90YWxUaW1l
KQogICAgICAgICAgICAgLnNldEhpdENvdW50KGl0LT5zZWNvbmQuaGl0cykKICAgICAgICAgICAg
IC5zZXRNYXRjaENvdW50KGl0LT5zZWNvbmQubWF0Y2hlcyk7Ci0gICAgICAgIHNlbGVjdG9yUHJv
ZmlsZURhdGEtPnB1c2hPYmplY3QoZW50cnkucmVsZWFzZSgpKTsKKyAgICAgICAgc2VsZWN0b3JQ
cm9maWxlRGF0YS0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IHJlc3VsdCA9IFR5cGVCdWlsZGVy
OjpDU1M6OlNlbGVjdG9yUHJvZmlsZTo6Y3JlYXRlKCkKQEAgLTQ4OCw3ICs0ODksNyBAQCB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpjbGVhckZyb250ZW5kKCkKICAgICBtX2Zyb250ZW5kID0gMDsK
ICAgICBjbGVhclBzZXVkb1N0YXRlKHRydWUpOwogICAgIFN0cmluZyBlcnJvclN0cmluZzsKLSAg
ICBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoJmVycm9yU3RyaW5nKTsKKyAgICBzdG9wU2VsZWN0
b3JQcm9maWxlckltcGwoJmVycm9yU3RyaW5nLCBmYWxzZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCkBAIC01NjIsNyArNTYzLDcgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqIGVs
ZW1lbnQsIEluc3AKICAgICAgICAgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVj
dG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9D
bGFzc2VzLCBjb25zdCBib29sKiBuZWVkUHNldWRvLCBjb25zdCBib29sKiBuZWVkSW5oZXJpdGVk
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIHBzZXVkb0lkUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGluaGVyaXRl
ZEVudHJpZXMpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9k
ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1
ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlBzZXVkb0lkUnVsZXM+ID4mIHBz
ZXVkb0lkUnVsZXMsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT4gPiYgaW5oZXJpdGVkRW50cmllcykKIHsKICAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
ZWxlbWVudCkKQEAgLTU3NiwxNSArNTc3LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAg
ICAgbWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5n
ZXQoKSk7CiAKICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCi0gICAgaWYgKCFuZWVkUHNldWRvIHx8
ICpuZWVkUHNldWRvKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHNldWRvRWxl
bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgaWYgKCFpbmNsdWRlUHNldWRv
IHx8ICppbmNsdWRlUHNldWRvKSB7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRSdWxlcz4gPiBwc2V1ZG9FbGVtZW50cyA9IFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJTVF9QVUJMSUNfUFNFVURPSUQ7
IHBzZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9JRDsgcHNldWRvSWQgPSBzdGF0
aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgewogICAgICAgICAgICAgUmVmUHRyPENT
U1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVs
ZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsK
ICAgICAgICAgICAgIGlmIChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkg
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBzZXVkb1N0eWxlcyA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgcHNldWRvU3R5bGVz
LT5zZXROdW1iZXIoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOwotICAg
ICAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJheUZv
clJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSkpOwotICAgICAgICAgICAgICAgIHBzZXVkb0Vs
ZW1lbnRzLT5wdXNoT2JqZWN0KHBzZXVkb1N0eWxlcy5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzPiBwc2V1ZG9TdHlsZXMg
PSBUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzOjpjcmVhdGUoKQorICAgICAgICAgICAg
ICAgICAgICAuc2V0UHNldWRvSWQoc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpCisgICAgICAg
ICAgICAgICAgICAgIC5zZXRSdWxlcyhidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVz
LmdldCgpKSk7CisgICAgICAgICAgICAgICAgcHNldWRvRWxlbWVudHMtPmFkZEl0ZW0ocHNldWRv
U3R5bGVzLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNTkyLDIx
ICs1OTMsMjEgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5v
ZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICB9CiAKICAgICAvLyBJbmhl
cml0ZWQgc3R5bGVzLgotICAgIGlmICghbmVlZEluaGVyaXRlZCB8fCAqbmVlZEluaGVyaXRlZCkg
ewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBpZiAoIWluY2x1ZGVJbmhlcml0ZWQgfHwgKmluY2x1
ZGVJbmhlcml0ZWQpIHsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5PiA+IGluaGVyaXRlZFN0eWxlcyA9IFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3Jl
YXRlKCk7CiAgICAgICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCk7CiAgICAgICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBh
cmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICAg
ICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTZWxlY3Rv
ci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6
QWxsQ1NTUnVsZXMpOworICAgICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkluaGVy
aXRlZFN0eWxlRW50cnk+IHBhcmVudFN0eWxlID0gVHlwZUJ1aWxkZXI6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlZENTU1J1bGVz
KGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMuZ2V0KCkpKTsKICAgICAg
ICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxl
KCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHBhcmVudEVsZW1l
bnQpOwogICAgICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHls
ZVNoZWV0LT5pZCgpLCAwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNl
dElubGluZVN0eWxlKHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+
c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0LT5pZCgpLCAwKSkpKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50U2VsZWN0b3Ig
PSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2Vs
ZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIENTU1N0eWxlU2VsZWN0
b3I6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRBcnJheSgibWF0
Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcy5n
ZXQoKSkpOwotICAgICAgICAgICAgaW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0
eWxlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBpbmhlcml0ZWRTdHlsZXMtPmFkZEl0ZW0ocGFy
ZW50U3R5bGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRF
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIH0KIApAQCAtNjE0LDcgKzYxNSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgYXR0cmlidXRlc1N0eWxlKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mIGlubGluZVN0eWxlLCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCiB7CiAgICAg
RWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAg
ICBpZiAoIWVsZW1lbnQpCkBAIC02MjUsMTEgKzYyNiwxMSBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZAogICAgICAgICByZXR1cm47CiAKICAgICBpbmxpbmVTdHlsZSA9IHN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKGVsZW1l
bnQpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gYXR0cmlidXRlcyA9
IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKGVsZW1lbnQpOwogICAgIGF0dHJpYnV0ZXNT
dHlsZSA9IGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzLnJlbGVhc2UoKSA6IDA7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9y
Y2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGUpCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNl
ZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiA+JiBzdHlsZSkKIHsKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKQEAgLTY0Miw4ICs2NDMsOSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21w
dXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBubwogICAgIHN0
eWxlID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGVJbmZvcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiA+JiBzdHlsZUluZm9z
KQogeworICAgIHN0eWxlSW5mb3MgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogICAgIFZlY3RvcjxEb2N1bWVudCo+
IGRvY3VtZW50cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50cygpOwogICAgIGZvciAoVmVjdG9yPERv
Y3VtZW50Kj46Oml0ZXJhdG9yIGl0ID0gZG9jdW1lbnRzLmJlZ2luKCk7IGl0ICE9IGRvY3VtZW50
cy5lbmQoKTsgKytpdCkgewogICAgICAgICBTdHlsZVNoZWV0TGlzdCogbGlzdCA9ICgqaXQpLT5z
dHlsZVNoZWV0cygpOwpAQCAtNjU1LDcgKzY1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYK
ICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIHN0eWxlU2hlZXRPYmplY3QpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4m
IHN0eWxlU2hlZXRPYmplY3QpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVl
dElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC02ODQsNyArNjg2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAqZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01B
Z2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQp
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGlu
dCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9y
Q1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CkBAIC03MDAsNyArNzAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0
UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEkKICAg
ICAqZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBp
bnQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
cmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxl
SWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElk
KGZ1bGxTdHlsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTcx
Niw3ICs3MTgsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbgogICAgICplcnJvclN0cmluZyA9
IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgSW5z
cGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5k
SWQuaXNFbXB0eSgpKTsKQEAgLTcyNywxNSArNzI5LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0
cjxJCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIHN1Y2Nlc3MgPSBtX2Rv
bUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFNldFJ1bGVTZWxlY3RvckFj
dGlvbihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3VuZElkLCBzZWxlY3RvcikpLCBlYyk7Ci0g
ICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21wb3Vu
ZElkKSk7Ci0gICAgKmVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcoZWMpOwogCiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0
eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9y
SWQoY29tcG91bmRJZCkpOworICAgICplcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0
b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21B
Z2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgY29udGV4dE5vZGVJZCk7CiAgICAgaWYgKCFu
b2RlKQpAQCAtNzYxLDExICs3NjEsMTEgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVs
ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IGludCBjb250ZXh0Tm9kZUkKICAgICBy
ZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJy
b3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBjc3NQcm9wZXJ0aWVzKQordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyos
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+JiBjc3NQcm9wZXJ0aWVzKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4gPiBwcm9wZXJ0
aWVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBwcm9wZXJ0aWVzLT5w
dXNoU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOworICAgICAgICBwcm9wZXJ0aWVzLT5h
ZGRJdGVtKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOwogCiAgICAgY3NzUHJvcGVydGllcyA9IHBy
b3BlcnRpZXMucmVsZWFzZSgpOwogfQpAQCAtNzc2LDE5ICs3NzYsMjEgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKikKICAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcsIHRydWUp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+JiBy
ZXN1bHQpCiB7Ci0gICAgc3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKGVycm9yU3RyaW5nLCAmcmVz
dWx0KTsKKyAgICByZXN1bHQgPSBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoZXJyb3JTdHJpbmcs
IHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxl
ckltcGwoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KQorUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IEluc3BlY3RvckNTU0Fn
ZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoRXJyb3JTdHJpbmcqLCBib29sIG5lZWRQcm9m
aWxlKQogewogICAgIGlmICghbV9zdGF0ZS0+Z2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjppc1Nl
bGVjdG9yUHJvZmlsaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKICAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcs
IGZhbHNlKTsKLSAgICBpZiAobV9mcm9udGVuZCAmJiByZXN1bHQpCi0gICAgICAgICpyZXN1bHQg
PSBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnRvSW5zcGVjdG9yT2JqZWN0KCk7CisgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0OworICAgIGlmICht
X2Zyb250ZW5kICYmIG5lZWRQcm9maWxlKQorICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRTZWxl
Y3RvclByb2ZpbGUtPnRvSW5zcGVjdG9yT2JqZWN0KCk7CiAgICAgbV9jdXJyZW50U2VsZWN0b3JQ
cm9maWxlLmNsZWFyKCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxl
KQpAQCAtODQ3LDEwICs4NDksMTAgQEAgRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1l
bnRGb3JJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIEluc3BlY3Rv
ckFycmF5KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+KiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7Ci0gICAgcmVzdWx0LT5wdXNoT2JqZWN0
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgcmVzdWx0LT5hZGRJdGVtKGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldEluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHN0eWxlU2hl
ZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBz
dHlsZVNoZWV0LT5pdGVtKGkpOwogICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsK
QEAgLTk0Niw5ICs5NDgsOSBAQCBTdHJpbmcgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdp
bihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqCiAgICAgcmV0dXJuIG9y
aWdpbjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCitQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZT4gPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZT46OmNyZWF0ZSgpOwogICAgIGlmICghcnVsZUxpc3QpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogCkBAIC05NTksMTIgKzk2MSwxMiBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1
bGVMaXN0KgogCiAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBiaW5k
U3R5bGVTaGVldChydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpOwogICAgICAgICBpZiAoc3R5bGVT
aGVldCkKLSAgICAgICAgICAgIHJlc3VsdC0+cHVzaE9iamVjdChzdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclJ1bGUocnVsZSkpOworICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCitQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBp
ZiAoIWVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggMmY5ZGRmNGIx
NDBiYTNiYTQ5ZDU3NWU2Y2I2YTI4M2E2NWE4YThiYy4uZGY5YjIxZDIwYjQ3NTI4NGExZGUxOTUw
NjlkYTc1ZjI1MTczYzA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKQEAgLTk4LDIzICs5OCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgp
OwogICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIHN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5saW5lU3R5bGVzRm9y
Tm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBp
bmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGF0dHJpYnV0ZXMpOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2Rl
SWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGNv
bnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgaW5oZXJpdGVkRW50
cmllcyk7Ci0gICAgdmlydHVhbCB2b2lkIGdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGVTaGVldEluZm9zKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiYp
OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwg
aW50IG5vZGVJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5
bGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mIGF0dHJpYnV0ZXMpOworICAg
IHZpcnR1YWwgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBu
b2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMs
IGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQs
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiYg
bWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpD
U1M6OlBzZXVkb0lkUnVsZXM+ID4mIHBzZXVkb1J1bGVzLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+ID4mIGluaGVyaXRlZEVu
dHJpZXMpOworICAgIHZpcnR1YWwgdm9pZCBnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyos
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4gPiYgc3R5bGVTaGVldEluZm9zKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVT
aGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiByZXN1bHQpOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVT
aGVldElkLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXRU
ZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHJlc3VsdCk7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9yU3Ry
aW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0
eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUnVsZShF
cnJvclN0cmluZyosIGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4m
IHJlc3VsdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUHJvcGVy
dHkoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJZCwg
aW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVy
cm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+JiByZXN1
bHQpOworICAgIHZpcnR1YWwgdm9pZCBhZGRSdWxlKEVycm9yU3RyaW5nKiwgaW50IGNvbnRleHRO
b2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NSdWxlPiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVy
dGllcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+JiBy
ZXN1bHQpOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihFcnJvclN0
cmluZyopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmlu
ZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Jik7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTZWxl
Y3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVj
dG9yUHJvZmlsZT4mKTsKIAotICAgIHZvaWQgc3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qID0gMCk7CisgICAgUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IHN0b3BTZWxlY3RvclByb2ZpbGVySW1w
bChFcnJvclN0cmluZyosIGJvb2wgbmVlZFByb2ZpbGUpOwogICAgIHZvaWQgd2lsbE1hdGNoUnVs
ZShjb25zdCBDU1NTdHlsZVJ1bGUqKTsKICAgICB2b2lkIGRpZE1hdGNoUnVsZShib29sKTsKICAg
ICB2b2lkIHdpbGxQcm9jZXNzUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUqKTsKQEAgLTEzOCwxNSAr
MTM4LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNhbGNTdHlsZUZvclBzZXVkb1N0YXRlSWZO
ZWVkZWQoRWxlbWVudCosIEluc3BlY3RvckFycmF5KiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVl
dChFbGVtZW50KiBlbGVtZW50KTsKICAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQoRXJyb3JTdHJp
bmcqLCBpbnQgbm9kZUlkKTsKLSAgICB2b2lkIGNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNo
ZWV0KiwgSW5zcGVjdG9yQXJyYXkqKTsKKyAgICB2b2lkIGNvbGxlY3RTdHlsZVNoZWV0cyhDU1NT
dHlsZVNoZWV0KiwgVHlwZUJ1aWxkZXI6OkFycmF5PFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlU2hlZXRIZWFkZXI+Kik7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBiaW5k
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogdmlh
SW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCosIGJvb2wgY3JlYXRlSWZBYnNlbnQpOwogICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKIAotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVs
ZUxpc3QpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckF0
dHJpYnV0ZXNTdHlsZShFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NT
UnVsZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBi
dWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50Kik7CiAKICAgICAvLyBJbnNwZWN0
b3JET01BZ2VudDo6RE9NTGlzdGVuZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCBiOGY3ZWFlNzEwYzJjMWVhNDJjMzFj
NzdkNDRjNGRjN2U2MTAzNDM3Li5kM2UxMTI1ODAyNWYyNWM5YjBlODYyNGMzM2UzMTE1M2JlMjM4
NTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCkBAIC01Nyw2ICs1Nyw4IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK3VzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpBcnJh
eTsKKwogY2xhc3MgUGFyc2VkU3R5bGVTaGVldCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiA+IFNvdXJjZURhdGE7CkBAIC0x
MTUsMzYgKzExNyw0MCBAQCBlbnVtIE1lZGlhTGlzdFNvdXJjZSB7CiAgICAgTWVkaWFMaXN0U291
cmNlSW1wb3J0UnVsZQogfTsKIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSkKK3N0YXRpYyBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdl
T2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+
c2V0TnVtYmVyKCJzdGFydCIsIHJhbmdlLnN0YXJ0KTsKLSAgICByZXN1bHQtPnNldE51bWJlcigi
ZW5kIiwgcmFuZ2UuZW5kKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFu
Z2U+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQorICAg
ICAgICAuc2V0U3RhcnQocmFuZ2Uuc3RhcnQpCisgICAgICAgIC5zZXRFbmQocmFuZ2UuZW5kKTsK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlhTGlzdCogbWVkaWEsIE1l
ZGlhTGlzdFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQor
c3RhdGljIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFP
YmplY3QoY29uc3QgTWVkaWFMaXN0KiBtZWRpYSwgTWVkaWFMaXN0U291cmNlIG1lZGlhTGlzdFNv
dXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVkaWFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFR5cGVC
dWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OkVudW0gc291cmNlOwogICAgIHN3aXRjaCAo
bWVkaWFMaXN0U291cmNlKSB7CiAgICAgY2FzZSBNZWRpYUxpc3RTb3VyY2VNZWRpYVJ1bGU6Ci0g
ICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZSIsICJtZWRpYVJ1bGUiKTsKKyAg
ICAgICAgc291cmNlID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZTo6TWVkaWFS
dWxlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlhTGlzdFNvdXJjZUltcG9ydFJ1bGU6
Ci0gICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZSIsICJpbXBvcnRSdWxlIik7
CisgICAgICAgIHNvdXJjZSA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6Oklt
cG9ydFJ1bGU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFMaXN0U291cmNlTGlua2Vk
U2hlZXQ6Ci0gICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZSIsICJsaW5rZWRT
aGVldCIpOworICAgICAgICBzb3VyY2UgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291
cmNlOjpMaW5rZWRTaGVldDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUxpc3RTb3Vy
Y2VJbmxpbmVTaGVldDoKLSAgICAgICAgbWVkaWFPYmplY3QtPnNldFN0cmluZygic291cmNlIiwg
ImlubGluZVNoZWV0Iik7CisgICAgICAgIHNvdXJjZSA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU01l
ZGlhOjpTb3VyY2U6OklubGluZVNoZWV0OwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+IG1lZGlhT2JqZWN0ID0gVHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTTWVkaWE6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRUZXh0KG1lZGlhLT5tZWRp
YVRleHQoKSkKKyAgICAgICAgLnNldFNvdXJjZShzb3VyY2UpOworCiAgICAgaWYgKCFzb3VyY2VV
UkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZVVS
TCIsIHNvdXJjZVVSTCk7Ci0gICAgICAgIG1lZGlhT2JqZWN0LT5zZXROdW1iZXIoInNvdXJjZUxp
bmUiLCBtZWRpYS0+bGFzdExpbmUoKSk7CisgICAgICAgIG1lZGlhT2JqZWN0LT5zZXRTb3VyY2VV
Ukwoc291cmNlVVJMKTsKKyAgICAgICAgbWVkaWFPYmplY3QtPnNldFNvdXJjZUxpbmUobWVkaWEt
Pmxhc3RMaW5lKCkpOwogICAgIH0KLSAgICBtZWRpYU9iamVjdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwg
bWVkaWEtPm1lZGlhVGV4dCgpKTsKICAgICByZXR1cm4gbWVkaWFPYmplY3QucmVsZWFzZSgpOwog
fQogCkBAIC0xNzAsNyArMTc2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFz
Q1NTUnVsZUxpc3QoQ1NTUnVsZSogcnVsZSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHZv
aWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIHJ1bGUsIEluc3BlY3RvckFycmF5KiBtZWRp
YUFycmF5KQorc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIHJ1bGUsIEFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiogbWVkaWFBcnJheSkKIHsKICAgICBNZWRp
YUxpc3QqIG1lZGlhTGlzdDsKICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlID0gcnVsZTsKQEAgLTE5
OCw3ICsyMDQsNyBAQCBzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVs
ZSwgSW5zcGVjdG9yQXJyYXkqIG1lZGlhQXJyYXkpCiAgICAgICAgICAgICBzb3VyY2VVUkwgPSAi
IjsKIAogICAgICAgICBpZiAobWVkaWFMaXN0ICYmIG1lZGlhTGlzdC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICBtZWRpYUFycmF5LT5wdXNoT2JqZWN0KGJ1aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0
LCBpc01lZGlhUnVsZSA/IE1lZGlhTGlzdFNvdXJjZU1lZGlhUnVsZSA6IE1lZGlhTGlzdFNvdXJj
ZUltcG9ydFJ1bGUsIHNvdXJjZVVSTCkpOworICAgICAgICAgICAgbWVkaWFBcnJheS0+YWRkSXRl
bShidWlsZE1lZGlhT2JqZWN0KG1lZGlhTGlzdCwgaXNNZWRpYVJ1bGUgPyBNZWRpYUxpc3RTb3Vy
Y2VNZWRpYVJ1bGUgOiBNZWRpYUxpc3RTb3VyY2VJbXBvcnRSdWxlLCBzb3VyY2VVUkwpKTsKIAog
ICAgICAgICBpZiAocGFyZW50UnVsZS0+cGFyZW50UnVsZSgpKQogICAgICAgICAgICAgcGFyZW50
UnVsZSA9IHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKTsKQEAgLTI0MywzNiArMjQ5LDM0IEBAIElu
c3BlY3RvclN0eWxlOjp+SW5zcGVjdG9yU3R5bGUoKQogewogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAor
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CiAgICAg
aWYgKCFtX3N0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJzdHls
ZUlkIiwgbV9zdHlsZUlkLmFzSW5zcGVjdG9yVmFsdWUoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0
U3R5bGVJZChtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVlKCkpOwogCi0gICAgcmVzdWx0LT5zZXRT
dHJpbmcoIndpZHRoIiwgbV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7Ci0gICAg
cmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhl
aWdodCIpKTsKKyAgICByZXN1bHQtPnNldFdpZHRoKG1fc3R5bGUtPmdldFByb3BlcnR5VmFsdWUo
IndpZHRoIikpOworICAgIHJlc3VsdC0+c2V0SGVpZ2h0KG1fc3R5bGUtPmdldFByb3BlcnR5VmFs
dWUoImhlaWdodCIpKTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0
YSA9IG1fcGFyZW50U3R5bGVTaGVldCA/IG1fcGFyZW50U3R5bGVTaGVldC0+cnVsZVNvdXJjZURh
dGFGb3IobV9zdHlsZS5nZXQoKSkgOiAwOwogICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgicmFuZ2UiLCBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURh
dGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UpKTsKLQotICAgIHBvcHVsYXRlT2Jq
ZWN0V2l0aFN0eWxlUHJvcGVydGllcyhyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXN1bHQtPnNl
dFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9y
Q29tcHV0ZWRTdHlsZSgpIGNvbnN0CitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4gSW5zcGVjdG9yU3R5bGU6
OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4gPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
Q29tcHV0ZWRTdHlsZVByb3BlcnR5Pjo6Y3JlYXRlKCk7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlUHJvcGVydHk+IHByb3BlcnRpZXM7CiAgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9w
ZXJ0aWVzKTsKIAogICAgIGZvciAoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+OjppdGVy
YXRvciBpdCA9IHByb3BlcnRpZXMuYmVnaW4oKSwgaXRFbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOyBp
dCAhPSBpdEVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEm
IHByb3BlcnR5RW50cnkgPSBpdC0+c291cmNlRGF0YTsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZW50cnkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBlbnRy
eS0+c2V0U3RyaW5nKCJuYW1lIiwgcHJvcGVydHlFbnRyeS5uYW1lKTsKLSAgICAgICAgZW50cnkt
PnNldFN0cmluZygidmFsdWUiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKLSAgICAgICAgcmVzdWx0
LT5wdXNoT2JqZWN0KGVudHJ5KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gZW50cnkgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0
eUVudHJ5Lm5hbWUpCisgICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSk7
CisgICAgICAgIHJlc3VsdC0+YWRkSXRlbShlbnRyeSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
c3VsdC5yZWxlYXNlKCk7CkBAIC00NDksMzkgKzQ1Myw0MSBAQCBib29sIEluc3BlY3RvclN0eWxl
Ojpwb3B1bGF0ZUFsbFByb3BlcnRpZXMoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+KiBy
ZXN1bAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvclN0eWxlOjpwb3B1bGF0
ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQpIGNvbnN0
CitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxl
UHJvcGVydHk+IHByb3BlcnRpZXM7CiAgICAgcG9wdWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0
aWVzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllc09iamVjdCA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHNob3J0
aGFuZEVudHJpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5OworICAgIFJlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0
eT4gPiBwcm9wZXJ0aWVzT2JqZWN0ID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVy
dHk+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yT2JqZWN0PiA+IHNob3J0
aGFuZEVudHJpZXMgPSBBcnJheTxJbnNwZWN0b3JPYmplY3Q+OjpjcmVhdGUoKTsKKyAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5PiA+IHByb3Bl
cnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eTsKICAgICBIYXNoU2V0PFN0cmluZz4gZm91
bmRTaG9ydGhhbmRzOwogCiAgICAgZm9yIChWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT46
Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpLCBpdEVuZCA9IHByb3BlcnRpZXMuZW5k
KCk7IGl0ICE9IGl0RW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNl
RGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRhOwogICAgICAgICBjb25zdCBTdHJp
bmcmIG5hbWUgPSBwcm9wZXJ0eUVudHJ5Lm5hbWU7CiAKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBw
cm9wZXJ0aWVzT2JqZWN0LT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKLSAgICAgICAgU3RyaW5nIHN0
YXR1cyA9IGl0LT5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiYWN0aXZlIjsKKyAgICAgICAgVHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6RW51bSBzdGF0dXMgPSBpdC0+ZGlz
YWJsZWQgPyBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpEaXNhYmxlZCA6
IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkFjdGl2ZTsKKworICAgICAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0gVHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0TmFtZShu
YW1lKQorICAgICAgICAgICAgLnNldFZhbHVlKHByb3BlcnR5RW50cnkudmFsdWUpOworCisgICAg
ICAgIHByb3BlcnRpZXNPYmplY3QtPmFkZEl0ZW0ocHJvcGVydHkpOwogCiAgICAgICAgIC8vIERl
ZmF1bHQgInBhcnNlZE9rIiA9PSB0cnVlLgogICAgICAgICBpZiAoIXByb3BlcnR5RW50cnkucGFy
c2VkT2spCi0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBmYWxz
ZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UGFyc2VkT2soZmFsc2UpOwogICAgICAgICBp
ZiAoaXQtPmhhc1Jhd1RleHQoKSkKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInRl
eHQiLCBpdC0+cmF3VGV4dCk7Ci0gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoIm5hbWUiLCBu
YW1lKTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBwcm9wZXJ0eUVudHJ5
LnZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRUZXh0KGl0LT5yYXdUZXh0KTsKIAog
ICAgICAgICAvLyBEZWZhdWx0ICJwcmlvcml0eSIgPT0gIiIuCiAgICAgICAgIGlmIChwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCkKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInByaW9y
aXR5IiwgImltcG9ydGFudCIpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFByaW9yaXR5KCJp
bXBvcnRhbnQiKTsKICAgICAgICAgaWYgKCFpdC0+ZGlzYWJsZWQpIHsKICAgICAgICAgICAgIGlm
IChpdC0+aGFzU291cmNlKSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4o
ImltcGxpY2l0IiwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRPYmplY3Qo
InJhbmdlIiwgYnVpbGRTb3VyY2VSYW5nZU9iamVjdChwcm9wZXJ0eUVudHJ5LnJhbmdlKSk7Cisg
ICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEltcGxpY2l0KGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChwcm9wZXJ0eUVu
dHJ5LnJhbmdlKSk7CiAKICAgICAgICAgICAgICAgICAvLyBQYXJzZWQgcHJvcGVydHkgb3ZlcnJp
ZGVzIGFueSBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUuIE5vbi1wYXJzZWQgcHJvcGVydHkg
b3ZlcnJpZGVzCiAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMgbm9uLXBhcnNlZCBwcm9wZXJ0
eSB3aXRoIHRoZSBzYW1lIG5hbWUgKGlmIGFueSkuCkBAIC00ODksNyArNDk1LDcgQEAgdm9pZCBJ
bnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rv
ck9iamVjdCogcmVzdWx0KQogICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
ZCA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KGNzc1Byb3BlcnR5SUQobmFtZSkpOwogICAg
ICAgICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyB0byB0cmVhdCBub24t
cHJlZml4ZWQgYW5kIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lcyB0aGUgc2FtZSAob3Bh
Y2l0eSB2cy4gLXdlYmtpdC1vcGFjaXR5KS4KICAgICAgICAgICAgICAgICBTdHJpbmcgY2Fub25p
Y2FsUHJvcGVydHlOYW1lID0gcHJvcGVydHlJZCA/IFN0cmluZyhnZXRQcm9wZXJ0eU5hbWUocHJv
cGVydHlJZCkpIDogbmFtZTsKLSAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1By
ZXZpb3VzQWN0aXZlUHJvcGVydHkuZmluZChjYW5vbmljYWxQcm9wZXJ0eU5hbWUpOworICAgICAg
ICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJv
cGVydHk+ID46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAgICBp
ZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVuZCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKQogICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CkBAIC01MDMsNyAr
NTA5LDcgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9w
ZXJ0aWVzKEluc3BlY3Rvck9iamVjdCogcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFt
ZSwgcHJvcGVydHkpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzdGF0dXMi
LCAiaW5hY3RpdmUiKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0
U3RhdHVzKFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlKTsK
ICAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+cmVtb3ZlKCJzaG9ydGhhbmRO
YW1lIik7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNTExLDIxICs1MTcsMjEgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZTo6cG9wdWxh
dGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rvck9iamVjdCogcmVzdWx0KQogICAg
ICAgICAgICAgICAgIGJvb2wgaW1wbGljaXQgPSBtX3N0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQo
bmFtZSk7CiAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCAiaW1wbGljaXQiID09IGZhbHNlLgog
ICAgICAgICAgICAgICAgIGlmIChpbXBsaWNpdCkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgc3RhdHVz
ID0gIiI7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsK
KyAgICAgICAgICAgICAgICBzdGF0dXMgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6
U3RhdHVzOjpTdHlsZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vIERl
ZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAgICAgaWYgKCFzdGF0dXMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgc3RhdHVzKTsKKyAg
ICAgICAgaWYgKHN0YXR1cyAhPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVz
OjpTdHlsZSkKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdGF0dXMoc3RhdHVzKTsKIAogICAg
ICAgICBpZiAocHJvcGVydHlFbnRyeS5wYXJzZWRPaykgewogICAgICAgICAgICAgLy8gQm90aCBm
b3Igc3R5bGUtb3JpZ2luYXRlZCBhbmQgcGFyc2VkIHNvdXJjZSBwcm9wZXJ0aWVzLgogICAgICAg
ICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5h
bWUpOwogICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gRGVmYXVsdCAic2hvcnRoYW5kTmFtZSIgPT0gIiIuCi0gICAgICAgICAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAgICAg
ICAgICAgICAgcHJvcGVydHktPnNldFNob3J0aGFuZE5hbWUoc2hvcnRoYW5kKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kRW50cnkgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtNTM4LDggKzU0NCwxMCBAQCB2b2lkIEluc3BlY3Rv
clN0eWxlOjpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0
KiByZXN1bHQpCiAgICAgICAgIC8vIGVsc2Ugc2hvcnRoYW5kTmFtZSBpcyBub3Qgc2V0CiAgICAg
fQogCi0gICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHByb3BlcnRpZXNPYmpl
Y3QpOwotICAgIHJlc3VsdC0+c2V0QXJyYXkoInNob3J0aGFuZEVudHJpZXMiLCBzaG9ydGhhbmRF
bnRyaWVzKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IHJlc3VsdCA9
IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAuc2V0Q3NzUHJv
cGVydGllcyhwcm9wZXJ0aWVzT2JqZWN0KQorICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhz
aG9ydGhhbmRFbnRyaWVzKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogYm9v
bCBJbnNwZWN0b3JTdHlsZTo6YXBwbHlTdHlsZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAt
ODI4LDgxICs4MzYsODIgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxl
Rm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdAogCiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxl
U2hlZXQoKQorUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAgICBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0
eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXN1bHQtPnNldFN0
cmluZygic3R5bGVTaGVldElkIiwgaWQoKSk7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NS
dWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoc3R5bGVTaGVldCk7Ci0gICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBjc3NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlz
dC5nZXQoKSk7Ci0gICAgcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNl
KCkpOworCisgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBy
ZXN1bHQgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKKyAg
ICAgICAgLnNldFN0eWxlU2hlZXRJZChpZCgpKQorICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJh
eUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVl
dFRleHQ7CiAgICAgYm9vbCBzdWNjZXNzID0gZ2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwogICAg
IGlmIChzdWNjZXNzKQotICAgICAgICByZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHN0eWxlU2hl
ZXRUZXh0KTsKKyAgICAgICAgcmVzdWx0LT5zZXRUZXh0KHN0eWxlU2hlZXRUZXh0KTsKIAogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewogICAgIENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVT
aGVldCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKLSAgICByZXN1bHQtPnNldEJvb2xlYW4oImRpc2FibGVk
Iiwgc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJj
ZVVSTCIsIGZpbmFsVVJMKCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0aXRsZSIsIHN0eWxl
U2hlZXQtPnRpdGxlKCkpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNo
ZWV0SGVhZGVyPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
OjpjcmVhdGUoKQorICAgICAgICAuc2V0U3R5bGVTaGVldElkKGlkKCkpCisgICAgICAgIC5zZXRE
aXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQorICAgICAgICAuc2V0U291cmNlVVJMKGZp
bmFsVVJMKCkpCisgICAgICAgIC5zZXRUaXRsZShzdHlsZVNoZWV0LT50aXRsZSgpKTsKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1
bGUpCitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHls
ZVNoZWV0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gcmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVs
ZTo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9yVGV4dChydWxlLT5zZWxlY3RvclRleHQo
KSkKKyAgICAgICAgLnNldFNvdXJjZUxpbmUocnVsZS0+c3R5bGVSdWxlKCktPnNvdXJjZUxpbmUo
KSkKKyAgICAgICAgLnNldE9yaWdpbihtX29yaWdpbikKKyAgICAgICAgLnNldFN0eWxlKGJ1aWxk
T2JqZWN0Rm9yU3R5bGUocnVsZS0+c3R5bGUoKSkpOworCiAgICAgLy8gInNvdXJjZVVSTCIgaXMg
cHJlc2VudCBvbmx5IGZvciByZWd1bGFyIHJ1bGVzLCBvdGhlcndpc2UgIm9yaWdpbiIgc2hvdWxk
IGJlIHVzZWQgaW4gdGhlIGZyb250ZW5kLgogICAgIGlmIChtX29yaWdpbiA9PSAicmVndWxhciIp
Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCBmaW5hbFVSTCgpKTsKLSAg
ICByZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHJ1bGUtPnN0eWxlUnVsZSgpLT5zb3Vy
Y2VMaW5lKCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdpbik7Cisg
ICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCi0gICAgcmVzdWx0LT5z
ZXRPYmplY3QoInN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CiAg
ICAgaWYgKGNhbkJpbmQoKSkgewogICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVs
ZSkpOwogICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoInJ1bGVJZCIsIGlkLmFzSW5zcGVjdG9yVmFsdWUoKSk7CisgICAgICAgICAgICByZXN1
bHQtPnNldFJ1bGVJZChpZC5hc1Byb3RvY29sVmFsdWUoKSk7CiAgICAgfQogCiAgICAgUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRh
UmVhZHkoKSkKICAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0
eWxlKCkpOwogICAgIGlmIChzb3VyY2VEYXRhKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHNlbGVjdG9yUmFuZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAg
ICBzZWxlY3RvclJhbmdlLT5zZXROdW1iZXIoInN0YXJ0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JM
aXN0UmFuZ2Uuc3RhcnQpOwotICAgICAgICBzZWxlY3RvclJhbmdlLT5zZXROdW1iZXIoImVuZCIs
IHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgc2VsZWN0b3JSYW5nZS5yZWxlYXNlKCkpOworICAgICAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHNlbGVjdG9yUmFuZ2UgPSBU
eXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRT
dGFydChzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCkKKyAgICAgICAgICAgIC5z
ZXRFbmQoc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRTZWxlY3RvclJhbmdlKHNlbGVjdG9yUmFuZ2UucmVsZWFzZSgpKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1lZGlhQXJyYXkgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiA+IG1l
ZGlhQXJyYXkgPSBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT46OmNyZWF0ZSgpOwog
CiAgICAgZmlsbE1lZGlhTGlzdENoYWluKHJ1bGUsIG1lZGlhQXJyYXkuZ2V0KCkpOwogICAgIGlm
IChtZWRpYUFycmF5LT5sZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgibWVkaWEi
LCBtZWRpYUFycmF5LnJlbGVhc2UoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0TWVkaWEobWVkaWFB
cnJheS5yZWxlYXNlKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVj
dEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQpA
QCAtOTEwLDEzICs5MTksMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWMKIAogICAgIEluc3Bl
Y3RvckNTU0lkIGlkID0gcnVsZU9yU3R5bGVJZChzdHlsZSk7CiAgICAgaWYgKGlkLmlzRW1wdHko
KSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBib2d1c1N0eWxlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgYm9ndXNTdHlsZS0+c2V0QXJyYXkoImNzc1By
b3BlcnRpZXMiLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOwotICAgICAgICBib2d1c1N0eWxl
LT5zZXRPYmplY3QoInNob3J0aGFuZEVudHJpZXMiLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBib2d1c1N0eWxl
ID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0
Q3NzUHJvcGVydGllcyhBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0
ZSgpKQorICAgICAgICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXk8SW5zcGVjdG9yT2Jq
ZWN0Pjo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm4gYm9ndXNTdHlsZS5yZWxlYXNlKCk7CiAg
ICAgfQogICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBpbnNwZWN0
b3JTdHlsZUZvcklkKGlkKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBp
bnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpOworICAgIFJlZlB0cjxUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoKTsKIAogICAgIC8vIFN0eWxlIHRleHQgY2Fubm90IGJlIHJldHJpZXZlZCB3aXRo
b3V0IHN0eWxlc2hlZXQsIHNvIHNldCBjc3NUZXh0IGhlcmUuCiAgICAgaWYgKHNvdXJjZURhdGEp
IHsKQEAgLTkyNCw3ICs5MzMsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlYwogICAgICAgICBi
b29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZzaGVldFRleHQpOwogICAgICAgICBpZiAoc3VjY2Vzcykg
ewogICAgICAgICAgICAgY29uc3QgU291cmNlUmFuZ2UmIGJvZHlSYW5nZSA9IHNvdXJjZURhdGEt
PnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2U7Ci0gICAgICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygiY3NzVGV4dCIsIHNoZWV0VGV4dC5zdWJzdHJpbmcoYm9keVJhbmdlLnN0YXJ0LCBi
b2R5UmFuZ2UuZW5kIC0gYm9keVJhbmdlLnN0YXJ0KSk7CisgICAgICAgICAgICByZXN1bHQtPnNl
dENzc1RleHQoc2hlZXRUZXh0LnN1YnN0cmluZyhib2R5UmFuZ2Uuc3RhcnQsIGJvZHlSYW5nZS5l
bmQgLSBib2R5UmFuZ2Uuc3RhcnQpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggYWEyOTNjMmNkNDM0
YWY5NzY5NzQ5YzkwOGM0ZTk0NGE0NjNmODM2OS4uOWM4ZWFlMGQ5MGY5MmUwOTBjYzQ1M2U0YmRh
YTk0MjE1YmZkNjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JT
dHlsZVRleHRFZGl0b3IuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUeXBlQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAK
QEAgLTc5LDE0ICs4MCwxNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRJZDsgfQogICAgIHVuc2lnbmVkIG9yZGlu
YWwoKSBjb25zdCB7IHJldHVybiBtX29yZGluYWw7IH0KIAotICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGFzSW5zcGVjdG9yVmFsdWUoKSBjb25zdAorICAgIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4gYXNQcm90b2NvbFZhbHVlKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6
Om51bGwoKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgbV9vcmRpbmFsKTsKKyAgICAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlSWQ+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlSWQ6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0U3R5bGVTaGVldElkKG1fc3R5
bGVTaGVldElkKQorICAgICAgICAgICAgLnNldE9yZGluYWwobV9vcmRpbmFsKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgfQogCkBAIC0xMzAsOCArMTMxLDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0eWxlKCk7CiAKICAgICBDU1NTdHlsZURlY2xh
cmF0aW9uKiBjc3NTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0Owot
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxl
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gYnVp
bGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiBidWlsZEFy
cmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzRGlzYWJsZWRQcm9wZXJ0
aWVzKCkgY29uc3QgeyByZXR1cm4gIW1fZGlzYWJsZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKTsgfQog
ICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJpbmcmIHRl
eHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICBib29sIHRvZ2dsZVByb3BlcnR5KHVuc2lnbmVkIGluZGV4LCBib29sIGRpc2FibGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTE0MSw3ICsxNDIsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBzdHls
ZVRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgcG9wdWxhdGVBbGxQcm9wZXJ0
aWVzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3BlcnR5PiogcmVzdWx0KSBjb25zdDsKLSAgICB2
b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0b3JPYmplY3QqIHJl
c3VsdCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4g
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0OwogICAgIGJvb2wgYXBwbHlTdHlsZVRleHQoY29u
c3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIHNob3J0aGFuZFZhbHVlKGNvbnN0IFN0cmluZyYgc2hv
cnRoYW5kUHJvcGVydHkpIGNvbnN0OwogICAgIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShjb25z
dCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KSBjb25zdDsKQEAgLTE4MSwxMCArMTgyLDEwIEBA
IHB1YmxpYzoKICAgICBDU1NTdHlsZVJ1bGUqIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgZGVsZXRlUnVsZShjb25zdCBJbnNwZWN0b3JD
U1NJZCYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGVGb3JJZChjb25z
dCBJbnNwZWN0b3JDU1NJZCYpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwotICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOworICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVl
dEJvZHk+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0
SW5mbygpOworICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gYnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOworICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiop
OwogICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KGNvbnN0IEluc3BlY3RvckNTU0lkJiwgdW5zaWdu
ZWQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3Ry
aW5nKiBvbGRQcm9wZXJ0eVRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHRvZ2dsZVBy
b3BlcnR5KGNvbnN0IEluc3BlY3RvckNTU0lkJiwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgYm9v
bCBkaXNhYmxlLCBFeGNlcHRpb25Db2RlJik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133449</attachid>
            <date>2012-03-23 02:38:32 -0700</date>
            <delta_ts>2012-03-26 02:05:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81923-20120323133828.patch</filename>
            <type>text/plain</type>
            <size>48032</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNjk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY4ZTkyMjk3MWM1NzE0
ZjU2Y2UzNjM5ZmI5NDExZmM1Y2YzYzc3NC4uMzk4ZDFiNzk1NjljZTUwYzRhOTJkNmZjNDQ1NTkz
N2MxOGEwODk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAzLTIyICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTWlncmF0ZSBJbnNwZWN0b3JDU1NBZ2VudCB0byBzdHJpY3QgcHJvdG9jb2wgdHlwZXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxOTIzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwOgorICAgICAgICAoU2VsZWN0b3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yUHJvZmlsZTo6dG9JbnNwZWN0b3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ1NTQWdlbnQ6OmNsZWFyRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c3RvcFNlbGVjdG9yUHJvZmlsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OnN0b3BTZWxlY3RvclByb2ZpbGVySW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hl
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9y
UnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvckNTU0FnZW50KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZFNvdXJj
ZVJhbmdlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTWVkaWFPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNo
ZWV0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjphc1Byb3RvY29sVmFsdWUp
OgorICAgICAgICAoSW5zcGVjdG9yU3R5bGUpOgorICAgICAgICAoSW5zcGVjdG9yU3R5bGVTaGVl
dCk6CisKIDIwMTItMDMtMjIgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW50cm9kdWNlIFNjcmlwdEJvdW5kL1NjcmlwdFVu
Ym91bmQgZXZlbnRzIGluIFNjcmlwdE1hcHBpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmluZGV4IGVjOTc1MmU5YTFjNmEyMDZj
N2EyMTE2NGJmZWQ0MDVhNzNhZjQ2MjEuLjA0YjE2ZjQ1MmI1OTY1NmY1NTBjNjEyZDMxNmM5ODcw
ZTlhMDBmYzEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CkBAIC01OSw3ICs1OSw3IEBAIFRZUEVfTkFNRV9GSVhfTUFQID0gewog
VFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFsiUnVudGltZS5SZW1vdGVP
YmplY3QiLCAiUnVudGltZS5Qcm9wZXJ0eURlc2NyaXB0b3IiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiRGVidWdnZXIuRnVuY3Rpb25EZXRhaWxzIiwgIkRlYnVn
Z2VyLkNhbGxGcmFtZSJdKQogCi1TVFJJQ1RfRU5BQkxFRF9ET01BSU5TID0gWyJEZWJ1Z2dlciIs
ICJQYWdlIl0KK1NUUklDVF9FTkFCTEVEX0RPTUFJTlMgPSBbIkNTUyIsICJEZWJ1Z2dlciIsICJQ
YWdlIl0KIAogCiBjbWRsaW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA4YTQy
OWY1ZDE1MGM3NTBlNmNkYWZiMzM4ZjBlZDExZTYxMGZkYTQ4Li5kY2E4MWNhY2FjNmIzODdkZWVh
NmY5Mzk3YzBhY2VlMjQyZjYwNjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0
b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckhpc3RvcnkuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JTdGF0ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVyLmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5o
IgogI2luY2x1ZGUgIk5vZGUuaCIKQEAgLTExMyw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzdGFydFNlbGVjdG9yKGNvbnN0IENTU1N0eWxlUnVsZSopOwogICAgIHZvaWQgY29tbWl0U2Vs
ZWN0b3IoYm9vbCk7CiAgICAgdm9pZCBjb21taXRTZWxlY3RvclRpbWUoKTsKLSAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdG9JbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gdG9JbnNwZWN0b3JPYmpl
Y3QoKSBjb25zdDsKIAogcHJpdmF0ZToKIApAQCAtMjAxLDkgKzIwMiw5IEBAIGlubGluZSB2b2lk
IFNlbGVjdG9yUHJvZmlsZTo6Y29tbWl0U2VsZWN0b3JUaW1lKCkKICAgICBpdC0+c2Vjb25kLnRv
dGFsVGltZSArPSBwcm9jZXNzaW5nVGltZU1zOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gU2VsZWN0b3JQcm9maWxlOjp0b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0CitQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gU2VsZWN0b3JQcm9maWxlOjp0
b0luc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBz
ZWxlY3RvclByb2ZpbGVEYXRhID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQcm9maWxlRW50
cnk+ID4gc2VsZWN0b3JQcm9maWxlRGF0YSA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRl
cjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT46OmNyZWF0ZSgpOwogICAgIGZvciAoUnVsZU1h
dGNoaW5nU3RhdHNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9ydWxlTWF0Y2hpbmdTdGF0cy5i
ZWdpbigpOyBpdCAhPSBtX3J1bGVNYXRjaGluZ1N0YXRzLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4gZW50cnkgPSBU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgIC5zZXRTZWxlY3RvcihpdC0+c2Vjb25kLnNlbGVjdG9yKQpAQCAtMjEyLDcgKzIxMyw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBTZWxlY3RvclByb2ZpbGU6OnRvSW5zcGVjdG9y
T2JqZWN0KCkgY29uc3QKICAgICAgICAgICAgIC5zZXRUaW1lKGl0LT5zZWNvbmQudG90YWxUaW1l
KQogICAgICAgICAgICAgLnNldEhpdENvdW50KGl0LT5zZWNvbmQuaGl0cykKICAgICAgICAgICAg
IC5zZXRNYXRjaENvdW50KGl0LT5zZWNvbmQubWF0Y2hlcyk7Ci0gICAgICAgIHNlbGVjdG9yUHJv
ZmlsZURhdGEtPnB1c2hPYmplY3QoZW50cnkucmVsZWFzZSgpKTsKKyAgICAgICAgc2VsZWN0b3JQ
cm9maWxlRGF0YS0+YWRkSXRlbShlbnRyeS5yZWxlYXNlKCkpOwogICAgIH0KIAogICAgIFJlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IHJlc3VsdCA9IFR5cGVCdWlsZGVy
OjpDU1M6OlNlbGVjdG9yUHJvZmlsZTo6Y3JlYXRlKCkKQEAgLTQ4OCw3ICs0ODksNyBAQCB2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpjbGVhckZyb250ZW5kKCkKICAgICBtX2Zyb250ZW5kID0gMDsK
ICAgICBjbGVhclBzZXVkb1N0YXRlKHRydWUpOwogICAgIFN0cmluZyBlcnJvclN0cmluZzsKLSAg
ICBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoJmVycm9yU3RyaW5nKTsKKyAgICBzdG9wU2VsZWN0
b3JQcm9maWxlckltcGwoJmVycm9yU3RyaW5nLCBmYWxzZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCkBAIC01NjIsNyArNTYzLDcgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6cmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKEVsZW1lbnQqIGVs
ZW1lbnQsIEluc3AKICAgICAgICAgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVj
dG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9D
bGFzc2VzLCBjb25zdCBib29sKiBuZWVkUHNldWRvLCBjb25zdCBib29sKiBuZWVkSW5oZXJpdGVk
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4mIHBzZXVkb0lkUnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4mIGluaGVyaXRl
ZEVudHJpZXMpCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9k
ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1
ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OlBzZXVkb0lkUnVsZXM+ID4mIHBz
ZXVkb0lkUnVsZXMsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT4gPiYgaW5oZXJpdGVkRW50cmllcykKIHsKICAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
ZWxlbWVudCkKQEAgLTU3NiwxNSArNTc3LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAg
ICAgbWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5n
ZXQoKSk7CiAKICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCi0gICAgaWYgKCFuZWVkUHNldWRvIHx8
ICpuZWVkUHNldWRvKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHNldWRvRWxl
bWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgaWYgKCFpbmNsdWRlUHNldWRv
IHx8ICppbmNsdWRlUHNldWRvKSB7CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8
VHlwZUJ1aWxkZXI6OkNTUzo6UHNldWRvSWRSdWxlcz4gPiBwc2V1ZG9FbGVtZW50cyA9IFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJTVF9QVUJMSUNfUFNFVURPSUQ7
IHBzZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9JRDsgcHNldWRvSWQgPSBzdGF0
aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgewogICAgICAgICAgICAgUmVmUHRyPENT
U1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVs
ZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsK
ICAgICAgICAgICAgIGlmIChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkg
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBzZXVkb1N0eWxlcyA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgcHNldWRvU3R5bGVz
LT5zZXROdW1iZXIoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOwotICAg
ICAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJheUZv
clJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSkpOwotICAgICAgICAgICAgICAgIHBzZXVkb0Vs
ZW1lbnRzLT5wdXNoT2JqZWN0KHBzZXVkb1N0eWxlcy5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzPiBwc2V1ZG9TdHlsZXMg
PSBUeXBlQnVpbGRlcjo6Q1NTOjpQc2V1ZG9JZFJ1bGVzOjpjcmVhdGUoKQorICAgICAgICAgICAg
ICAgICAgICAuc2V0UHNldWRvSWQoc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpCisgICAgICAg
ICAgICAgICAgICAgIC5zZXRSdWxlcyhidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVz
LmdldCgpKSk7CisgICAgICAgICAgICAgICAgcHNldWRvRWxlbWVudHMtPmFkZEl0ZW0ocHNldWRv
U3R5bGVzLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNTkyLDIx
ICs1OTMsMjEgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5v
ZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICB9CiAKICAgICAvLyBJbmhl
cml0ZWQgc3R5bGVzLgotICAgIGlmICghbmVlZEluaGVyaXRlZCB8fCAqbmVlZEluaGVyaXRlZCkg
ewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBpZiAoIWluY2x1ZGVJbmhlcml0ZWQgfHwgKmluY2x1
ZGVJbmhlcml0ZWQpIHsKKyAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVp
bGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5PiA+IGluaGVyaXRlZFN0eWxlcyA9IFR5cGVC
dWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3Jl
YXRlKCk7CiAgICAgICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCk7CiAgICAgICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBh
cmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICAg
ICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTZWxlY3Rv
ci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgQ1NTU3R5bGVTZWxlY3Rvcjo6
QWxsQ1NTUnVsZXMpOworICAgICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkluaGVy
aXRlZFN0eWxlRW50cnk+IHBhcmVudFN0eWxlID0gVHlwZUJ1aWxkZXI6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlZENTU1J1bGVz
KGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMuZ2V0KCkpKTsKICAgICAg
ICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxl
KCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHBhcmVudEVsZW1l
bnQpOwogICAgICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHls
ZVNoZWV0LT5pZCgpLCAwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNl
dElubGluZVN0eWxlKHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+
c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0LT5pZCgpLCAwKSkpKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50U2VsZWN0b3Ig
PSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKLSAgICAg
ICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2Vs
ZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIENTU1N0eWxlU2VsZWN0
b3I6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRBcnJheSgibWF0
Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcy5n
ZXQoKSkpOwotICAgICAgICAgICAgaW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0
eWxlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBpbmhlcml0ZWRTdHlsZXMtPmFkZEl0ZW0ocGFy
ZW50U3R5bGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRF
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgIH0KIApAQCAtNjE0LDcgKzYxNSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYgYXR0cmlidXRlc1N0eWxlKQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mIGlubGluZVN0eWxlLCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCiB7CiAgICAg
RWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAg
ICBpZiAoIWVsZW1lbnQpCkBAIC02MjUsMTEgKzYyNiwxMSBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50
IG5vZAogICAgICAgICByZXR1cm47CiAKICAgICBpbmxpbmVTdHlsZSA9IHN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKGVsZW1l
bnQpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gYXR0cmlidXRlcyA9
IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKGVsZW1lbnQpOwogICAgIGF0dHJpYnV0ZXNT
dHlsZSA9IGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzLnJlbGVhc2UoKSA6IDA7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9y
Y2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGUpCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNl
ZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiA+JiBzdHlsZSkKIHsKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKQEAgLTY0Miw4ICs2NDMsOSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21w
dXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBubwogICAgIHN0
eWxlID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGVJbmZvcykKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiA+JiBzdHlsZUluZm9z
KQogeworICAgIHN0eWxlSW5mb3MgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogICAgIFZlY3RvcjxEb2N1bWVudCo+
IGRvY3VtZW50cyA9IG1fZG9tQWdlbnQtPmRvY3VtZW50cygpOwogICAgIGZvciAoVmVjdG9yPERv
Y3VtZW50Kj46Oml0ZXJhdG9yIGl0ID0gZG9jdW1lbnRzLmJlZ2luKCk7IGl0ICE9IGRvY3VtZW50
cy5lbmQoKTsgKytpdCkgewogICAgICAgICBTdHlsZVNoZWV0TGlzdCogbGlzdCA9ICgqaXQpLT5z
dHlsZVNoZWV0cygpOwpAQCAtNjU1LDcgKzY1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYK
ICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIHN0eWxlU2hlZXRPYmplY3QpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4m
IHN0eWxlU2hlZXRPYmplY3QpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVl
dElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCkBAIC02ODQsNyArNjg2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAqZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01B
Z2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFByb3BlcnR5VGV4dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBmdWxsU3R5bGVJZCwgaW50IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQp
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGlu
dCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9y
Q1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CkBAIC03MDAsNyArNzAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0
UHJvcGVydHlUZXh0KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEkKICAg
ICAqZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhlYyk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBp
bnQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
cmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxl
SWQsIGludCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElk
KGZ1bGxTdHlsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAgLTcx
Niw3ICs3MTgsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eShFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbgogICAgICplcnJvclN0cmluZyA9
IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCiB7CiAgICAgSW5z
cGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5k
SWQuaXNFbXB0eSgpKTsKQEAgLTcyNywxNSArNzI5LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnNldFJ1bGVTZWxlY3RvcihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0
cjxJCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIHN1Y2Nlc3MgPSBtX2Rv
bUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFNldFJ1bGVTZWxlY3RvckFj
dGlvbihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3VuZElkLCBzZWxlY3RvcikpLCBlYyk7Ci0g
ICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21wb3Vu
ZElkKSk7Ci0gICAgKmVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcoZWMpOwogCiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgIHJlc3VsdCA9IGluc3BlY3RvclN0
eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9y
SWQoY29tcG91bmRJZCkpOworICAgICplcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0
b0Vycm9yU3RyaW5nKGVjKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KQordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkKIHsKICAgICBOb2RlKiBub2RlID0gbV9kb21B
Z2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgY29udGV4dE5vZGVJZCk7CiAgICAgaWYgKCFu
b2RlKQpAQCAtNzYxLDExICs3NjEsMTEgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVs
ZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IGludCBjb250ZXh0Tm9kZUkKICAgICBy
ZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJy
b3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+JiBjc3NQcm9wZXJ0aWVzKQordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyos
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+JiBjc3NQcm9wZXJ0aWVzKQogewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4gPiBwcm9wZXJ0
aWVzID0gVHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBwcm9wZXJ0aWVzLT5w
dXNoU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOworICAgICAgICBwcm9wZXJ0aWVzLT5h
ZGRJdGVtKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOwogCiAgICAgY3NzUHJvcGVydGllcyA9IHBy
b3BlcnRpZXMucmVsZWFzZSgpOwogfQpAQCAtNzc2LDE5ICs3NzYsMjEgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c3RhcnRTZWxlY3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKikKICAgICBtX3N0
YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcsIHRydWUp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+JiBy
ZXN1bHQpCiB7Ci0gICAgc3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKGVycm9yU3RyaW5nLCAmcmVz
dWx0KTsKKyAgICByZXN1bHQgPSBzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoZXJyb3JTdHJpbmcs
IHRydWUpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzdG9wU2VsZWN0b3JQcm9maWxl
ckltcGwoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KQorUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IEluc3BlY3RvckNTU0Fn
ZW50OjpzdG9wU2VsZWN0b3JQcm9maWxlckltcGwoRXJyb3JTdHJpbmcqLCBib29sIG5lZWRQcm9m
aWxlKQogewogICAgIGlmICghbV9zdGF0ZS0+Z2V0Qm9vbGVhbihDU1NBZ2VudFN0YXRlOjppc1Nl
bGVjdG9yUHJvZmlsaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKICAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKENTU0FnZW50U3RhdGU6OmlzU2VsZWN0b3JQcm9maWxpbmcs
IGZhbHNlKTsKLSAgICBpZiAobV9mcm9udGVuZCAmJiByZXN1bHQpCi0gICAgICAgICpyZXN1bHQg
PSBtX2N1cnJlbnRTZWxlY3RvclByb2ZpbGUtPnRvSW5zcGVjdG9yT2JqZWN0KCk7CisgICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0OworICAgIGlmICht
X2Zyb250ZW5kICYmIG5lZWRQcm9maWxlKQorICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRTZWxl
Y3RvclByb2ZpbGUtPnRvSW5zcGVjdG9yT2JqZWN0KCk7CiAgICAgbV9jdXJyZW50U2VsZWN0b3JQ
cm9maWxlLmNsZWFyKCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxNYXRjaFJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlKiBydWxl
KQpAQCAtODQ3LDEwICs4NDksMTAgQEAgRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1l
bnRGb3JJZChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIEluc3BlY3Rv
ckFycmF5KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+KiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7Ci0gICAgcmVzdWx0LT5wdXNoT2JqZWN0
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgcmVzdWx0LT5hZGRJdGVtKGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldEluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHN0eWxlU2hl
ZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBz
dHlsZVNoZWV0LT5pdGVtKGkpOwogICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsK
QEAgLTk0Niw5ICs5NDgsOSBAQCBTdHJpbmcgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdp
bihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqCiAgICAgcmV0dXJuIG9y
aWdpbjsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCitQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZT4gPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUnVsZT46OmNyZWF0ZSgpOwogICAgIGlmICghcnVsZUxpc3QpCiAgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogCkBAIC05NTksMTIgKzk2MSwxMiBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1
bGVMaXN0KgogCiAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBiaW5k
U3R5bGVTaGVldChydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpOwogICAgICAgICBpZiAoc3R5bGVT
aGVldCkKLSAgICAgICAgICAgIHJlc3VsdC0+cHVzaE9iamVjdChzdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclJ1bGUocnVsZSkpOworICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCitQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBp
ZiAoIWVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggMmY5ZGRmNGIx
NDBiYTNiYTQ5ZDU3NWU2Y2I2YTI4M2E2NWE4YThiYy4uZGY5YjIxZDIwYjQ3NTI4NGExZGUxOTUw
NjlkYTc1ZjI1MTczYzA3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKQEAgLTk4LDIzICs5OCwyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldCgp
OwogICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4mIHN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5saW5lU3R5bGVzRm9y
Tm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBp
bmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGF0dHJpYnV0ZXMpOwotICAgIHZp
cnR1YWwgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2Rl
SWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGNv
bnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiYgcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgaW5oZXJpdGVkRW50
cmllcyk7Ci0gICAgdmlydHVhbCB2b2lkIGdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiYgc3R5bGVTaGVldEluZm9zKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBSZWZQdHI8VHlwZUJ1aWxk
ZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiYp
OworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiwg
aW50IG5vZGVJZCwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5
bGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4mIGF0dHJpYnV0ZXMpOworICAg
IHZpcnR1YWwgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBu
b2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMs
IGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQs
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiYg
bWF0Y2hlZENTU1J1bGVzLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpD
U1M6OlBzZXVkb0lkUnVsZXM+ID4mIHBzZXVkb1J1bGVzLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+ID4mIGluaGVyaXRlZEVu
dHJpZXMpOworICAgIHZpcnR1YWwgdm9pZCBnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyos
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4gPiYgc3R5bGVTaGVldEluZm9zKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3R5bGVT
aGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiByZXN1bHQpOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5bGVT
aGVldElkLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlU2hlZXRU
ZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mIHJlc3VsdCk7Ci0gICAgdmlydHVhbCB2b2lkIHRvZ2dsZVByb3BlcnR5KEVycm9yU3Ry
aW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGludCBwcm9wZXJ0
eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiByZXN1bHQpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUnVsZShF
cnJvclN0cmluZyosIGludCBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4m
IHJlc3VsdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb3BlcnR5VGV4dChFcnJvclN0cmluZyos
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBpbnQgcHJvcGVydHlJbmRl
eCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdG9nZ2xlUHJvcGVy
dHkoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJZCwg
aW50IHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVy
cm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+JiByZXN1
bHQpOworICAgIHZpcnR1YWwgdm9pZCBhZGRSdWxlKEVycm9yU3RyaW5nKiwgaW50IGNvbnRleHRO
b2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NSdWxlPiYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVy
dGllcyhFcnJvclN0cmluZyosIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+JiBy
ZXN1bHQpOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2VsZWN0b3JQcm9maWxlcihFcnJvclN0
cmluZyopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU2VsZWN0b3JQcm9maWxlcihFcnJvclN0cmlu
ZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Jik7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTZWxl
Y3RvclByb2ZpbGVyKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNlbGVj
dG9yUHJvZmlsZT4mKTsKIAotICAgIHZvaWQgc3RvcFNlbGVjdG9yUHJvZmlsZXJJbXBsKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qID0gMCk7CisgICAgUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGU+IHN0b3BTZWxlY3RvclByb2ZpbGVySW1w
bChFcnJvclN0cmluZyosIGJvb2wgbmVlZFByb2ZpbGUpOwogICAgIHZvaWQgd2lsbE1hdGNoUnVs
ZShjb25zdCBDU1NTdHlsZVJ1bGUqKTsKICAgICB2b2lkIGRpZE1hdGNoUnVsZShib29sKTsKICAg
ICB2b2lkIHdpbGxQcm9jZXNzUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUqKTsKQEAgLTEzOCwxNSAr
MTM4LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWNhbGNTdHlsZUZvclBzZXVkb1N0YXRlSWZO
ZWVkZWQoRWxlbWVudCosIEluc3BlY3RvckFycmF5KiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVl
dChFbGVtZW50KiBlbGVtZW50KTsKICAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQoRXJyb3JTdHJp
bmcqLCBpbnQgbm9kZUlkKTsKLSAgICB2b2lkIGNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNo
ZWV0KiwgSW5zcGVjdG9yQXJyYXkqKTsKKyAgICB2b2lkIGNvbGxlY3RTdHlsZVNoZWV0cyhDU1NT
dHlsZVNoZWV0KiwgVHlwZUJ1aWxkZXI6OkFycmF5PFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlU2hlZXRIZWFkZXI+Kik7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBiaW5k
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogdmlh
SW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCosIGJvb2wgY3JlYXRlSWZBYnNlbnQpOwogICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYpOwogICAgIFN0cmluZyBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKIAotICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVs
ZUxpc3QpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckF0
dHJpYnV0ZXNTdHlsZShFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NT
UnVsZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBi
dWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShFbGVtZW50Kik7CiAKICAgICAvLyBJbnNwZWN0
b3JET01BZ2VudDo6RE9NTGlzdGVuZXIgaW1wbGVtZW50YXRpb24KICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCBiOGY3ZWFlNzEwYzJjMWVhNDJjMzFj
NzdkNDRjNGRjN2U2MTAzNDM3Li4xYjlhNmI5ZjJhYmI4ZmM3Y2I2N2U1MDJmNTkwNmJmNWY3YzMz
Y2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCkBAIC01Nyw2ICs1Nyw4IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK3VzaW5nIFdlYkNvcmU6OlR5cGVCdWlsZGVyOjpBcnJh
eTsKKwogY2xhc3MgUGFyc2VkU3R5bGVTaGVldCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiA+IFNvdXJjZURhdGE7CkBAIC0x
MTUsMzYgKzExNyw0MSBAQCBlbnVtIE1lZGlhTGlzdFNvdXJjZSB7CiAgICAgTWVkaWFMaXN0U291
cmNlSW1wb3J0UnVsZQogfTsKIAotc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSkKK3N0YXRpYyBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdl
T2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3VsdC0+
c2V0TnVtYmVyKCJzdGFydCIsIHJhbmdlLnN0YXJ0KTsKLSAgICByZXN1bHQtPnNldE51bWJlcigi
ZW5kIiwgcmFuZ2UuZW5kKTsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFu
Z2U+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQorICAg
ICAgICAuc2V0U3RhcnQocmFuZ2Uuc3RhcnQpCisgICAgICAgIC5zZXRFbmQocmFuZ2UuZW5kKTsK
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlhTGlzdCogbWVkaWEsIE1l
ZGlhTGlzdFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQor
c3RhdGljIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFP
YmplY3QoY29uc3QgTWVkaWFMaXN0KiBtZWRpYSwgTWVkaWFMaXN0U291cmNlIG1lZGlhTGlzdFNv
dXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVkaWFPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIC8vIE1h
a2UgY2VydGFpbiBjb21waWxlcnMgaGFwcHkgYnkgaW5pdGlhbGl6aW5nIHxzb3VyY2V8IHVwLWZy
b250LgorICAgIFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OkVudW0gc291cmNl
ID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZTo6SW5saW5lU2hlZXQ7CiAgICAg
c3dpdGNoIChtZWRpYUxpc3RTb3VyY2UpIHsKICAgICBjYXNlIE1lZGlhTGlzdFNvdXJjZU1lZGlh
UnVsZToKLSAgICAgICAgbWVkaWFPYmplY3QtPnNldFN0cmluZygic291cmNlIiwgIm1lZGlhUnVs
ZSIpOworICAgICAgICBzb3VyY2UgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNl
OjpNZWRpYVJ1bGU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWVkaWFMaXN0U291cmNlSW1w
b3J0UnVsZToKLSAgICAgICAgbWVkaWFPYmplY3QtPnNldFN0cmluZygic291cmNlIiwgImltcG9y
dFJ1bGUiKTsKKyAgICAgICAgc291cmNlID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6OlNv
dXJjZTo6SW1wb3J0UnVsZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNZWRpYUxpc3RTb3Vy
Y2VMaW5rZWRTaGVldDoKLSAgICAgICAgbWVkaWFPYmplY3QtPnNldFN0cmluZygic291cmNlIiwg
ImxpbmtlZFNoZWV0Iik7CisgICAgICAgIHNvdXJjZSA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU01l
ZGlhOjpTb3VyY2U6OkxpbmtlZFNoZWV0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIE1lZGlh
TGlzdFNvdXJjZUlubGluZVNoZWV0OgotICAgICAgICBtZWRpYU9iamVjdC0+c2V0U3RyaW5nKCJz
b3VyY2UiLCAiaW5saW5lU2hlZXQiKTsKKyAgICAgICAgc291cmNlID0gVHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTTWVkaWE6OlNvdXJjZTo6SW5saW5lU2hlZXQ7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gbWVkaWFPYmplY3QgPSBU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFRleHQobWVk
aWEtPm1lZGlhVGV4dCgpKQorICAgICAgICAuc2V0U291cmNlKHNvdXJjZSk7CisKICAgICBpZiAo
IXNvdXJjZVVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbWVkaWFPYmplY3QtPnNldFN0cmluZygi
c291cmNlVVJMIiwgc291cmNlVVJMKTsKLSAgICAgICAgbWVkaWFPYmplY3QtPnNldE51bWJlcigi
c291cmNlTGluZSIsIG1lZGlhLT5sYXN0TGluZSgpKTsKKyAgICAgICAgbWVkaWFPYmplY3QtPnNl
dFNvdXJjZVVSTChzb3VyY2VVUkwpOworICAgICAgICBtZWRpYU9iamVjdC0+c2V0U291cmNlTGlu
ZShtZWRpYS0+bGFzdExpbmUoKSk7CiAgICAgfQotICAgIG1lZGlhT2JqZWN0LT5zZXRTdHJpbmco
InRleHQiLCBtZWRpYS0+bWVkaWFUZXh0KCkpOwogICAgIHJldHVybiBtZWRpYU9iamVjdC5yZWxl
YXNlKCk7CiB9CiAKQEAgLTE3MCw3ICsxNzcsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxlKQogICAgIHJldHVybiAwOwogfQogCi1z
dGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwgSW5zcGVjdG9yQXJy
YXkqIG1lZGlhQXJyYXkpCitzdGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSog
cnVsZSwgQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+KiBtZWRpYUFycmF5KQogewog
ICAgIE1lZGlhTGlzdCogbWVkaWFMaXN0OwogICAgIENTU1J1bGUqIHBhcmVudFJ1bGUgPSBydWxl
OwpAQCAtMTk4LDcgKzIwNSw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihDU1NS
dWxlKiBydWxlLCBJbnNwZWN0b3JBcnJheSogbWVkaWFBcnJheSkKICAgICAgICAgICAgIHNvdXJj
ZVVSTCA9ICIiOwogCiAgICAgICAgIGlmIChtZWRpYUxpc3QgJiYgbWVkaWFMaXN0LT5sZW5ndGgo
KSkKLSAgICAgICAgICAgIG1lZGlhQXJyYXktPnB1c2hPYmplY3QoYnVpbGRNZWRpYU9iamVjdCht
ZWRpYUxpc3QsIGlzTWVkaWFSdWxlID8gTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlIDogTWVkaWFM
aXN0U291cmNlSW1wb3J0UnVsZSwgc291cmNlVVJMKSk7CisgICAgICAgICAgICBtZWRpYUFycmF5
LT5hZGRJdGVtKGJ1aWxkTWVkaWFPYmplY3QobWVkaWFMaXN0LCBpc01lZGlhUnVsZSA/IE1lZGlh
TGlzdFNvdXJjZU1lZGlhUnVsZSA6IE1lZGlhTGlzdFNvdXJjZUltcG9ydFJ1bGUsIHNvdXJjZVVS
TCkpOwogCiAgICAgICAgIGlmIChwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCkpCiAgICAgICAgICAg
ICBwYXJlbnRSdWxlID0gcGFyZW50UnVsZS0+cGFyZW50UnVsZSgpOwpAQCAtMjQzLDM2ICsyNTAs
MzQgQEAgSW5zcGVjdG9yU3R5bGU6On5JbnNwZWN0b3JTdHlsZSgpCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgp
IGNvbnN0CitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMo
KTsKICAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0VmFs
dWUoInN0eWxlSWQiLCBtX3N0eWxlSWQuYXNJbnNwZWN0b3JWYWx1ZSgpKTsKKyAgICAgICAgcmVz
dWx0LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWUoKSk7CiAKLSAgICByZXN1
bHQtPnNldFN0cmluZygid2lkdGgiLCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIp
KTsKLSAgICByZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0IiwgbV9zdHlsZS0+Z2V0UHJvcGVydHlW
YWx1ZSgiaGVpZ2h0IikpOworICAgIHJlc3VsdC0+c2V0V2lkdGgobV9zdHlsZS0+Z2V0UHJvcGVy
dHlWYWx1ZSgid2lkdGgiKSk7CisgICAgcmVzdWx0LT5zZXRIZWlnaHQobV9zdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZSgiaGVpZ2h0IikpOwogCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBz
b3VyY2VEYXRhID0gbV9wYXJlbnRTdHlsZVNoZWV0ID8gbV9wYXJlbnRTdHlsZVNoZWV0LT5ydWxl
U291cmNlRGF0YUZvcihtX3N0eWxlLmdldCgpKSA6IDA7CiAgICAgaWYgKHNvdXJjZURhdGEpCi0g
ICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJyYW5nZSIsIGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qo
c291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZSkpOwotCi0gICAgcG9w
dWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5zdHlsZVNv
dXJjZURhdGEtPnN0eWxlQm9keVJhbmdlKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxk
QXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiBJbnNwZWN0
b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAogewotICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRT
dHlsZVByb3BlcnR5PiA+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKICAgICBWZWN0b3I8SW5z
cGVjdG9yU3R5bGVQcm9wZXJ0eT4gcHJvcGVydGllczsKICAgICBwb3B1bGF0ZUFsbFByb3BlcnRp
ZXMoJnByb3BlcnRpZXMpOwogCiAgICAgZm9yIChWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0
eT46Oml0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpLCBpdEVuZCA9IHByb3BlcnRpZXMu
ZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291
cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRhOwotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBlbnRyeSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgIGVudHJ5LT5zZXRTdHJpbmcoIm5hbWUiLCBwcm9wZXJ0eUVudHJ5Lm5hbWUpOwotICAgICAg
ICBlbnRyeS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOwotICAgICAg
ICByZXN1bHQtPnB1c2hPYmplY3QoZW50cnkpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiBlbnRyeSA9IFR5cGVCdWlsZGVyOjpDU1M6
OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXROYW1l
KHByb3BlcnR5RW50cnkubmFtZSkKKyAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5
LnZhbHVlKTsKKyAgICAgICAgcmVzdWx0LT5hZGRJdGVtKGVudHJ5KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKQEAgLTQ0OSwzOSArNDU0LDQxIEBAIGJvb2wgSW5zcGVj
dG9yU3R5bGU6OnBvcHVsYXRlQWxsUHJvcGVydGllcyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eT4qIHJlc3VsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGU6
OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0b3JPYmplY3QqIHJlc3Vs
dCkgY29uc3QKK1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8SW5zcGVj
dG9yU3R5bGVQcm9wZXJ0eT4gcHJvcGVydGllczsKICAgICBwb3B1bGF0ZUFsbFByb3BlcnRpZXMo
JnByb3BlcnRpZXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzT2Jq
ZWN0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gc2hvcnRoYW5kRW50cmllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0eU5hbWVUb1ByZXZp
b3VzQWN0aXZlUHJvcGVydHk7CisgICAgUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1Byb3BlcnR5PiA+IHByb3BlcnRpZXNPYmplY3QgPSBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxBcnJheTxJbnNwZWN0b3JPYmplY3Q+
ID4gc2hvcnRoYW5kRW50cmllcyA9IEFycmF5PEluc3BlY3Rvck9iamVjdD46OmNyZWF0ZSgpOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk+
ID4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8U3Ry
aW5nPiBmb3VuZFNob3J0aGFuZHM7CiAKICAgICBmb3IgKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVBy
b3BlcnR5Pjo6aXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCksIGl0RW5kID0gcHJvcGVy
dGllcy5lbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQpIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVy
dHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAgICAgIHByb3BlcnRpZXNPYmplY3QtPnB1c2hPYmplY3QocHJvcGVydHkpOwotICAgICAgICBT
dHJpbmcgc3RhdHVzID0gaXQtPmRpc2FibGVkID8gImRpc2FibGVkIiA6ICJhY3RpdmUiOworICAg
ICAgICBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpFbnVtIHN0YXR1cyA9
IGl0LT5kaXNhYmxlZCA/IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkRp
c2FibGVkIDogVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6QWN0aXZlOwor
CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4gcHJvcGVydHkg
PSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5z
ZXROYW1lKG5hbWUpCisgICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSk7
CisKKyAgICAgICAgcHJvcGVydGllc09iamVjdC0+YWRkSXRlbShwcm9wZXJ0eSk7CiAKICAgICAg
ICAgLy8gRGVmYXVsdCAicGFyc2VkT2siID09IHRydWUuCiAgICAgICAgIGlmICghcHJvcGVydHlF
bnRyeS5wYXJzZWRPaykKLSAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRP
ayIsIGZhbHNlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRQYXJzZWRPayhmYWxzZSk7CiAg
ICAgICAgIGlmIChpdC0+aGFzUmF3VGV4dCgpKQotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0
cmluZygidGV4dCIsIGl0LT5yYXdUZXh0KTsKLSAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygi
bmFtZSIsIG5hbWUpOwotICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3Bl
cnR5RW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFRleHQoaXQtPnJhd1Rl
eHQpOwogCiAgICAgICAgIC8vIERlZmF1bHQgInByaW9yaXR5IiA9PSAiIi4KICAgICAgICAgaWYg
KHByb3BlcnR5RW50cnkuaW1wb3J0YW50KQotICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmlu
ZygicHJpb3JpdHkiLCAiaW1wb3J0YW50Iik7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UHJp
b3JpdHkoImltcG9ydGFudCIpOwogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewogICAgICAg
ICAgICAgaWYgKGl0LT5oYXNTb3VyY2UpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHktPnNl
dE9iamVjdCgicmFuZ2UiLCBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHByb3BlcnR5RW50cnkucmFu
Z2UpKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0SW1wbGljaXQoZmFsc2UpOworICAg
ICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHBy
b3BlcnR5RW50cnkucmFuZ2UpKTsKIAogICAgICAgICAgICAgICAgIC8vIFBhcnNlZCBwcm9wZXJ0
eSBvdmVycmlkZXMgYW55IHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZS4gTm9uLXBhcnNlZCBw
cm9wZXJ0eSBvdmVycmlkZXMKICAgICAgICAgICAgICAgICAvLyBwcmV2aW91cyBub24tcGFyc2Vk
IHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSAoaWYgYW55KS4KQEAgLTQ4OSw3ICs0OTYsNyBA
QCB2b2lkIEluc3BlY3RvclN0eWxlOjpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMo
SW5zcGVjdG9yT2JqZWN0KiByZXN1bHQpCiAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlkID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oY3NzUHJvcGVydHlJRChuYW1l
KSk7CiAgICAgICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIHByb3BlcnR5IG5hbWVzIHRvIHRy
ZWF0IG5vbi1wcmVmaXhlZCBhbmQgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG5hbWVzIHRoZSBz
YW1lIChvcGFjaXR5IHZzLiAtd2Via2l0LW9wYWNpdHkpLgogICAgICAgICAgICAgICAgIFN0cmlu
ZyBjYW5vbmljYWxQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUlkID8gU3RyaW5nKGdldFByb3BlcnR5
TmFtZShwcm9wZXJ0eUlkKSkgOiBuYW1lOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5n
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5
TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7
CisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NQcm9wZXJ0eT4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZp
b3VzQWN0aXZlUHJvcGVydHkuZmluZChjYW5vbmljYWxQcm9wZXJ0eU5hbWUpOwogICAgICAgICAg
ICAgICAgIGlmIChhY3RpdmVJdCAhPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVy
dHkuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2Vk
T2spCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKQEAg
LTUwMyw3ICs1MTAsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlOjpwb3B1bGF0ZU9iamVjdFdpdGhT
dHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQpCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJv
cGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkSW5hY3Rp
dmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5zZXRTdHJpbmco
InN0YXR1cyIsICJpbmFjdGl2ZSIpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vj
b25kLT5zZXRTdGF0dXMoVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5h
Y3RpdmUpOwogICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25kLT5yZW1vdmUoInNo
b3J0aGFuZE5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91
c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKICAg
ICAgICAgICAgICAgICB9CkBAIC01MTEsMjEgKzUxOCwyMSBAQCB2b2lkIEluc3BlY3RvclN0eWxl
Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoSW5zcGVjdG9yT2JqZWN0KiByZXN1
bHQpCiAgICAgICAgICAgICAgICAgYm9vbCBpbXBsaWNpdCA9IG1fc3R5bGUtPmlzUHJvcGVydHlJ
bXBsaWNpdChuYW1lKTsKICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0ICJpbXBsaWNpdCIgPT0g
ZmFsc2UuCiAgICAgICAgICAgICAgICAgaWYgKGltcGxpY2l0KQotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCB0cnVlKTsKLSAgICAgICAgICAgICAg
ICBzdGF0dXMgPSAiIjsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldEltcGxpY2l0
KHRydWUpOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5OjpTdGF0dXM6OlN0eWxlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAg
ICAgLy8gRGVmYXVsdCAic3RhdHVzIiA9PSAic3R5bGUiLgotICAgICAgICBpZiAoIXN0YXR1cy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCBzdGF0
dXMpOworICAgICAgICBpZiAoc3RhdHVzICE9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5
OjpTdGF0dXM6OlN0eWxlKQorICAgICAgICAgICAgcHJvcGVydHktPnNldFN0YXR1cyhzdGF0dXMp
OwogCiAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7CiAgICAgICAgICAgICAv
LyBCb3RoIGZvciBzdHlsZS1vcmlnaW5hdGVkIGFuZCBwYXJzZWQgc291cmNlIHByb3BlcnRpZXMu
CiAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9y
dGhhbmQobmFtZSk7CiAgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBEZWZhdWx0ICJzaG9ydGhhbmROYW1lIiA9PSAiIi4KLSAgICAgICAg
ICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U2hvcnRoYW5kTmFtZShzaG9ydGhhbmQpOwog
ICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkp
IHsKICAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9ydGhhbmQpOwog
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9ydGhhbmRFbnRy
eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CkBAIC01MzgsOCArNTQ1LDEwIEBAIHZvaWQg
SW5zcGVjdG9yU3R5bGU6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhJbnNwZWN0
b3JPYmplY3QqIHJlc3VsdCkKICAgICAgICAgLy8gZWxzZSBzaG9ydGhhbmROYW1lIGlzIG5vdCBz
ZXQKICAgICB9CiAKLSAgICByZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgcHJvcGVy
dGllc09iamVjdCk7Ci0gICAgcmVzdWx0LT5zZXRBcnJheSgic2hvcnRoYW5kRW50cmllcyIsIHNo
b3J0aGFuZEVudHJpZXMpOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4g
cmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCisgICAgICAgIC5z
ZXRDc3NQcm9wZXJ0aWVzKHByb3BlcnRpZXNPYmplY3QpCisgICAgICAgIC5zZXRTaG9ydGhhbmRF
bnRyaWVzKHNob3J0aGFuZEVudHJpZXMpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCiBib29sIEluc3BlY3RvclN0eWxlOjphcHBseVN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQpCkBAIC04MjgsODEgKzgzNyw4MiBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0CiAKIH0KIAotUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGVTaGVldCgpCitQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hl
ZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQog
ewogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAg
IGlmICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBpZCgpKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxp
c3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0KTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNzc1J1bGVzID0gYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNz
c1J1bGVMaXN0LmdldCgpKTsKLSAgICByZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIGNzc1J1bGVz
LnJlbGVhc2UoKSk7CisKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVl
dEJvZHk+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5OjpjcmVh
dGUoKQorICAgICAgICAuc2V0U3R5bGVTaGVldElkKGlkKCkpCisgICAgICAgIC5zZXRSdWxlcyhi
dWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVsZUxpc3QuZ2V0KCkpKTsKIAogICAgIFN0cmluZyBz
dHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSBnZXRUZXh0KCZzdHlsZVNoZWV0VGV4
dCk7CiAgICAgaWYgKHN1Y2Nlc3MpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwg
c3R5bGVTaGVldFRleHQpOworICAgICAgICByZXN1bHQtPnNldFRleHQoc3R5bGVTaGVldFRleHQp
OwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJ
bmZvKCkKK1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYg
KCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIGlkKCkpOwotICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigi
ZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICByZXN1bHQtPnNldFN0cmlu
Zygic291cmNlVVJMIiwgZmluYWxVUkwoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxl
Iiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7CisgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hl
ZXRIZWFkZXI6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKKyAgICAg
ICAgLnNldERpc2FibGVkKHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpCisgICAgICAgIC5zZXRTb3Vy
Y2VVUkwoZmluYWxVUkwoKSkKKyAgICAgICAgLnNldFRpdGxlKHN0eWxlU2hlZXQtPnRpdGxlKCkp
OwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxl
UnVsZSogcnVsZSkKK1Bhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gSW5zcGVj
dG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsK
ICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBp
ZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXN1bHQt
PnNldFN0cmluZygic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0b3JUZXh0KCkpOworICAgIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NSdWxlOjpjcmVhdGUoKQorICAgICAgICAuc2V0U2VsZWN0b3JUZXh0KHJ1bGUtPnNlbGVj
dG9yVGV4dCgpKQorICAgICAgICAuc2V0U291cmNlTGluZShydWxlLT5zdHlsZVJ1bGUoKS0+c291
cmNlTGluZSgpKQorICAgICAgICAuc2V0T3JpZ2luKG1fb3JpZ2luKQorICAgICAgICAuc2V0U3R5
bGUoYnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CisKICAgICAvLyAic291cmNl
VVJMIiBpcyBwcmVzZW50IG9ubHkgZm9yIHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2lu
IiBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZnJvbnRlbmQuCiAgICAgaWYgKG1fb3JpZ2luID09ICJy
ZWd1bGFyIikKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIGZpbmFsVVJM
KCkpOwotICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgcnVsZS0+c3R5bGVSdWxl
KCktPnNvdXJjZUxpbmUoKSk7Ci0gICAgcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIsIG1fb3Jp
Z2luKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTb3VyY2VVUkwoZmluYWxVUkwoKSk7CiAKLSAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxl
KCkpKTsKICAgICBpZiAoY2FuQmluZCgpKSB7CiAgICAgICAgIEluc3BlY3RvckNTU0lkIGlkKHJ1
bGVJZChydWxlKSk7CiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZSgicnVsZUlkIiwgaWQuYXNJbnNwZWN0b3JWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlkLmFzUHJvdG9jb2xWYWx1ZSgpKTsKICAgICB9CiAKICAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBh
cnNlZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Io
cnVsZS0+c3R5bGUoKSk7CiAgICAgaWYgKHNvdXJjZURhdGEpIHsKLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc2VsZWN0b3JSYW5nZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgICAgIHNlbGVjdG9yUmFuZ2UtPnNldE51bWJlcigic3RhcnQiLCBzb3VyY2VEYXRhLT5z
ZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7Ci0gICAgICAgIHNlbGVjdG9yUmFuZ2UtPnNldE51bWJl
cigiZW5kIiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRPYmplY3QoInNlbGVjdG9yUmFuZ2UiLCBzZWxlY3RvclJhbmdlLnJlbGVhc2UoKSk7
CisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gc2VsZWN0b3JS
YW5nZSA9IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQorICAgICAgICAg
ICAgLnNldFN0YXJ0KHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0KQorICAgICAg
ICAgICAgLnNldEVuZChzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOworICAgICAg
ICByZXN1bHQtPnNldFNlbGVjdG9yUmFuZ2Uoc2VsZWN0b3JSYW5nZS5yZWxlYXNlKCkpOwogICAg
IH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWVkaWFBcnJheSA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVk
aWE+ID4gbWVkaWFBcnJheSA9IEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPjo6Y3Jl
YXRlKCk7CiAKICAgICBmaWxsTWVkaWFMaXN0Q2hhaW4ocnVsZSwgbWVkaWFBcnJheS5nZXQoKSk7
CiAgICAgaWYgKG1lZGlhQXJyYXktPmxlbmd0aCgpKQotICAgICAgICByZXN1bHQtPnNldEFycmF5
KCJtZWRpYSIsIG1lZGlhQXJyYXkucmVsZWFzZSgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRNZWRp
YShtZWRpYUFycmF5LnJlbGVhc2UoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCitQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewogICAgIFJlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJl
YWR5KCkpCkBAIC05MTAsMTMgKzkyMCwxMyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlYwogCiAg
ICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBpZiAoaWQu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJvZ3VzU3R5bGUg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBib2d1c1N0eWxlLT5zZXRBcnJh
eSgiY3NzUHJvcGVydGllcyIsIEluc3BlY3RvckFycmF5OjpjcmVhdGUoKSk7Ci0gICAgICAgIGJv
Z3VzU3R5bGUtPnNldE9iamVjdCgic2hvcnRoYW5kRW50cmllcyIsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IGJv
Z3VzU3R5bGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgIC5zZXRDc3NQcm9wZXJ0aWVzKEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5
Pjo6Y3JlYXRlKCkpCisgICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheTxJbnNw
ZWN0b3JPYmplY3Q+OjpjcmVhdGUoKSk7CiAgICAgICAgIHJldHVybiBib2d1c1N0eWxlLnJlbGVh
c2UoKTsKICAgICB9CiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9
IGluc3BlY3RvclN0eWxlRm9ySWQoaWQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+YnVp
bGRPYmplY3RGb3JTdHlsZSgpOwogCiAgICAgLy8gU3R5bGUgdGV4dCBjYW5ub3QgYmUgcmV0cmll
dmVkIHdpdGhvdXQgc3R5bGVzaGVldCwgc28gc2V0IGNzc1RleHQgaGVyZS4KICAgICBpZiAoc291
cmNlRGF0YSkgewpAQCAtOTI0LDcgKzkzNCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjCiAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGdldFRleHQoJnNoZWV0VGV4dCk7CiAgICAgICAgIGlmIChz
dWNjZXNzKSB7CiAgICAgICAgICAgICBjb25zdCBTb3VyY2VSYW5nZSYgYm9keVJhbmdlID0gc291
cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZTsKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJjc3NUZXh0Iiwgc2hlZXRUZXh0LnN1YnN0cmluZyhib2R5UmFuZ2Uu
c3RhcnQsIGJvZHlSYW5nZS5lbmQgLSBib2R5UmFuZ2Uuc3RhcnQpKTsKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0Q3NzVGV4dChzaGVldFRleHQuc3Vic3RyaW5nKGJvZHlSYW5nZS5zdGFydCwgYm9k
eVJhbmdlLmVuZCAtIGJvZHlSYW5nZS5zdGFydCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCBhYTI5
M2MyY2Q0MzRhZjk3Njk3NDljOTA4YzRlOTQ0YTQ2M2Y4MzY5Li45YzhlYWUwZDkwZjkyZTA5MGNj
NDUzZTRiZGFhOTQyMTViZmQ2MWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDU1NTdHls
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclN0eWxlVGV4dEVkaXRvci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclR5cGVCdWlsZGVy
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKIApAQCAtNzksMTQgKzgwLDE0IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldElkOyB9CiAgICAgdW5zaWdu
ZWQgb3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JkaW5hbDsgfQogCi0gICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gYXNJbnNwZWN0b3JWYWx1ZSgpIGNvbnN0CisgICAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZUlkPiBhc1Byb3RvY29sVmFsdWUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgaWYgKGlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBJbnNwZWN0
b3JWYWx1ZTo6bnVsbCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIG1fc3R5bGVTaGVldElkKTsK
LSAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwiLCBtX29yZGluYWwpOworICAgICAg
ICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4gcmVzdWx0ID0gVHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTU3R5bGVJZDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRTdHlsZVNoZWV0
SWQobV9zdHlsZVNoZWV0SWQpCisgICAgICAgICAgICAuc2V0T3JkaW5hbChtX29yZGluYWwpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICB9CiAKQEAgLTEzMCw4ICsxMzEs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3R5bGUoKTsKIAogICAgIENTU1N0
eWxlRGVjbGFyYXRpb24qIGNzc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsg
fQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKCkg
Y29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0
eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiA+
IGJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNEaXNhYmxl
ZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9kaXNhYmxlZFByb3BlcnRpZXMuaXNFbXB0
eSgpOyB9CiAgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQodW5zaWduZWQgaW5kZXgsIGNvbnN0IFN0
cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFN0cmluZyogb2xkVGV4dCwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIGJvb2wgdG9nZ2xlUHJvcGVydHkodW5zaWduZWQgaW5kZXgsIGJvb2wgZGlzYWJs
ZSwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtMTQxLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIHN0eWxlVGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgYm9vbCBwb3B1bGF0ZUFs
bFByb3BlcnRpZXMoVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+KiByZXN1bHQpIGNvbnN0
OwotICAgIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKEluc3BlY3Rvck9i
amVjdCogcmVzdWx0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlPiBzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAgYm9vbCBhcHBseVN0eWxl
VGV4dChjb25zdCBTdHJpbmcmKTsKICAgICBTdHJpbmcgc2hvcnRoYW5kVmFsdWUoY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkgY29uc3Q7CiAgICAgU3RyaW5nIHNob3J0aGFuZFByaW9y
aXR5KGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpIGNvbnN0OwpAQCAtMTgxLDEwICsx
ODIsMTAgQEAgcHVibGljOgogICAgIENTU1N0eWxlUnVsZSogYWRkUnVsZShjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBkZWxldGVSdWxlKGNvbnN0IElu
c3BlY3RvckNTU0lkJiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZUZv
cklkKGNvbnN0IEluc3BlY3RvckNTU0lkJikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwotICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsK
LSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NT
dHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0
eWxlU2hlZXRJbmZvKCk7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxl
PiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKik7CiAgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQm
LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3Zlcndy
aXRlLCBTdHJpbmcqIG9sZFByb3BlcnR5VGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wg
dG9nZ2xlUHJvcGVydHkoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUlu
ZGV4LCBib29sIGRpc2FibGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAo=
</data>
<flag name="review"
          id="137443"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="137832"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>