<?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>68186</bug_id>
          
          <creation_ts>2011-09-15 13:27:11 -0700</creation_ts>
          <short_desc>All of the functionality in the non-speculative JIT should be available to the speculative JIT via helper methods</short_desc>
          <delta_ts>2011-09-15 14:50:21 -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>JavaScriptCore</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>
          
          <blocked>68177</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>468037</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 13:27:11 -0700</bug_when>
    <thetext>In some cases the speculative JIT may have evidence that speculating on the type of a particular variable is unprofitable.  In those cases it&apos;s likely to make sense to emit what the non-speculative JIT would have emitted, but only for uses of that variable.  Doing this requires having the non-speculative JIT&apos;s code generator available on a per-opcode basis in the form of helper methods in JITCodeGenerator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468045</commentid>
    <comment_count>1</comment_count>
      <attachid>107542</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 13:34:22 -0700</bug_when>
    <thetext>Created attachment 107542
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468098</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-15 14:50:21 -0700</bug_when>
    <thetext>Landed in r95230.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107542</attachid>
            <date>2011-09-15 13:34:22 -0700</date>
            <delta_ts>2011-09-15 14:06:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>nonspecpillage_patch_1.diff</filename>
            <type>text/plain</type>
            <size>55242</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUyMjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAK
KzIwMTEtMDktMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBB
bGwgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgc2hvdWxk
IGJlCisgICAgICAgIGF2YWlsYWJsZSB0byB0aGUgc3BlY3VsYXRpdmUgSklUIHZpYSBoZWxwZXIg
bWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjgxODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFN0b2xlIGFsbCBvZiB0aGUgZ29vZG5lc3MgZnJvbSBOb25TcGVjdWxhdGl2ZUpJVCBh
bmQgcGxhY2VkIGl0CisgICAgICAgIGluIEpJVENvZGVHZW5lcmF0b3IuICBMZWZ0IGFsbCBvZiB0
aGUgYmFkbmVzcyAoaS5lLiBzdWJ0bGUgY29kZQorICAgICAgICBkdXBsaWNhdGlvbiB3aXRoIFNw
ZWN1bGF0aXZlSklULCBldGMpLiAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbgorICAgICAgICBmb3Ig
cmVtb3ZpbmcgdGhlIE5vblNwZWN1bGF0aXZlSklUIGVudGlyZWx5LCBidXQgaGF2aW5nIGl0cwor
ICAgICAgICBnb29kbmVzcyBhdmFpbGFibGUgZm9yIHJldXNlIGluIHRoZSBTcGVjdWxhdGl2ZUpJ
VCBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVWYWx1
ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVj
dWxhdGl2ZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVLbm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRo
T3ApOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZl
QXJpdGhNb2QpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlQ2hlY2tIYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6bm9uU3BlY3VsYXRpdmVJbnN0YW5jZU9mKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25T
cGVjdWxhdGl2ZUFyaXRoU3ViKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaDoKKwogMjAxMS0wOS0xNSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4
IGZvciBhc3NlcnRpb24gb24gZXhpc3RlbmNlIG9mIGFsdGVybmF0aXZlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDk1MjIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKK2NvbnN0IGRvdWJsZSB0d29Ub1RoZTMyID0gKGRvdWJsZSkw
eDEwMDAwMDAwMHVsbDsKKwogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjbGVhckdlbmVyYXRpb25J
bmZvKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5mby5z
aXplKCk7ICsraSkKQEAgLTQzMSw2ICs0MzMsNjUyIEBAIGJvb2wgSklUQ29kZUdlbmVyYXRvcjo6
aXNLbm93bkJvb2xlYW4oTm8KICAgICByZXR1cm4gaW5mby5pc0pTQm9vbGVhbigpOwogfQogCit2
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBu
b2RlKQoreworICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSkgeworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAKKyAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Cisg
ICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICAKKyAgICBH
UFJSZWcganNWYWx1ZUdwciA9IG9wMS5ncHIoKTsKKyAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdw
cigpOworICAgIG9wMS51c2UoKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3By
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vbk51bWVyaWMgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBq
c1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworCisgICAgLy8gRmly
c3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUK
KyAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIGdwcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAg
aGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKKworICAgIC8vIE5leHQgaGFuZGxlIGNl
bGxzICgmIG90aGVyIEpTIGltbWVkaWF0ZXMpCisgICAgbm9uTnVtZXJpYy5saW5rKCZtX2ppdCk7
CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKKyAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIpOworICAgIGJveERv
dWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgZ3ByKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKGdwcik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9OdW1iZXIgPSBt
X2ppdC5qdW1wKCk7CisgICAgCisgICAgLy8gRmluYWxseSwgaGFuZGxlIGludGVnZXJzLgorICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3ByLCBncHIpOworICAgIGhhc1VuYm94ZWREb3VibGUu
bGluaygmbV9qaXQpOworICAgIGhhc0NhbGxlZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICAK
KyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9CisKK3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3Bl
Y3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoIWlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMSgpKSk7CisgICAgCisgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1ttX2ppdC5ncmFwaCgpW25vZGUuY2hpbGQxKCldLnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICBp
ZiAoaXNKU0RvdWJsZShjaGlsZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpIHsKKyAgICAgICAgRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CisgICAgICAg
IEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNh
dGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1
Y2Nlc3NmdWwpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3By
KTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmVEb3VibGUoZnByLCBGUFJJbmZvOjphcmd1
bWVudEZQUjApOworICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKHRvSW50MzIp
OworICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgZ3ByKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsK
KyAgICAgICAgCisgICAgICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAg
ICAgIGludGVnZXJSZXN1bHQoZ3ByLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOworICAgIEdQUlJlZyBqc1ZhbHVlR3ByID0gb3AxLmdwcigpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgb3AxLnVzZSgpOworCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisKKyAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJzCisgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMik7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Q
dHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRv
SW50MzIgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAvLyBUaGVuIGhhbmRsZSBpbnRlZ2Vycy4KKyAg
ICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpz
VmFsdWVHcHIsIHJlc3VsdEdQUik7CisgICAgaGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7
CisgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworfQorCit2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3sKKyAgICBJbnRlZ2VyT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAKKyAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICBtX2pp
dC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGJv
eGVyLmZwcigpKTsKKyAgICAKKyAgICBib3hEb3VibGUoYm94ZXIuZnByKCksIHJlc3VsdC5ncHIo
KSk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAg
ICAKKyAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Cisg
ICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKK30KKwordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZUtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXgg
cmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQoreworICAgIEpTVmFs
dWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7CisgICAgR1BSUmVnIHJlZ0FyZ0dQUiA9
IHJlZ0FyZy5ncHIoKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgRlBSVGVtcG9yYXJ5IHRtcDEodGhpcyk7
CisgICAgRlBSVGVtcG9yYXJ5IHRtcDIodGhpcyk7CisgICAgRlBSUmVnIHRtcDFGUFIgPSB0bXAx
LmZwcigpOworICAgIEZQUlJlZyB0bXAyRlBSID0gdG1wMi5mcHIoKTsKKyAgICAKKyAgICByZWdB
cmcudXNlKCk7CisgICAgdXNlKGltbUNoaWxkKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dEludDsKKyAgICAKKyAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KGltbUNo
aWxkKTsKKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihyZWdDaGlsZCkpCisgICAg
ICAgIG5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHJlZ0Fy
Z0dQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBvdmVyZmxvdzsKKyAgICAKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBW
YWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBvdmVyZmxvdyA9IG1faml0LmJy
YW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnQXJnR1BSLCBJbW0zMihpbW0p
LCByZXN1bHRHUFIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBcml0aFN1
YjoKKyAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIHJlZ0FyZ0dQUiwgSW1tMzIoaW1tKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAKKyAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgb3ZlcmZsb3cubGluaygmbV9qaXQpOworICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlcjsKKyAgICAKKyAgICAvLyBmaXJzdCBkZWFs
IHdpdGggb3ZlcmZsb3cgY2FzZQorICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ0Fy
Z0dQUiwgdG1wMkZQUik7CisgICAgCisgICAgLy8gbm93IGRlYWwgd2l0aCBub3QtaW50IGNhc2Us
IGlmIGFwcGxpY2FibGUKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKHJlZ0NoaWxkKSkgeworICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlVmFsdWUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAg
IAorICAgICAgICBub3RJbnQubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgaWYgKCFp
c0tub3duTnVtZXJpYyhyZWdDaGlsZCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1
ZUFkZCk7CisgICAgICAgICAgICBub3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByZWdBcmdHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUocmVnQXJnR1BSLCBy
ZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUocmVzdWx0
R1BSLCB0bXAyRlBSKTsKKyAgICAgICAgCisgICAgICAgIGhhdmVWYWx1ZS5saW5rKCZtX2ppdCk7
CisgICAgfQorICAgIAorICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVlT2ZOdW1i
ZXJDb25zdGFudChpbW1DaGlsZCkpKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQubW92ZVB0clRv
RG91YmxlKHJlc3VsdEdQUiwgdG1wMUZQUik7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2Ug
VmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgbV9qaXQuYWRkRG91YmxlKHRt
cDFGUFIsIHRtcDJGUFIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBcml0
aFN1YjoKKyAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDFGUFIsIHRtcDJGUFIpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZUNv
bnZlcnRlZFRvSW50OworICAgIAorICAgIGlmIChvcCA9PSBWYWx1ZUFkZCkgeworICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICBtX2ppdC5icmFuY2hD
b252ZXJ0RG91YmxlVG9JbnQzMih0bXAyRlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgdG1w
MUZQUik7CisgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmVDYXNlQ29udmVydGVkVG9JbnQg
PSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmbV9q
aXQpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5tb3ZlRG91YmxlVG9QdHIodG1wMkZQUiwgcmVz
dWx0R1BSKTsKKyAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICBpZiAoIWlzS25vd25OdW1lcmljKHJlZ0NoaWxk
KSkgeworICAgICAgICBBU1NFUlQobm90TnVtYmVyLmlzU2V0KCkpOworICAgICAgICBBU1NFUlQo
b3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAg
IG5vdE51bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAKKyAgICAgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgaWYgKGNvbW11dGUpIHsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUocmVnQXJnR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHN0YXRpY19jYXN0PGNv
bnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tKSkpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUocmVn
QXJnR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoaW1tKSkpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIGRvbmVDYXNlV2FzTnVtYmVyLmxp
bmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgaWYg
KGRvbmVDYXNlQ29udmVydGVkVG9JbnQuaXNTZXQoKSkKKyAgICAgICAgZG9uZUNhc2VDb252ZXJ0
ZWRUb0ludC5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKK30KKwor
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcChOb2RlVHlw
ZSBvcCwgTm9kZSAmbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CisgICAgCisgICAgRlBSVGVtcG9yYXJ5IHRtcDEodGhpcyk7CisgICAgRlBSVGVtcG9yYXJ5IHRt
cDIodGhpcyk7CisgICAgRlBSUmVnIHRtcDFGUFIgPSB0bXAxLmZwcigpOworICAgIEZQUlJlZyB0
bXAyRlBSID0gdG1wMi5mcHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworCisgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQUlJlZyBhcmcyR1BS
ID0gYXJnMi5ncHIoKTsKKyAgICAKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworICAgIAorICAgIGFyZzEudXNlKCk7CisgICAgYXJnMi51c2UoKTsKKyAgICAKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBjaGlsZDFOb3RJbnQ7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQy
Tm90SW50OworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKKyAgICAKKyAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBjaGlsZDFOb3RJbnQg
PSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDIoKSkpCisgICAgICAgIGNoaWxkMk5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisgICAgCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBB
cml0aEFkZDogeworICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoQWRkMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAg
ICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUikpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgb3ZlcmZsb3cuYXBw
ZW5kKG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJnMUdQUiwg
YXJnMkdQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGhh
dmVGUFJBcmd1bWVudHM7CisKKyAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7CisgICAgICAgIAor
ICAgIC8vIGJvdGggYXJndW1lbnRzIGFyZSBpbnRlZ2VycworICAgIG1faml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKGFyZzFHUFIsIHRtcDFGUFIpOworICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKGFyZzJHUFIsIHRtcDJGUFIpOworICAgICAgICAKKyAgICBoYXZlRlBSQXJndW1lbnRzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
bm90TnVtYmVyczsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQyTm90SW50
MjsKKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewor
ICAgICAgICBjaGlsZDFOb3RJbnQubGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAgICAg
IGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChvcCA9PSBWYWx1ZUFkZCk7CisgICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIG1f
aml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0
R1BSLCB0bXAxRlBSKTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBjaGlsZDEgaXMgY29udmVy
dGVkIHRvIGEgZG91YmxlOyBjaGlsZDIgbWF5IGVpdGhlciBiZSBhbiBpbnQgb3IKKyAgICAgICAg
Ly8gYSBib3hlZCBkb3VibGUKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9k
ZS5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAgY2hpbGQyTm90SW50MiA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
b3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxk
MklzSW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGFy
ZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
bm90TnVtYmVycy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAg
ICAgICAgY2hpbGQyTm90SW50MiA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBjaGls
ZDJJc0ludC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAvLyBjaGlsZCAyIGlzIGRlZmluaXRlbHkgYW4gaW50ZWdlcgorICAgICAg
ICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShhcmcyR1BSLCB0bXAyRlBSKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBoYXZlRlBSQXJndW1lbnRzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
IH0KKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewor
ICAgICAgICBjaGlsZDJOb3RJbnQubGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAgICAg
IGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChvcCA9PSBWYWx1ZUFkZCk7CisgICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8v
IGNoaWxkMSBpcyBkZWZpbml0ZWx5IGFuIGludGVnZXIsIGFuZCBjaGlsZCAyIGlzIGRlZmluaXRl
bHkgbm90CisgICAgICAgICAgICAKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
YXJnMUdQUiwgdG1wMUZQUik7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGNoaWxkMk5vdElu
dDIuaXNTZXQoKSkKKyAgICAgICAgICAgIGNoaWxkMk5vdEludDIubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUoYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgdW5ib3hEb3VibGUocmVzdWx0R1BSLCB0bXAyRlBSKTsKKyAgICB9CisgICAgICAgIAorICAg
IGhhdmVGUFJBcmd1bWVudHMubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICBzd2l0Y2ggKG9w
KSB7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBtX2pp
dC5hZGREb3VibGUodG1wMkZQUiwgdG1wMUZQUik7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDJGUFIs
IHRtcDFGUFIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhN
dWw6CisgICAgICAgIG1faml0Lm11bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VDb252
ZXJ0ZWRUb0ludDsKKyAgICAKKyAgICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgbV9qaXQuYnJhbmNoQ29u
dmVydERvdWJsZVRvSW50MzIodG1wMUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHRtcDJG
UFIpOworICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50ID0g
bV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJm1faml0
KTsKKyAgICB9CisgICAgICAgIAorICAgIGJveERvdWJsZSh0bXAxRlBSLCByZXN1bHRHUFIpOwor
ICAgICAgICAKKyAgICBpZiAoIW5vdE51bWJlcnMuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQo
b3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAg
IG5vdE51bWJlcnMubGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhh
cmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcik7CisgICAgICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKworICAgICAgICBkb25lQ2FzZVdhc051bWJl
ci5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
IGlmIChkb25lQ2FzZUNvbnZlcnRlZFRvSW50LmlzU2V0KCkpCisgICAgICAgIGRvbmVDYXNlQ29u
dmVydGVkVG9JbnQubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9
CisKK3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVBcml0aE1vZChOb2RlJiBu
b2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BSVGVtcG9y
YXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CisgICAgR1BSVGVtcG9yYXJ5IGVkeCh0
aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7CisKKyAgICBGUFJUZW1wb3Jhcnkgb3AxRG91YmxlKHRo
aXMpOworICAgIEZQUlRlbXBvcmFyeSBvcDJEb3VibGUodGhpcyk7CisgICAgCisgICAgR1BSUmVn
IG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOworICAg
IAorICAgIEZQUlJlZyBvcDFGUFIgPSBvcDFEb3VibGUuZnByKCk7CisgICAgRlBSUmVnIG9wMkZQ
UiA9IG9wMkRvdWJsZS5mcHIoKTsKKyAgICAgICAgCisgICAgb3AxLnVzZSgpOworICAgIG9wMi51
c2UoKTsKKyAgICAKKyAgICBHUFJSZWcgdGVtcDIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJl
ZyB1bmJveEdQUjsKKyAgICBpZiAob3AyR1BSID09IFg4NlJlZ2lzdGVyczo6ZWF4IHx8IG9wMkdQ
UiA9PSBYODZSZWdpc3RlcnM6OmVkeCkgeworICAgICAgICB0ZW1wMiA9IGFsbG9jYXRlKCk7Cisg
ICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCB0ZW1wMik7CisgICAgICAgIG9wMkdQUiA9IHRlbXAy
OworICAgICAgICB1bmJveEdQUiA9IHRlbXAyOworICAgIH0gZWxzZSBpZiAob3AxR1BSID09IFg4
NlJlZ2lzdGVyczo6ZWF4KQorICAgICAgICB1bmJveEdQUiA9IFg4NlJlZ2lzdGVyczo6ZWR4Owor
ICAgIGVsc2UKKyAgICAgICAgdW5ib3hHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsKKyAgICBBU1NF
UlQodW5ib3hHUFIgIT0gb3AxLmdwcigpKTsKKyAgICBBU1NFUlQodW5ib3hHUFIgIT0gb3AyLmdw
cigpKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGZpcnN0T3BOb3RJbnQ7CisgICAgSklUQ29t
cGlsZXI6Okp1bXAgc2Vjb25kT3BOb3RJbnQ7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRv
bmU7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbW9kQnlaZXJvOworICAgIAorICAgIGlmICghaXNL
bm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGZpcnN0T3BOb3RJbnQgPSBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigp
KSkKKyAgICAgICAgc2Vjb25kT3BOb3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBvcDJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAg
CisgICAgbW9kQnlaZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBvcDJHUFIpOworICAgIAorICAgIG1faml0Lm1vdmUob3AxR1BSLCBlYXguZ3ByKCkpOworICAg
IG1faml0LmFzc2VtYmxlcigpLmNkcSgpOworICAgIG1faml0LmFzc2VtYmxlcigpLmlkaXZsX3Io
b3AyR1BSKTsKKyAgICAKKyAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWR4KTsKKyAgICAKKyAgICBkb25lLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBnb3REb3VibGVBcmdzOwor
ICAgIAorICAgIG1vZEJ5WmVyby5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpKSksIFg4NlJlZ2lzdGVy
czo6ZWR4KTsKKyAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIAorICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgZmlyc3RPcE5vdEludC5s
aW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzZWNvbmRP
cE5vdEludDI7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQyKCkpKQorICAgICAgICAgICAgc2Vjb25kT3BOb3RJbnQyID0gbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgb3AyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOworICAgICAgICAgICAgCisgICAgICAgIC8vIGZpcnN0IG9wIGlzIGEgZG91YmxlLCBzZWNv
bmQgb3AgaXMgYW4gaW50LgorICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDJH
UFIsIG9wMkZQUik7CisKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigp
KSkgeworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZ290U2Vjb25kT3AgPSBtX2ppdC5q
dW1wKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNlY29uZE9wTm90SW50Mi5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGZpcnN0IG9wIGlzIGEgZG91Ymxl
LCBzZWNvbmQgb3AgaXMgYSBkb3VibGUuCisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwg
dW5ib3hHUFIpOworICAgICAgICAgICAgdW5ib3hEb3VibGUodW5ib3hHUFIsIG9wMkZQUik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGdvdFNlY29uZE9wLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHVuYm94R1BSKTsKKyAg
ICAgICAgdW5ib3hEb3VibGUodW5ib3hHUFIsIG9wMUZQUik7CisgICAgICAgIAorICAgICAgICBn
b3REb3VibGVBcmdzID0gbV9qaXQuanVtcCgpOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIHNlY29uZE9wTm90SW50Lmxpbmso
Jm1faml0KTsKKyAgICAgICAgCisgICAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgZmlyc3Qgb3Ag
aXMgYW4gaW50LCBhbmQgdGhlIHNlY29uZCBpcyBhIGRvdWJsZQorICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShvcDFHUFIsIG9wMUZQUik7CisgICAgICAgIG1faml0Lm1vdmUob3Ay
R1BSLCB1bmJveEdQUik7CisgICAgICAgIHVuYm94RG91YmxlKHVuYm94R1BSLCBvcDJGUFIpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAg
ICAgICBnb3REb3VibGVBcmdzLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkg
eworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhYODZSZWdpc3RlcnM6OmVkeCk7Cisg
ICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8RlBSSW5mbzo6YXJndW1lbnRGUFIwLCBGUFJJbmZvOjph
cmd1bWVudEZQUjE+KG9wMUZQUiwgb3AyRlBSKTsKKyAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChm
bW9kKTsKKyAgICAgICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBYODZSZWdp
c3RlcnM6OmVkeCk7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoWDg2UmVnaXN0ZXJz
OjplZHgpOworICAgIH0KKyAgICAgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisg
ICAgaWYgKHRlbXAyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVubG9jayh0ZW1wMik7Cisg
ICAgCisgICAganNWYWx1ZVJlc3VsdChYODZSZWdpc3RlcnM6OmVkeCwgbV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9CisKK3ZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVDaGVja0hhc0luc3RhbmNlKE5vZGUmIG5vZGUpCit7CisgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBHUFJUZW1wb3Jhcnkg
c3RydWN0dXJlKHRoaXMpOworICAgIAorICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
KyAgICBHUFJSZWcgc3RydWN0dXJlUmVnID0gc3RydWN0dXJlLmdwcigpOworICAgIAorICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFz
ZU5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBi
YXNlUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIAorICAgIC8vIENoZWNrIHRo
YXQgYmFzZSAnSW1wbGVtZW50c0hhc0luc3RhbmNlJy4KKyAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmVSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGltcGxlbWVudHNIYXNJbnN0
YW5jZSA9IG1faml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbXBsZW1lbnRzSGFzSW5zdGFu
Y2UpKTsKKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGFsd2F5cyB0aHJvdywgc28gbm8g
bmVlZCB0byBwcmVzZXJ2ZSByZWdpc3RlcnMuCisgICAgYmFzZU5vdENlbGwubGluaygmbV9qaXQp
OworICAgIG1faml0Lm1vdmUoYmFzZVJlZywgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIC8vIEF0IHNvbWUgcG9pbnQgd2UgY291bGQgb3B0aW1pemUgdGhpcyB0byBwbGFu
dCBhIGRpcmVjdCBqdW1wLCByYXRoZXIgdGhlbiBjaGVja2luZworICAgIC8vIGZvciBhbiBleGNl
cHRpb24gKG9wZXJhdGlvblRocm93SGFzSW5zdGFuY2VFcnJvciBhbHdheXMgdGhyb3dzKS4gUHJv
YmFibHkgbm90IHdvcnRoCisgICAgLy8gYWRkaW5nIHRoZSBleHRyYSBpbnRlcmZhY2UgdG8gZG8g
dGhpcyBub3csIGJ1dCB3ZSBtYXkgYWxzbyB3YW50IHRoaXMgZm9yIG9wX3Rocm93LgorICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3dIYXNJbnN0YW5jZUVycm9y
KTsKKyAgICAKKyAgICBpbXBsZW1lbnRzSGFzSW5zdGFuY2UubGluaygmbV9qaXQpOworICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKK30KKwordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25T
cGVjdWxhdGl2ZUluc3RhbmNlT2YoTm9kZSYgbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIHByb3RvdHlwZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBiYXNlKTsKKworICAg
IEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOworICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKKyAgICBHUFJSZWcgcHJvdG90eXBlUmVnID0gcHJvdG90eXBlLmdwcigpOworICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgCisgICAgdmFsdWUu
dXNlKCk7CisgICAgYmFzZS51c2UoKTsKKyAgICBwcm90b3R5cGUudXNlKCk7CisKKyAgICAvLyBD
aGVjayB0aGF0IG9wZXJhbmRzIGFyZSBjZWxscyAoYmFzZSBpcyBjaGVja2VkIGJ5IENoZWNrSGFz
SW5zdGFuY2UsIHNvIHdlIGNhbiBqdXN0IGFzc2VydCkuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgdmFsdWVOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgbV9qaXQuaml0
QXNzZXJ0SXNDZWxsKGJhc2VSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHByb3RvdHlw
ZU5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBw
cm90b3R5cGVSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICAvLyBDaGVjayB0
aGF0IGJhc2VWYWwgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgorICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdERlZmF1
bHRIYXNJbnN0YW5jZSA9IG1faml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSk7
CisKKyAgICAvLyBDaGVjayB0aGF0IHByb3RvdHlwZSBpcyBhbiBvYmplY3QKKyAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvdHlwZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHBy
b3RvTm90T2JqZWN0ID0gbV9qaXQuYnJhbmNoSWZOb3RPYmplY3Qoc2NyYXRjaFJlZyk7CisKKyAg
ICAvLyBJbml0aWFsaXplIHNjcmF0Y2hSZWcgd2l0aCB0aGUgdmFsdWUgYmVpbmcgY2hlY2tlZC4K
KyAgICBtX2ppdC5tb3ZlKHZhbHVlUmVnLCBzY3JhdGNoUmVnKTsKKworICAgIC8vIFdhbGsgdXAg
dGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0aGUgdmFsdWUgKGluIHNjcmF0Y2hSZWcpLCBjb21wYXJp
bmcgdG8gcHJvdG90eXBlUmVnLgorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wKCZtX2pp
dCk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVn
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3Rv
dHlwZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJ
bnN0YW5jZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hS
ZWcsIHByb3RvdHlwZVJlZyk7CisgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgc2NyYXRjaFJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKS5saW5rVG8obG9v
cCwgJm1faml0KTsKKworICAgIC8vIE5vIG1hdGNoIC0gcmVzdWx0IGlzIGZhbHNlLgorICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpKSwgc2NyYXRjaFJlZyk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
d2FzTm90SW5zdGFuY2UgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAvLyBMaW5rIHRvIGhlcmUgaWYg
YW55IGNoZWNrcyBmYWlsIHRoYXQgcmVxdWlyZSB1cyB0byB0cnkgY2FsbGluZyBvdXQgdG8gYW4g
b3BlcmF0aW9uIHRvIGhlbHAsCisgICAgLy8gZS5nLiBmb3IgYW4gQVBJIG92ZXJyaWRkZW4gSGFz
SW5zdGFuY2UuCisgICAgdmFsdWVOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBwcm90b3R5cGVO
b3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBub3REZWZhdWx0SGFzSW5zdGFuY2UubGluaygmbV9q
aXQpOworICAgIHByb3RvTm90T2JqZWN0LmxpbmsoJm1faml0KTsKKworICAgIHNpbGVudFNwaWxs
QWxsUmVnaXN0ZXJzKHNjcmF0Y2hSZWcpOworICAgIHNldHVwU3R1YkFyZ3VtZW50cyh2YWx1ZVJl
ZywgYmFzZVJlZywgcHJvdG90eXBlUmVnKTsKKyAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uSW5zdGFuY2VPZik7CisgICAgbV9qaXQubW92ZShHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaFJlZyk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhzY3JhdGNoUmVnKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHdhc05vdERlZmF1
bHRIYXNJbnN0YW5jZSA9IG1faml0Lmp1bXAoKTsKKworICAgIGlzSW5zdGFuY2UubGluaygmbV9q
aXQpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBzY3JhdGNoUmVnKTsKKworICAgIHdhc05vdElu
c3RhbmNlLmxpbmsoJm1faml0KTsKKyAgICB3YXNOb3REZWZhdWx0SGFzSW5zdGFuY2UubGluaygm
bV9qaXQpOworICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0
eXBlbmFtZSBGcm9tPgogaW5saW5lIFRvIHNhZmVDYXN0KEZyb20gdmFsdWUpCiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gOTUyMjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYyLDYgKzU2Miw0MyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgIE5vZGUmIGxhc3ROb2RlID0gbV9qaXQuZ3JhcGgoKVtsYXN0Tm9kZUluZGV4XTsKICAg
ICAgICAgcmV0dXJuIGxhc3ROb2RlLm9wID09IEJyYW5jaCAmJiBsYXN0Tm9kZS5jaGlsZDEoKSA9
PSBtX2NvbXBpbGVJbmRleCA/IGxhc3ROb2RlSW5kZXggOiBOb05vZGU7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmKTsKKyAgICB2b2lkIG5v
blNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUmKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZl
VUludDMyVG9OdW1iZXIoTm9kZSYpOworCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZUtub3duQ29u
c3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBp
bW1DaGlsZCwgYm9vbCBjb21tdXRlKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlQmFzaWNBcml0
aE9wKE5vZGVUeXBlIG9wLCBOb2RlJik7CisgICAgCisgICAgLy8gSGFuZGxlcyBib3RoIFZhbHVl
QWRkIGFuZCBBcml0aEFkZC4KKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlQWRkKE5vZGVUeXBlIG9w
LCBOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVLbm93bkNvbnN0YW50QXJpdGhP
cChvcCwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEoKSwgdHJ1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlS25vd25Db25zdGFu
dEFyaXRoT3Aob3AsIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9uU3BlY3VsYXRp
dmVCYXNpY0FyaXRoT3Aob3AsIG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vblNwZWN1
bGF0aXZlQXJpdGhTdWIoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlS25vd25D
b25zdGFudEFyaXRoT3AoQXJpdGhTdWIsIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZh
bHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRoT3AoQXJpdGhTdWIsIG5vZGUpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlQXJpdGhNb2QoTm9kZSYpOworICAgIHZvaWQgbm9uU3Bl
Y3VsYXRpdmVDaGVja0hhc0luc3RhbmNlKE5vZGUmKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZl
SW5zdGFuY2VPZihOb2RlJik7CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWNoZWRHZXRCeUlk
KEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpLCBOb2RlVHlwZSA9IEdldEJ5SWQpOwogICAgIHZvaWQgY2Fj
aGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiA5NTIyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw2IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotY29uc3QgZG91YmxlIHR3b1RvVGhlMzIgPSAoZG91Ymxl
KTB4MTAwMDAwMDAwdWxsOwotCiBFbnRyeUxvY2F0aW9uOjpFbnRyeUxvY2F0aW9uKE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBlbnRyeSwgTm9uU3BlY3VsYXRpdmVKSVQqIGppdCkKICAgICA6IG1fZW50
cnkoZW50cnkpCiAgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQpAQCAtNjAs
Mzc4ICs1OCw2IEBAIEVudHJ5TG9jYXRpb246OkVudHJ5TG9jYXRpb24oTWFjcm9Bc3NlbWIKICAg
ICB9CiB9CiAKLXZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9OdW1iZXIoSlNWYWx1ZU9w
ZXJhbmQmIG9wZXJhbmQsIEdQUlJlZyBncHIpCi17Ci0gICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBv
cGVyYW5kLmdwcigpOwotICAgIG9wZXJhbmQudXNlKCk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBub25OdW1lcmljID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsK
LQotICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQg
YXMgYSBKU1ZhbHVlCi0gICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwotICAgIEpJVENv
bXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAvLyBO
ZXh0IGhhbmRsZSBjZWxscyAoJiBvdGhlciBKUyBpbW1lZGlhdGVzKQotICAgIG5vbk51bWVyaWMu
bGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgbV9q
aXQubW92ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIG1faml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0g
ICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVy
KTsKLSAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGdwcik7Ci0gICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxl
ZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIC8vIEZpbmFsbHksIGhhbmRsZSBp
bnRlZ2Vycy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIG1faml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwganNWYWx1ZUdwciwgZ3ByKTsKLSAgICBoYXNV
bmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKLSAgICBoYXNDYWxsZWRUb051bWJlci5saW5rKCZt
X2ppdCk7Ci19Ci0KLXZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMihKU1ZhbHVl
T3BlcmFuZCYgb3BlcmFuZCwgR1BSUmVnIHJlc3VsdCkKLXsKLSAgICBHUFJSZWcganNWYWx1ZUdw
ciA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgb3BlcmFuZC51c2UoKTsKLQotICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotCi0g
ICAgLy8gRmlyc3QgaGFuZGxlIG5vbi1pbnRlZ2VycwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdCk7Ci0gICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdD
b252ZXJ0SlNWYWx1ZVRvSW50MzIpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0KTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQu
anVtcCgpOwotCi0gICAgLy8gVGhlbiBoYW5kbGUgaW50ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxp
bmsoJm1faml0KTsKLSAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihqc1ZhbHVlR3ByLCByZXN1
bHQpOwotICAgIGhhc0NhbGxlZFRvSW50MzIubGluaygmbV9qaXQpOwotfQotCi12b2lkIE5vblNw
ZWN1bGF0aXZlSklUOjpudW1iZXJUb0ludDMyKEZQUlJlZyBmcHIsIEdQUlJlZyBncHIpCi17Ci0g
ICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1
bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0
ZVN1Y2Nlc3NmdWwpOwotCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLQotICAg
IG1faml0Lm1vdmVEb3VibGUoZnByLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOwotICAgIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sodG9JbnQzMik7Ci0gICAgbV9qaXQuemVyb0V4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGdwcik7Ci0KLSAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKGdwcik7Ci0KLSAgICB0cnVuY2F0ZWRUb0ludGVnZXIubGluaygmbV9qaXQpOwot
fQotCi12b2lkIE5vblNwZWN1bGF0aXZlSklUOjprbm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlw
ZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0
ZSkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCByZWdBcmcodGhpcywgcmVnQ2hpbGQpOwotICAgIEdQ
UlJlZyByZWdBcmdHUFIgPSByZWdBcmcuZ3ByKCk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIEZQUlRlbXBv
cmFyeSB0bXAxKHRoaXMpOwotICAgIEZQUlRlbXBvcmFyeSB0bXAyKHRoaXMpOwotICAgIEZQUlJl
ZyB0bXAxRlBSID0gdG1wMS5mcHIoKTsKLSAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7
Ci0gICAgCi0gICAgcmVnQXJnLnVzZSgpOwotICAgIHVzZShpbW1DaGlsZCk7Ci0KLSAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RJbnQ7Ci0gICAgCi0gICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50
MzJDb25zdGFudChpbW1DaGlsZCk7Ci0gICAgICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIo
cmVnQ2hpbGQpKQotICAgICAgICBub3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCByZWdBcmdHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0g
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3ZlcmZsb3c7Ci0gICAgCi0gICAgc3dpdGNoIChv
cCkgewotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgb3Zl
cmZsb3cgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZ0Fy
Z0dQUiwgSW1tMzIoaW1tKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJhbmNoU3ViMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWdBcmdHUFIsIEltbTMyKGltbSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIG92ZXJmbG93Lmxpbmso
Jm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXI7Ci0gICAgCi0g
ICAgLy8gZmlyc3QgZGVhbCB3aXRoIG92ZXJmbG93IGNhc2UKLSAgICBtX2ppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShyZWdBcmdHUFIsIHRtcDJGUFIpOwotICAgIAotICAgIC8vIG5vdyBkZWFsIHdp
dGggbm90LWludCBjYXNlLCBpZiBhcHBsaWNhYmxlCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihy
ZWdDaGlsZCkpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZVZhbHVlID0gbV9qaXQu
anVtcCgpOwotICAgICAgICAKLSAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghaXNLbm93bk51bWVyaWMocmVnQ2hpbGQpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgbm90TnVtYmVyID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVnQXJnR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5t
b3ZlKHJlZ0FyZ0dQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubW92ZVB0
clRvRG91YmxlKHJlc3VsdEdQUiwgdG1wMkZQUik7Ci0gICAgICAgIAotICAgICAgICBoYXZlVmFs
dWUubGluaygmbV9qaXQpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0lu
dHB0cih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoaW1tQ2hpbGQpKSkpLCByZXN1bHRHUFIpOwotICAg
IG1faml0Lm1vdmVQdHJUb0RvdWJsZShyZXN1bHRHUFIsIHRtcDFGUFIpOwotICAgIHN3aXRjaCAo
b3ApIHsKLSAgICBjYXNlIFZhbHVlQWRkOgotICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIG1f
aml0LmFkZERvdWJsZSh0bXAxRlBSLCB0bXAyRlBSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
IAotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIG1faml0LnN1YkRvdWJsZSh0bXAxRlBSLCB0
bXAyRlBSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludDsKLSAgICAKLSAgICBpZiAob3AgPT0gVmFsdWVB
ZGQpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAg
ICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIodG1wMkZQUiwgcmVzdWx0R1BSLCBm
YWlsdXJlQ2FzZXMsIHRtcDFGUFIpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lQ2Fz
ZUNvbnZlcnRlZFRvSW50ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgZmFpbHVy
ZUNhc2VzLmxpbmsoJm1faml0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9qaXQubW92ZURvdWJsZVRv
UHRyKHRtcDJGUFIsIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgaWYgKCFpc0tub3du
TnVtZXJpYyhyZWdDaGlsZCkpIHsKLSAgICAgICAgQVNTRVJUKG5vdE51bWJlci5pc1NldCgpKTsK
LSAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZVdhc051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0g
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChj
b21tdXRlKSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHJlZ0FyZ0dQUiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIyKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0
cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbSkp
KSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKHJlZ0FyZ0dQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbSkpKSksIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7Ci0gICAgICAgIH0KLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcik7Ci0gICAgICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIAotICAgICAgICBkb25l
Q2FzZVdhc051bWJlci5saW5rKCZtX2ppdCk7Ci0gICAgfQotICAgIAotICAgIGRvbmUubGluaygm
bV9qaXQpOwotICAgIGlmIChkb25lQ2FzZUNvbnZlcnRlZFRvSW50LmlzU2V0KCkpCi0gICAgICAg
IGRvbmVDYXNlQ29udmVydGVkVG9JbnQubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7Ci19Ci0KLXZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2Rl
VHlwZSBvcCwgTm9kZSAmbm9kZSkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIo
KSk7Ci0gICAgCi0gICAgRlBSVGVtcG9yYXJ5IHRtcDEodGhpcyk7Ci0gICAgRlBSVGVtcG9yYXJ5
IHRtcDIodGhpcyk7Ci0gICAgRlBSUmVnIHRtcDFGUFIgPSB0bXAxLmZwcigpOwotICAgIEZQUlJl
ZyB0bXAyRlBSID0gdG1wMi5mcHIoKTsKLSAgICAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcy
R1BSID0gYXJnMi5ncHIoKTsKLSAgICAKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotICAgIAotICAgIGFyZzEudXNlKCk7Ci0gICAgYXJnMi51c2UoKTsKLSAgICAKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBjaGlsZDFOb3RJbnQ7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgY2hp
bGQyTm90SW50OwotICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKLSAgICAKLSAg
ICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQotICAgICAgICBjaGlsZDFOb3RJ
bnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgIGlmICghaXNLbm93bkludGVnZXIobm9k
ZS5jaGlsZDIoKSkpCi0gICAgICAgIGNoaWxkMk5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7Ci0gICAgCi0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgY2Fz
ZSBBcml0aEFkZDogewotICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoQWRkMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3ViOiB7Ci0g
ICAgICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUikpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgb3ZlcmZsb3cu
YXBwZW5kKG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJnMUdQ
UiwgYXJnMkdQUiwgcmVzdWx0R1BSKSk7Ci0gICAgICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5i
cmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGhhdmVGUFJBcmd1bWVudHM7Ci0KLSAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IAotICAgIC8vIGJvdGggYXJndW1lbnRzIGFyZSBpbnRlZ2VycwotICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKGFyZzFHUFIsIHRtcDFGUFIpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGFyZzJHUFIsIHRtcDJGUFIpOwotICAgICAgICAKLSAgICBoYXZlRlBSQXJndW1lbnRz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgbm90TnVtYmVyczsKLSAgICAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQyTm90
SW50MjsKLSAgICAgICAgCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkg
ewotICAgICAgICBjaGlsZDFOb3RJbnQubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAg
ICAgIGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IG1faml0Lm1vdmUoYXJnMUdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgdW5ib3hEb3VibGUocmVz
dWx0R1BSLCB0bXAxRlBSKTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBjaGlsZDEgaXMgY29u
dmVydGVkIHRvIGEgZG91YmxlOyBjaGlsZDIgbWF5IGVpdGhlciBiZSBhbiBpbnQgb3IKLSAgICAg
ICAgLy8gYSBib3hlZCBkb3VibGUKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMo
bm9kZS5jaGlsZDIoKSkpCi0gICAgICAgICAgICAgICAgY2hpbGQyTm90SW50MiA9IG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNo
aWxkMklzSW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAg
ICAgbm90TnVtYmVycy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAg
ICAgICAgICAgY2hpbGQyTm90SW50MiA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBj
aGlsZDJJc0ludC5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAvLyBjaGlsZCAyIGlzIGRlZmluaXRlbHkgYW4gaW50ZWdlcgotICAg
ICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShhcmcyR1BSLCB0bXAyRlBSKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBoYXZlRlBSQXJndW1lbnRzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgIH0KLSAgICAgICAgCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkg
ewotICAgICAgICBjaGlsZDJOb3RJbnQubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAg
ICAgIGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgIEFT
U0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IC8vIGNoaWxkMSBpcyBkZWZpbml0ZWx5IGFuIGludGVnZXIsIGFuZCBjaGlsZCAyIGlzIGRlZmlu
aXRlbHkgbm90Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3Vi
bGUoYXJnMUdQUiwgdG1wMUZQUik7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkMk5v
dEludDIuaXNTZXQoKSkKLSAgICAgICAgICAgIGNoaWxkMk5vdEludDIubGluaygmbV9qaXQpOwot
ICAgICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgdW5ib3hEb3VibGUocmVzdWx0R1BSLCB0bXAyRlBSKTsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGhhdmVGUFJBcmd1bWVudHMubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBt
X2ppdC5hZGREb3VibGUodG1wMkZQUiwgdG1wMUZQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDJG
UFIsIHRtcDFGUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgIGNhc2UgQXJp
dGhNdWw6Ci0gICAgICAgIG1faml0Lm11bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VD
b252ZXJ0ZWRUb0ludDsKLSAgICAKLSAgICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgbV9qaXQuYnJhbmNo
Q29udmVydERvdWJsZVRvSW50MzIodG1wMUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHRt
cDJGUFIpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJm1f
aml0KTsKLSAgICB9Ci0gICAgICAgIAotICAgIGJveERvdWJsZSh0bXAxRlBSLCByZXN1bHRHUFIp
OwotICAgICAgICAKLSAgICBpZiAoIW5vdE51bWJlcnMuZW1wdHkoKSkgewotICAgICAgICBBU1NF
UlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgIG5vdE51bWJlcnMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIHNldHVwU3R1YkFyZ3VtZW50
cyhhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcik7Ci0gICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLQotICAgICAgICBkb25lQ2FzZVdhc051
bWJlci5saW5rKCZtX2ppdCk7Ci0gICAgfQotICAgIAotICAgIGRvbmUubGluaygmbV9qaXQpOwot
ICAgIGlmIChkb25lQ2FzZUNvbnZlcnRlZFRvSW50LmlzU2V0KCkpCi0gICAgICAgIGRvbmVDYXNl
Q29udmVydGVkVG9JbnQubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci19Ci0KIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0lu
ZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAjaWYgRU5BQkxFKERG
R19PU1JfRVhJVCkKQEAgLTU0MiwxMDcgKzE2OCwzNCBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKFNwZWN1bGF0CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBVSW50MzJUb051
bWJlcjogewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBib3hlcih0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
cG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVx
dWFsLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIAotICAgICAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKLSAgICAgICAg
bV9qaXQuYWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIp
LCBib3hlci5mcHIoKSk7Ci0gICAgICAgIAotICAgICAgICBib3hEb3VibGUoYm94ZXIuZnByKCks
IHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgcG9zaXRpdmUubGluaygmbV9qaXQp
OwotICAgICAgICAKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIAotICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9JbnQzMjogewotICAg
ICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0KLSAgICAgICAg
aWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBo
KClbbm9kZS5jaGlsZDEoKV0udmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAgICBpZiAoaXNKU0Rv
dWJsZShjaGlsZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpIHsKLSAgICAgICAgICAgIERvdWJsZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgb3AxLnVzZSgp
OwotICAgICAgICAgICAgbnVtYmVyVG9JbnQzMihmcHIsIGdwcik7Ci0gICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBvcDEpOwotICAgICAgICB2YWx1ZVRvSW50MzIob3AxLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0lu
dDMyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9OdW1i
ZXI6CiAgICAgY2FzZSBWYWx1ZVRvRG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKLSAgICAgICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50
KG5vZGUuY2hpbGQxKCkpKTsKLQotICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGls
ZDEoKSkpIHsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAg
ICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAg
ICB2YWx1ZVRvTnVtYmVyKG9wMSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDog
ewotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAg
ICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChvcCwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEo
KSwgdHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAga25v
d25Db25zdGFudEFyaXRoT3Aob3AsIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksIGZhbHNl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBiYXNp
Y0FyaXRoT3Aob3AsIG5vZGUpOworICAgICAgICBub25TcGVjdWxhdGl2ZUFkZChvcCwgbm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1Yjogewot
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAg
ICBrbm93bkNvbnN0YW50QXJpdGhPcChBcml0aFN1Yiwgbm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGJhc2ljQXJpdGhPcChBcml0aFN1Yiwgbm9kZSk7CisgICAgICAgIG5vblNwZWN1bGF0
aXZlQXJpdGhTdWIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQXJp
dGhNdWw6IHsKLSAgICAgICAgYmFzaWNBcml0aE9wKEFyaXRoTXVsLCBub2RlKTsKKyAgICAgICAg
bm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRoT3AoQXJpdGhNdWwsIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTY2MSwxMTkgKzIxNCw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTW9kOiB7Ci0gICAgICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkg
ZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0
aGlzLCBYODZSZWdpc3RlcnM6OmVkeCk7Ci0KLSAgICAgICAgRlBSVGVtcG9yYXJ5IG9wMURvdWJs
ZSh0aGlzKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IG9wMkRvdWJsZSh0aGlzKTsKLSAgICAKLSAg
ICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIG9wMkdQUiA9
IG9wMi5ncHIoKTsKLSAgICAKLSAgICAgICAgRlBSUmVnIG9wMUZQUiA9IG9wMURvdWJsZS5mcHIo
KTsKLSAgICAgICAgRlBSUmVnIG9wMkZQUiA9IG9wMkRvdWJsZS5mcHIoKTsKLSAgICAgICAgCi0g
ICAgICAgIG9wMS51c2UoKTsKLSAgICAgICAgb3AyLnVzZSgpOwotICAgIAotICAgICAgICBHUFJS
ZWcgdGVtcDIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBHUFJSZWcgdW5ib3hHUFI7Ci0gICAg
ICAgIGlmIChvcDJHUFIgPT0gWDg2UmVnaXN0ZXJzOjplYXggfHwgb3AyR1BSID09IFg4NlJlZ2lz
dGVyczo6ZWR4KSB7Ci0gICAgICAgICAgICB0ZW1wMiA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKG9wMkdQUiwgdGVtcDIpOwotICAgICAgICAgICAgb3AyR1BSID0gdGVtcDI7
Ci0gICAgICAgICAgICB1bmJveEdQUiA9IHRlbXAyOwotICAgICAgICB9IGVsc2UgaWYgKG9wMUdQ
UiA9PSBYODZSZWdpc3RlcnM6OmVheCkKLSAgICAgICAgICAgIHVuYm94R1BSID0gWDg2UmVnaXN0
ZXJzOjplZHg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVuYm94R1BSID0gWDg2UmVnaXN0
ZXJzOjplYXg7Ci0gICAgICAgIEFTU0VSVCh1bmJveEdQUiAhPSBvcDEuZ3ByKCkpOwotICAgICAg
ICBBU1NFUlQodW5ib3hHUFIgIT0gb3AyLmdwcigpKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBmaXJzdE9wTm90SW50OwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzZWNvbmRPcE5v
dEludDsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7Ci0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG1vZEJ5WmVybzsKLSAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdl
cihub2RlLmNoaWxkMSgpKSkKLSAgICAgICAgICAgIGZpcnN0T3BOb3RJbnQgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkp
Ci0gICAgICAgICAgICBzZWNvbmRPcE5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIG9wMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAg
ICAKLSAgICAgICAgbW9kQnlaZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBvcDJHUFIpOwotICAgIAotICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgZWF4Lmdw
cigpKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuY2RxKCk7Ci0gICAgICAgIG1faml0LmFz
c2VtYmxlcigpLmlkaXZsX3Iob3AyR1BSKTsKLSAgICAKLSAgICAgICAgbV9qaXQub3JQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBYODZSZWdpc3RlcnM6OmVkeCk7Ci0gICAgCi0g
ICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBnb3REb3VibGVBcmdzOwotICAgIAotICAgICAgICBtb2RCeVplcm8ubGlu
aygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKSkpKSwgWDg2UmVnaXN0ZXJzOjplZHgpOwotICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgICAgICBmaXJzdE9wTm90SW50LmxpbmsoJm1f
aml0KTsKLSAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzZWNvbmRPcE5v
dEludDI7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMigpKSkKLSAgICAgICAgICAgICAgICBzZWNvbmRPcE5vdEludDIgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBvcDJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGZpcnN0IG9wIGlzIGEgZG91
YmxlLCBzZWNvbmQgb3AgaXMgYW4gaW50LgotICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMy
VG9Eb3VibGUob3AyR1BSLCBvcDJGUFIpOwotCi0gICAgICAgICAgICBpZiAoIWlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
Z290U2Vjb25kT3AgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBzZWNvbmRPcE5vdEludDIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLy8gZmlyc3Qgb3AgaXMgYSBkb3VibGUsIHNlY29uZCBvcCBpcyBhIGRvdWJsZS4KLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgdW5ib3hHUFIpOwotICAgICAgICAgICAg
ICAgIHVuYm94RG91YmxlKHVuYm94R1BSLCBvcDJGUFIpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZ290U2Vjb25kT3AubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxR1BSLCB1bmJveEdQUik7Ci0gICAgICAgICAg
ICB1bmJveERvdWJsZSh1bmJveEdQUiwgb3AxRlBSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBn
b3REb3VibGVBcmdzID0gbV9qaXQuanVtcCgpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIGlm
ICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgIHNlY29uZE9w
Tm90SW50LmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyB3ZSBrbm93IHRo
YXQgdGhlIGZpcnN0IG9wIGlzIGFuIGludCwgYW5kIHRoZSBzZWNvbmQgaXMgYSBkb3VibGUKLSAg
ICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMUdQUiwgb3AxRlBSKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCB1bmJveEdQUik7Ci0gICAgICAgICAgICB1bmJv
eERvdWJsZSh1bmJveEdQUiwgb3AyRlBSKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQotICAgICAgICAgICAgZ290RG91YmxlQXJn
cy5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhYODZSZWdpc3RlcnM6OmVkeCk7Ci0gICAgICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5mbzo6YXJndW1l
bnRGUFIxPihvcDFGUFIsIG9wMkZQUik7Ci0gICAgICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKGZt
b2QpOwotICAgICAgICAgICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBYODZS
ZWdpc3RlcnM6OmVkeCk7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKFg4NlJl
Z2lzdGVyczo6ZWR4KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7Ci0gICAgCi0gICAgICAgIGlmICh0ZW1wMiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAg
ICAgICAgdW5sb2NrKHRlbXAyKTsKLSAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChYODZSZWdp
c3RlcnM6OmVkeCwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgIG5vblNwZWN1bGF0aXZlQXJpdGhNb2Qobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMTA5MSw5NyArNTMyLDEyIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoU3BlY3VsYXQKICAgICB9CiAKICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6IHsKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzdHJ1Y3R1cmVSZWcgPSBzdHJ1Y3R1cmUuZ3By
KCk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbC4KLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgYmFzZU5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBiYXNlUmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwot
Ci0gICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSAnSW1wbGVtZW50c0hhc0luc3RhbmNlJy4KLSAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlUmVnKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgaW1wbGVtZW50c0hhc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoVGVzdDgoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZVJl
ZywgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEltcGxlbWVudHNIYXNJbnN0YW5jZSkpOwotCi0gICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgd2UgYWx3YXlzIHRocm93LCBzbyBubyBuZWVkIHRvIHByZXNlcnZlIHJlZ2lzdGVycy4K
LSAgICAgICAgYmFzZU5vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5tb3ZlKGJh
c2VSZWcsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIC8v
IEF0IHNvbWUgcG9pbnQgd2UgY291bGQgb3B0aW1pemUgdGhpcyB0byBwbGFudCBhIGRpcmVjdCBq
dW1wLCByYXRoZXIgdGhlbiBjaGVja2luZwotICAgICAgICAvLyBmb3IgYW4gZXhjZXB0aW9uIChv
cGVyYXRpb25UaHJvd0hhc0luc3RhbmNlRXJyb3IgYWx3YXlzIHRocm93cykuIFByb2JhYmx5IG5v
dCB3b3J0aAotICAgICAgICAvLyBhZGRpbmcgdGhlIGV4dHJhIGludGVyZmFjZSB0byBkbyB0aGlz
IG5vdywgYnV0IHdlIG1heSBhbHNvIHdhbnQgdGhpcyBmb3Igb3BfdGhyb3cuCi0gICAgICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3dIYXNJbnN0YW5jZUVycm9y
KTsKLQotICAgICAgICBpbXBsZW1lbnRzSGFzSW5zdGFuY2UubGluaygmbV9qaXQpOwotICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG5vblNwZWN1bGF0aXZlQ2hlY2tI
YXNJbnN0YW5jZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBJbnN0
YW5jZU9mOiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwot
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm90b3R5cGUodGhpcywgbm9kZS5jaGlsZDMoKSk7Ci0g
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIGJhc2UpOwotCi0gICAgICAgIEdQUlJl
ZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBwcm90b3R5cGVSZWcgPSBwcm90b3R5cGUuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgCi0gICAg
ICAgIHZhbHVlLnVzZSgpOwotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICBwcm90b3R5cGUu
dXNlKCk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBvcGVyYW5kcyBhcmUgY2VsbHMgKGJhc2Ug
aXMgY2hlY2tlZCBieSBDaGVja0hhc0luc3RhbmNlLCBzbyB3ZSBjYW4ganVzdCBhc3NlcnQpLgot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB2YWx1ZU5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKLSAgICAgICAgbV9qaXQuaml0QXNzZXJ0SXNDZWxsKGJhc2VSZWcpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBwcm90b3R5cGVOb3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcHJvdG90eXBlUmVnLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOwotCi0gICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZVZhbCAnSW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZScuCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0
Y2hSZWcpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3REZWZhdWx0SGFzSW5zdGFu
Y2UgPSBtX2ppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc2NyYXRjaFJlZywgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpOwotCi0gICAgICAg
IC8vIENoZWNrIHRoYXQgcHJvdG90eXBlIGlzIGFuIG9iamVjdAotICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvdHlwZVJlZywgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBw
cm90b05vdE9iamVjdCA9IG1faml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hSZWcpOwotCi0g
ICAgICAgIC8vIEluaXRpYWxpemUgc2NyYXRjaFJlZyB3aXRoIHRoZSB2YWx1ZSBiZWluZyBjaGVj
a2VkLgotICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlUmVnLCBzY3JhdGNoUmVnKTsKLQotICAgICAg
ICAvLyBXYWxrIHVwIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIHZhbHVlIChpbiBzY3JhdGNo
UmVnKSwgY29tcGFyaW5nIHRvIHByb3RvdHlwZVJlZy4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGxvb3AoJm1faml0KTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaFJlZywgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwotICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZywgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKS5saW5rVG8obG9vcCwgJm1faml0KTsKLQotICAgICAgICAv
LyBObyBtYXRjaCAtIHJlc3VsdCBpcyBmYWxzZS4KLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkp
LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgd2FzTm90SW5zdGFu
Y2UgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgLy8gTGluayB0byBoZXJlIGlmIGFueSBjaGVj
a3MgZmFpbCB0aGF0IHJlcXVpcmUgdXMgdG8gdHJ5IGNhbGxpbmcgb3V0IHRvIGFuIG9wZXJhdGlv
biB0byBoZWxwLAotICAgICAgICAvLyBlLmcuIGZvciBhbiBBUEkgb3ZlcnJpZGRlbiBIYXNJbnN0
YW5jZS4KLSAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsoJm1faml0KTsKLSAgICAgICAgcHJvdG90
eXBlTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vdERlZmF1bHRIYXNJbnN0YW5jZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgIHByb3RvTm90T2JqZWN0LmxpbmsoJm1faml0KTsKLQotICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsKLSAgICAgICAgc2V0dXBT
dHViQXJndW1lbnRzKHZhbHVlUmVnLCBiYXNlUmVnLCBwcm90b3R5cGVSZWcpOwotICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkluc3Rh
bmNlT2YpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3Jh
dGNoUmVnKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhzY3JhdGNoUmVnKTsKLQot
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB3YXNOb3REZWZhdWx0SGFzSW5zdGFuY2UgPSBt
X2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgaXNJbnN0YW5jZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCBzY3JhdGNoUmVnKTsKLQotICAgICAgICB3YXNOb3RJbnN0YW5j
ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIHdhc05vdERlZmF1bHRIYXNJbnN0YW5jZS5saW5rKCZt
X2ppdCk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vblNwZWN1bGF0aXZlSW5z
dGFuY2VPZihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5
NTIyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsNiBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgdXNlZCB0byBwbGFudCBjYWxscyBvdXQgdG8gQysrCiAgICAgLy8gaGVs
cGVyIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiB0eXBlcy4KLSAgICB2b2lkIHZhbHVlVG9O
dW1iZXIoSlNWYWx1ZU9wZXJhbmQmLCBHUFJSZWcgcmVzdWx0KTsKLSAgICB2b2lkIHZhbHVlVG9J
bnQzMihKU1ZhbHVlT3BlcmFuZCYsIEdQUlJlZyByZXN1bHQpOwotICAgIHZvaWQgbnVtYmVyVG9J
bnQzMihGUFJSZWcsIEdQUlJlZyByZXN1bHQpOwogCiAgICAgLy8gUmVjb3JkIGFuIGVudHJ5IGxv
Y2F0aW9uIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBjb2RlIHBhdGg7CiAgICAgLy8gZm9yIGV2
ZXJ5IGJhaWwtb3V0IG9uIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdlIHJlY29yZCBpbmZvcm1hdGlv
bgpAQCAtOTcsMTAgKzk0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9lbnRyeUxvY2F0aW9ucy5h
cHBlbmQoRW50cnlMb2NhdGlvbihlbnRyeSwgdGhpcykpOwogICAgIH0KICAgICAKLSAgICAvLyBp
bnRlcm5hbCBoZWxwZXJzIGZvciBhZGQvc3ViL211bCBvcGVyYXRpb25zCi0gICAgdm9pZCBrbm93
bkNvbnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5k
ZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSk7Ci0gICAgdm9pZCBiYXNpY0FyaXRoT3AoTm9kZVR5
cGUgb3AsIE5vZGUmKTsKLQogICAgIEVudHJ5TG9jYXRpb25WZWN0b3IgbV9lbnRyeUxvY2F0aW9u
czsKIH07CiAK
</data>
<flag name="review"
          id="104259"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>