<?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>203360</bug_id>
          
          <creation_ts>2019-10-24 03:16:45 -0700</creation_ts>
          <short_desc>[JSC] Properly organize wasm operations</short_desc>
          <delta_ts>2019-10-24 14:13:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1583298</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-24 03:16:45 -0700</bug_when>
    <thetext>[JSC] Properly organize wasm operations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583299</commentid>
    <comment_count>1</comment_count>
      <attachid>381794</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-24 03:17:35 -0700</bug_when>
    <thetext>Created attachment 381794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583329</commentid>
    <comment_count>2</comment_count>
      <attachid>381794</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-10-24 06:44:28 -0700</bug_when>
    <thetext>Comment on attachment 381794
Patch

Attachment 381794 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/13173580

New failing tests:
mozilla-tests.yaml/js1_5/Array/regress-101964.js.mozilla-llint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583435</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-24 11:39:40 -0700</bug_when>
    <thetext>The failure is not related. Failure happens in WebCore code and non-related to wasm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583514</commentid>
    <comment_count>4</comment_count>
      <attachid>381794</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-10-24 13:54:21 -0700</bug_when>
    <thetext>Comment on attachment 381794
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583523</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-10-24 14:11:39 -0700</bug_when>
    <thetext>Committed r251559: &lt;https://trac.webkit.org/changeset/251559&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583524</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-24 14:13:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/56593800&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381794</attachid>
            <date>2019-10-24 03:17:35 -0700</date>
            <delta_ts>2019-10-24 13:54:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203360-20191024031734.patch</filename>
            <type>text/plain</type>
            <size>56658</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
YWJlM2UyNmM2MDBiODBmYzBlNzE1ZjJhOTgzMjJmYzBiM2FiNGI3Li44M2VlYzgyYTRjNWQyYzgz
NmIxY2RmMzFlNmI4MTA3NTU3MjdiY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3NCBAQAorMjAxOS0xMC0yNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFByb3Blcmx5IG9yZ2FuaXplIHdhc20gb3BlcmF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMzYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBj
bGVhbnMgdXAgb3BlcmF0aW9uIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBXYXNtLgorCisgICAgICAg
IDEuIFByb3Blcmx5IG5hbWUgdGhlc2Ugb3BlcmF0aW9ucyB3aXRoIHByZWZpeCAib3BlcmF0aW9u
Ii4KKyAgICAgICAgMi4gRG8gbm90IHVzZSBsYW1iZGEuIERlZmluZSBmdW5jdGlvbiB3aXRoIEpJ
VF9PUEVSQVRJT04uCisgICAgICAgIDMuIENvbnNvbGlkYXRlIHRoZW0gaW4gV2FzbU9wZXJhdGlv
bnMuY3BwLgorCisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyk6CisgICAgICAgIChKU0M6
Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdldCk6CisgICAgICAgIChKU0M6Oldhc206
OkFpcklSR2VuZXJhdG9yOjphZGRUYWJsZVNldCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklS
R2VuZXJhdG9yOjphZGRUYWJsZVNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6
OmFkZFRhYmxlRmlsbCk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRH
cm93TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmVtaXRXcml0
ZUJhcnJpZXJGb3JKU1dyYXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRv
cjo6YWRkT3A8T3BUeXBlOjpJMzJQb3BjbnQ+KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250Pik6CisgICAgICAgICogd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFk
ZFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVT
ZXQpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRSZWZGdW5jKToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTaXplKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6
QjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmVtaXRXcml0ZUJhcnJpZXJGb3JKU1dyYXBwZXIpOgorICAgICAgICAoSlNDOjpX
YXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4pOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4pOgorICAg
ICAgICAqIHdhc20vV2FzbUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Z2V0V2Fz
bVRhYmxlRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldhc206OnNldFdhc21UYWJs
ZUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpkb1dhc21UYWJsZUdyb3cp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXYXNtOjpkb1dhc21UYWJsZUZpbGwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXYXNtOjpkb1dhc21SZWZGdW5jKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3YXNtL1dhc21JbnN0YW5jZS5oOgorICAgICAgICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRpb25XYXNtVW53aW5kKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6b3BlcmF0aW9uQ29udmVydFRvRjY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3Bl
cmF0aW9uQ29udmVydFRvSTMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uQ29udmVy
dFRvRjMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uSXRlcmF0ZVJlc3VsdHMpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNBcnJheSk6CisgICAg
ICAgIChKU0M6Oldhc206Om9wZXJhdGlvbldhc21Xcml0ZUJhcnJpZXJTbG93UGF0aCk6CisgICAg
ICAgIChKU0M6Oldhc206Om9wZXJhdGlvblBvcGNvdW50MzIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpvcGVyYXRpb25Qb3Bjb3VudDY0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uR3Jv
d01lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Om9wZXJhdGlvbkdldFdhc21UYWJsZUVsZW1l
bnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpzZXRXYXNtVGFibGVFbGVtZW50KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6b3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudCk6CisgICAgICAgIChKU0M6
Oldhc206Om9wZXJhdGlvbldhc21UYWJsZUdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVy
YXRpb25XYXNtVGFibGVGaWxsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uV2FzbVJl
ZkZ1bmMpOgorICAgICAgICAoSlNDOjpXYXNtOjpvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6b3BlcmF0aW9uV2FzbVRvSlNFeGNlcHRpb24pOgorICAgICAg
ICAqIHdhc20vV2FzbU9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNw
cDoKKyAgICAgICAgKEpTQzo6V2FzbTo6bWFyc2hhbGxKU1Jlc3VsdCk6CisgICAgICAgIChKU0M6
Oldhc206OmFsbG9jYXRlUmVzdWx0c0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pz
L1dhc21Ub0pTLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvSlMpOgorICAgICAgICAo
SlNDOjpXYXNtOjpvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAg
ICogd2FzbS9qcy9XYXNtVG9KUy5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0
YW5jZUNvbnN0cnVjdG9yLmNwcDoKKwogMjAxOS0xMC0yNCAgWmFuIERvYmVyc2VrICA8emRvYmVy
c2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0pTQ10gR2V0IDMyLWJpdCBwb3J0cyBiYWNrIGlu
dG8gYnVpbGRpbmcgb3JkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21BaXJJUkdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwCmluZGV4IGZiYzNhMTdiMzY1MGEyMTBkZmY2YzFmYTY1ZTJkMWM2
MjA0NzljNWEuLjRjMTY3MThkMzhiYmZmNDFkOGUwNTY1ZWQwNzljMzkxNTA0MzAxYmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcApA
QCAtMTA1Niw3ICsxMDU2LDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkUmVmRnVuYyh1aW50
MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGkKIHsKICAgICAvLyBG
SVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODUwNj4uCiAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShUeXBlOjpGdW5jcmVmKTsK
LSAgICBlbWl0Q0NhbGwoJmRvV2FzbVJlZkZ1bmMsIHJlc3VsdCwgaW5zdGFuY2VWYWx1ZSgpLCBh
ZGRDb25zdGFudChUeXBlOjpJMzIsIGluZGV4KSk7CisgICAgZW1pdENDYWxsKCZvcGVyYXRpb25X
YXNtUmVmRnVuYywgcmVzdWx0LCBpbnN0YW5jZVZhbHVlKCksIGFkZENvbnN0YW50KFR5cGU6Okkz
MiwgaW5kZXgpKTsKIAogICAgIHJldHVybiB7IH07CiB9CkBAIC0xMDY4LDcgKzEwNjgsNyBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgaW5kZXgsIEV4cAogICAgIEFTU0VSVChpbmRleC50eXBlKCkgPT0gVHlwZTo6
STMyKTsKICAgICByZXN1bHQgPSB0bXBGb3JUeXBlKG1faW5mby50YWJsZXNbdGFibGVJbmRleF0u
d2FzbVR5cGUoKSk7CiAKLSAgICBlbWl0Q0NhbGwoJmdldFdhc21UYWJsZUVsZW1lbnQsIHJlc3Vs
dCwgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChUeXBlOjpJMzIsIHRhYmxlSW5kZXgpLCBp
bmRleCk7CisgICAgZW1pdENDYWxsKCZvcGVyYXRpb25HZXRXYXNtVGFibGVFbGVtZW50LCByZXN1
bHQsIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3RhbnQoVHlwZTo6STMyLCB0YWJsZUluZGV4KSwg
aW5kZXgpOwogICAgIGVtaXRDaGVjayhbJl0gewogICAgICAgICByZXR1cm4gSW5zdChCcmFuY2hU
ZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6WmVybyksIHJlc3Vs
dCwgcmVzdWx0KTsKICAgICB9LCBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgYXV0byBBaXJJ
UkdlbmVyYXRvcjo6YWRkVGFibGVTZXQodW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5
cGUmIGluZGV4LCBFeHAKICAgICBBU1NFUlQodmFsdWUudG1wKCkpOwogCiAgICAgYXV0byBzaG91
bGRUaHJvdyA9IGczMigpOwotICAgIGVtaXRDQ2FsbCgmc2V0V2FzbVRhYmxlRWxlbWVudCwgc2hv
dWxkVGhyb3csIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3RhbnQoVHlwZTo6STMyLCB0YWJsZUlu
ZGV4KSwgaW5kZXgsIHZhbHVlKTsKKyAgICBlbWl0Q0NhbGwoJm9wZXJhdGlvblNldFdhc21UYWJs
ZUVsZW1lbnQsIHNob3VsZFRocm93LCBpbnN0YW5jZVZhbHVlKCksIGFkZENvbnN0YW50KFR5cGU6
OkkzMiwgdGFibGVJbmRleCksIGluZGV4LCB2YWx1ZSk7CiAKICAgICBlbWl0Q2hlY2soWyZdIHsK
ICAgICAgICAgcmV0dXJuIEluc3QoQnJhbmNoVGVzdDMyLCBudWxscHRyLCBBcmc6OnJlc0NvbmQo
TWFjcm9Bc3NlbWJsZXI6Olplcm8pLCBzaG91bGRUaHJvdywgc2hvdWxkVGhyb3cpOwpAQCAtMTEw
MiwxMSArMTEwMiw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlU2l6ZSh1bnNpZ25l
ZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtCiAgICAgLy8gRklYTUU6IEVt
aXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTg1MDY+LgogICAgIHJlc3VsdCA9IHRtcEZvclR5cGUoVHlwZTo6STMyKTsKIAotICAgIGludDMy
X3QgKCpkb1NpemUpKEluc3RhbmNlKiwgdW5zaWduZWQpID0gW10gKEluc3RhbmNlKiBpbnN0YW5j
ZSwgdW5zaWduZWQgdGFibGVJbmRleCkgLT4gaW50MzJfdCB7Ci0gICAgICAgIHJldHVybiBpbnN0
YW5jZS0+dGFibGUodGFibGVJbmRleCktPmxlbmd0aCgpOwotICAgIH07Ci0KLSAgICBlbWl0Q0Nh
bGwoZG9TaXplLCByZXN1bHQsIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3RhbnQoVHlwZTo6STMy
LCB0YWJsZUluZGV4KSk7CisgICAgZW1pdENDYWxsKCZvcGVyYXRpb25HZXRXYXNtVGFibGVTaXpl
LCByZXN1bHQsIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3RhbnQoVHlwZTo6STMyLCB0YWJsZUlu
ZGV4KSk7CiAKICAgICByZXR1cm4geyB9OwogfQpAQCAtMTExOSw3ICsxMTE1LDcgQEAgYXV0byBB
aXJJUkdlbmVyYXRvcjo6YWRkVGFibGVHcm93KHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Np
b25UeXBlJiBmaWxsLCBFeHAKICAgICBBU1NFUlQoZGVsdGEudHlwZSgpID09IFR5cGU6OkkzMik7
CiAgICAgcmVzdWx0ID0gdG1wRm9yVHlwZShUeXBlOjpJMzIpOwogCi0gICAgZW1pdENDYWxsKCZk
b1dhc21UYWJsZUdyb3csIHJlc3VsdCwgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChUeXBl
OjpJMzIsIHRhYmxlSW5kZXgpLCBmaWxsLCBkZWx0YSk7CisgICAgZW1pdENDYWxsKCZvcGVyYXRp
b25XYXNtVGFibGVHcm93LCByZXN1bHQsIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3RhbnQoVHlw
ZTo6STMyLCB0YWJsZUluZGV4KSwgZmlsbCwgZGVsdGEpOwogCiAgICAgcmV0dXJuIHsgfTsKIH0K
QEAgLTExMzQsNyArMTEzMCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZFRhYmxlRmlsbCh1
bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgb2Zmc2V0LCBFCiAgICAgQVNTRVJU
KGNvdW50LnR5cGUoKSA9PSBUeXBlOjpJMzIpOwogCiAgICAgYXV0byByZXN1bHQgPSB0bXBGb3JU
eXBlKFR5cGU6OkkzMik7Ci0gICAgZW1pdENDYWxsKCZkb1dhc21UYWJsZUZpbGwsIHJlc3VsdCwg
aW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChUeXBlOjpJMzIsIHRhYmxlSW5kZXgpLCBvZmZz
ZXQsIGZpbGwsIGNvdW50KTsKKyAgICBlbWl0Q0NhbGwoJm9wZXJhdGlvbldhc21UYWJsZUZpbGws
IHJlc3VsdCwgaW5zdGFuY2VWYWx1ZSgpLCBhZGRDb25zdGFudChUeXBlOjpJMzIsIHRhYmxlSW5k
ZXgpLCBvZmZzZXQsIGZpbGwsIGNvdW50KTsKIAogICAgIGVtaXRDaGVjayhbJl0gewogICAgICAg
ICByZXR1cm4gSW5zdChCcmFuY2hUZXN0MzIsIG51bGxwdHIsIEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6WmVybyksIHJlc3VsdCwgcmVzdWx0KTsKQEAgLTExNjYsMjkgKzExNjIsOCBAQCBh
dXRvIEFpcklSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+IFBhcnRpYWxSZXN1bHQKIAog
YXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwg
RXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIGludDMyX3Qg
KCpncm93TWVtb3J5KSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSA9IFtdICh2b2lkKiBjYWxs
RnJhbWUsIEluc3RhbmNlKiBpbnN0YW5jZSwgaW50MzJfdCBkZWx0YSkgLT4gaW50MzJfdCB7Ci0g
ICAgICAgIGluc3RhbmNlLT5zdG9yZVRvcENhbGxGcmFtZShjYWxsRnJhbWUpOwotCi0gICAgICAg
IGlmIChkZWx0YSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgYXV0byBn
cm93biA9IGluc3RhbmNlLT5tZW1vcnkoKS0+Z3JvdyhQYWdlQ291bnQoZGVsdGEpKTsKLSAgICAg
ICAgaWYgKCFncm93bikgewotICAgICAgICAgICAgc3dpdGNoIChncm93bi5lcnJvcigpKSB7Ci0g
ICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWREZWx0YToKLSAg
ICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZEdyb3dTaXplOgot
ICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGlt
dW06Ci0gICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246Ok91dE9mTWVtb3J5
OgotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQoKTsKLSAgICB9OwotCiAgICAgcmVzdWx0ID0gZzMy
KCk7Ci0gICAgZW1pdENDYWxsKGdyb3dNZW1vcnksIHJlc3VsdCwgVHlwZWRUbXAgeyBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCBUeXBlOjpJNjQgfSwgaW5zdGFuY2VWYWx1ZSgpLCBk
ZWx0YSk7CisgICAgZW1pdENDYWxsKCZvcGVyYXRpb25Hcm93TWVtb3J5LCByZXN1bHQsIFR5cGVk
VG1wIHsgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwgVHlwZTo6STY0IH0sIGluc3Rh
bmNlVmFsdWUoKSwgZGVsdGEpOwogICAgIHJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0OjpObywgbV9pbmZvLm1lbW9yeSwgaW5zdGFuY2VWYWx1ZSgp
LCBtX2N1cnJlbnRCbG9jayk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTMwNCwxMiArMTI3OSw3
IEBAIGlubGluZSB2b2lkIEFpcklSR2VuZXJhdG9yOjplbWl0V3JpdGVCYXJyaWVyRm9ySlNXcmFw
cGVyKCkKICAgICBtX2N1cnJlbnRCbG9jay0+c2V0U3VjY2Vzc29ycyhjb250aW51YXRpb24sIGRv
U2xvd1BhdGgpOwogICAgIG1fY3VycmVudEJsb2NrID0gZG9TbG93UGF0aDsKIAotICAgIHZvaWQg
KCp3cml0ZUJhcnJpZXIpKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFZNKikgPSBbXSAoSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBjZWxsLCBWTSogdm0pIC0+IHZvaWQgewotICAgICAgICBBU1NFUlQo
Y2VsbCk7Ci0gICAgICAgIEFTU0VSVCh2bSk7Ci0gICAgICAgIHZtLT5oZWFwLndyaXRlQmFycmll
clNsb3dQYXRoKGNlbGwpOwotICAgIH07Ci0gICAgZW1pdENDYWxsKHdyaXRlQmFycmllciwgVHlw
ZWRUbXAoKSwgY2VsbCwgdm0pOworICAgIGVtaXRDQ2FsbCgmb3BlcmF0aW9uV2FzbVdyaXRlQmFy
cmllclNsb3dQYXRoLCBUeXBlZFRtcCgpLCBjZWxsLCB2bSk7CiAgICAgYXBwZW5kKEp1bXApOwog
ICAgIG1fY3VycmVudEJsb2NrLT5zZXRTdWNjZXNzb3JzKGNvbnRpbnVhdGlvbik7CiAgICAgbV9j
dXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CkBAIC0yNjI3LDggKzI1OTcsNyBAQCBhdXRvIEFp
cklSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJn
LCBFeHByZXNzaW9uVHlwZQogICAgIH0KICNlbmRpZgogCi0gICAgdWludDMyX3QgKCpwb3Bjb3Vu
dCkoaW50MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19i
dWlsdGluX3BvcGNvdW50KHZhbHVlKTsgfTsKLSAgICBlbWl0Q0NhbGwocG9wY291bnQsIHJlc3Vs
dCwgYXJnKTsKKyAgICBlbWl0Q0NhbGwoJm9wZXJhdGlvblBvcGNvdW50MzIsIHJlc3VsdCwgYXJn
KTsKICAgICByZXR1cm4geyB9OwogfQogCkBAIC0yNjQ5LDggKzI2MTgsNyBAQCBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFBvcGNudD4oRXhwcmVzc2lvblR5cGUgYXJnLCBF
eHByZXNzaW9uVHlwZQogICAgIH0KICNlbmRpZgogCi0gICAgdWludDY0X3QgKCpwb3Bjb3VudCko
aW50NjRfdCkgPSBbXSAoaW50NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyByZXR1cm4gX19idWls
dGluX3BvcGNvdW50bGwodmFsdWUpOyB9OwotICAgIGVtaXRDQ2FsbChwb3Bjb3VudCwgcmVzdWx0
LCBhcmcpOworICAgIGVtaXRDQ2FsbCgmb3BlcmF0aW9uUG9wY291bnQ2NCwgcmVzdWx0LCBhcmcp
OwogICAgIHJldHVybiB7IH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCBkYzNhMjExMGQzNTQ3ZmYzNmVmMDRkMWYzMDNm
ZWE2OGQ5NTFlZDMxLi5jYjU2ZjgxN2JhYWQxZDc5NTdkNGM4MGI4NTgwOTEzNjZlM2EwMjJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
CkBAIC02NzIsNyArNjcyLDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRUYWJsZUdldCh1bnNp
Z25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgaW5kZXgsIEV4cHIKIHsKICAgICAvLyBG
SVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODUwNj4uCiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
Q2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKEFueXJlZiksIG9yaWdpbigpLAotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oJmdldFdhc21UYWJsZUVsZW1lbnQsIEIzQ0NhbGxQdHJU
YWcpKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZvcGVyYXRpb25HZXRXYXNt
VGFibGVFbGVtZW50LCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCks
IHRhYmxlSW5kZXgpLCBpbmRleCk7CiAKICAgICB7CkBAIC02OTEsNyArNjkxLDcgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRUYWJsZVNldCh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9u
VHlwZSYgaW5kZXgsIEV4cHIKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCiAgICAgYXV0byBz
aG91bGRUaHJvdyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9j
LCBCMzo6SW50MzIsIG9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
JnNldFdhc21UYWJsZUVsZW1lbnQsIEIzQ0NhbGxQdHJUYWcpKSwKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVu
Y3Rpb25QdHI8dm9pZCo+KCZvcGVyYXRpb25TZXRXYXNtVGFibGVFbGVtZW50LCBCM0NDYWxsUHRy
VGFnKSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhYmxlSW5kZXgpLCBpbmRleCwgdmFs
dWUpOwogCiAgICAgewpAQCAtNzExLDcgKzcxMSw3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
UmVmRnVuYyh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlh
CiAgICAgLy8gRklYTUU6IEVtaXQgdGhpcyBpbmxpbmUgPGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTg1MDY+LgogCiAgICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEIzOjpJbnQ2NCwgb3JpZ2luKCksCi0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPigmZG9XYXNtUmVmRnVuYywgQjNDQ2FsbFB0clRh
ZykpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oJm9wZXJhdGlvbldhc21SZWZG
dW5jLCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgYWRkQ29uc3Rh
bnQoVHlwZTo6STMyLCBpbmRleCkpOwogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTcyMCwxMiArNzIw
LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRSZWZGdW5jKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWEKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFi
bGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBh
cnRpYWxSZXN1bHQKIHsKICAgICAvLyBGSVhNRTogRW1pdCB0aGlzIGlubGluZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODUwNj4uCi0gICAgdWludDMyX3QgKCpk
b1NpemUpKEluc3RhbmNlKiwgdW5zaWduZWQpID0gW10gKEluc3RhbmNlKiBpbnN0YW5jZSwgdW5z
aWduZWQgdGFibGVJbmRleCkgLT4gdWludDMyX3QgewotICAgICAgICByZXR1cm4gaW5zdGFuY2Ut
PnRhYmxlKHRhYmxlSW5kZXgpLT5sZW5ndGgoKTsKLSAgICB9OwotCiAgICAgcmVzdWx0ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIHRvQjNUeXBlKEkzMiks
IG9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZG9TaXplLCBCM0ND
YWxsUHRyVGFnKSksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPigmb3BlcmF0aW9u
R2V0V2FzbVRhYmxlU2l6ZSwgQjNDQ2FsbFB0clRhZykpLAogICAgICAgICBpbnN0YW5jZVZhbHVl
KCksIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdp
bigpLCB0YWJsZUluZGV4KSk7CiAKICAgICByZXR1cm4geyB9OwpAQCAtNzM0LDcgKzczMCw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVTaXplKHVuc2lnbmVkIHRhYmxlSW5kZXgsIEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+CiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZFRhYmxlR3Jv
dyh1bnNpZ25lZCB0YWJsZUluZGV4LCBFeHByZXNzaW9uVHlwZSYgZmlsbCwgRXhwcmVzc2lvblR5
cGUmIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7CiAg
ICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2Ms
IHRvQjNUeXBlKEkzMiksIG9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4oJmRvV2FzbVRhYmxlR3JvdywgQjNDQ2FsbFB0clRhZykpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5j
dGlvblB0cjx2b2lkKj4oJm9wZXJhdGlvbldhc21UYWJsZUdyb3csIEIzQ0NhbGxQdHJUYWcpKSwK
ICAgICAgICAgaW5zdGFuY2VWYWx1ZSgpLCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFibGVJbmRleCksIGZpbGwsIGRlbHRhKTsKIAog
ICAgIHJldHVybiB7IH07CkBAIC03NDMsNyArNzM5LDcgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRUYWJsZUdyb3codW5zaWduZWQgdGFibGVJbmRleCwgRXhwcmVzc2lvblR5cGUmIGZpbGwsIEV4
cHIKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkVGFibGVGaWxsKHVuc2lnbmVkIHRhYmxlSW5kZXgs
IEV4cHJlc3Npb25UeXBlJiBvZmZzZXQsIEV4cHJlc3Npb25UeXBlJiBmaWxsLCBFeHByZXNzaW9u
VHlwZSYgY291bnQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4obV9wcm9jLCB0b0IzVHlwZShJMzIpLCBv
cmlnaW4oKSwKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZkb1dhc21UYWJsZUZp
bGwsIEIzQ0NhbGxQdHJUYWcpKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KCZv
cGVyYXRpb25XYXNtVGFibGVGaWxsLCBCM0NDYWxsUHRyVGFnKSksCiAgICAgICAgIGluc3RhbmNl
VmFsdWUoKSwgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCksIHRhYmxlSW5kZXgpLCBvZmZzZXQsIGZpbGwsIGNvdW50KTsKIAogICAgIHsKQEAg
LTc3NywyOSArNzczLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRVbnJlYWNoYWJsZSgpIC0+
IFBhcnRpYWxSZXN1bHQKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJl
c3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0
CiB7Ci0gICAgaW50MzJfdCAoKmdyb3dNZW1vcnkpKHZvaWQqLCBJbnN0YW5jZSosIGludDMyX3Qp
ID0gW10gKHZvaWQqIGNhbGxGcmFtZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBpbnQzMl90IGRlbHRh
KSAtPiBpbnQzMl90IHsKLSAgICAgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2FsbEZyYW1lKGNhbGxG
cmFtZSk7Ci0KLSAgICAgICAgaWYgKGRlbHRhIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsK
LQotICAgICAgICBhdXRvIGdyb3duID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5ncm93KFBhZ2VDb3Vu
dChkZWx0YSkpOwotICAgICAgICBpZiAoIWdyb3duKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGdy
b3duLmVycm9yKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6
SW52YWxpZERlbHRhOgotICAgICAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpJ
bnZhbGlkR3Jvd1NpemU6Ci0gICAgICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246
OldvdWxkRXhjZWVkTWF4aW11bToKLSAgICAgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJl
YXNvbjo6T3V0T2ZNZW1vcnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBncm93bi52YWx1ZSgpLnBhZ2VDb3VudCgpOwotICAgIH07Ci0K
ICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJv
YywgSW50MzIsIG9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZ3Jv
d01lbW9yeSwgQjNDQ2FsbFB0clRhZykpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lk
Kj4oJm9wZXJhdGlvbkdyb3dNZW1vcnksIEIzQ0NhbGxQdHJUYWcpKSwKICAgICAgICAgZnJhbWVQ
b2ludGVyKCksIGluc3RhbmNlVmFsdWUoKSwgZGVsdGEpOwogCiAgICAgcmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQ6Ok5vLCBtX2luZm8ubWVtb3J5
LCBpbnN0YW5jZVZhbHVlKCksIG1fcHJvYywgbV9jdXJyZW50QmxvY2spOwpAQCAtODg4LDExICs4
NjMsNyBAQCBpbmxpbmUgdm9pZCBCM0lSR2VuZXJhdG9yOjplbWl0V3JpdGVCYXJyaWVyRm9ySlNX
cmFwcGVyKCkKICAgICBjb250aW51YXRpb24tPmFkZFByZWRlY2Vzc29yKG1fY3VycmVudEJsb2Nr
KTsKICAgICBtX2N1cnJlbnRCbG9jayA9IGRvU2xvd1BhdGg7CiAKLSAgICB2b2lkICgqd3JpdGVC
YXJyaWVyKShKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBWTSopID0gW10gKEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogY2VsbCwgVk0qIHZtKSAtPiB2b2lkIHsKLSAgICAgICAgdm0tPmhlYXAud3JpdGVC
YXJyaWVyU2xvd1BhdGgoY2VsbCk7Ci0gICAgfTsKLQotICAgIFZhbHVlKiB3cml0ZUJhcnJpZXJB
ZGRyZXNzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCB0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KHdyaXRlQmFycmllciwgQjNDQ2FsbFB0
clRhZykpOworICAgIFZhbHVlKiB3cml0ZUJhcnJpZXJBZGRyZXNzID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB0YWdDRnVuY3Rpb25Q
dHI8dm9pZCo+KCZvcGVyYXRpb25XYXNtV3JpdGVCYXJyaWVyU2xvd1BhdGgsIEIzQ0NhbGxQdHJU
YWcpKTsKICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENDYWxsVmFsdWU+KG1fcHJvYywg
QjM6OlZvaWQsIG9yaWdpbigpLCB3cml0ZUJhcnJpZXJBZGRyZXNzLCBjZWxsLCB2bSk7CiAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdp
bigpLCBjb250aW51YXRpb24pOwogCkBAIC0yMDc2LDggKzIwNDcsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyUG9wY250PihFeHByZXNzaW9uVHlwZSBhcmcsIEV4cHJl
c3Npb25UeXBlJgogICAgIH0KICNlbmRpZgogCi0gICAgdWludDMyX3QgKCpwb3Bjb3VudCkoaW50
MzJfdCkgPSBbXSAoaW50MzJfdCB2YWx1ZSkgLT4gdWludDMyX3QgeyByZXR1cm4gX19idWlsdGlu
X3BvcGNvdW50KHZhbHVlKTsgfTsKLSAgICBWYWx1ZSogZnVuY0FkZHJlc3MgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHRhZ0NGdW5j
dGlvblB0cjx2b2lkKj4ocG9wY291bnQsIEIzQ0NhbGxQdHJUYWcpKTsKKyAgICBWYWx1ZSogZnVu
Y0FkZHJlc3MgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oJm9wZXJhdGlvblBvcGNvdW50MzIs
IEIzQ0NhbGxQdHJUYWcpKTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENDYWxsVmFsdWU+KG1fcHJvYywgSW50MzIsIG9yaWdpbigpLCBFZmZlY3RzOjpub25lKCksIGZ1
bmNBZGRyZXNzLCBhcmcpOwogICAgIHJldHVybiB7IH07CiB9CkBAIC0yMDk4LDggKzIwNjgsNyBA
QCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0UG9wY250PihFeHByZXNzaW9u
VHlwZSBhcmcsIEV4cHJlc3Npb25UeXBlJgogICAgIH0KICNlbmRpZgogCi0gICAgdWludDY0X3Qg
KCpwb3Bjb3VudCkoaW50NjRfdCkgPSBbXSAoaW50NjRfdCB2YWx1ZSkgLT4gdWludDY0X3QgeyBy
ZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwodmFsdWUpOyB9OwotICAgIFZhbHVlKiBmdW5jQWRk
cmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihwb3Bjb3VudCwgQjNDQ2FsbFB0clRhZykp
OworICAgIFZhbHVlKiBmdW5jQWRkcmVzcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihvcGVy
YXRpb25Qb3Bjb3VudDY0LCBCM0NDYWxsUHRyVGFnKSk7CiAgICAgcmVzdWx0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPihtX3Byb2MsIEludDY0LCBvcmlnaW4oKSwgRWZm
ZWN0czo6bm9uZSgpLCBmdW5jQWRkcmVzcywgYXJnKTsKICAgICByZXR1cm4geyB9OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5jcHAKaW5kZXggMDc4OWM5ZTNk
ZmQ5ZGNhZjZhYzBmYzUzNDdhNWE1M2NjNmJhNzUwNy4uM2Y0NDZjZWEzN2U4YjEzY2Y3MTIwNjBl
Mzg0MmRiZTliMzUyOWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuY3BwCkBAIC0xMTMsOTMgKzExMyw2IEBAIHZvaWQgSW5zdGFuY2U6OnNldFRhYmxlKHVu
c2lnbmVkIGksIFJlZjxUYWJsZT4mJiB0YWJsZSkKICAgICAqYml0d2lzZV9jYXN0PFRhYmxlKio+
KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvZmZzZXRPZlRhYmxlUHRyKG1fbnVtSW1wb3J0
RnVuY3Rpb25zLCBpKSkgPSAmdGFibGUubGVha1JlZigpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBn
ZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRl
eCwgaW50MzJfdCBzaWduZWRJbmRleCkKLXsKLSAgICBBU1NFUlQodGFibGVJbmRleCA8IGluc3Rh
bmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7Ci0gICAgaWYg
KHNpZ25lZEluZGV4IDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB1aW50MzJfdCBpbmRl
eCA9IHNpZ25lZEluZGV4OwotICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZS0+dGFibGUodGFibGVJ
bmRleCktPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5nZXQoaW5kZXgpKTsKLX0KLQot
Ym9vbCBzZXRXYXNtVGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFi
bGVJbmRleCwgaW50MzJfdCBzaWduZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpCi17
Ci0gICAgQVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3Jt
YXRpb24oKS50YWJsZUNvdW50KCkpOwotICAgIGlmIChzaWduZWRJbmRleCA8IDApCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHVpbnQzMl90IGluZGV4ID0gc2lnbmVkSW5kZXg7Ci0gICAg
aWYgKGluZGV4ID49IGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4KS0+bGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jVmFsdWUpOwotICAgIGlmIChpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPnR5cGUoKSA9
PSBXYXNtOjpUYWJsZUVsZW1lbnRUeXBlOjpBbnlyZWYpCi0gICAgICAgIGluc3RhbmNlLT50YWJs
ZSh0YWJsZUluZGV4KS0+c2V0KGluZGV4LCB2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoaW5zdGFuY2Ut
PnRhYmxlKHRhYmxlSW5kZXgpLT50eXBlKCkgPT0gV2FzbTo6VGFibGVFbGVtZW50VHlwZTo6RnVu
Y3JlZikgewotICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb247Ci0gICAg
ICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiB3YXNtV3JhcHBlckZ1bmN0aW9uOwotCi0g
ICAgICAgIGlmIChpc1dlYkFzc2VtYmx5SG9zdEZ1bmN0aW9uKGluc3RhbmNlLT5vd25lcjxKU09i
amVjdD4oKS0+dm0oKSwgdmFsdWUsIHdhc21GdW5jdGlvbiwgd2FzbVdyYXBwZXJGdW5jdGlvbikp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghIXdhc21GdW5jdGlvbiB8fCAhIXdhc21XcmFwcGVyRnVu
Y3Rpb24pOwotICAgICAgICAgICAgaWYgKHdhc21GdW5jdGlvbikKLSAgICAgICAgICAgICAgICBp
bnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmFzRnVuY3JlZlRhYmxlKCktPnNldEZ1bmN0aW9u
KGluZGV4LCBqc0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSksIHdhc21GdW5jdGlvbi0+aW1wb3J0YWJs
ZUZ1bmN0aW9uKCksICZ3YXNtRnVuY3Rpb24tPmluc3RhbmNlKCktPmluc3RhbmNlKCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4
KS0+YXNGdW5jcmVmVGFibGUoKS0+c2V0RnVuY3Rpb24oaW5kZXgsIGpzQ2FzdDxKU09iamVjdCo+
KHZhbHVlKSwgd2FzbVdyYXBwZXJGdW5jdGlvbi0+aW1wb3J0YWJsZUZ1bmN0aW9uKCksICZ3YXNt
V3JhcHBlckZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpKTsKLSAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIGluc3RhbmNlLT50YWJsZSh0YWJsZUlu
ZGV4KS0+Y2xlYXIoaW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50MzJfdCBkb1dhc21UYWJsZUdyb3coSW5zdGFuY2Uq
IGluc3RhbmNlLCB1bnNpZ25lZCB0YWJsZUluZGV4LCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCBpbnQz
Ml90IGRlbHRhKQotewotICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgp
Lm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKLSAgICBhdXRvIG9sZFNpemUgPSBp
bnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmxlbmd0aCgpOwotICAgIGlmIChkZWx0YSA8IDAp
Ci0gICAgICAgIHJldHVybiBvbGRTaXplOwotICAgIGF1dG8gbmV3U2l6ZSA9IGluc3RhbmNlLT50
YWJsZSh0YWJsZUluZGV4KS0+Z3JvdyhkZWx0YSk7Ci0gICAgaWYgKCFuZXdTaXplIHx8ICpuZXdT
aXplID09IG9sZFNpemUpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IG9sZFNpemU7IGkgPCBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmxlbmd0aCgpOyAr
K2kpCi0gICAgICAgIHNldFdhc21UYWJsZUVsZW1lbnQoaW5zdGFuY2UsIHRhYmxlSW5kZXgsIGks
IGZpbGwpOwotCi0gICAgcmV0dXJuIG9sZFNpemU7Ci19Ci0KLWJvb2wgZG9XYXNtVGFibGVGaWxs
KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgaW50MzJfdCB1bnNhZmVP
ZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIGludDMyX3QgdW5zYWZlQ291bnQpCi17Ci0gICAg
QVNTRVJUKHRhYmxlSW5kZXggPCBpbnN0YW5jZS0+bW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24o
KS50YWJsZUNvdW50KCkpOwotICAgIGlmICh1bnNhZmVPZmZzZXQgPCAwIHx8IHVuc2FmZUNvdW50
IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5z
YWZlT2Zmc2V0OwotICAgIHVuc2lnbmVkIGNvdW50ID0gdW5zYWZlQ291bnQ7Ci0KLSAgICBpZiAo
b2Zmc2V0ID49IGluc3RhbmNlLT50YWJsZSh0YWJsZUluZGV4KS0+bGVuZ3RoKCkgfHwgb2Zmc2V0
ICsgY291bnQgPiBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmxlbmd0aCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY291bnQ7ICsr
aikKLSAgICAgICAgc2V0V2FzbVRhYmxlRWxlbWVudChpbnN0YW5jZSwgdGFibGVJbmRleCwgb2Zm
c2V0ICsgaiwgZmlsbCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRW5jb2RlZEpTVmFsdWUg
ZG9XYXNtUmVmRnVuYyhJbnN0YW5jZSogaW5zdGFuY2UsIHVpbnQzMl90IGluZGV4KQotewotICAg
IEpTVmFsdWUgdmFsdWUgPSBpbnN0YW5jZS0+Z2V0RnVuY3Rpb25XcmFwcGVyKGluZGV4KTsKLSAg
ICBBU1NFUlQodmFsdWUuaXNGdW5jdGlvbihpbnN0YW5jZS0+b3duZXI8SlNPYmplY3Q+KCktPnZt
KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKLX0KLQogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKaW5kZXggYjM5YmYyOTkyYTM5ZWY3
YWQ2NGE4MzEyOGZlMjhhNWRhZmNkZTU0Yy4uZGQ0OGRhODA1OGM1OWFlMDBjYjZiN2IzODdhNmNi
NDIzNzk5MWQwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUlu
c3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgK
QEAgLTQ1LDEyICs0NSw2IEBAIG5hbWVzcGFjZSBXYXNtIHsKIHN0cnVjdCBDb250ZXh0OwogY2xh
c3MgSW5zdGFuY2U7CiAKLUVuY29kZWRKU1ZhbHVlIGdldFdhc21UYWJsZUVsZW1lbnQoSW5zdGFu
Y2UqLCB1bnNpZ25lZCwgaW50MzJfdCk7Ci1ib29sIHNldFdhc21UYWJsZUVsZW1lbnQoSW5zdGFu
Y2UqLCB1bnNpZ25lZCwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpOwotRW5jb2Rl
ZEpTVmFsdWUgZG9XYXNtUmVmRnVuYyhJbnN0YW5jZSosIHVpbnQzMl90KTsKLWludDMyX3QgZG9X
YXNtVGFibGVHcm93KEluc3RhbmNlKiwgdW5zaWduZWQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIGlu
dDMyX3QgZGVsdGEpOwotYm9vbCBkb1dhc21UYWJsZUZpbGwoSW5zdGFuY2UqLCB1bnNpZ25lZCwg
aW50MzJfdCBvZmZzZXQsIEVuY29kZWRKU1ZhbHVlIGZpbGwsIGludDMyX3QgY291bnQpOwotCiBj
bGFzcyBJbnN0YW5jZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxJbnN0YW5jZT4sIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxJbnN0YW5jZT4gewogcHVibGljOgogICAgIHVzaW5nIFN0b3Jl
VG9wQ2FsbEZyYW1lQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQodm9pZCopPjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAppbmRleCA1NzQ2M2Uy
NWUzYWExYjVmMWU4NDJkNjFjMDNjYTAxMmVlMGZiODAyLi4xOGNiMGJlNjAwMDdmYzQ5ZWM0NmNk
OWEwM2ZkY2Q2YWI0MjkwM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9wZXJhdGlvbnMuY3BwCkBAIC0yOSwxMCArMjksMTQgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICNpbmNsdWRlICJGcmFtZVRyYWNlcnMuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUhlbHBlcnMuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKyNpbmNs
dWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yLmgiCiAjaW5jbHVkZSAiUHJvYmVDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVu
dGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21J
bnN0YW5jZS5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTQ0MSw2ICs0NDUsMzA0IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVHJpZ2dlclRpZXJVcE5vdyhJbnN0YW5j
ZSogaW5zdGFuY2UsIHVpbnQzMl90IGZ1CiAgICAgfQogfQogCit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uV2FzbVVud2luZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICAvLyBGSVhN
RTogQ29uc2lkZXIgcGFzc2luZyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RlYWQuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzIwNgorICAgIFZN
JiB2bSA9IGNhbGxGcmFtZS0+ZGVwcmVjYXRlZFZNKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBnZW5lcmljVW53aW5kKHZtLCBjYWxsRnJh
bWUpOworICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKK30KKworZG91YmxlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ29udmVydFRvRjY0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIHYpCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0ZWFkLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDMyMDYKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAg
cmV0dXJuIHYudG9OdW1iZXIoY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KHZtKSk7Cit9
CisKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0VG9JMzIoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUgdikKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgcGFzc2lu
ZyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RlYWQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzIwNgorICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
ZGVwcmVjYXRlZFZNKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2Fs
bEZyYW1lKTsKKyAgICByZXR1cm4gdi50b0ludDMyKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCh2bSkpOworfQorCitmbG9hdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRUb0Yz
MihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KQoreworICAgIC8vIEZJWE1FOiBDb25z
aWRlciBwYXNzaW5nIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGVhZC4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMjA2CisgICAgVk0mIHZtID0g
Y2FsbEZyYW1lLT5kZXByZWNhdGVkVk0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBjYWxsRnJhbWUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odi50b051
bWJlcihjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3Qodm0pKSk7Cit9CisKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25JdGVyYXRlUmVzdWx0cyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgSlNWYWx1ZSBy
ZXN1bHQsIHVpbnQ2NF90KiByZWdpc3RlclJlc3VsdHMsIHVpbnQ2NF90KiBjYWxsZWVGcmFtZVBv
aW50ZXIpCit7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0ZWFkLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDMyMDYKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBp
bnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGF1dG8gd2FzbUNhbGxJbmZvID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuY2FsbEluZm9y
bWF0aW9uRm9yKCpzaWduYXR1cmUsIENhbGxSb2xlOjpDYWxsZWUpOworICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IHJlZ2lzdGVyUmVzdWx0T2Zmc2V0cyA9IHdhc21DYWxsSW5mby5jb21wdXRlUmVz
dWx0c09mZnNldExpc3QoKTsKKworICAgIHVuc2lnbmVkIGl0ZW1zSW5zZXJ0ZWQgPSAwOworICAg
IGZvckVhY2hJbkl0ZXJhYmxlKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBbJl0gKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkgLT4gdm9pZCB7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgaWYgKGl0
ZW1zSW5zZXJ0ZWQgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCkpIHsKKyAgICAgICAgICAgIHVp
bnQ2NF90IHVuYm94ZWRWYWx1ZTsKKyAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLT5yZXR1
cm5UeXBlKGl0ZW1zSW5zZXJ0ZWQpKSB7CisgICAgICAgICAgICBjYXNlIEkzMjoKKyAgICAgICAg
ICAgICAgICB1bmJveGVkVmFsdWUgPSB2YWx1ZS50b0ludDMyKGdsb2JhbE9iamVjdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEYzMjoKKyAgICAgICAgICAgICAg
ICB1bmJveGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZhbHVlLnRvRmxvYXQoZ2xv
YmFsT2JqZWN0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEY2
NDoKKyAgICAgICAgICAgICAgICB1bmJveGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KHZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGdW5jcmVmOgorICAgICAgICAgICAgICAgIGlmICghdmFsdWUuaXNG
dW5jdGlvbih2bSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgIkZ1bmNyZWYgdmFsdWUgaXMgbm90IGEgZnVuY3Rpb24iX3MpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIEZBTExUSFJPVUdIOworICAgICAgICAgICAgY2FzZSBBbnlyZWY6CisgICAgICAgICAgICAg
ICAgdW5ib3hlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoT3B0aW9uczo6dXNlV2ViQXNzZW1ibHlSZWZlcmVuY2Vz
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOworICAgICAg
ICAgICAgYXV0byByZXAgPSB3YXNtQ2FsbEluZm8ucmVzdWx0c1tpdGVtc0luc2VydGVkXTsKKyAg
ICAgICAgICAgIGlmIChyZXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICByZWdpc3RlclJlc3Vs
dHNbcmVnaXN0ZXJSZXN1bHRPZmZzZXRzLmZpbmQocmVwLnJlZygpKS0+b2Zmc2V0KCkgLyBzaXpl
b2YodWludDY0X3QpXSA9IHVuYm94ZWRWYWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBjYWxsZWVGcmFtZVBvaW50ZXJbcmVwLm9mZnNldEZyb21GUCgpIC8gc2l6ZW9mKHVp
bnQ2NF90KV0gPSB1bmJveGVkVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgaXRlbXNJbnNlcnRl
ZCsrOworICAgIH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Cisg
ICAgaWYgKGl0ZW1zSW5zZXJ0ZWQgIT0gc2lnbmF0dXJlLT5yZXR1cm5Db3VudCgpKQorICAgICAg
ICB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJJbmNvcnJlY3QgbnVtYmVy
IG9mIHZhbHVlcyByZXR1cm5lZCB0byBXYXNtIGZyb20gSlMiKTsKK30KKworLy8gRklYTUU6IEl0
IHdvdWxkIGJlIG11Y2ggZWFzaWVyIHRvIGlubGluZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIGdsb2Jh
bCBHQywgd2hpY2ggY291bGQgcHJvYmFibHkgbWVhbiB3ZSBjb3VsZCBhdm9pZAorLy8gc3BpbGxp
bmcgdGhlIHJlc3VsdHMgb250byB0aGUgc3RhY2suCisvLyBTYXZlZCByZXN1bHQgcmVnaXN0ZXJz
IHNob3VsZCBiZSBwbGFjZWQgb24gdGhlIHN0YWNrIGp1c3QgYWJvdmUgdGhlIGxhc3Qgc3RhY2sg
cmVzdWx0LgorSlNBcnJheSogSklUX09QRVJBVElPTiBvcGVyYXRpb25BbGxvY2F0ZVJlc3VsdHNB
cnJheShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgSlNWYWx1
ZSogc3RhY2tQb2ludGVyRnJvbUNhbGxlZSkKK3sKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGpzSW5zdGFuY2UgPSBpbnN0YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOwor
ICAgIFZNJiB2bSA9IGpzSW5zdGFuY2UtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKyAgICBPYmplY3RJbml0aWFsaXphdGlv
blNjb3BlIGluaXRpYWxpemF0aW9uU2NvcGUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICBKU0Fy
cmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZChp
bml0aWFsaXphdGlvblNjb3BlLCBudWxscHRyLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpLCBzaWduYXR1cmUt
PnJldHVybkNvdW50KCkpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1
cmUuLi4KKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisgICAgYXV0byB3YXNtQ2FsbElu
Zm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnNpZ25hdHVy
ZSk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJSZXN1bHRzID0gd2FzbUNhbGxJ
bmZvLmNvbXB1dGVSZXN1bHRzT2Zmc2V0TGlzdCgpOworCisgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoSlNWYWx1ZSkgPT0gc2l6ZW9mKENQVVJlZ2lzdGVyKSwgIlRoZSBjb2RlIGJlbG93IHJlbGll
cyBvbiB0aGlzLiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJl
dHVybkNvdW50KCk7ICsraSkgeworICAgICAgICBCMzo6VmFsdWVSZXAgcmVwID0gd2FzbUNhbGxJ
bmZvLnJlc3VsdHNbaV07CisgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgIGlmIChyZXAu
aXNSZWcoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RhY2tQb2ludGVyRnJvbUNhbGxlZVsocmVn
aXN0ZXJSZXN1bHRzLmZpbmQocmVwLnJlZygpKS0+b2Zmc2V0KCkgKyB3YXNtQ2FsbEluZm8uaGVh
ZGVyQW5kQXJndW1lbnRTdGFja1NpemVJbkJ5dGVzKSAvIHNpemVvZihKU1ZhbHVlKV07CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlID0gc3RhY2tQb2ludGVyRnJvbUNhbGxlZVtyZXAu
b2Zmc2V0RnJvbVNQKCkgLyBzaXplb2YoSlNWYWx1ZSldOworICAgICAgICByZXN1bHQtPmluaXRp
YWxpemVJbmRleChpbml0aWFsaXphdGlvblNjb3BlLCBpLCB2YWx1ZSk7CisgICAgfQorCisgICAg
QVNTRVJUKHJlc3VsdC0+aW5kZXhpbmdUeXBlKCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVdyaXRlQmFy
cmllclNsb3dQYXRoKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogY2VsbCwgVk0qIHZtUG9pbnRlcikK
K3sKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgQVNTRVJUKHZtUG9pbnRlcik7CisgICAgVk0mIHZt
ID0gKnZtUG9pbnRlcjsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllclNsb3dQYXRoKGNlbGwpOwor
fQorCit1aW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcGNvdW50MzIoaW50MzJfdCB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHZhbHVlKTsKK30KKwordWlu
dDY0X3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3Bjb3VudDY0KGludDY0X3QgdmFsdWUpCit7
CisgICAgcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudGxsKHZhbHVlKTsKK30KKworaW50MzJfdCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdyb3dNZW1vcnkodm9pZCogY2FsbEZyYW1lLCBJbnN0YW5j
ZSogaW5zdGFuY2UsIGludDMyX3QgZGVsdGEpCit7CisgICAgaW5zdGFuY2UtPnN0b3JlVG9wQ2Fs
bEZyYW1lKGNhbGxGcmFtZSk7CisKKyAgICBpZiAoZGVsdGEgPCAwKQorICAgICAgICByZXR1cm4g
LTE7CisKKyAgICBhdXRvIGdyb3duID0gaW5zdGFuY2UtPm1lbW9yeSgpLT5ncm93KFBhZ2VDb3Vu
dChkZWx0YSkpOworICAgIGlmICghZ3Jvd24pIHsKKyAgICAgICAgc3dpdGNoIChncm93bi5lcnJv
cigpKSB7CisgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6SW52YWxpZERlbHRh
OgorICAgICAgICBjYXNlIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb246OkludmFsaWRHcm93U2l6ZToK
KyAgICAgICAgY2FzZSBNZW1vcnk6Okdyb3dGYWlsUmVhc29uOjpXb3VsZEV4Y2VlZE1heGltdW06
CisgICAgICAgIGNhc2UgTWVtb3J5OjpHcm93RmFpbFJlYXNvbjo6T3V0T2ZNZW1vcnk6CisgICAg
ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ3Jvd24udmFsdWUoKS5wYWdlQ291bnQo
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRXYXNtVGFi
bGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgaW50MzJf
dCBzaWduZWRJbmRleCkKK3sKKyAgICBBU1NFUlQodGFibGVJbmRleCA8IGluc3RhbmNlLT5tb2R1
bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CisgICAgaWYgKHNpZ25lZElu
ZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1aW50MzJfdCBpbmRleCA9IHNpZ25l
ZEluZGV4OworICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmxl
bmd0aCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
aW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5nZXQoaW5kZXgpKTsKK30KKworc3RhdGljIGJv
b2wgc2V0V2FzbVRhYmxlRWxlbWVudChJbnN0YW5jZSogaW5zdGFuY2UsIHVuc2lnbmVkIHRhYmxl
SW5kZXgsIGludDMyX3Qgc2lnbmVkSW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY1ZhbHVlKQorewor
ICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5zdGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0
aW9uKCkudGFibGVDb3VudCgpKTsKKyAgICBpZiAoc2lnbmVkSW5kZXggPCAwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB1aW50MzJfdCBpbmRleCA9IHNpZ25lZEluZGV4OworICAgIGlm
IChpbmRleCA+PSBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y1ZhbHVlKTsKKyAgICBpZiAoaW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT50eXBlKCkgPT0g
V2FzbTo6VGFibGVFbGVtZW50VHlwZTo6QW55cmVmKQorICAgICAgICBpbnN0YW5jZS0+dGFibGUo
dGFibGVJbmRleCktPnNldChpbmRleCwgdmFsdWUpOworICAgIGVsc2UgaWYgKGluc3RhbmNlLT50
YWJsZSh0YWJsZUluZGV4KS0+dHlwZSgpID09IFdhc206OlRhYmxlRWxlbWVudFR5cGU6OkZ1bmNy
ZWYpIHsKKyAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uOworICAgICAg
ICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogd2FzbVdyYXBwZXJGdW5jdGlvbjsKKworICAg
ICAgICBpZiAoaXNXZWJBc3NlbWJseUhvc3RGdW5jdGlvbihpbnN0YW5jZS0+b3duZXI8SlNPYmpl
Y3Q+KCktPnZtKCksIHZhbHVlLCB3YXNtRnVuY3Rpb24sIHdhc21XcmFwcGVyRnVuY3Rpb24pKSB7
CisgICAgICAgICAgICBBU1NFUlQoISF3YXNtRnVuY3Rpb24gfHwgISF3YXNtV3JhcHBlckZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIGlmICh3YXNtRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgaW5z
dGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5hc0Z1bmNyZWZUYWJsZSgpLT5zZXRGdW5jdGlvbihp
bmRleCwganNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpLCB3YXNtRnVuY3Rpb24tPmltcG9ydGFibGVG
dW5jdGlvbigpLCAmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCkt
PmFzRnVuY3JlZlRhYmxlKCktPnNldEZ1bmN0aW9uKGluZGV4LCBqc0Nhc3Q8SlNPYmplY3QqPih2
YWx1ZSksIHdhc21XcmFwcGVyRnVuY3Rpb24tPmltcG9ydGFibGVGdW5jdGlvbigpLCAmd2FzbVdy
YXBwZXJGdW5jdGlvbi0+aW5zdGFuY2UoKS0+aW5zdGFuY2UoKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAodmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRl
eCktPmNsZWFyKGluZGV4KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSklUX09QRVJBVElPTiBvcGVyYXRpb25TZXRXYXNt
VGFibGVFbGVtZW50KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgaW50
MzJfdCBzaWduZWRJbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jVmFsdWUpCit7CisgICAgcmV0dXJu
IHNldFdhc21UYWJsZUVsZW1lbnQoaW5zdGFuY2UsIHRhYmxlSW5kZXgsIHNpZ25lZEluZGV4LCBl
bmNWYWx1ZSk7Cit9CisKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVGFibGVH
cm93KEluc3RhbmNlKiBpbnN0YW5jZSwgdW5zaWduZWQgdGFibGVJbmRleCwgRW5jb2RlZEpTVmFs
dWUgZmlsbCwgaW50MzJfdCBkZWx0YSkKK3sKKyAgICBBU1NFUlQodGFibGVJbmRleCA8IGluc3Rh
bmNlLT5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpLnRhYmxlQ291bnQoKSk7CisgICAgYXV0
byBvbGRTaXplID0gaW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgpLT5sZW5ndGgoKTsKKyAgICBp
ZiAoZGVsdGEgPCAwKQorICAgICAgICByZXR1cm4gb2xkU2l6ZTsKKyAgICBhdXRvIG5ld1NpemUg
PSBpbnN0YW5jZS0+dGFibGUodGFibGVJbmRleCktPmdyb3coZGVsdGEpOworICAgIGlmICghbmV3
U2l6ZSB8fCAqbmV3U2l6ZSA9PSBvbGRTaXplKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgaW5zdGFuY2UtPnRhYmxlKHRhYmxlSW5kZXgp
LT5sZW5ndGgoKTsgKytpKQorICAgICAgICBzZXRXYXNtVGFibGVFbGVtZW50KGluc3RhbmNlLCB0
YWJsZUluZGV4LCBpLCBmaWxsKTsKKworICAgIHJldHVybiBvbGRTaXplOworfQorCitib29sIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRhYmxlRmlsbChJbnN0YW5jZSogaW5zdGFuY2UsIHVu
c2lnbmVkIHRhYmxlSW5kZXgsIGludDMyX3QgdW5zYWZlT2Zmc2V0LCBFbmNvZGVkSlNWYWx1ZSBm
aWxsLCBpbnQzMl90IHVuc2FmZUNvdW50KQoreworICAgIEFTU0VSVCh0YWJsZUluZGV4IDwgaW5z
dGFuY2UtPm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCkudGFibGVDb3VudCgpKTsKKyAgICBp
ZiAodW5zYWZlT2Zmc2V0IDwgMCB8fCB1bnNhZmVDb3VudCA8IDApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHVuc2lnbmVkIG9mZnNldCA9IHVuc2FmZU9mZnNldDsKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IHVuc2FmZUNvdW50OworCisgICAgaWYgKG9mZnNldCA+PSBpbnN0YW5jZS0+dGFi
bGUodGFibGVJbmRleCktPmxlbmd0aCgpIHx8IG9mZnNldCArIGNvdW50ID4gaW5zdGFuY2UtPnRh
YmxlKHRhYmxlSW5kZXgpLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNvdW50OyArK2opCisgICAgICAgIHNldFdhc21UYWJs
ZUVsZW1lbnQoaW5zdGFuY2UsIHRhYmxlSW5kZXgsIG9mZnNldCArIGosIGZpbGwpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
V2FzbVJlZkZ1bmMoSW5zdGFuY2UqIGluc3RhbmNlLCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICBK
U1ZhbHVlIHZhbHVlID0gaW5zdGFuY2UtPmdldEZ1bmN0aW9uV3JhcHBlcihpbmRleCk7CisgICAg
QVNTRVJUKHZhbHVlLmlzRnVuY3Rpb24oaW5zdGFuY2UtPm93bmVyPEpTT2JqZWN0PigpLT52bSgp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Cit9CisKK2ludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25HZXRXYXNtVGFibGVTaXplKEluc3RhbmNlKiBpbnN0YW5jZSwg
dW5zaWduZWQgdGFibGVJbmRleCkKK3sKKyAgICByZXR1cm4gaW5zdGFuY2UtPnRhYmxlKHRhYmxl
SW5kZXgpLT5sZW5ndGgoKTsKK30KKwordm9pZCogSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNt
VG9KU0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSB0
eXBlLCBJbnN0YW5jZSogd2FzbUluc3RhbmNlKQoreworICAgIHdhc21JbnN0YW5jZS0+c3RvcmVU
b3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKKyAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3Rh
bmNlID0gd2FzbUluc3RhbmNlLT5vd25lcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7CisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsK
KworICAgIC8vIERvIG5vdCByZXRyaWV2ZSBWTSYgZnJvbSBDYWxsRnJhbWUgc2luY2UgQ2FsbEZy
YW1lJ3MgY2FsbGVlIGlzIG5vdCBhIEpTQ2VsbC4KKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisKKyAgICB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgIEpTT2JqZWN0KiBlcnJvcjsKKyAgICAgICAgaWYgKHR5cGUg
PT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVyZmxvdykKKyAgICAgICAgICAgIGVycm9yID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGdsb2JhbE9i
amVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUo
KSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhjZXB0aW9uVHlwZSh0eXBlKSk7CisgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgZXJyb3IpOworICAgIH0KKwor
ICAgIGdlbmVyaWNVbndpbmQodm0sIGNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCEhdm0uY2FsbEZy
YW1lRm9yQ2F0Y2gpOworICAgIEFTU0VSVCghIXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsK
KyAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGJldHRlcjoKKyAgICAvLyBUaGlzIGlz
IGEgdG90YWwgaGFjaywgYnV0IHRoZSBsbGludCAoYm90aCBvcF9jYXRjaCBhbmQgaGFuZGxlVW5j
YXVnaHRFeGNlcHRpb24pCisgICAgLy8gcmVxdWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVs
ZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNlbGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQorICAg
IC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGlsZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIu
KSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24KKyAgICAvLyBmb3IgZXhjZXB0
aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZvckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3Rl
ciBiZWZvcmUganVtcGluZworICAgIC8vIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2Ug
ZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0aGlzIHRlcnJpYmxlIGhhY2suCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDQ0MAorICAgIGJpdHdpc2Vf
Y2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKKyAg
ICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCiAKIElHTk9SRV9XQVJOSU5HU19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5oCmluZGV4IDM1Zjk5YWU1ZjRkMzU1MWUwODk0NDliYzc1
NzE5NDRlZDZjM2JjMGUuLjlmN2E0OWJjYzFhNjQ4NzQwMjMzNGM3YjhlNzU5ZjcyNDJiNDRlZmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wZXJhdGlvbnMuaApAQCAtNDMs
NiArNDMsMjggQEAgY2xhc3MgSW5zdGFuY2U7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
V2FzbVRyaWdnZXJPU1JFbnRyeU5vdyhQcm9iZTo6Q29udGV4dCYpIFdURl9JTlRFUk5BTDsKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVHJpZ2dlclRpZXJVcE5vdyhJbnN0YW5jZSos
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25XYXNtVGhyb3dCYWRJNjQoSlNXZWJBc3NlbWJseUluc3RhbmNlKikgV1RGX0lO
VEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21VbndpbmQoQ2FsbEZyYW1l
KikgV1RGX0lOVEVSTkFMOworCitkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0
VG9GNjQoQ2FsbEZyYW1lKiwgSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworaW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRUb0kzMihDYWxsRnJhbWUqLCBKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitmbG9hdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRUb0YzMihDYWxsRnJh
bWUqLCBKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25JdGVyYXRlUmVzdWx0cyhDYWxsRnJhbWUqLCBJbnN0YW5jZSosIGNvbnN0IFNpZ25hdHVyZSos
IEpTVmFsdWUsIHVpbnQ2NF90KiwgdWludDY0X3QqKSBXVEZfSU5URVJOQUw7CitKU0FycmF5KiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5KENhbGxGcmFtZSosIFdh
c206Okluc3RhbmNlKiwgY29uc3QgU2lnbmF0dXJlKiwgSW5kZXhpbmdUeXBlLCBKU1ZhbHVlKikg
V1RGX0lOVEVSTkFMOworCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVdyaXRlQmFy
cmllclNsb3dQYXRoKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFZNKikgV1RGX0lOVEVSTkFMOwor
dWludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3Bjb3VudDMyKGludDMyX3QpIFdURl9J
TlRFUk5BTDsKK3VpbnQ2NF90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG9wY291bnQ2NChpbnQ2
NF90KSBXVEZfSU5URVJOQUw7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR3Jvd01l
bW9yeSh2b2lkKiwgSW5zdGFuY2UqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CisKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0V2FzbVRhYmxlRWxlbWVudChJbnN0YW5j
ZSosIHVuc2lnbmVkLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Citib29sIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uU2V0V2FzbVRhYmxlRWxlbWVudChJbnN0YW5jZSosIHVuc2lnbmVkLCBpbnQzMl90
LCBFbmNvZGVkSlNWYWx1ZSBlbmNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtUmVmRnVuYyhJbnN0YW5jZSosIHVpbnQzMl90KSBX
VEZfSU5URVJOQUw7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRhYmxlR3Jv
dyhJbnN0YW5jZSosIHVuc2lnbmVkLCBFbmNvZGVkSlNWYWx1ZSBmaWxsLCBpbnQzMl90IGRlbHRh
KSBXVEZfSU5URVJOQUw7Citib29sIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV2FzbVRhYmxlRmls
bChJbnN0YW5jZSosIHVuc2lnbmVkLCBpbnQzMl90IG9mZnNldCwgRW5jb2RlZEpTVmFsdWUgZmls
bCwgaW50MzJfdCBjb3VudCkgV1RGX0lOVEVSTkFMOworaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldFdhc21UYWJsZVNpemUoSW5zdGFuY2UqLCB1bnNpZ25lZCkgV1RGX0lOVEVSTkFM
OworCit2b2lkKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKENhbGxG
cmFtZSosIFdhc206OkV4Y2VwdGlvblR5cGUsIEluc3RhbmNlKikgV1RGX0lOVEVSTkFMOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9KU1RvV2FzbS5jcHAKaW5kZXggZThhZGJmNGI0YjYyOGM5MDA4Yjg0MDNhNTdhNTgyNGZkYjli
MDczYi4uYzI2ODcxODc0ZjRkMTljYjM0YzUyYmM2NzRmNGNlOTAwM2E2Mjc4MyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV2FzbU9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgogI2luY2x1ZGUgIldhc21Ub0pTLmgiCiAKQEAgLTczLDQwICs3NCw2IEBAIGlubGluZSB2
b2lkIGJveFdhc21SZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIFdhc206OlR5cGUgdHlwZSwgUmVn
IHNyYywgSlNWYWx1ZVJlCiAgICAgfQogfQogCi0vLyBGSVhNRTogSXQgd291bGQgYmUgbXVjaCBl
YXNpZXIgdG8gaW5saW5lIHRoaXMgd2hlbiB3ZSBoYXZlIGEgZ2xvYmFsIEdDLCB3aGljaCBjb3Vs
ZCBwcm9iYWJseSBtZWFuIHdlIGNvdWxkIGF2b2lkCi0vLyBzcGlsbGluZyB0aGUgcmVzdWx0cyBv
bnRvIHRoZSBzdGFjay4KLS8vIFNhdmVkIHJlc3VsdCByZWdpc3RlcnMgc2hvdWxkIGJlIHBsYWNl
ZCBvbiB0aGUgc3RhY2sganVzdCBhYm92ZSB0aGUgbGFzdCBzdGFjayByZXN1bHQuCi1zdGF0aWMg
SklUX09QRVJBVElPTiBKU0FycmF5KiBhbGxvY2F0ZVJlc3VsdHNBcnJheShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBTaWduYXR1cmUqIHNpZ25h
dHVyZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgSlNWYWx1ZSogc3RhY2tQb2ludGVyRnJv
bUNhbGxlZSkKLXsKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGpzSW5zdGFuY2UgPSBpbnN0
YW5jZS0+b3duZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPigpOwotICAgIFZNJiB2bSA9IGpzSW5z
dGFuY2UtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZy
YW1lKTsKLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5n
bG9iYWxPYmplY3QoKTsKLSAgICBPYmplY3RJbml0aWFsaXphdGlvblNjb3BlIGluaXRpYWxpemF0
aW9uU2NvcGUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICBKU0FycmF5KiByZXN1bHQgPSBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZChpbml0aWFsaXphdGlvblNjb3Bl
LCBudWxscHRyLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihpbmRleGluZ1R5cGUpLCBzaWduYXR1cmUtPnJldHVybkNvdW50KCkpOwot
Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmUuLi4KLSAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQpOwotCi0gICAgYXV0byB3YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3IoKnNpZ25hdHVyZSk7Ci0gICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QgcmVnaXN0ZXJSZXN1bHRzID0gd2FzbUNhbGxJbmZvLmNvbXB1dGVSZXN1bHRz
T2Zmc2V0TGlzdCgpOwotCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoSlNWYWx1ZSkgPT0gc2l6
ZW9mKENQVVJlZ2lzdGVyKSwgIlRoZSBjb2RlIGJlbG93IHJlbGllcyBvbiB0aGlzLiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUtPnJldHVybkNvdW50KCk7ICsraSkg
ewotICAgICAgICBCMzo6VmFsdWVSZXAgcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaV07Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmIChyZXAuaXNSZWcoKSkKLSAgICAgICAg
ICAgIHZhbHVlID0gc3RhY2tQb2ludGVyRnJvbUNhbGxlZVsocmVnaXN0ZXJSZXN1bHRzLmZpbmQo
cmVwLnJlZygpKS0+b2Zmc2V0KCkgKyB3YXNtQ2FsbEluZm8uaGVhZGVyQW5kQXJndW1lbnRTdGFj
a1NpemVJbkJ5dGVzKSAvIHNpemVvZihKU1ZhbHVlKV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZhbHVlID0gc3RhY2tQb2ludGVyRnJvbUNhbGxlZVtyZXAub2Zmc2V0RnJvbVNQKCkgLyBz
aXplb2YoSlNWYWx1ZSldOwotICAgICAgICByZXN1bHQtPmluaXRpYWxpemVJbmRleChpbml0aWFs
aXphdGlvblNjb3BlLCBpLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdC0+aW5k
ZXhpbmdUeXBlKCkgPT0gaW5kZXhpbmdUeXBlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB2
b2lkIG1hcnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBjb25zdCBDYWxsSW5mb3JtYXRpb24mIHdhc21GcmFtZUNvbnZlbnRpb24sIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBzYXZlZFJlc3VsdFJlZ2lzdGVycykKIHsKICAgICBp
ZiAoc2lnbmF0dXJlLnJldHVybnNWb2lkKCkpCkBAIC0xNTAsMTIgKzExNywxMiBAQCB2b2lkIG1h
cnNoYWxsSlNSZXN1bHQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBjb25zdCBDYWxsSQogICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZUdQUiA9
IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiAg
ICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAgICAgIHdhc21Db250
ZXh0SW5zdGFuY2VHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0gICAgICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PFdhc206Okluc3RhbmNlKiwgdHlwZW5hbWUgRnVuY3Rp
b25UcmFpdHM8ZGVjbHR5cGUoYWxsb2NhdGVSZXN1bHRzQXJyYXkpPjo6QXJndW1lbnRUeXBlPDE+
Pik7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PFdhc206Okluc3Rh
bmNlKiwgdHlwZW5hbWUgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uQWxsb2NhdGVS
ZXN1bHRzQXJyYXkpPjo6QXJndW1lbnRUeXBlPDE+Pik7CiAgICAgICAgICAgICBqaXQubG9hZFdh
c21Db250ZXh0SW5zdGFuY2Uod2FzbUNvbnRleHRJbnN0YW5jZUdQUik7CiAgICAgICAgIH0KIAot
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoYWxsb2NhdGVSZXN1bHRzQXJyYXkp
Pih3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnNp
Z25hdHVyZSksIGluZGV4aW5nVHlwZSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgICAgIGppdC5jYWxsT3BlcmF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4oYWxsb2NhdGVSZXN1bHRzQXJyYXkpKTsKKyAgICAgICAgaml0LnNldHVwQXJndW1lbnRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkFsbG9jYXRlUmVzdWx0c0FycmF5KT4od2FzbUNvbnRleHRJbnN0YW5j
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZzaWduYXR1cmUpLCBpbmRleGluZ1R5
cGUsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBqaXQuY2Fs
bE9wZXJhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkFsbG9jYXRl
UmVzdWx0c0FycmF5KSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XYXNtVG9KUy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XYXNtVG9KUy5jcHAKaW5kZXggOThhNzg3NGY2ZDFhMjYyZDQ2MzVlZDM1NDg3ODg5NDI5YzQ1
ZWQ4NC4uMjdhNTdjMjgwZjQxZTk1Yjc4NmU0MTBkYjgxMWIwNTc2YjBmNWZlZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmNwcApAQCAtMzAxLDI3ICszMDEsMTkg
QEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRp
bmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3Qgc2xvd1BhdGg7CiAgICAgICAgICAgICBHUFJSZWcgZGVzdCA9IHdhc21DYWxsSW5mby5y
ZXN1bHRzWzBdLmdwcigpOwogCi0gICAgICAgICAgICBpbnQzMl90ICgqY29udmVydFRvSTMyKShD
YWxsRnJhbWUqLCBKU1ZhbHVlKSA9IFtdIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2
KSAtPiBpbnQzMl90IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcGFzc2lu
ZyBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RlYWQuCi0gICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzIwNgotICAgICAgICAgICAg
ICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+ZGVwcmVjYXRlZFZNKCk7Ci0gICAgICAgICAgICAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdi50b0ludDMyKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCh2bSkp
OwotICAgICAgICAgICAgfTsKLQogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFu
Y2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9Ob3RIYXZlVGFnUmVnaXN0
ZXJzKSk7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIo
SlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBEb05vdEhhdmVUYWdSZWdpc3Rl
cnMpKTsKICAgICAgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgZGVzdCk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChqaXQuanVtcCgpKTsKIAog
ICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50czxkZWNsdHlwZShjb252ZXJ0VG9JMzIpPihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ29udmVy
dFRvSTMyKT4oR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICAgICAgYXV0byBjYWxs
ID0gaml0LmNhbGwoT3BlcmF0aW9uUHRyVGFnKTsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNoZWNr
cy5hcHBlbmQoaml0LmVtaXRKdW1wSWZFeGNlcHRpb24odm0pKTsKICAgICAgICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBkZXN0KTsKIAogICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNvbnZl
cnRUb0kzMikpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkNvbnZlcnRUb0kzMikpOwogICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKQEAgLTMzNSwxNCArMzI3LDYg
QEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRp
bmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cExpc3QgZG9uZTsKICAgICAgICAgICAgIEZQUlJlZyBkZXN0ID0gd2FzbUNhbGxJbmZvLnJlc3Vs
dHNbMF0uZnByKCk7CiAKLSAgICAgICAgICAgIGZsb2F0ICgqY29udmVydFRvRjMyKShDYWxsRnJh
bWUqLCBKU1ZhbHVlKSA9IFtdIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KSAtPiBm
bG9hdCB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0ZWFkLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMyMDYKLSAgICAgICAgICAgICAgICBWTSYg
dm0gPSBjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgpOwotICAgICAgICAgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2LnRvTnVtYmVyKGNhbGxGcmFtZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCh2bSkpKTsKLSAgICAgICAgICAgIH07Ci0KICAgICAgICAgICAgIGF1dG8gbm90QU51
bWJlciA9IGppdC5icmFuY2hJZk5vdE51bWJlcihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgRG9O
b3RIYXZlVGFnUmVnaXN0ZXJzKTsKICAgICAgICAgICAgIGF1dG8gaXNEb3VibGUgPSBqaXQuYnJh
bmNoSWZOb3RJbnQzMihKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIERvTm90
SGF2ZVRhZ1JlZ2lzdGVycyk7CiAgICAgICAgICAgICAvLyBXZSdyZSBhbiBpbnQzMgpAQCAtMzU4
LDEzICszNDIsMTMgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0
clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9KUyhWTSYgdm0KICAgICAgICAgICAgIGRvbmUu
YXBwZW5kKGppdC5qdW1wKCkpOwogCiAgICAgICAgICAgICBub3RBTnVtYmVyLmxpbmsoJmppdCk7
Ci0gICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoY29udmVydFRvRjMyKT4o
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKG9wZXJhdGlvbkNvbnZlcnRUb0YzMik+KEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKICAgICAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAg
ICAgICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9u
KHZtKSk7CiAgICAgICAgICAgICBqaXQubW92ZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiAsIGRl
c3QpOwogCiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9u
UHRyPE9wZXJhdGlvblB0clRhZz4oY29udmVydFRvRjMyKSk7CisgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9u
Q29udmVydFRvRjMyKSk7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgZG9uZS5saW5r
KCZqaXQpOwpAQCAtMzc0LDE0ICszNTgsNiBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8V2FzbUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwogICAgICAgICAgICAgRlBSUmVn
IGRlc3QgPSB3YXNtQ2FsbEluZm8ucmVzdWx0c1swXS5mcHIoKTsKIAotICAgICAgICAgICAgZG91
YmxlICgqY29udmVydFRvRjY0KShDYWxsRnJhbWUqLCBKU1ZhbHVlKSA9IFtdIChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSB2KSAtPiBkb3VibGUgewotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBwYXNzaW5nIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGVhZC4KLSAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjAzMjA2Ci0gICAgICAgICAgICAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT5kZXByZWNhdGVkVk0o
KTsKLSAgICAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB2LnRvTnVtYmVyKGNhbGxGcmFtZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCh2bSkpOwotICAgICAgICAgICAgfTsKLQogICAgICAgICAgICAgYXV0
byBub3RBTnVtYmVyID0gaml0LmJyYW5jaElmTm90TnVtYmVyKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpOwogICAgICAgICAgICAgYXV0byBpc0RvdWJsZSA9
IGppdC5icmFuY2hJZk5vdEludDMyKEpTVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KSwgRG9Ob3RIYXZlVGFnUmVnaXN0ZXJzKTsKICAgICAgICAgICAgIC8vIFdlJ3JlIGFuIGludDMy
CkBAIC0zOTYsMTMgKzM3MiwxMyBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2Fz
bUVudHJ5UHRyVGFnPiwgQmluZGluZ0ZhaWx1cmU+IHdhc21Ub0pTKFZNJiB2bQogICAgICAgICAg
ICAgZG9uZS5hcHBlbmQoaml0Lmp1bXAoKSk7CiAKICAgICAgICAgICAgIG5vdEFOdW1iZXIubGlu
aygmaml0KTsKLSAgICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShjb252ZXJ0
VG9GNjQpPihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBqaXQuc2V0dXBB
cmd1bWVudHM8ZGVjbHR5cGUob3BlcmF0aW9uQ29udmVydFRvRjY0KT4oR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwogICAgICAgICAgICAgYXV0byBjYWxsID0gaml0LmNhbGwoT3BlcmF0aW9uUHRy
VGFnKTsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoaml0LmVtaXRKdW1wSWZF
eGNlcHRpb24odm0pKTsKICAgICAgICAgICAgIGppdC5tb3ZlKEZQUkluZm86OnJldHVyblZhbHVl
RlBSLCBkZXN0KTsKIAogICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBG
dW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGNvbnZlcnRUb0Y2NCkpOworICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9w
ZXJhdGlvbkNvbnZlcnRUb0Y2NCkpOwogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGRv
bmUubGluaygmaml0KTsKQEAgLTQxMCw3MCArMzg2LDE1IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0m
IHZtCiAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoc2lnbmF0dXJlLnJldHVy
bkNvdW50KCkgPiAxKSB7Ci0gICAgICAgIHZvaWQoKml0ZXJhdGVSZXN1bHRzKShDYWxsRnJhbWUq
LCBJbnN0YW5jZSosIGNvbnN0IFNpZ25hdHVyZSosIEpTVmFsdWUsIHVpbnQ2NF90KiwgdWludDY0
X3QqKSA9IFtdIChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSW5zdGFuY2UqIGluc3RhbmNlLCBjb25z
dCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgSlNWYWx1ZSByZXN1bHQsIHVpbnQ2NF90KiByZWdpc3Rl
clJlc3VsdHMsIHVpbnQ2NF90KiBjYWxsZWVGcmFtZVBvaW50ZXIpIC0+IHZvaWQgewotICAgICAg
ICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHBhc3NpbmcgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0ZWFkLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMzIwNgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBqc0luc3Rh
bmNlID0gaW5zdGFuY2UtPm93bmVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4oKTsKLSAgICAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0luc3RhbmNlLT5nbG9iYWxPYmpl
Y3QoKTsKLSAgICAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byB3
YXNtQ2FsbEluZm8gPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5jYWxsSW5mb3JtYXRpb25Gb3Io
KnNpZ25hdHVyZSwgQ2FsbFJvbGU6OkNhbGxlZSk7Ci0gICAgICAgICAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCByZWdpc3RlclJlc3VsdE9mZnNldHMgPSB3YXNtQ2FsbEluZm8uY29tcHV0ZVJlc3Vs
dHNPZmZzZXRMaXN0KCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGl0ZW1zSW5zZXJ0ZWQgPSAw
OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFsm
XSAoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKSAt
PiB2b2lkIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1zSW5zZXJ0ZWQgPCBzaWduYXR1cmUtPnJl
dHVybkNvdW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5ib3hlZFZhbHVl
OwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS0+cmV0dXJuVHlwZShpdGVt
c0luc2VydGVkKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEkzMjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuYm94ZWRWYWx1ZSA9IHZhbHVlLnRvSW50MzIoZ2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IEYzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuYm94ZWRWYWx1ZSA9IGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChnbG9iYWxPYmplY3QpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEY2NDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVuYm94ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFs
dWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGdW5jcmVmOgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKHZtKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJGdW5jcmVmIHZhbHVl
IGlzIG5vdCBhIGZ1bmN0aW9uIl9zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBG
QUxMVEhST1VHSDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBbnlyZWY6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB1bmJveGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9wdGlvbnM6OnVzZVdl
YkFzc2VtYmx5UmVmZXJlbmNlcygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gcmVwID0gd2FzbUNhbGxJbmZvLnJlc3VsdHNbaXRlbXNJbnNl
cnRlZF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXAuaXNSZWcoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyUmVzdWx0c1tyZWdpc3RlclJlc3VsdE9mZnNldHMuZmluZChy
ZXAucmVnKCkpLT5vZmZzZXQoKSAvIHNpemVvZih1aW50NjRfdCldID0gdW5ib3hlZFZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsZWVG
cmFtZVBvaW50ZXJbcmVwLm9mZnNldEZyb21GUCgpIC8gc2l6ZW9mKHVpbnQ2NF90KV0gPSB1bmJv
eGVkVmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGl0ZW1zSW5zZXJ0
ZWQrKzsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVtc0luc2VydGVkICE9IHNpZ25hdHVy
ZS0+cmV0dXJuQ291bnQoKSkKLSAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICJJbmNvcnJlY3QgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZCB0byBX
YXNtIGZyb20gSlMiKTsKLSAgICAgICAgfTsKLQogICAgICAgICBHUFJSZWcgd2FzbUNvbnRleHRJ
bnN0YW5jZUdQUiA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkud2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXI7CiAgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkpIHsKICAgICAgICAg
ICAgIHdhc21Db250ZXh0SW5zdGFuY2VHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0gICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PFdhc206Okluc3RhbmNlKiwgdHlw
ZW5hbWUgRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUoaXRlcmF0ZVJlc3VsdHMpPjo6QXJndW1lbnRU
eXBlPDE+PiwgIkluc3RhbmNlIHNob3VsZCBiZSB0aGUgc2Vjb25kIHBhcmFtZXRlci4iKTsKKyAg
ICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8V2FzbTo6SW5zdGFuY2UqLCB0
eXBlbmFtZSBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25JdGVyYXRlUmVzdWx0cyk+
OjpBcmd1bWVudFR5cGU8MT4+LCAiSW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBzZWNvbmQgcGFyYW1l
dGVyLiIpOwogICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHdhc21Db250
ZXh0SW5zdGFuY2VHUFIpOwogICAgICAgICB9CiAKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRz
PGRlY2x0eXBlKGl0ZXJhdGVSZXN1bHRzKT4od2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgJnNpZ25h
dHVyZSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBq
aXQuY2FsbE9wZXJhdGlvbihGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KGl0ZXJhdGVSZXN1
bHRzKSk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVyYXRpb25JdGVy
YXRlUmVzdWx0cyk+KHdhc21Db250ZXh0SW5zdGFuY2VHUFIsICZzaWduYXR1cmUsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGxPcGVyYXRp
b24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25JdGVyYXRlUmVzdWx0cykp
OwogICAgICAgICBleGNlcHRpb25DaGVja3MuYXBwZW5kKGppdC5lbWl0SnVtcElmRXhjZXB0aW9u
KHZtKSk7CiAKICAgICAgICAgZm9yIChSZWdpc3RlckF0T2Zmc2V0IGxvY2F0aW9uIDogc2F2ZWRS
ZXN1bHRSZWdpc3RlcnMpCkBAIC00OTAsMTcgKzQxMSw4IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0m
IHZtCiAgICAgICAgIGF1dG8gY2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0clRhZyk7CiAgICAg
ICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKHZtKTsKIAotICAgICAgICB2b2lkICgqZG9V
bndpbmRpbmcpKENhbGxGcmFtZSopID0gW10gKENhbGxGcmFtZSogY2FsbEZyYW1lKSAtPiB2b2lk
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBwYXNzaW5nIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZSogaW5zdGVhZC4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDMyMDYKLSAgICAgICAgICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
ZGVwcmVjYXRlZFZNKCk7Ci0gICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgY2FsbEZyYW1l
KTsKLSAgICAgICAgICAgIEFTU0VSVCghIXZtLmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAg
fTsKLQogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8T3BlcmF0
aW9uUHRyVGFnPihkb1Vud2luZGluZykpOworICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNh
bGwsIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uV2FzbVVud2luZCkpOwog
ICAgICAgICB9KTsKICAgICB9CiAKQEAgLTUxNyw0MCArNDI5LDYgQEAgRXhwZWN0ZWQ8TWFjcm9B
c3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeVB0clRhZz4sIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9K
UyhWTSYgdm0KICAgICByZXR1cm4gRklOQUxJWkVfV0FTTV9DT0RFKHBhdGNoQnVmZmVyLCBXYXNt
RW50cnlQdHJUYWcsICJXZWJBc3NlbWJseS0+SmF2YVNjcmlwdCBpbXBvcnRbJWldICVzIiwgaW1w
b3J0SW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKIH0KIAotdm9p
ZCogSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVG9KU0V4Y2VwdGlvbihDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSB0eXBlLCBJbnN0YW5jZSogd2FzbUluc3RhbmNl
KQotewotICAgIHdhc21JbnN0YW5jZS0+c3RvcmVUb3BDYWxsRnJhbWUoY2FsbEZyYW1lKTsKLSAg
ICBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlID0gd2FzbUluc3RhbmNlLT5vd25lcjxK
U1dlYkFzc2VtYmx5SW5zdGFuY2U+KCk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKLQotICAgIC8vIERvIG5vdCByZXRyaWV2ZSBW
TSYgZnJvbSBDYWxsRnJhbWUgc2luY2UgQ2FsbEZyYW1lJ3MgY2FsbGVlIGlzIG5vdCBhIEpTQ2Vs
bC4KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICB7Ci0gICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIEpTT2Jq
ZWN0KiBlcnJvcjsKLSAgICAgICAgaWYgKHR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6U3RhY2tPdmVy
ZmxvdykKLSAgICAgICAgICAgIGVycm9yID0gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGdsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yID0gSlNXZWJBc3NlbWJs
eVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKGdsb2JhbE9iamVjdCwgdm0sIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgV2FzbTo6ZXJyb3JNZXNzYWdlRm9yRXhj
ZXB0aW9uVHlwZSh0eXBlKSk7Ci0gICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSwgZXJyb3IpOwotICAgIH0KLQotICAgIGdlbmVyaWNVbndpbmQodm0sIGNhbGxG
cmFtZSk7Ci0gICAgQVNTRVJUKCEhdm0uY2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgIEFTU0VSVCgh
IXZtLnRhcmdldE1hY2hpbmVQQ0ZvclRocm93KTsKLSAgICAvLyBGSVhNRTogV2UgY291bGQgbWFr
ZSB0aGlzIGJldHRlcjoKLSAgICAvLyBUaGlzIGlzIGEgdG90YWwgaGFjaywgYnV0IHRoZSBsbGlu
dCAoYm90aCBvcF9jYXRjaCBhbmQgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24pCi0gICAgLy8gcmVx
dWlyZSBhIGNlbGwgaW4gdGhlIGNhbGxlZSBmaWVsZCB0byBsb2FkIHRoZSBWTS4gKFRoZSBiYXNl
bGluZSBKSVQgZG9lcyBub3QgcmVxdWlyZQotICAgIC8vIHRoaXMgc2luY2UgaXQgaXMgY29tcGls
ZWQgd2l0aCBhIGNvbnN0YW50IFZNIHBvaW50ZXIuKSBXZSBjb3VsZCBtYWtlIHRoZSBjYWxsaW5n
IGNvbnZlbnRpb24KLSAgICAvLyBmb3IgZXhjZXB0aW9ucyBmaXJzdCBsb2FkIGNhbGxGcmFtZUZv
ckNhdGNoIGluZm8gY2FsbCBmcmFtZSByZWdpc3RlciBiZWZvcmUganVtcGluZwotICAgIC8vIHRv
IHRoZSBleGNlcHRpb24gaGFuZGxlci4gSWYgd2UgZGlkIHRoaXMsIHdlIGNvdWxkIHJlbW92ZSB0
aGlzIHRlcnJpYmxlIGhhY2suCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MDQ0MAotICAgIGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlb
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2Ut
PndlYkFzc2VtYmx5VG9KU0NhbGxlZSgpKTsKLSAgICByZXR1cm4gdm0udGFyZ2V0TWFjaGluZVBD
Rm9yVGhyb3c7Ci19Ci0KIHZvaWQgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdQUlJlZyB3YXNtSW5zdGFuY2UsIFdhc206OkV4Y2VwdGlvblR5cGUgdHlwZSkK
IHsKICAgICBBU1NFUlQod2FzbUluc3RhbmNlICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XYXNtVG9KUy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2FzbVRvSlMuaAppbmRleCAyZGVlMTBmYjZmODgw
ZTE2YTQ0OTk5ZTg1NGE0OTU5YjQyNzJkYjMxLi43MTljNDU5NTMyNjEwOTQ0MDQ5YWUyNGU3NjE0
NmRiZTc3ZjQ1YTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
YXNtVG9KUy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dhc21Ub0pTLmgK
QEAgLTQ0LDcgKzQ0LDYgQEAgY2xhc3MgSW5zdGFuY2U7CiAKIEV4cGVjdGVkPE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxXYXNtRW50cnlQdHJUYWc+LCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvSlMoVk0m
LCBCYWc8Q2FsbExpbmtJbmZvPiYgY2FsbExpbmtJbmZvcywgU2lnbmF0dXJlSW5kZXgsIHVuc2ln
bmVkIGltcG9ydEluZGV4KTsKIAotdm9pZCogSklUX09QRVJBVElPTiBvcGVyYXRpb25XYXNtVG9K
U0V4Y2VwdGlvbihDYWxsRnJhbWUqLCBXYXNtOjpFeGNlcHRpb25UeXBlLCBJbnN0YW5jZSopIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgZW1pdFRocm93V2FzbVRvSlNFeGNlcHRpb24oQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIHdhc21JbnN0YW5jZSwgV2FzbTo6RXhjZXB0aW9uVHlwZSk7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAppbmRleCBl
NzQwN2U4MDUwNTQ4ZDQwYzM2Njc4NTQwODEwNzczZDlkYzkzYjJkLi40MDBjZWMwNzRhY2ViNzdh
MjE4MjgzYzE2NWM0M2QxNGI2YmU1YzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5j
cHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TGlua0Vycm9yLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlNb2R1bGUuaCIKKyNpbmNsdWRlICJXYXNtT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIldhc21Q
bGFuLmgiCiAjaW5jbHVkZSAiV2FzbVRvSlMuaCIKICNpbmNsdWRlICJXYXNtV29ya2xpc3QuaCIK
</data>
<flag name="review"
          id="397530"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
    <flag name="commit-queue"
          id="397541"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
      

    </bug>

</bugzilla>