<?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>194222</bug_id>
          
          <creation_ts>2019-02-04 09:47:10 -0800</creation_ts>
          <short_desc>Reduce the number of iterations in B3ReduceStrength</short_desc>
          <delta_ts>2019-02-09 14:34:21 -0800</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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>194475</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1501865</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-04 09:47:10 -0800</bug_when>
    <thetext>B3ReduceStrength repeats a sequence of optimizations to a fixpoint.
One of these optimizations is a peephole optimizer, which currently does not revisit any node it adds or changes.
So if it must be called 3 times to fully reduce an expression, the whole sequence of optimizations will be repeated 3 times (at least), even if the rest of the function was fully optimized in one pass.

I&apos;ll try to make the peephole optimizer apply repeatedly whenever it adds/changes nodes, and measure how much it improves FTL compile-time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503387</commentid>
    <comment_count>1</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 11:02:26 -0800</bug_when>
    <thetext>Here are some quick numbers for ARES-6:
1	62
2	351
3	997
4	848
5	108
6	18
Meaning that B3ReduceStrength runs only two iterations in 351 cases, runs 4 iterations in 848 cases, etc..
If nothing is done, I expect this to get worse as B3ReduceStrength is taught more optimizations (e.g. https://bugs.webkit.org/show_bug.cgi?id=194081).
Since the entire pass is repeated on each iteration, reducing this number of iterations should directly improve B3 compile time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503564</commentid>
    <comment_count>2</comment_count>
      <attachid>361360</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 18:31:51 -0800</bug_when>
    <thetext>Created attachment 361360
WIP

Only supports Mul with the new architecture so far.
Is currently recursive, I may have to rearchitect it into an iterative approach if it causes stack issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503566</commentid>
    <comment_count>3</comment_count>
      <attachid>361361</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-06 18:45:47 -0800</bug_when>
    <thetext>Created attachment 361361
WIP

Simpler, and now most recursive calls are tail-recursive which should alleviate the stack concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503956</commentid>
    <comment_count>4</comment_count>
      <attachid>361452</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-07 14:52:27 -0800</bug_when>
    <thetext>Created attachment 361452
WIP_Arith

Now supports Add/Sub/Neg/Mul/Div/UDiv/Mod/UMod.
Also now takes a kind as argument instead of an opcode, to correctly deal with chill operations.
Finally I commented out an optimization from https://bugs.webkit.org/show_bug.cgi?id=194250 that seems buggy while I investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504000</commentid>
    <comment_count>5</comment_count>
      <attachid>361467</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-07 16:25:49 -0800</bug_when>
    <thetext>Created attachment 361467
WIP_Arith+Shifts+FP

Add shifts, rotations, abs, ceil, floor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504066</commentid>
    <comment_count>6</comment_count>
      <attachid>361480</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-07 18:01:47 -0800</bug_when>
    <thetext>Created attachment 361480
WIP_More

Adds conversions, select, equal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1504629</commentid>
    <comment_count>7</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-09 14:19:08 -0800</bug_when>
    <thetext>On further investigation, it appears that the peephole optimizations are not the bottleneck on the number of iterations in B3ReduceStrength. So I will make this bug an umbrella for other more precise bugs fixing the actual problems.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361360</attachid>
            <date>2019-02-06 18:31:51 -0800</date>
            <delta_ts>2019-02-06 18:45:47 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>WIP_194222</filename>
            <type>text/plain</type>
            <size>7258</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDI0MTEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDggKzQ4NCwxMDYgQEAKICAgICB9CiAg
ICAgCiBwcml2YXRlOgorICAgIFZhbHVlKiBidWlsZEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUq
IGNoaWxkMCA9IG51bGxwdHIsIFZhbHVlKiBjaGlsZDEgPSBudWxscHRyLCBWYWx1ZSogY2hpbGQy
ID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2lu
ZyhvcGNvZGUsIGNoaWxkMCwgY2hpbGQxLCBjaGlsZDIpKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworCisgICAgICAgIGlmIChjaGlsZDEgPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHJldHVy
biBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIG9wY29kZSwgbV92YWx1ZS0+
b3JpZ2luKCksIGNoaWxkMCk7CisgICAgICAgIGlmIChjaGlsZDIgPT0gbnVsbHB0cikKKyAgICAg
ICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIG9wY29k
ZSwgbV92YWx1ZS0+b3JpZ2luKCksIGNoaWxkMCwgY2hpbGQxKTsKKyAgICAgICAgcmV0dXJuIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgb3Bjb2RlLCBtX3ZhbHVlLT5vcmln
aW4oKSwgY2hpbGQwLCBjaGlsZDEsIGNoaWxkMik7CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5j
dGlvbiByZXR1cm5zIG51bGxwdHIgaWYgaXQgY2Fubm90IGZpbmQgYSBjbGV2ZXIoZXIpIHdheSBv
ZiBwcm9kdWNpbmcgdGhlIHJlcXVlc3RlZCB2YWx1ZSwgYW5kIHRoZSByZXF1ZXN0ZWQgdmFsdWUg
b3RoZXJ3aXNlLgorICAgIFZhbHVlKiB0cnlSZWR1Y2luZyhPcGNvZGUgb3Bjb2RlLCBWYWx1ZSog
Y2hpbGQwID0gbnVsbHB0ciwgVmFsdWUqIGNoaWxkMSA9IG51bGxwdHIsIFZhbHVlKiBjaGlsZDIg
PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgKHZvaWQpIGNoaWxkMjsgLy8gY2hpbGQyIGlzIGN1
cnJlbnRseSB1bnVzZWQgYXMgdGhpcyBpcyBXSVAgb25seSBzdXBwb3J0aW5nIE1VTC4KKyAgICAg
ICAgc3dpdGNoKG9wY29kZSkgeworICAgICAgICBjYXNlIE11bDoKKyAgICAgICAgICAgIGlmIChW
YWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ0NvbW11dGF0aXZpdHkob3Bjb2RlLCBjaGlsZDAsIGNo
aWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+bXVsQ29uc3RhbnQobV9wcm9j
LCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgICAgICAgICAg
aWYgKGNoaWxkMS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGZhY3RvciA9
IGNoaWxkMS0+YXNJbnQoKTsKKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZh
bHVlLCAwKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAorICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBkbyB0aGlzIGZvciBkb3VibGVzIGJlY2F1c2UgdGhhdCdz
IHdyb25nLiBGb3IgZXhhbXBsZSwgLTEgKiAwCisgICAgICAgICAgICAgICAgLy8gYW5kIDEgKiAw
IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzLgorICAgICAgICAgICAgICAgIGlmICghZmFjdG9yKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQxOworCisgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2
YWx1ZQorICAgICAgICAgICAgICAgIGlmIChmYWN0b3IgPT0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkMDsKKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZh
bHVlLCAtMSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5lZyh2YWx1ZSkKKyAgICAg
ICAgICAgICAgICBpZiAoZmFjdG9yID09IC0xKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YnVpbGRJbnN0KE5lZywgY2hpbGQwKTsKKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
TXVsKHZhbHVlLCBjb25zdGFudCkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2
YWx1ZSwgbG9nMihjb25zdGFudCkpCisgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChm
YWN0b3IpKSB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RG
OjpmYXN0TG9nMihzdGF0aWNfY2FzdDx1aW50NjRfdD4oZmFjdG9yKSk7CisgICAgICAgICAgICAg
ICAgICAgIFZhbHVlKiBzaGlmdENvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0
MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkSW5zdChTaGwsIGNoaWxkMCwgc2hpZnRDb25zdGFu
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZDEtPmhh
c0RvdWJsZSgpICYmIGNoaWxkMS0+YXNEb3VibGUoKSA9PSAxLjApCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjaGlsZDA7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgLy8gV2UgY2Fub25pY2FsaXplIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMg
aW4gdGhyZWUgd2F5czoKKyAgICAvLyAtIEF0b21pY1N0cm9uZ0NBUyBmaXJzdCAoaW1wb3J0YW50
IGZvciBzb21lIHBhdHRlcm5zIHRvIGJlIHJlY29nbml6ZWQgYnkgTG93ZXJUb0FpcikKKyAgICAv
LyAtIENvbnN0YW50cyBsYXN0IChtYWtlcyBpdCBlYXNpZXIgdG8gZWxpbWluYXRlIHRoZW0pCisg
ICAgLy8gLSBPdGhlciBvcGVyYW5kcyBzb3J0ZWQgYnkgdGhlaXIgaW5kZXggKHdlIHVzZSB0aGUg
aW5kZXggb3ZlciB0aGUgYWRkcmVzcyB0byBtYWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0bHkgZGV0
ZXJtaW5pc3RpYykKKyAgICBWYWx1ZSogdHJ5UmVkdWNpbmdDb21tdXRhdGl2aXR5KE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBjaGlsZDAsIFZhbHVlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NF
UlQoY2hpbGQwICE9IG51bGxwdHIpOworICAgICAgICBBU1NFUlQoY2hpbGQxICE9IG51bGxwdHIp
OworCisgICAgICAgIGlmIChjaGlsZDEtPmlzQ29uc3RhbnQoKSB8fCBjaGlsZDAtPm9wY29kZSgp
ID09IEF0b21pY1N0cm9uZ0NBUykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIGlmIChjaGlsZDAtPmlzQ29uc3RhbnQoKSB8fCBjaGlsZDEtPm9wY29kZSgpID09IEF0b21p
Y1N0cm9uZ0NBUyB8fCBjaGlsZDAtPmluZGV4KCkgPiBjaGlsZDEtPmluZGV4KCkpCisgICAgICAg
ICAgICByZXR1cm4gYnVpbGRJbnN0KG9wY29kZSwgY2hpbGQxLCBjaGlsZDApOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgdm9pZCByZWR1Y2VWYWx1ZVN0
cmVuZ3RoKCkKICAgICB7CisgICAgICAgIFZhbHVlKiByZWR1Y2VkVmFsdWUgPSBudWxscHRyOwor
ICAgICAgICBzd2l0Y2gobV92YWx1ZS0+bnVtQ2hpbGRyZW4oKSkgeworICAgICAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgICAgIHJlZHVjZWRWYWx1ZSA9IHRyeVJlZHVjaW5nKG1fdmFsdWUt
Pm9wY29kZSgpLCBtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVk
dWNpbmcobV92YWx1ZS0+b3Bjb2RlKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGls
ZCgxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAg
ICAgICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVkdWNpbmcobV92YWx1ZS0+b3Bjb2RlKCks
IG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMikp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVkdWNlZFZhbHVlKSB7Cisg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KHJlZHVjZWRWYWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgp
KSB7CiAgICAgICAgIGNhc2UgT3BhcXVlOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBPcGFx
dWUoT3BhcXVlKHZhbHVlKSkKQEAgLTYzNiw3MCArNzM0LDYgQEAKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAgICAgICBoYW5kbGVD
b21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKGNvbnN0YW50
MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKiBjb25z
dGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+
bXVsQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQo
KSkgewotICAgICAgICAgICAgICAgIGludDY0X3QgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmFzSW50KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkK
LSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgd2UgZG9uJ3QgZG8gdGhpcyBmb3IgZG91YmxlcyBiZWNhdXNlIHRoYXQncyB3cm9uZy4g
Rm9yIGV4YW1wbGUsIC0xICogMAotICAgICAgICAgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBk
aWZmZXJlbnQgcmVzdWx0cy4KLSAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcikgewotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCi0gICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgIGlmIChmYWN0b3IgPT0gMSkgewotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU3ViKDAsIHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChmYWN0b3IgPT0gLTEp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0SW50Q29uc3RhbnQobV9pbmRleCwgbV92YWx1ZSwgMCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFudCkKLSAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9nMihjb25zdGFudCkpCi0gICAg
ICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9nMihzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgw
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29u
c3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgbV92
YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KSkpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5oYXNEb3VibGUoKSkgewotICAgICAgICAgICAgICAgIGRvdWJsZSBmYWN0b3IgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+YXNEb3VibGUoKTsKLQotICAgICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogTXVsKHZhbHVlLCAxKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUK
LSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBEaXY6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IERpdihjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29u
c3RhbnQxIC8gY29uc3RhbnQyCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361361</attachid>
            <date>2019-02-06 18:45:47 -0800</date>
            <delta_ts>2019-02-07 14:52:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>WIP_194222</filename>
            <type>text/plain</type>
            <size>7017</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDI0MTEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDggKzQ4NCwxMDAgQEAKICAgICB9CiAg
ICAgCiBwcml2YXRlOgorICAgIC8vIElmIGdpdmVVcCBpcyB0cnVlIGFuZCB0aGlzIGZ1bmN0aW9u
IGNhbm5vdCBmaW5kIGEgY2xldmVyIHdheSBvZiBwcm9kdWNpbmcgdGhlIHJlcXVlc3RlZCB2YWx1
ZSwgaXQgcmV0dXJucyBudWxscHRyCisgICAgVmFsdWUqIHRyeVJlZHVjaW5nKE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBjaGlsZDAgPSBudWxscHRyLCBWYWx1ZSogY2hpbGQxID0gbnVsbHB0ciwgVmFs
dWUqIGNoaWxkMiA9IG51bGxwdHIsIGJvb2wgZ2l2ZVVwID0gZmFsc2UpCisgICAgeworICAgICAg
ICBzd2l0Y2gob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTXVsOgorICAgICAgICAgICAgaWYgKFZh
bHVlKiB2YWx1ZSA9IHRyeVJlZHVjaW5nQ29tbXV0YXRpdml0eShvcGNvZGUsIGNoaWxkMCwgY2hp
bGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gY2hpbGQwLT5tdWxDb25zdGFudChtX3Byb2Ms
IGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgICAgICAgICBp
ZiAoY2hpbGQxLT5oYXNJbnQoKSkgeworICAgICAgICAgICAgICAgIGludDY0X3QgZmFjdG9yID0g
Y2hpbGQxLT5hc0ludCgpOworCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFs
dWUsIDApCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGRvbid0IGRvIHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mg
d3JvbmcuIEZvciBleGFtcGxlLCAtMSAqIDAKKyAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAg
eWllbGQgZGlmZmVyZW50IHJlc3VsdHMuCisgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDE7CisKKyAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZh
bHVlCisgICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY2hpbGQwOworCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFs
dWUsIC0xKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQorICAgICAg
ICAgICAgICAgIGlmIChmYWN0b3IgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnlSZWR1Y2luZyhOZWcsIGNoaWxkMCk7CisKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IE11bCh2YWx1ZSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwo
dmFsdWUsIGxvZzIoY29uc3RhbnQpKQorICAgICAgICAgICAgICAgIGlmIChoYXNPbmVCaXRTZXQo
ZmFjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdU
Rjo6ZmFzdExvZzIoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZhY3RvcikpOworICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSogc2hpZnRDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25z
dDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBzaGlmdEFtb3VudCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhTaGwsIGNoaWxkMCwgc2hpZnRDb25z
dGFudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZDEt
Pmhhc0RvdWJsZSgpICYmIGNoaWxkMS0+YXNEb3VibGUoKSA9PSAxLjApCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjaGlsZDA7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ2l2ZVVw
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChjaGlsZDEgPT0gbnVs
bHB0cikKKyAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1f
aW5kZXgsIG9wY29kZSwgbV92YWx1ZS0+b3JpZ2luKCksIGNoaWxkMCk7CisgICAgICAgIGlmIChj
aGlsZDIgPT0gbnVsbHB0cikKKyAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KG1faW5kZXgsIG9wY29kZSwgbV92YWx1ZS0+b3JpZ2luKCksIGNoaWxkMCwgY2hp
bGQxKTsKKyAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRl
eCwgb3Bjb2RlLCBtX3ZhbHVlLT5vcmlnaW4oKSwgY2hpbGQwLCBjaGlsZDEsIGNoaWxkMik7Cisg
ICAgfQorCisgICAgLy8gV2UgY2Fub25pY2FsaXplIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMgaW4g
dGhyZWUgd2F5czoKKyAgICAvLyAtIEF0b21pY1N0cm9uZ0NBUyBmaXJzdCAoaW1wb3J0YW50IGZv
ciBzb21lIHBhdHRlcm5zIHRvIGJlIHJlY29nbml6ZWQgYnkgTG93ZXJUb0FpcikKKyAgICAvLyAt
IENvbnN0YW50cyBsYXN0IChtYWtlcyBpdCBlYXNpZXIgdG8gZWxpbWluYXRlIHRoZW0pCisgICAg
Ly8gLSBPdGhlciBvcGVyYW5kcyBzb3J0ZWQgYnkgdGhlaXIgaW5kZXggKHdlIHVzZSB0aGUgaW5k
ZXggb3ZlciB0aGUgYWRkcmVzcyB0byBtYWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0bHkgZGV0ZXJt
aW5pc3RpYykKKyAgICBWYWx1ZSogdHJ5UmVkdWNpbmdDb21tdXRhdGl2aXR5KE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBjaGlsZDAsIFZhbHVlKiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQo
Y2hpbGQwICE9IG51bGxwdHIpOworICAgICAgICBBU1NFUlQoY2hpbGQxICE9IG51bGxwdHIpOwor
CisgICAgICAgIGlmIChjaGlsZDEtPmlzQ29uc3RhbnQoKSB8fCBjaGlsZDAtPm9wY29kZSgpID09
IEF0b21pY1N0cm9uZ0NBUykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IGlmIChjaGlsZDAtPmlzQ29uc3RhbnQoKSB8fCBjaGlsZDEtPm9wY29kZSgpID09IEF0b21pY1N0
cm9uZ0NBUyB8fCBjaGlsZDAtPmluZGV4KCkgPiBjaGlsZDEtPmluZGV4KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ5UmVkdWNpbmcob3Bjb2RlLCBjaGlsZDEsIGNoaWxkMCk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKICAgICB2b2lkIHJlZHVjZVZhbHVlU3Ry
ZW5ndGgoKQogICAgIHsKKyAgICAgICAgVmFsdWUqIHJlZHVjZWRWYWx1ZSA9IG51bGxwdHI7Cisg
ICAgICAgIHN3aXRjaChtX3ZhbHVlLT5udW1DaGlsZHJlbigpKSB7CisgICAgICAgICAgICBjYXNl
IDE6CisgICAgICAgICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVkdWNpbmcobV92YWx1ZS0+
b3Bjb2RlKCksIG1fdmFsdWUtPmNoaWxkKDApLCBudWxscHRyLCBudWxscHRyLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAg
ICByZWR1Y2VkVmFsdWUgPSB0cnlSZWR1Y2luZyhtX3ZhbHVlLT5vcGNvZGUoKSwgbV92YWx1ZS0+
Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZWR1Y2Vk
VmFsdWUgPSB0cnlSZWR1Y2luZyhtX3ZhbHVlLT5vcGNvZGUoKSwgbV92YWx1ZS0+Y2hpbGQoMCks
IG1fdmFsdWUtPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgyKSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmIChyZWR1Y2VkVmFsdWUpIHsKKyAgICAgICAgICAgIHJl
cGxhY2VXaXRoSWRlbnRpdHkocmVkdWNlZFZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAg
Y2FzZSBPcGFxdWU6CiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE9wYXF1ZShPcGFxdWUodmFs
dWUpKQpAQCAtNjM2LDcwICs3MjgsNiBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBjYXNlIE11bDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHko
KTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwoY29uc3RhbnQxLCBjb25zdGFudDIp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAqIGNvbnN0YW50MgotICAgICAg
ICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5tdWxDb25zdGFudCht
X3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaW50NjRfdCBmYWN0b3IgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCAwKQotICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24n
dCBkbyB0aGlzIGZvciBkb3VibGVzIGJlY2F1c2UgdGhhdCdzIHdyb25nLiBGb3IgZXhhbXBsZSwg
LTEgKiAwCi0gICAgICAgICAgICAgICAgLy8gYW5kIDEgKiAwIHlpZWxkIGRpZmZlcmVudCByZXN1
bHRzLgotICAgICAgICAgICAgICAgIGlmICghZmFjdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IE11bCh2YWx1ZSwgMSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVl
Ci0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IE11bCh2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIo
MCwgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAtMSkgewotICAgICAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ViLCBtX3Zh
bHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLCAwKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIGNvbnN0YW50KQotICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogU2hsKHZhbHVlLCBsb2cyKGNvbnN0YW50KSkKLSAgICAgICAgICAgICAgICBp
ZiAoaGFzT25lQml0U2V0KGZhY3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
c2hpZnRBbW91bnQgPSBXVEY6OmZhc3RMb2cyKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmYWN0b3Ip
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNobCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4o
KSwgc2hpZnRBbW91bnQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0Rv
dWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGZhY3RvciA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5hc0RvdWJsZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFs
dWUsIDEpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAg
ICAgIGlmIChmYWN0b3IgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElk
ZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLQog
ICAgICAgICBjYXNlIERpdjoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KGNvbnN0YW50
MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25z
dGFudDIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361452</attachid>
            <date>2019-02-07 14:52:27 -0800</date>
            <delta_ts>2019-02-07 16:25:49 -0800</delta_ts>
            <desc>WIP_Arith</desc>
            <filename>WIP_194222_Arith</filename>
            <type>text/plain</type>
            <size>33520</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDI0MTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDg4ICs0ODQsMjIgQEAKICAgICB9CiAg
ICAgCiBwcml2YXRlOgotICAgIHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aCgpCisgICAgLy8gSWYg
Z2l2ZVVwIGlzIHRydWUgYW5kIHRoaXMgZnVuY3Rpb24gY2Fubm90IGZpbmQgYSBjbGV2ZXIgd2F5
IG9mIHByb2R1Y2luZyB0aGUgcmVxdWVzdGVkIHZhbHVlLCBpdCByZXR1cm5zIG51bGxwdHIKKyAg
ICBWYWx1ZSogdHJ5UmVkdWNpbmcoS2luZCBraW5kLCBWYWx1ZSogY2hpbGQwID0gbnVsbHB0ciwg
VmFsdWUqIGNoaWxkMSA9IG51bGxwdHIsIFZhbHVlKiBjaGlsZDIgPSBudWxscHRyLCBib29sIGdp
dmVVcCA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkg
eworICAgICAgICBzd2l0Y2goa2luZC5vcGNvZGUoKSkgewogICAgICAgICBjYXNlIE9wYXF1ZToK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCiAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IE9wYXF1ZSh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gT3BhcXVlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBPcGFx
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMDsKKwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGhhbmRsZUNv
bW11dGF0aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0
YW50MikKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQx
ICsgY29uc3RhbnQyKQotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5j
aGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOwotICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCi0gICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3Rh
bnQpCi0gICAgICAgICAgICAgICAgaWYgKCFtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBtX3ZhbHVlLT5jaGls
ZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBjcmVhdGUgZHVwbGljYXRl
IGNvZGUgaWYgQWRkKHZhbHVlLCBjb25zdGFudCkgaXMgdXNlZCBlbHNld2hlcmUuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5nIGEgY29uc3Rh
bnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCi0gICAgICAgICAgICAgICAgICAg
IC8vIHNvIGxldCdzIGp1c3Qgcm9sbCB3aXRoIGl0LiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgbWVh
biBoYXZpbmcgdG8gZG8gZ29vZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gY291bnRzLCB3
aGljaCByZWR1Y2VTdHJlbmd0aCgpIGN1cnJlbnRseSBkb2Vzbid0IGhhdmUuCi0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90aGVyVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQWRkKG90aGVyVmFsdWUsIEFkZCh2YWx1ZSwgY29uc3RhbnQpKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29u
c3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAotICAgICAgICAgICAgICAgICYmIG1f
dmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAg
ICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAg
ICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdzIGRhbmdlcm91
cyBidXQgcHJvYmFibHkgZmluZSwgc2VlIGFib3ZlLgotICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQWRkKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1
ZSogY29uc3RhbnRBZGQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KGNvbnN0YW50QWRkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ0NvbW11dGF0aXZpdHkoa2lu
ZCwgY2hpbGQwLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKIAotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgdmFsdWUpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0
aCByZWR1Y3Rpb24uCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkgJiYgbV92
YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEpKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQWRkKHZhbHVlLCB6ZXJvKQogICAgICAgICAgICAgLy8gSW50byBhbiBJZGVudGl0eS4K
ICAgICAgICAgICAgIC8vCkBAIC01NzQsMTY2ICs1MDgsMTU3IEBACiAgICAgICAgICAgICAvLyAg
ICAwICsgLTAgPSAwCiAgICAgICAgICAgICAvLyAgICAtMCArIDAgPSAwCiAgICAgICAgICAgICAv
LyAgICAtMCArIC0wID0gLTAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQoMCkgfHwgbV92YWx1ZS0+Y2hpbGQoMSktPmlzTmVnYXRpdmVaZXJvKCkpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmlzSW50KDApIHx8IGNoaWxk
MS0+aXNOZWdhdGl2ZVplcm8oKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIE5lZyhvdGhl
clZhbHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJW
YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09
IE5lZykgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5j
aGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBBZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSArIGNvbnN0YW50MgorICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9
IGNoaWxkMC0+YWRkQ29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKGNoaWxkMC0+aXNJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBBZGQgJiYgY2hpbGQwLT5jaGls
ZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQo
QWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBjaGlsZDEtPmFkZENvbnN0YW50KG1fcHJvYywgY2hp
bGQwLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQWRkLCBjaGlsZDAtPmNoaWxkKDAp
LCBuZXdTdW0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNv
bnN0YW50KQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5jaGlsZCgxKS0+aGFzSW50
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+Y2hp
bGQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAt
PmNoaWxkKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBj
aGlsZDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBs
aWNhdGUgY29kZSBpZiBBZGQodmFsdWUsIGNvbnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5n
IGEgY29uc3RhbnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHJvbGwgd2l0aCBpdC4gVGhlIGFsdGVybmF0
aXZlIHdvdWxkIG1lYW4gaGF2aW5nIHRvIGRvIGdvb2QgdXNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkgY3VycmVudGx5IGRvZXNuJ3Qg
aGF2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGQgPSB0cnlSZWR1Y2lu
ZyhBZGQsIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnlSZWR1Y2luZyhBZGQsIG5ld0FkZCwgY29uc3RhbnQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJ
bnRlZ2VyIEFkZChOZWcodmFsdWUpLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU3ViKG90aGVyVmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQob3RoZXJWYWx1ZSwgQWRk
KHZhbHVlLCBjb25zdGFudCkpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRk
KHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
MS0+b3Bjb2RlKCkgPT0gQWRkICYmIGNoaWxkMS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGNoaWxkMS0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IGNoaWxkMS0+Y2hpbGQoMSk7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gY2hpbGQwOworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBkdXBsaWNhdGUgYWRkLiBUaGF0J3MgZGFuZ2Vyb3VzIGJ1
dCBwcm9iYWJseSBmaW5lLCBzZWUgYWJvdmUuCisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBu
ZXdBZGQgPSB0cnlSZWR1Y2luZyhBZGQsIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKEFkZCwgbmV3QWRkLCBjb25zdGFudCk7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFk
ZChTdWIoMCwgdmFsdWUpLCAtMSkKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2
YWx1ZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEp
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHVzZWZ1bCBjYW5vbmljYWxpemF0aW9uLiBJ
dCdzIG5vdCBtZWFudCB0byBiZSBhIHN0cmVuZ3RoIHJlZHVjdGlvbi4KKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQwID09IGNoaWxkMSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY29u
c3QxID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1
ZS0+b3JpZ2luKCksIDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmco
U2hsLCBjaGlsZDAsIGNvbnN0MSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKKyAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQxLT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnlSZWR1Y2luZyhTdWIsIGNoaWxkMCwgY2hpbGQxLT5jaGlsZCgwKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoTmVnKHZhbHVlKSwgb3Ro
ZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2
YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBOZWcpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhTdWIsIGNoaWxkMSwgY2hpbGQwLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBZGQoU3ViKDAsIHZhbHVlKSwgLTEpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
aXRYb3IodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gU3ViCi0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5pc0ludCgtMSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBT
dWIgJiYgY2hpbGQxLT5pc0ludCgtMSkgJiYgY2hpbGQwLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhCaXRYb3IsIGNoaWxkMC0+Y2hp
bGQoMSksIGNoaWxkMSk7CiAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJyZWFrOwotCisgICAgICAgIAogICAgICAgICBjYXNlIFN1YjoKICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBjb25zdGFudDEgLSBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSog
Y29uc3RhbnRTdWIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50U3ViKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRTdWIgPSBjaGlsZDAtPnN1YkNvbnN0YW50KG1fcHJv
YywgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRTdWI7CiAKLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxk
MC0+aXNJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1Yih2YWx1
ZSwgY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIC1j
b25zdGFudCkKLSAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5lZ2F0ZWRDb25zdGFudCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBu
ZWdhdGVkQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdh
dGVkQ29uc3RhbnQgPSBjaGlsZDEtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhBZGQsIGNoaWxkMCwgbmVnYXRlZENvbnN0YW50KTsK
KwogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKDAsIHZhbHVlKQogICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChjaGlsZDAtPmlzSW50KDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ5UmVkdWNpbmcoTmVnLCBjaGlsZDEpOwogCiAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBTdWIodmFsdWUsIHZhbHVlKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkg
ewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRD
b25zdGFudChtX3ZhbHVlLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwID09IGNoaWxkMSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKTsK
IAogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1
ZSkpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIG90aGVyVmFsdWUp
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEFkZCwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMS0+b3Bjb2RlKCkgPT0gTmVnKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQWRkLCBjaGlsZDAsIGNoaWxkMS0+Y2hpbGQoMCkpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgIGNhc2UgTmVnOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCiAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudAotICAgICAgICAgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5l
ZyhOZWcodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChjaGlsZDAtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2hpbGQwLT5jaGlsZCgwKTsKKwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2Vy
IE5lZyhTdWIodmFsdWUsIG90aGVyVmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBT
dWIob3RoZXJWYWx1ZSwgdmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2Vy
KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFN1YikgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpbGQw
LT5pc0ludGVnZXIoKSAmJiBjaGlsZDAtPm9wY29kZSgpID09IFN1YikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ5UmVkdWNpbmcoU3ViLCBjaGlsZDAtPmNoaWxkKDEpLCBjaGlsZDAtPmNoaWxk
KDApKTsKIAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAg
ICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVl
ID0gdHJ5UmVkdWNpbmdDb21tdXRhdGl2aXR5KGtpbmQsIGNoaWxkMCwgY2hpbGQxKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVs
KGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFu
dDEgKiBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+bXVsQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgpKSB7
CisgICAgICAgICAgICAgICAgaW50NjRfdCBmYWN0b3IgPSBjaGlsZDEtPmFzSW50KCk7CiAKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotCiAgICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDApCiAgICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiAwCiAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRv
IHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxlLCAtMSAq
IDAKICAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMu
Ci0gICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMTsKIAogICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogTXVsKHZhbHVlLCAxKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
dmFsdWUKLSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ZmFjdG9yID09IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAKICAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBTdWIoMCwgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9
PSAtMSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLCAw
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBOZWcodmFsdWUpCisgICAgICAgICAg
ICAgICAgaWYgKGZhY3RvciA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVJl
ZHVjaW5nKE5lZywgY2hpbGQwKTsKKwogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVs
KHZhbHVlLCBjb25zdGFudCkKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1
ZSwgbG9nMihjb25zdGFudCkpCiAgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0
b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpm
YXN0TG9nMihzdGF0aWNfY2FzdDx1aW50NjRfdD4oZmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2Mu
YWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9y
aWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KSkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNo
aWZ0Q29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgc2hpZnRBbW91bnQpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ5UmVkdWNpbmcoU2hsLCBjaGlsZDAsIHNoaWZ0Q29uc3RhbnQpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0Rv
dWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGZhY3RvciA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5hc0RvdWJsZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZDEtPmhhc0RvdWJs
ZSgpICYmIGNoaWxkMS0+YXNEb3VibGUoKSA9PSAxLjApCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjaGlsZDA7CiAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwg
MSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAg
aWYgKGZhY3RvciA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgRGl2OgpAQCAtNzQyLDMxICs2NjcsMjUgQEAKICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGlzIHVzZXMgRGl2PENoaWxsPiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNl
IHRoZSBydWxlcyBmb3IgRGl2CiAgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBp
dCBoYXMgY29ybmVyIGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAog
ICAgICAgICAgICAgLy8gbGlrZXMuCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1
ZShtX3ZhbHVlLT5jaGlsZCgwKS0+ZGl2Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1
ZSA9IGNoaWxkMC0+ZGl2Q29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJ
bnQoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50
KCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgpKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChjaGlsZDEtPmFzSW50KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIC0xOgog
ICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgLTEpCiAgICAgICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFk
ZDxWYWx1ZT4oTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
eVJlZHVjaW5nKE5lZywgY2hpbGQwKTsKICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAwKQogICAgICAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IDAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHRo
aXMgYmVjYXVzZSBpdCdzIHByZWNpc2VseSBjb3JyZWN0IGZvciBDaGlsbERpdiBhbmQgZm9yIERp
diB3ZQogICAgICAgICAgICAgICAgICAgICAvLyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3
ZSB3YW50LgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUt
PmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkMTsKICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAxKQogICAgICAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMDsKIAogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gc3VwZXIgY29tcHJlaGVuc2l2ZSBz
dHJlbmd0aCByZWR1Y3Rpb24gb2YgZGl2aXNpb24uIEN1cnJlbnRseSB3ZQpAQCAtNzc0LDg2ICs2
OTMsNjggQEAKICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLiBXZSBlbXVsYXRlIGl0
IHVzaW5nIDY0LWJpdCBtdWx0aXBseS4gV2UgY2FuJ3QgZW11bGF0ZSA2NC1iaXQKICAgICAgICAg
ICAgICAgICAgICAgLy8gaGlnaCBtdWx0aXBseSB3aXRoIGEgMTI4LWJpdCBtdWx0aXBseSBiZWNh
dXNlIHdlIGRvbid0IGhhdmUgYSAxMjgtYml0CiAgICAgICAgICAgICAgICAgICAgIC8vIG11bHRp
cGx5LiBXZSBjb3VsZCBkbyBpdCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJlZCBiYWRseSBl
bm91Z2guCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSAhPSBJbnQz
MikKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMC0+dHlwZSgpICE9IEludDMyKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0g
bV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IGNoaWxkMS0+YXNJbnQzMigpOwogICAg
ICAgICAgICAgICAgICAgICBEaXZpc2lvbk1hZ2ljPGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURp
dmlzaW9uTWFnaWMoZGl2aXNvcik7Ci0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4gV2UgZG8gaXQg
anVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBzb3J0IG9mIGxpa2UgbXVsdGlwbHlpbmcgYnkgdGhlIHJlY2lwcm9jYWwsIGp1c3QgbW9yZSBn
bmFybHkuIEl0J3MKICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBIYWNrZXIncyBEZWxpZ2h0
IGFuZCBJIGRvbid0IGNsYWltIHRvIHVuZGVyc3RhbmQgaXQuCi0gICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1ZS0+b3JpZ2lu
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTXVsLCBtX3Zh
bHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXgsIFNFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENv
bnN0NjRWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWMubWFnaWNNdWx0aXBsaWVyKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCAzMikpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNleHQzMkNoaWxkMCA9IHRyeVJl
ZHVjaW5nKFNFeHQzMiwgY2hpbGQwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0
TWFnaWNNdWx0aXBsaWVyID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obV9p
bmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljLm1hZ2ljTXVsdGlwbGllcik7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBwcm9kdWN0ID0gdHJ5UmVkdWNpbmcoTXVsLCBzZXh0MzJDaGls
ZDAsIGNvbnN0TWFnaWNNdWx0aXBsaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNv
bnN0MzIgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3Zh
bHVlLT5vcmlnaW4oKSwgMzIpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogc2hpZnQgPSB0
cnlSZWR1Y2luZyhaU2hyLCBwcm9kdWN0LCBjb25zdDMyKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIG1hZ2ljUXVvdGllbnQgPSB0cnlSZWR1Y2luZyhUcnVuYywgc2hpZnQpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChkaXZpc29yID4gMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIg
PCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LCBtX3ZhbHVlLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpdmlz
b3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFN1YiwgbV92YWx1ZS0+b3JpZ2luKCks
IG1hZ2ljUXVvdGllbnQsIG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aXNvciA+IDAgJiYgbWFnaWMubWFnaWNNdWx0
aXBsaWVyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSB0cnlS
ZWR1Y2luZyhBZGQsIG1hZ2ljUXVvdGllbnQsIGNoaWxkMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGRpdmlzb3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApCisgICAg
ICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gdHJ5UmVkdWNpbmcoU3ViLCBtYWdp
Y1F1b3RpZW50LCBjaGlsZDApOworCiAgICAgICAgICAgICAgICAgICAgIGlmIChtYWdpYy5zaGlm
dCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXgsIFNTaHIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwg
bWFnaWMuc2hpZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYWdpY1NoaWZ0
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1hZ2ljLnNoaWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVv
dGllbnQgPSB0cnlSZWR1Y2luZyhTU2hyLCBtYWdpY1F1b3RpZW50LCBtYWdpY1NoaWZ0KTsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9y
aWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXgsIFpTaHIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFs
dWUtPm9yaWdpbigpLCAzMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdDMxID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENv
bnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDMxKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIHNoaWZ0ZWRNYWdpY1F1b3RpZW50ID0gdHJ5UmVkdWNpbmcoWlNociwg
bWFnaWNRdW90aWVudCwgY29uc3QzMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlS
ZWR1Y2luZyhBZGQsIG1hZ2ljUXVvdGllbnQsIHNoaWZ0ZWRNYWdpY1F1b3RpZW50KTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgVURpdjoKICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogVURpdihjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhO
ZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+dURpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+
Y2hpbGQoMSkpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChWYWx1
ZSogdmFsdWUgPSBjaGlsZDAtPnVEaXZDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgx
KS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBVRGl2KHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHdoYXRldmVyIHdl
IHdhbnQgaGVyZSBzbyB3ZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGlsbCB0aGluZywKLSAgICAg
ICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB3ZSBhZGQgY2hpbGwgdmVyc2lvbnMgb2YgVURpdiBp
biB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdih2
YWx1ZSwgMSkKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVu
Z3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlrZWx5LAotICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNoaWxkMS0+aGFzSW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGNoaWxkMS0+YXNJbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUs
IDApCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB3aGF0ZXZlciB3ZSB3YW50IGhlcmUgc28gd2UgbWln
aHQgYXMgd2VsbCBkbyB0aGUgY2hpbGwgdGhpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbiBjYXNlIHdlIGFkZCBjaGlsbCB2ZXJzaW9ucyBvZiBVRGl2IGluIHRoZSBmdXR1cmUuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQxOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFs
dWUsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBj
b21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlr
ZWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBqdXN0IHdhbnQgY29weSB3
aGF0IGxsdm0gZG9lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDgwOQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIE1vZDoK
QEAgLTg2MCw3MCArNzYxLDExMCBAQAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoY29u
c3RhbnQxLCBjb25zdGFudDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAv
IGNvbnN0YW50MgogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+
IHNlbWFudGljcy4KLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUt
PmNoaWxkKDApLT5tb2RDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gY2hpbGQw
LT5tb2RDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwogCiAgICAgICAgICAgICAvLyBNb2R1bG8gYnkgY29uc3RhbnQgaXMgbW9yZSBlZmZpY2ll
bnQgaWYgd2UgdHVybiBpdCBpbnRvIERpdiwgYW5kIHRoZW4gbGV0IERpdiBnZXQKICAgICAgICAg
ICAgIC8vIG9wdGltaXplZC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFz
SW50KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0lu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IE1vZCh2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiAwCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY29ycmVjdCBhY2NvcmRpbmcgdG8g
Q2hpbGxNb2Qgc2VtYW50aWNzLgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QodmFsdWUsIDApCisgICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb3Jy
ZWN0IGFjY29yZGluZyB0byBDaGlsbE1vZCBzZW1hbnRpY3MuCisgICAgICAgICAgICAgICAgaWYg
KCFjaGlsZDEtPmFzSW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDE7CisK
KyAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogTW9kKE4sIEQpCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3Vi
KE4sIE11bChEaXYoTiwgRCksIEQpKQotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3BlZWQtdXAgYmVjYXVzZSB3ZSB1c2Ugb3VyIGV4aXN0
aW5nIERpdiBvcHRpbWl6YXRpb25zLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0OgotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgTiAlIEQgPSBOIC0gTiAvIEQgKiBECi0gICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90
IHdvcmsgZm9yIEQgPSAwIGFuZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgot
ICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIGhhdmUgYSBzcGVjaWFsLWNhc2Ug
YWJvdmUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICBYICUgMCA9IFggLSBYIC8gMCAqIDAg
PSBYICAgICAoc2hvdWxkIGJlIDApCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgZG9lcyB3b3JrIGZvciB0aGUgRCA9IC0xIHNwZWNpYWwgY2FzZS4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgIC0yXjMxICUgLTEgPSAtMl4zMSAtIC0yXjMxIC8g
LTEgKiAtMQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0g
LTJeMzEgKiAtMQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMx
IC0gLTJeMzEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAwCisgICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoTiwgRCkKKyAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IFN1YihOLCBNdWwoRGl2KE4sIEQpLCBEKSkKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVlZC11cCBiZWNhdXNlIHdlIHVzZSBvdXIg
ZXhpc3RpbmcgRGl2IG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0OgorICAgICAgICAg
ICAgICAgIC8vICAgICBOICUgRCA9IE4gLSBOIC8gRCAqIEQKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAw
IGFuZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgorICAgICAgICAgICAgICAg
IC8vIFRoYXQncyB3aHkgd2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSBhYm92ZS4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgWCAlIDAgPSBYIC0gWCAvIDAgKiAwID0gWCAgICAgKHNob3VsZCBiZSAwKQor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gVGhpcyBkb2VzIHdvcmsgZm9y
IHRoZSBEID0gLTEgc3BlY2lhbCBjYXNlLgorICAgICAgICAgICAgICAgIC8vICAgICAtMl4zMSAl
IC0xID0gLTJeMzEgLSAtMl4zMSAvIC0xICogLTEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAtMQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAgID0gLTJeMzEgLSAtMl4zMQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg
ID0gMAorICAgICAgICAgICAgICAgIEtpbmQgZGl2S2luZCA9IERpdjsKKyAgICAgICAgICAgICAg
ICBkaXZLaW5kLnNldElzQ2hpbGwobV92YWx1ZS0+aXNDaGlsbCgpKTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogZGl2ID0gdHJ5UmVkdWNpbmcoZGl2S2luZCwgY2hpbGQwLCBjaGlsZDEpOworICAg
ICAgICAgICAgICAgIFZhbHVlKiBtdWwgPSB0cnlSZWR1Y2luZyhNdWwsIGRpdiwgY2hpbGQxKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoU3ViLCBjaGlsZDAsIG11bCk7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgS2luZCBkaXZLaW5kID0gRGl2Owot
ICAgICAgICAgICAgICAgICAgICBkaXZLaW5kLnNldElzQ2hpbGwobV92YWx1ZS0+aXNDaGlsbCgp
KTsKLQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4LCBTdWIsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIE11bCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBkaXZLaW5kLCBt
X3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpKSkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
VU1vZDoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVU1vZChjb25zdGFudDEsIGNvbnN0YW50
MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT51TW9kQ29uc3Rh
bnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2
YWx1ZSA9IGNoaWxkMC0+dU1vZENvbnN0YW50KG1fcHJvYywgY2hpbGQxKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CisKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8g
d2hhdCB3ZSBkbyBmb3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIGhlcmUu
CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0ODA5CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ2l2ZVVwKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChjaGlsZDEgPT0gbnVsbHB0cikKKyAgICAgICAg
ICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIGtpbmQsIG1f
dmFsdWUtPm9yaWdpbigpLCBjaGlsZDApOworICAgICAgICBpZiAoY2hpbGQyID09IG51bGxwdHIp
CisgICAgICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4
LCBraW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwgY2hpbGQwLCBjaGlsZDEpOworICAgICAgICByZXR1
cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBraW5kLCBtX3ZhbHVlLT5v
cmlnaW4oKSwgY2hpbGQwLCBjaGlsZDEsIGNoaWxkMik7CisgICAgfQorCisgICAgLy8gV2UgY2Fu
b25pY2FsaXplIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMgaW4gdGhyZWUgd2F5czoKKyAgICAvLyAt
IEF0b21pY1N0cm9uZ0NBUyBmaXJzdCAoaW1wb3J0YW50IGZvciBzb21lIHBhdHRlcm5zIHRvIGJl
IHJlY29nbml6ZWQgYnkgTG93ZXJUb0FpcikKKyAgICAvLyAtIENvbnN0YW50cyBsYXN0IChtYWtl
cyBpdCBlYXNpZXIgdG8gZWxpbWluYXRlIHRoZW0pCisgICAgLy8gLSBPdGhlciBvcGVyYW5kcyBz
b3J0ZWQgYnkgdGhlaXIgaW5kZXggKHdlIHVzZSB0aGUgaW5kZXggb3ZlciB0aGUgYWRkcmVzcyB0
byBtYWtlIHRoaXMgYXQgbGVhc3Qgc2xpZ2h0bHkgZGV0ZXJtaW5pc3RpYykKKyAgICBWYWx1ZSog
dHJ5UmVkdWNpbmdDb21tdXRhdGl2aXR5KEtpbmQga2luZCwgVmFsdWUqIGNoaWxkMCwgVmFsdWUq
IGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjaGlsZDAgIT0gbnVsbHB0cik7CisgICAg
ICAgIEFTU0VSVChjaGlsZDEgIT0gbnVsbHB0cik7CisKKyAgICAgICAgaWYgKGNoaWxkMS0+aXND
b25zdGFudCgpIHx8IGNoaWxkMC0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKGNoaWxkMC0+aXNDb25zdGFudCgp
IHx8IGNoaWxkMS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTIHx8IGNoaWxkMC0+aW5kZXgo
KSA+IGNoaWxkMS0+aW5kZXgoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhraW5k
LCBjaGlsZDEsIGNoaWxkMCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICB2b2lkIHJlZHVjZVZhbHVlU3RyZW5ndGgoKQorICAgIHsKKyAgICAgICAgVmFs
dWUqIHJlZHVjZWRWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIHN3aXRjaChtX3ZhbHVlLT5udW1D
aGlsZHJlbigpKSB7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmVkdWNl
ZFZhbHVlID0gdHJ5UmVkdWNpbmcobV92YWx1ZS0+a2luZCgpLCBtX3ZhbHVlLT5jaGlsZCgwKSwg
bnVsbHB0ciwgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVkdWNpbmco
bV92YWx1ZS0+a2luZCgpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSksIG51
bGxwdHIsIHRydWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAz
OgorICAgICAgICAgICAgICAgIHJlZHVjZWRWYWx1ZSA9IHRyeVJlZHVjaW5nKG1fdmFsdWUtPmtp
bmQoKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGls
ZCgyKSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZWR1Y2Vk
VmFsdWUpIHsKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkocmVkdWNlZFZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAgICAgICAgICBoYW5kbGVD
b21tdXRhdGl2aXR5KCk7CiAKQEAgLTEyNDAsMTAgKzExODEsMTAgQEAKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCiAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IEFicyh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7CisgICAgICAgICAgICAvKmlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7CiAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVu
dGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSovCiAKICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQWJzKEJpdHdpc2VDYXN0KHZhbHVlKSkKICAgICAgICAgICAgIC8vIEludG8gdGhpczog
Qml0d2lzZUNhc3QoQW5kKHZhbHVlLCBtYXNrLXRvcC1iaXQpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDI0MTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg0LDcgKzM5ODQsNyBAQAog
ewogICAgIFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7Ci0gICAgVmFsdWUqIG5lZyA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWJz
LCBPcmlnaW4oKSwKKyAgICBWYWx1ZSogbmVnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBOZWcsIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCkpOwogICAgIFZhbHVlKiBh
YnMgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFicywgT3JpZ2luKCksIG5lZyk7CiAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFi
cyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361467</attachid>
            <date>2019-02-07 16:25:49 -0800</date>
            <delta_ts>2019-02-07 18:01:47 -0800</delta_ts>
            <desc>WIP_Arith+Shifts+FP</desc>
            <filename>WIP_194222_Most</filename>
            <type>text/plain</type>
            <size>47900</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDI0MTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDg4ICs0ODQsMjIgQEAKICAgICB9CiAg
ICAgCiBwcml2YXRlOgotICAgIHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aCgpCisgICAgLy8gSWYg
Z2l2ZVVwIGlzIHRydWUgYW5kIHRoaXMgZnVuY3Rpb24gY2Fubm90IGZpbmQgYSBjbGV2ZXIgd2F5
IG9mIHByb2R1Y2luZyB0aGUgcmVxdWVzdGVkIHZhbHVlLCBpdCByZXR1cm5zIG51bGxwdHIKKyAg
ICBWYWx1ZSogdHJ5UmVkdWNpbmcoS2luZCBraW5kLCBWYWx1ZSogY2hpbGQwID0gbnVsbHB0ciwg
VmFsdWUqIGNoaWxkMSA9IG51bGxwdHIsIFZhbHVlKiBjaGlsZDIgPSBudWxscHRyLCBib29sIGdp
dmVVcCA9IGZhbHNlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkg
eworICAgICAgICBzd2l0Y2goa2luZC5vcGNvZGUoKSkgewogICAgICAgICBjYXNlIE9wYXF1ZToK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCiAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IE9wYXF1ZSh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gT3BhcXVlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBPcGFx
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMDsKKwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGhhbmRsZUNv
bW11dGF0aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0
YW50MikKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQx
ICsgY29uc3RhbnQyKQotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5j
aGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkp
OwotICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOwotICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCi0gICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3Rh
bnQpCi0gICAgICAgICAgICAgICAgaWYgKCFtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBtX3ZhbHVlLT5jaGls
ZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBjcmVhdGUgZHVwbGljYXRl
IGNvZGUgaWYgQWRkKHZhbHVlLCBjb25zdGFudCkgaXMgdXNlZCBlbHNld2hlcmUuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5nIGEgY29uc3Rh
bnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCi0gICAgICAgICAgICAgICAgICAg
IC8vIHNvIGxldCdzIGp1c3Qgcm9sbCB3aXRoIGl0LiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgbWVh
biBoYXZpbmcgdG8gZG8gZ29vZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gY291bnRzLCB3
aGljaCByZWR1Y2VTdHJlbmd0aCgpIGN1cnJlbnRseSBkb2Vzbid0IGhhdmUuCi0gICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90aGVyVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQWRkKG90aGVyVmFsdWUsIEFkZCh2YWx1ZSwgY29uc3RhbnQpKQot
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29u
c3RhbnQpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYg
bV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAotICAgICAgICAgICAgICAgICYmIG1f
dmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAg
ICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAg
ICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdzIGRhbmdlcm91
cyBidXQgcHJvYmFibHkgZmluZSwgc2VlIGFib3ZlLgotICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQWRkKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1
ZSogY29uc3RhbnRBZGQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KGNvbnN0YW50QWRkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ0NvbW11dGF0aXZpdHkoa2lu
ZCwgY2hpbGQwLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKIAotICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgdmFsdWUpCi0gICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0
aCByZWR1Y3Rpb24uCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkgJiYgbV92
YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFs
dWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEpKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQWRkKHZhbHVlLCB6ZXJvKQogICAgICAgICAgICAgLy8gSW50byBhbiBJZGVudGl0eS4K
ICAgICAgICAgICAgIC8vCkBAIC01NzQsMTY2ICs1MDgsMTU3IEBACiAgICAgICAgICAgICAvLyAg
ICAwICsgLTAgPSAwCiAgICAgICAgICAgICAvLyAgICAtMCArIDAgPSAwCiAgICAgICAgICAgICAv
LyAgICAtMCArIC0wID0gLTAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJ
bnQoMCkgfHwgbV92YWx1ZS0+Y2hpbGQoMSktPmlzTmVnYXRpdmVaZXJvKCkpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmlzSW50KDApIHx8IGNoaWxk
MS0+aXNOZWdhdGl2ZVplcm8oKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewot
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIE5lZyhvdGhl
clZhbHVlKSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJW
YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09
IE5lZykgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5j
aGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBBZGQoY29uc3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IGNvbnN0YW50MSArIGNvbnN0YW50MgorICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9
IGNoaWxkMC0+YWRkQ29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZTsKKworICAgICAgICAgICAgaWYgKGNoaWxkMC0+aXNJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBBZGQgJiYgY2hpbGQwLT5jaGls
ZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQo
QWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBjaGlsZDEtPmFkZENvbnN0YW50KG1fcHJvYywgY2hp
bGQwLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQWRkLCBjaGlsZDAtPmNoaWxkKDAp
LCBuZXdTdW0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNv
bnN0YW50KQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5jaGlsZCgxKS0+aGFzSW50
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+Y2hp
bGQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAt
PmNoaWxkKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBj
aGlsZDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBs
aWNhdGUgY29kZSBpZiBBZGQodmFsdWUsIGNvbnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5n
IGEgY29uc3RhbnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHJvbGwgd2l0aCBpdC4gVGhlIGFsdGVybmF0
aXZlIHdvdWxkIG1lYW4gaGF2aW5nIHRvIGRvIGdvb2QgdXNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkgY3VycmVudGx5IGRvZXNuJ3Qg
aGF2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGQgPSB0cnlSZWR1Y2lu
ZyhBZGQsIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnlSZWR1Y2luZyhBZGQsIG5ld0FkZCwgY29uc3RhbnQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJ
bnRlZ2VyIEFkZChOZWcodmFsdWUpLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU3ViKG90aGVyVmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGls
ZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQob3RoZXJWYWx1ZSwgQWRk
KHZhbHVlLCBjb25zdGFudCkpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRk
KHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgaWYgKGNoaWxk
MS0+b3Bjb2RlKCkgPT0gQWRkICYmIGNoaWxkMS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGNoaWxkMS0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IGNoaWxkMS0+Y2hpbGQoMSk7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gY2hpbGQwOworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBkdXBsaWNhdGUgYWRkLiBUaGF0J3MgZGFuZ2Vyb3VzIGJ1
dCBwcm9iYWJseSBmaW5lLCBzZWUgYWJvdmUuCisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBu
ZXdBZGQgPSB0cnlSZWR1Y2luZyhBZGQsIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKEFkZCwgbmV3QWRkLCBjb25zdGFudCk7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFk
ZChTdWIoMCwgdmFsdWUpLCAtMSkKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2
YWx1ZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEp
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHVzZWZ1bCBjYW5vbmljYWxpemF0aW9uLiBJ
dCdzIG5vdCBtZWFudCB0byBiZSBhIHN0cmVuZ3RoIHJlZHVjdGlvbi4KKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQwID09IGNoaWxkMSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY29u
c3QxID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1
ZS0+b3JpZ2luKCksIDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmco
U2hsLCBjaGlsZDAsIGNvbnN0MSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKKyAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQxLT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnlSZWR1Y2luZyhTdWIsIGNoaWxkMCwgY2hpbGQxLT5jaGlsZCgwKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoTmVnKHZhbHVlKSwgb3Ro
ZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2
YWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBOZWcpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhTdWIsIGNoaWxkMSwgY2hpbGQwLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBZGQoU3ViKDAsIHZhbHVlKSwgLTEpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBC
aXRYb3IodmFsdWUsIC0xKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gU3ViCi0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5pc0ludCgtMSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxW
YWx1ZT4oQml0WG9yLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLCBtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBT
dWIgJiYgY2hpbGQxLT5pc0ludCgtMSkgJiYgY2hpbGQwLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhCaXRYb3IsIGNoaWxkMC0+Y2hp
bGQoMSksIGNoaWxkMSk7CiAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJyZWFrOwotCisgICAgICAgIAogICAgICAgICBjYXNlIFN1YjoKICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBjb25zdGFudDEgLSBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSog
Y29uc3RhbnRTdWIgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50U3ViKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRTdWIgPSBjaGlsZDAtPnN1YkNvbnN0YW50KG1fcHJv
YywgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRTdWI7CiAKLSAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxk
MC0+aXNJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1Yih2YWx1
ZSwgY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIC1j
b25zdGFudCkKLSAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5lZ2F0ZWRDb25zdGFudCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBu
ZWdhdGVkQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdh
dGVkQ29uc3RhbnQgPSBjaGlsZDEtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhBZGQsIGNoaWxkMCwgbmVnYXRlZENvbnN0YW50KTsK
KwogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKDAsIHZhbHVlKQogICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXc8VmFsdWU+KE5lZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChjaGlsZDAtPmlzSW50KDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ5UmVkdWNpbmcoTmVnLCBjaGlsZDEpOwogCiAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBTdWIodmFsdWUsIHZhbHVlKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAg
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkg
ewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRD
b25zdGFudChtX3ZhbHVlLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwID09IGNoaWxkMSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKTsK
IAogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1
ZSkpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIG90aGVyVmFsdWUp
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEFkZCwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQo
MCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMS0+b3Bjb2RlKCkgPT0gTmVnKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQWRkLCBjaGlsZDAsIGNoaWxkMS0+Y2hpbGQoMCkpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgIGNhc2UgTmVnOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCiAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IC1jb25zdGFudAotICAgICAgICAgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0g
ICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5l
ZyhOZWcodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChjaGlsZDAtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2hpbGQwLT5jaGlsZCgwKTsKKwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2Vy
IE5lZyhTdWIodmFsdWUsIG90aGVyVmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBT
dWIob3RoZXJWYWx1ZSwgdmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2Vy
KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFN1YikgewotICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpbGQw
LT5pc0ludGVnZXIoKSAmJiBjaGlsZDAtPm9wY29kZSgpID09IFN1YikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ5UmVkdWNpbmcoU3ViLCBjaGlsZDAtPmNoaWxkKDEpLCBjaGlsZDAtPmNoaWxk
KDApKTsKIAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAg
ICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVl
ID0gdHJ5UmVkdWNpbmdDb21tdXRhdGl2aXR5KGtpbmQsIGNoaWxkMCwgY2hpbGQxKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVs
KGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFu
dDEgKiBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+bXVsQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgpKSB7
CisgICAgICAgICAgICAgICAgaW50NjRfdCBmYWN0b3IgPSBjaGlsZDEtPmFzSW50KCk7CiAKLSAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotCiAgICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDApCiAgICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiAwCiAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRv
IHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxlLCAtMSAq
IDAKICAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMu
Ci0gICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMTsKIAogICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogTXVsKHZhbHVlLCAxKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczog
dmFsdWUKLSAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ZmFjdG9yID09IDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAKICAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBTdWIoMCwgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9
PSAtMSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLCAw
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBOZWcodmFsdWUpCisgICAgICAgICAg
ICAgICAgaWYgKGZhY3RvciA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVJl
ZHVjaW5nKE5lZywgY2hpbGQwKTsKKwogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVs
KHZhbHVlLCBjb25zdGFudCkKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1
ZSwgbG9nMihjb25zdGFudCkpCiAgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0
b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpm
YXN0TG9nMihzdGF0aWNfY2FzdDx1aW50NjRfdD4oZmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2Mu
YWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9y
aWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KSkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNo
aWZ0Q29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgc2hpZnRBbW91bnQpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ5UmVkdWNpbmcoU2hsLCBjaGlsZDAsIHNoaWZ0Q29uc3RhbnQpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0Rv
dWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGZhY3RvciA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5hc0RvdWJsZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZDEtPmhhc0RvdWJs
ZSgpICYmIGNoaWxkMS0+YXNEb3VibGUoKSA9PSAxLjApCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjaGlsZDA7CiAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwg
MSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAg
aWYgKGZhY3RvciA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgRGl2OgpAQCAtNzQyLDMxICs2NjcsMjUgQEAKICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGlzIHVzZXMgRGl2PENoaWxsPiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNl
IHRoZSBydWxlcyBmb3IgRGl2CiAgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBp
dCBoYXMgY29ybmVyIGNhc2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAog
ICAgICAgICAgICAgLy8gbGlrZXMuCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1
ZShtX3ZhbHVlLT5jaGlsZCgwKS0+ZGl2Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1
ZSA9IGNoaWxkMC0+ZGl2Q29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJ
bnQoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50
KCkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgpKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChjaGlsZDEtPmFzSW50KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIC0xOgog
ICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgLTEpCiAgICAgICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFk
ZDxWYWx1ZT4oTmVnLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
eVJlZHVjaW5nKE5lZywgY2hpbGQwKTsKICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAwKQogICAgICAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IDAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHRo
aXMgYmVjYXVzZSBpdCdzIHByZWNpc2VseSBjb3JyZWN0IGZvciBDaGlsbERpdiBhbmQgZm9yIERp
diB3ZQogICAgICAgICAgICAgICAgICAgICAvLyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3
ZSB3YW50LgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUt
PmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkMTsKICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogRGl2KHZhbHVlLCAxKQogICAgICAgICAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMDsKIAogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgICAgIC8vIFBlcmZvcm0gc3VwZXIgY29tcHJlaGVuc2l2ZSBz
dHJlbmd0aCByZWR1Y3Rpb24gb2YgZGl2aXNpb24uIEN1cnJlbnRseSB3ZQpAQCAtNzc0LDg2ICs2
OTMsNjggQEAKICAgICAgICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLiBXZSBlbXVsYXRlIGl0
IHVzaW5nIDY0LWJpdCBtdWx0aXBseS4gV2UgY2FuJ3QgZW11bGF0ZSA2NC1iaXQKICAgICAgICAg
ICAgICAgICAgICAgLy8gaGlnaCBtdWx0aXBseSB3aXRoIGEgMTI4LWJpdCBtdWx0aXBseSBiZWNh
dXNlIHdlIGRvbid0IGhhdmUgYSAxMjgtYml0CiAgICAgICAgICAgICAgICAgICAgIC8vIG11bHRp
cGx5LiBXZSBjb3VsZCBkbyBpdCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJlZCBiYWRseSBl
bm91Z2guCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSAhPSBJbnQz
MikKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMC0+dHlwZSgpICE9IEludDMyKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0g
bV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IGNoaWxkMS0+YXNJbnQzMigpOwogICAg
ICAgICAgICAgICAgICAgICBEaXZpc2lvbk1hZ2ljPGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURp
dmlzaW9uTWFnaWMoZGl2aXNvcik7Ci0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4gV2UgZG8gaXQg
anVzdCB0byBnZXQgdGhlIGhpZ2ggYml0cy4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBzb3J0IG9mIGxpa2UgbXVsdGlwbHlpbmcgYnkgdGhlIHJlY2lwcm9jYWwsIGp1c3QgbW9yZSBn
bmFybHkuIEl0J3MKICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBIYWNrZXIncyBEZWxpZ2h0
IGFuZCBJIGRvbid0IGNsYWltIHRvIHVuZGVyc3RhbmQgaXQuCi0gICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1ZS0+b3JpZ2lu
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTXVsLCBtX3Zh
bHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXgsIFNFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENv
bnN0NjRWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWMubWFnaWNNdWx0aXBsaWVyKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCAzMikpKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNleHQzMkNoaWxkMCA9IHRyeVJl
ZHVjaW5nKFNFeHQzMiwgY2hpbGQwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0
TWFnaWNNdWx0aXBsaWVyID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obV9p
bmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljLm1hZ2ljTXVsdGlwbGllcik7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBwcm9kdWN0ID0gdHJ5UmVkdWNpbmcoTXVsLCBzZXh0MzJDaGls
ZDAsIGNvbnN0TWFnaWNNdWx0aXBsaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNv
bnN0MzIgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3Zh
bHVlLT5vcmlnaW4oKSwgMzIpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogc2hpZnQgPSB0
cnlSZWR1Y2luZyhaU2hyLCBwcm9kdWN0LCBjb25zdDMyKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFsdWUqIG1hZ2ljUXVvdGllbnQgPSB0cnlSZWR1Y2luZyhUcnVuYywgc2hpZnQpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChkaXZpc29yID4gMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIg
PCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LCBtX3ZhbHVlLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpdmlz
b3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFN1YiwgbV92YWx1ZS0+b3JpZ2luKCks
IG1hZ2ljUXVvdGllbnQsIG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aXNvciA+IDAgJiYgbWFnaWMubWFnaWNNdWx0
aXBsaWVyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSB0cnlS
ZWR1Y2luZyhBZGQsIG1hZ2ljUXVvdGllbnQsIGNoaWxkMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGRpdmlzb3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApCisgICAg
ICAgICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gdHJ5UmVkdWNpbmcoU3ViLCBtYWdp
Y1F1b3RpZW50LCBjaGlsZDApOworCiAgICAgICAgICAgICAgICAgICAgIGlmIChtYWdpYy5zaGlm
dCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXgsIFNTaHIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwg
bWFnaWMuc2hpZnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYWdpY1NoaWZ0
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1hZ2ljLnNoaWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVv
dGllbnQgPSB0cnlSZWR1Y2luZyhTU2hyLCBtYWdpY1F1b3RpZW50LCBtYWdpY1NoaWZ0KTsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9y
aWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXgsIFpTaHIsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFs
dWUtPm9yaWdpbigpLCAzMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdDMxID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENv
bnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDMxKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIHNoaWZ0ZWRNYWdpY1F1b3RpZW50ID0gdHJ5UmVkdWNpbmcoWlNociwg
bWFnaWNRdW90aWVudCwgY29uc3QzMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlS
ZWR1Y2luZyhBZGQsIG1hZ2ljUXVvdGllbnQsIHNoaWZ0ZWRNYWdpY1F1b3RpZW50KTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgVURpdjoKICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogVURpdihjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhO
ZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+dURpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+
Y2hpbGQoMSkpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChWYWx1
ZSogdmFsdWUgPSBjaGlsZDAtPnVEaXZDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgx
KS0+YXNJbnQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBVRGl2KHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IDAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHdoYXRldmVyIHdl
IHdhbnQgaGVyZSBzbyB3ZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGlsbCB0aGluZywKLSAgICAg
ICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB3ZSBhZGQgY2hpbGwgdmVyc2lvbnMgb2YgVURpdiBp
biB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdih2
YWx1ZSwgMSkKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVu
Z3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlrZWx5LAotICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSB3aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNoaWxkMS0+aGFzSW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGNoaWxkMS0+YXNJbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUs
IDApCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGNhbiBkbyB3aGF0ZXZlciB3ZSB3YW50IGhlcmUgc28gd2UgbWln
aHQgYXMgd2VsbCBkbyB0aGUgY2hpbGwgdGhpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpbiBjYXNlIHdlIGFkZCBjaGlsbCB2ZXJzaW9ucyBvZiBVRGl2IGluIHRoZSBmdXR1cmUuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQxOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFs
dWUsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBj
b21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlr
ZWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBqdXN0IHdhbnQgY29weSB3
aGF0IGxsdm0gZG9lcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDgwOQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIE1vZDoK
QEAgLTg2MCw3MCArNzYxLDI4OCBAQAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoY29u
c3RhbnQxLCBjb25zdGFudDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAv
IGNvbnN0YW50MgogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdXNlcyBNb2Q8Q2hpbGw+
IHNlbWFudGljcy4KLSAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUt
PmNoaWxkKDApLT5tb2RDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gY2hpbGQw
LT5tb2RDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwogCiAgICAgICAgICAgICAvLyBNb2R1bG8gYnkgY29uc3RhbnQgaXMgbW9yZSBlZmZpY2ll
bnQgaWYgd2UgdHVybiBpdCBpbnRvIERpdiwgYW5kIHRoZW4gbGV0IERpdiBnZXQKICAgICAgICAg
ICAgIC8vIG9wdGltaXplZC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFz
SW50KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0lu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IE1vZCh2YWx1ZSwgMCkKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiAwCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY29ycmVjdCBhY2NvcmRpbmcgdG8g
Q2hpbGxNb2Qgc2VtYW50aWNzLgotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QodmFsdWUsIDApCisgICAgICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjb3Jy
ZWN0IGFjY29yZGluZyB0byBDaGlsbE1vZCBzZW1hbnRpY3MuCisgICAgICAgICAgICAgICAgaWYg
KCFjaGlsZDEtPmFzSW50KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDE7CisK
KyAgICAgICAgICAgICAgICBpZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogTW9kKE4sIEQpCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3Vi
KE4sIE11bChEaXYoTiwgRCksIEQpKQotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGEgc3BlZWQtdXAgYmVjYXVzZSB3ZSB1c2Ugb3VyIGV4aXN0
aW5nIERpdiBvcHRpbWl6YXRpb25zLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0OgotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgTiAlIEQgPSBOIC0gTiAvIEQgKiBECi0gICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90
IHdvcmsgZm9yIEQgPSAwIGFuZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgot
ICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgd2h5IHdlIGhhdmUgYSBzcGVjaWFsLWNhc2Ug
YWJvdmUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICBYICUgMCA9IFggLSBYIC8gMCAqIDAg
PSBYICAgICAoc2hvdWxkIGJlIDApCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgZG9lcyB3b3JrIGZvciB0aGUgRCA9IC0xIHNwZWNpYWwgY2FzZS4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgIC0yXjMxICUgLTEgPSAtMl4zMSAtIC0yXjMxIC8g
LTEgKiAtMQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMxIC0g
LTJeMzEgKiAtMQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMx
IC0gLTJeMzEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAwCisgICAg
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2QoTiwgRCkKKyAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IFN1YihOLCBNdWwoRGl2KE4sIEQpLCBEKSkKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzcGVlZC11cCBiZWNhdXNlIHdlIHVzZSBvdXIg
ZXhpc3RpbmcgRGl2IG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAvLyBIZXJlJ3MgYW4gZWFzaWVyIHdheSB0byBsb29rIGF0IGl0OgorICAgICAgICAg
ICAgICAgIC8vICAgICBOICUgRCA9IE4gLSBOIC8gRCAqIEQKKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHdvcmsgZm9yIEQgPSAw
IGFuZCBDaGlsbE1vZC4gVGhlIGV4cGVjdGVkIHJlc3VsdCBpcyAwLgorICAgICAgICAgICAgICAg
IC8vIFRoYXQncyB3aHkgd2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSBhYm92ZS4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgWCAlIDAgPSBYIC0gWCAvIDAgKiAwID0gWCAgICAgKHNob3VsZCBiZSAwKQor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gVGhpcyBkb2VzIHdvcmsgZm9y
IHRoZSBEID0gLTEgc3BlY2lhbCBjYXNlLgorICAgICAgICAgICAgICAgIC8vICAgICAtMl4zMSAl
IC0xID0gLTJeMzEgLSAtMl4zMSAvIC0xICogLTEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICA9IC0yXjMxIC0gLTJeMzEgKiAtMQorICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgICAgID0gLTJeMzEgLSAtMl4zMQorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAg
ID0gMAorICAgICAgICAgICAgICAgIEtpbmQgZGl2S2luZCA9IERpdjsKKyAgICAgICAgICAgICAg
ICBkaXZLaW5kLnNldElzQ2hpbGwobV92YWx1ZS0+aXNDaGlsbCgpKTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogZGl2ID0gdHJ5UmVkdWNpbmcoZGl2S2luZCwgY2hpbGQwLCBjaGlsZDEpOworICAg
ICAgICAgICAgICAgIFZhbHVlKiBtdWwgPSB0cnlSZWR1Y2luZyhNdWwsIGRpdiwgY2hpbGQxKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoU3ViLCBjaGlsZDAsIG11bCk7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgS2luZCBkaXZLaW5kID0gRGl2Owot
ICAgICAgICAgICAgICAgICAgICBkaXZLaW5kLnNldElzQ2hpbGwobV92YWx1ZS0+aXNDaGlsbCgp
KTsKLQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4LCBTdWIsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIE11bCwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4o
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBkaXZLaW5kLCBt
X3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpKSkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
VU1vZDoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVU1vZChjb25zdGFudDEsIGNvbnN0YW50
MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIC8gY29uc3RhbnQyCi0gICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT51TW9kQ29uc3Rh
bnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2
YWx1ZSA9IGNoaWxkMC0+dU1vZENvbnN0YW50KG1fcHJvYywgY2hpbGQxKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CisKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8g
d2hhdCB3ZSBkbyBmb3IgTW9kIHNpbmNlIHRoZSBzYW1lIHByaW5jaXBsZSBhcHBsaWVzIGhlcmUu
CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY0ODA5CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFNobDoKKyAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU2hsKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudDEgPDwgY29uc3RhbnQyCisgICAgICAgICAgICBpZiAoVmFs
dWUqIGNvbnN0YW50ID0gY2hpbGQwLT5zaGxDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworCisgICAgICAgICAgICBpZiAoVmFsdWUqIHZh
bHVlID0gdHJ5UmVkdWNpbmdTaGlmdChraW5kLCBjaGlsZDAsIGNoaWxkMSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFNTaHI6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoY29uc3RhbnQxLCBjb25zdGFu
dDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSA+PiBjb25zdGFudDIKKyAg
ICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPnNTaHJDb25zdGFudChtX3By
b2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworCisgICAgICAg
ICAgICBpZiAoY2hpbGQxLT5oYXNJbnQzMigpCisgICAgICAgICAgICAgICAgJiYgY2hpbGQwLT5v
cGNvZGUoKSA9PSBTaGwKKyAgICAgICAgICAgICAgICAmJiBjaGlsZDAtPmNoaWxkKDEpLT5oYXNJ
bnQzMigpCisgICAgICAgICAgICAgICAgJiYgY2hpbGQxLT5hc0ludDMyKCkgPT0gY2hpbGQwLT5j
aGlsZCgxKS0+YXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZDEtPmFz
SW50MzIoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZDAtPnR5cGUoKSA9PSBJbnQzMikgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMTYpLCAxNikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRyeVJlZHVjaW5nKFNFeHQxNiwgY2hpbGQwLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIDI0OgorICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT50eXBlKCkgPT0g
SW50MzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwo
dmFsdWUsIDI0KSwgMjQpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNF
eHQ4KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKFNF
eHQ4LCBjaGlsZDAtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGlsZDAtPnR5cGUoKSA9PSBJbnQ2NCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDMyKFRydW5jKHZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiB0cnVuYyA9IHRyeVJlZHVjaW5nKFRydW5jLCBjaGls
ZDAtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2lu
ZyhTRXh0MzIsIHRydW5jKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIGNhc2VzIGZv
ciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxkIHRyYW5zbGF0ZSB0byBTRXh0MzIoU0V4dDgpIG9y
CisgICAgICAgICAgICAgICAgICAgIC8vIFNFeHQzMihTRXh0MTYpLCB3aGljaCB3ZSBkb24ndCBj
dXJyZW50bHkgbG93ZXIgZWZmaWNpZW50bHkuCisKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ1NoaWZ0KGtp
bmQsIGNoaWxkMCwgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWlNocjoKKyAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogWlNocihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8g
dGhpczogKHVuc2lnbmVkKWNvbnN0YW50MSA+PiBjb25zdGFudDIKKyAgICAgICAgICAgIGlmIChW
YWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPnpTaHJDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoVmFsdWUqIHZhbHVlID0gdHJ5UmVkdWNpbmdTaGlmdChraW5kLCBjaGlsZDAsIGNoaWxk
MSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIFJvdFI6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFJvdFIoY29u
c3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IChjb25zdGFudDEg
Pj4gY29uc3RhbnQyKSB8IChjb25zdGFudDEgPDwgc2l6ZW9mKGNvbnN0YW50MSkgKiA4IC0gY29u
c3RhbnQyKQorICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkMC0+cm90UkNv
bnN0YW50KG1fcHJvYywgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7
CisKKyAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ1NoaWZ0KGtpbmQs
IGNoaWxkMCwgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUm90TDoKKyAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogUm90TChjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8gdGhp
czogKGNvbnN0YW50MSA8PCBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA+PiBzaXplb2YoY29uc3Rh
bnQxKSAqIDggLSBjb25zdGFudDIpCisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0g
Y2hpbGQwLT5yb3RMQ29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjb25zdGFudDsKKworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IHRyeVJlZHVj
aW5nU2hpZnQoa2luZCwgY2hpbGQwLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBYnM6CisgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEFicyhjb25zdGFudCkKKyAgICAgICAgICAgIC8vIEludG8gdGhp
czogZmFiczx2YWx1ZS0+dHlwZSgpPihjb25zdGFudCkKKyAgICAgICAgICAgIGlmIChWYWx1ZSog
Y29uc3RhbnQgPSBjaGlsZDAtPmFic0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvbnN0YW50OworCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhBYnModmFs
dWUpKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBYnModmFsdWUpCisgICAgICAgICAgICBp
ZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBBYnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxk
MDsKKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBYnMoTmVnKHZhbHVlKSkKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQWJzKHZhbHVlKQorICAgICAgICAgICAgaWYgKGNoaWxkMC0+b3Bj
b2RlKCkgPT0gTmVnKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhBYnMsIGNo
aWxkMC0+Y2hpbGQoMCkpOworCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhCaXR3aXNl
Q2FzdCh2YWx1ZSkpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0KEFuZCh2
YWx1ZSwgbWFzay10b3AtYml0KSkKKyAgICAgICAgICAgIGlmIChjaGlsZDAtPm9wY29kZSgpID09
IEJpdHdpc2VDYXN0KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1hc2s7CisgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkMC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAg
bWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1faW5kZXgsIG1fdmFs
dWUtPm9yaWdpbigpLCB+KDFsbCA8PCA2MykpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+
KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsIDw8IDMxKSk7CisKKyAgICAgICAgICAg
ICAgICBWYWx1ZSogYml0QW5kID0gdHJ5UmVkdWNpbmcoQml0QW5kLCBjaGlsZDAtPmNoaWxkKDAp
LCBtYXNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQml0d2lzZUNhc3Qs
IGJpdEFuZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgQ2VpbDoKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQ2VpbChjb25zdGFudCkKKyAg
ICAgICAgICAgIC8vIEludG8gdGhpczogY2VpbDx2YWx1ZS0+dHlwZSgpPihjb25zdGFudCkKKyAg
ICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPmNlaWxDb25zdGFudChtX3By
b2MpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudDsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKKyAgICAgICAgICAgIC8v
IEludG8gdGhpczogcm91bmRlZFZhbHVlCisgICAgICAgICAgICBpZiAoY2hpbGQwLT5pc1JvdW5k
ZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwOworCisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEZsb29yOgorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBGbG9v
cihjb25zdGFudCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogZmxvb3I8dmFsdWUtPnR5cGUo
KT4oY29uc3RhbnQpCisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQwLT5m
bG9vckNvbnN0YW50KG1fcHJvYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50Owor
CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEZsb29yKHJvdW5kZWRWYWx1ZSkKKyAgICAgICAg
ICAgIC8vIEludG8gdGhpczogcm91bmRlZFZhbHVlCisgICAgICAgICAgICBpZiAoY2hpbGQwLT5p
c1JvdW5kZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwOworCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFNxcnQ6CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IFNxcnQoY29uc3RhbnQpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHNxcnQ8dmFsdWUtPnR5
cGUoKT4oY29uc3RhbnQpCisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQw
LT5zcXJ0Q29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7
CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnaXZlVXApCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGNoaWxkMSA9PSBudWxscHRyKQorICAgICAgICAgICAg
cmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwga2luZCwgbV92YWx1
ZS0+b3JpZ2luKCksIGNoaWxkMCk7CisgICAgICAgIGlmIChjaGlsZDIgPT0gbnVsbHB0cikKKyAg
ICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIGtp
bmQsIG1fdmFsdWUtPm9yaWdpbigpLCBjaGlsZDAsIGNoaWxkMSk7CisgICAgICAgIHJldHVybiBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIGtpbmQsIG1fdmFsdWUtPm9yaWdp
bigpLCBjaGlsZDAsIGNoaWxkMSwgY2hpbGQyKTsKKyAgICB9CisKKyAgICAvLyBXZSBjYW5vbmlj
YWxpemUgY29tbXV0YXRpdmUgb3BlcmF0aW9ucyBpbiB0aHJlZSB3YXlzOgorICAgIC8vIC0gQXRv
bWljU3Ryb25nQ0FTIGZpcnN0IChpbXBvcnRhbnQgZm9yIHNvbWUgcGF0dGVybnMgdG8gYmUgcmVj
b2duaXplZCBieSBMb3dlclRvQWlyKQorICAgIC8vIC0gQ29uc3RhbnRzIGxhc3QgKG1ha2VzIGl0
IGVhc2llciB0byBlbGltaW5hdGUgdGhlbSkKKyAgICAvLyAtIE90aGVyIG9wZXJhbmRzIHNvcnRl
ZCBieSB0aGVpciBpbmRleCAod2UgdXNlIHRoZSBpbmRleCBvdmVyIHRoZSBhZGRyZXNzIHRvIG1h
a2UgdGhpcyBhdCBsZWFzdCBzbGlnaHRseSBkZXRlcm1pbmlzdGljKQorICAgIFZhbHVlKiB0cnlS
ZWR1Y2luZ0NvbW11dGF0aXZpdHkoS2luZCBraW5kLCBWYWx1ZSogY2hpbGQwLCBWYWx1ZSogY2hp
bGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNoaWxkMCAhPSBudWxscHRyKTsKKyAgICAgICAg
QVNTRVJUKGNoaWxkMSAhPSBudWxscHRyKTsKKworICAgICAgICBpZiAoY2hpbGQxLT5pc0NvbnN0
YW50KCkgfHwgY2hpbGQwLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoY2hpbGQwLT5pc0NvbnN0YW50KCkgfHwg
Y2hpbGQxLT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMgfHwgY2hpbGQwLT5pbmRleCgpID4g
Y2hpbGQxLT5pbmRleCgpKQorICAgICAgICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKGtpbmQsIGNo
aWxkMSwgY2hpbGQwKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIFZhbHVlKiB0cnlSZWR1Y2luZ1NoaWZ0KEtpbmQga2luZCwgVmFsdWUqIGNoaWxkMCwg
VmFsdWUqIGNoaWxkMSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjaGlsZDAgIT0gbnVsbHB0cik7
CisgICAgICAgIEFTU0VSVChjaGlsZDEgIT0gbnVsbHB0cik7CisKKyAgICAgICAgLy8gU2hpZnQg
YW55dGhpbmcgYnkgemVybyBpcyBpZGVudGl0eS4KKyAgICAgICAgaWYgKGNoaWxkMS0+aXNJbnQz
MigwKSkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CisKKyAgICAgICAgLy8gVGhlIHNoaWZ0
IGFscmVhZHkgbWFza3MgaXRzIHNoaWZ0IGFtb3VudC4gSWYgdGhlIHNoaWZ0IGFtb3VudCBpcyBi
ZWluZyBtYXNrZWQgYnkgYQorICAgICAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0aGVuIHJlbW92
ZSB0aGUgbWFzay4gRm9yIGV4YW1wbGUsCisgICAgICAgIC8vIFR1cm4gdGhpczogU2hsKEB4LCBC
aXRBbmQoQHksIDYzKSkKKyAgICAgICAgLy8gSW50byB0aGlzOiBTaGwoQHgsIEB5KQorICAgICAg
ICB1bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZShjaGlsZDAtPnR5cGUoKSkgKiA4IC0gMTsKKyAg
ICAgICAgaWYgKGNoaWxkMS0+b3Bjb2RlKCkgPT0gQml0QW5kICYmIGNoaWxkMS0+Y2hpbGQoMSkt
Pmhhc0ludDMyKCkgJiYgKGNoaWxkMS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIG1hc2spID09IG1h
c2spCisgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgY2hpbGQwLCBjaGlsZDEt
PmNoaWxkKDApKTsKKworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IHJlZHVjZVZhbHVlU3RyZW5ndGgoKQorICAgIHsKKyAgICAgICAgVmFsdWUqIHJlZHVjZWRWYWx1
ZSA9IG51bGxwdHI7CisgICAgICAgIHN3aXRjaChtX3ZhbHVlLT5udW1DaGlsZHJlbigpKSB7Cisg
ICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVk
dWNpbmcobV92YWx1ZS0+a2luZCgpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbnVsbHB0ciwgbnVsbHB0
ciwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVkdWNpbmcobV92YWx1ZS0+a2luZCgp
LCBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSksIG51bGxwdHIsIHRydWUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAg
ICAgIHJlZHVjZWRWYWx1ZSA9IHRyeVJlZHVjaW5nKG1fdmFsdWUtPmtpbmQoKSwgbV92YWx1ZS0+
Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgyKSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZWR1Y2VkVmFsdWUpIHsKKyAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkocmVkdWNlZFZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsK
ICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7
CiAKQEAgLTExMTksMTkxICsxMjM4LDggQEAKIAogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgY2FzZSBTaGw6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNobChjb25zdGFudDEsIGNv
bnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIDw8IGNvbnN0YW50
MgotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5z
aGxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAg
IHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQorICAgICAgICAKIAotICAgICAgICAgICAgaGFuZGxlU2hpZnRBbW91bnQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1NocjoKLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU1Nocihjb25zdGFudDEsIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8v
IEludG8gdGhpczogY29uc3RhbnQxID4+IGNvbnN0YW50MgotICAgICAgICAgICAgaWYgKFZhbHVl
KiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5zU2hyQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAgICAgICAgICAg
JiYgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNobAotICAgICAgICAgICAgICAgICYm
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgPT0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpLT5hc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNo
aWxkKDEpLT5hc0ludDMyKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE2OgotICAgICAgICAg
ICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZhbHVlLCAxNiksIDE2KQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0MTYodmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTRXh0MTYsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVl
LT50eXBlKCkgPT0gSW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogU1NocihTaGwodmFsdWUsIDI0KSwgMjQpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IFNFeHQ4KHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVl
PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0V4dDgsIG1fdmFsdWUtPm9yaWdp
bigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgMzI6
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDMyKSwg
MzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQzMihUcnVuYyh2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgVHJ1bmMsIG1fdmFsdWUt
Pm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBjYXNlcyBm
b3IgNDggYW5kIDU2LCBidXQgdGhhdCB3b3VsZCB0cmFuc2xhdGUgdG8gU0V4dDMyKFNFeHQ4KSBv
cgotICAgICAgICAgICAgICAgIC8vIFNFeHQzMihTRXh0MTYpLCB3aGljaCB3ZSBkb24ndCBjdXJy
ZW50bHkgbG93ZXIgZWZmaWNpZW50bHkuCi0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+b3Bjb2RlKCkgIT0gU1NocikKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpTaHI6Ci0gICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IFpTaHIoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6ICh1bnNpZ25lZCljb25zdGFudDEgPj4gY29uc3RhbnQyCi0gICAgICAgICAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnpTaHJDb25zdGFudChtX3By
b2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3
VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBSb3RSOgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBSb3RSKGNvbnN0
YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiAoY29uc3RhbnQxID4+
IGNvbnN0YW50MikgfCAoY29uc3RhbnQxIDw8IHNpemVvZihjb25zdGFudDEpICogOCAtIGNvbnN0
YW50MikKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgw
KS0+cm90UkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFJvdEw6Ci0gICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IFJvdEwoY29uc3RhbnQxLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IChjb25zdGFudDEgPDwgY29uc3RhbnQyKSB8IChjb25zdGFudDEgPj4gc2l6ZW9mKGNv
bnN0YW50MSkgKiA4IC0gY29uc3RhbnQyKQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5yb3RMQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGls
ZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaGFu
ZGxlU2hpZnRBbW91bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQWJz
OgotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBYnMoY29uc3RhbnQpCi0gICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IGZhYnM8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmFic0NvbnN0YW50KG1fcHJv
YykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBBYnMoQWJzKHZhbHVlKSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQWJzKHZh
bHVlKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBYnMp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDAp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWJzKE5lZyh2YWx1ZSkpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IEFicyh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVu
dGl0eShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFicyhCaXR3aXNl
Q2FzdCh2YWx1ZSkpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdHdpc2VDYXN0KEFuZCh2
YWx1ZSwgbWFzay10b3AtYml0KSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gQml0d2lzZUNhc3QpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogbWFzazsK
LSAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IERvdWJsZSkKLSAgICAgICAg
ICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KG1f
aW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsbCA8PCA2MykpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxD
b25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCB+KDFsIDw8IDMxKSk7Ci0K
LSAgICAgICAgICAgICAgICBWYWx1ZSogYml0QW5kID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPihtX2luZGV4LCBCaXRBbmQsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAgIG1h
c2spOwotICAgICAgICAgICAgICAgIFZhbHVlKiBjYXN0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPihtX2luZGV4LCBCaXR3aXNlQ2FzdCwgbV92YWx1ZS0+b3JpZ2luKCksIGJpdEFuZCk7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShjYXN0KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgQ2VpbDoKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQ2VpbChjb25zdGFudCkKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogY2VpbDx2YWx1ZS0+dHlwZSgpPihjb25zdGFudCkKLSAg
ICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2VpbENv
bnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKHJvdW5kZWRWYWx1ZSkKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogcm91bmRlZFZhbHVlCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkt
PmlzUm91bmRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEZsb29yOgotICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBGbG9vcihjb25zdGFudCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogZmxv
b3I8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmZsb29yQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEZsb29y
KHJvdW5kZWRWYWx1ZSkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogcm91bmRlZFZhbHVlCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzUm91bmRlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBjYXNlIFNxcnQ6Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNxcnQoY29uc3RhbnQp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHNxcnQ8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQp
Ci0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnNx
cnRDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1
ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlIEJpdHdpc2VDYXN0OgogICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXR3aXNlQ2FzdChjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogYml0d2lzZV9jYXN0PHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQpAQCAtMjMyMywyNyAr
MjI1OSw2IEBACiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBo
YW5kbGVTaGlmdEFtb3VudCgpCi0gICAgewotICAgICAgICAvLyBTaGlmdCBhbnl0aGluZyBieSB6
ZXJvIGlzIGlkZW50aXR5LgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIo
MCkpIHsKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIHNoaWZ0
IGFscmVhZHkgbWFza3MgaXRzIHNoaWZ0IGFtb3VudC4gSWYgdGhlIHNoaWZ0IGFtb3VudCBpcyBi
ZWluZyBtYXNrZWQgYnkgYQotICAgICAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0aGVuIHJlbW92
ZSB0aGUgbWFzay4gRm9yIGV4YW1wbGUsCi0gICAgICAgIC8vIFR1cm4gdGhpczogU2hsKEB4LCBC
aXRBbmQoQHksIDYzKSkKLSAgICAgICAgLy8gSW50byB0aGlzOiBTaGwoQHgsIEB5KQotICAgICAg
ICB1bnNpZ25lZCBtYXNrID0gc2l6ZW9mVHlwZShtX3ZhbHVlLT50eXBlKCkpICogOCAtIDE7Ci0g
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0QW5kCi0gICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAg
ICAgICYmIChtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIG1hc2spID09
IG1hc2spIHsKLSAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV92YWx1ZS0+Y2hpbGQo
MSktPmNoaWxkKDApOwotICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQogICAgIHZvaWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7CiAgICAgICAgIG1f
Y2hhbmdlZCB8PSBtX3B1cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3JzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyNDExMjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4
NCw3ICszOTg0LDcgQEAKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBuZWcgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFicywgT3JpZ2luKCksCisgICAgVmFsdWUqIG5lZyA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgTmVnLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjAp
KTsKICAgICBWYWx1ZSogYWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYnMsIE9y
aWdpbigpLCBuZWcpOwogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCBhYnMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361480</attachid>
            <date>2019-02-07 18:01:47 -0800</date>
            <delta_ts>2019-02-07 18:01:47 -0800</delta_ts>
            <desc>WIP_More</desc>
            <filename>WIP_More</filename>
            <type>text/plain</type>
            <size>84251</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxMTY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE5LTAyLTA3ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgRml4IEFicyhOZWcoeCkpIC0+IEFicyh4KSBvcHRpbWl6YXRpb24gaW4gQjNSZWR1Y2VT
dHJlbmd0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk0NDIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDI1MCwgSSBhZGRl
ZCBhbiBvcHRpbWl6YXRpb246IEFicyhOZWcoeCkpIC0+IEFicyh4KS4KKyAgICAgICAgQnV0IEkg
aW50cm9kdWNlZCB0d28gYnVncywgb25lIGlzIHRoYXQgSSBhY3R1YWxseSBpbXBsZW1lbnRlZCBB
YnMoTmVnKHgpKSAtPiB4LCBhbmQgdGhlIG90aGVyIGlzIHRoYXQgdGhlIHRlc3QgaXMgbG9va2lu
ZyBhdCBBYnMoQWJzKHgpKSBpbnN0ZWFkIChib3RoIHdlcmUgc3R1cGlkIGNvcHktcGFzdGUgbWlz
dGFrZXMpLgorICAgICAgICBUaGlzIHRyaXZpYWwgcGF0Y2ggZml4ZXMgYm90aC4KKworICAgICAg
ICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0QWJzTmVnQXJnKToKKwogMjAxOS0wMi0wNyAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG1vcmUgZG9lc0dDKCkgZm9yIENo
ZWNrVHJhcHMsIEdldE1hcEJ1Y2tldCwgYW5kIFN3aXRjaCBub2Rlcy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDI0MTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDg4ICs0ODQsMjIgQEAKICAgICB9CiAgICAgCiBwcml2YXRlOgot
ICAgIHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aCgpCisgICAgLy8gSWYgZ2l2ZVVwIGlzIHRydWUg
YW5kIHRoaXMgZnVuY3Rpb24gY2Fubm90IGZpbmQgYSBjbGV2ZXIgd2F5IG9mIHByb2R1Y2luZyB0
aGUgcmVxdWVzdGVkIHZhbHVlLCBpdCByZXR1cm5zIG51bGxwdHIKKyAgICBWYWx1ZSogdHJ5UmVk
dWNpbmcoS2luZCBraW5kLCBWYWx1ZSogY2hpbGQwID0gbnVsbHB0ciwgVmFsdWUqIGNoaWxkMSA9
IG51bGxwdHIsIFZhbHVlKiBjaGlsZDIgPSBudWxscHRyLCBib29sIGdpdmVVcCA9IGZhbHNlKQog
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICBzd2l0
Y2goa2luZC5vcGNvZGUoKSkgewogICAgICAgICBjYXNlIE9wYXF1ZToKICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogT3BhcXVlKE9wYXF1ZSh2YWx1ZSkpCiAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IE9wYXF1ZSh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gT3BhcXVlKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eSht
X3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBPcGFxdWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkMDsKKwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
KwogICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUo
KSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAgICAgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQxICsgY29uc3RhbnQyKQot
ICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YWRkQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAgICAgICAgICAg
ICAgIGlmIChuZXdTdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOwotICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQo
QWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCi0gICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCi0gICAgICAgICAg
ICAgICAgaWYgKCFtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBWYWx1ZSogdmFs
dWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKLSAgICAgICAgICAg
ICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBjcmVhdGUgZHVwbGljYXRlIGNvZGUgaWYgQWRkKHZh
bHVlLCBjb25zdGFudCkgaXMgdXNlZCBlbHNld2hlcmUuCi0gICAgICAgICAgICAgICAgICAgIC8v
IEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5nIGEgY29uc3RhbnQgYXMgaWYgaXQgd2Fz
IGZyZWUgaW4gb3RoZXIgcGxhY2VzCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIGxldCdzIGp1
c3Qgcm9sbCB3aXRoIGl0LiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgbWVhbiBoYXZpbmcgdG8gZG8g
Z29vZCB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gY291bnRzLCB3aGljaCByZWR1Y2VTdHJl
bmd0aCgpIGN1cnJlbnRseSBkb2Vzbid0IGhhdmUuCi0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDApID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90aGVyVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OwotICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQWRkKG90aGVyVmFsdWUsIEFkZCh2YWx1ZSwgY29uc3RhbnQpKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkKLSAgICAgICAgICAgICAgICAmJiAhbV92YWx1
ZS0+Y2hpbGQoMCktPmhhc0ludCgpCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQo
MSktPm9wY29kZSgpID09IEFkZAotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgIFZhbHVl
KiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyBjcmVhdGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdzIGRhbmdlcm91cyBidXQgcHJvYmFibHkg
ZmluZSwgc2VlIGFib3ZlLgotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KLSAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBv
dGhlclZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQWRkKGNvbnN0YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBj
b25zdGFudDEgKyBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRBZGQg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50QWRkKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChW
YWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ0NvbW11dGF0aXZpdHkoa2luZCwgY2hpbGQwLCBjaGls
ZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKIAotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwgdmFsdWUpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFNobCh2YWx1ZSwgMSkKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25p
Y2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCi0g
ICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCkg
PT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKAotICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1
ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEpKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKHZhbHVl
LCB6ZXJvKQogICAgICAgICAgICAgLy8gSW50byBhbiBJZGVudGl0eS4KICAgICAgICAgICAgIC8v
CkBAIC01NzQsMTY2ICs1MDgsMTU3IEBACiAgICAgICAgICAgICAvLyAgICAwICsgLTAgPSAwCiAg
ICAgICAgICAgICAvLyAgICAtMCArIDAgPSAwCiAgICAgICAgICAgICAvLyAgICAtMCArIC0wID0g
LTAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkgfHwgbV92YWx1
ZS0+Y2hpbGQoMSktPmlzTmVnYXRpdmVaZXJvKCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChjaGlsZDEtPmlzSW50KDApIHx8IGNoaWxkMS0+aXNOZWdhdGl2ZVpl
cm8oKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgewotICAgICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKLSAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKLSAgICAgICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IE5lZykgewotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oU3ViLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgwKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoY29u
c3RhbnQxLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAr
IGNvbnN0YW50MgorICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+YWRkQ29u
c3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKwor
ICAgICAgICAgICAgaWYgKGNoaWxkMC0+aXNJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBBZGQgJiYgY2hpbGQwLT5jaGlsZCgxKS0+aGFzSW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25z
dGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRk
KHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiBuZXdTdW0gPSBjaGlsZDEtPmFkZENvbnN0YW50KG1fcHJvYywgY2hpbGQwLT5jaGlsZCgxKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ5UmVkdWNpbmcoQWRkLCBjaGlsZDAtPmNoaWxkKDApLCBuZXdTdW0pOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQo
QWRkKHZhbHVlLCBjb25zdGFudCksIG90aGVyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQorICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPmNoaWxkKDEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVyVmFsdWUgPSBjaGlsZDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBsaWNhdGUgY29kZSBpZiBB
ZGQodmFsdWUsIGNvbnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgbW9kZWwgYWRkaW5nIGEgY29uc3RhbnQgYXMg
aWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIgcGxhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBzbyBsZXQncyBqdXN0IHJvbGwgd2l0aCBpdC4gVGhlIGFsdGVybmF0aXZlIHdvdWxkIG1lYW4g
aGF2aW5nIHRvIGRvIGdvb2QgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHMs
IHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkgY3VycmVudGx5IGRvZXNuJ3QgaGF2ZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGQgPSB0cnlSZWR1Y2luZyhBZGQsIHZhbHVlLCBv
dGhlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhB
ZGQsIG5ld0FkZCwgY29uc3RhbnQpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZChOZWco
dmFsdWUpLCBvdGhlclZhbHVlKQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogU3ViKG90
aGVyVmFsdWUsIHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
b3Bjb2RlKCkgPT0gTmVnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZh
bHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQob3RoZXJWYWx1ZSwgQWRkKHZhbHVlLCBjb25zdGFu
dCkpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRkKHZhbHVlLCBvdGhlclZh
bHVlKSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMS0+b3Bjb2RlKCkgPT0g
QWRkICYmIGNoaWxkMS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiB2YWx1ZSA9IGNoaWxkMS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBjb25zdGFudCA9IGNoaWxkMS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBvdGhlclZhbHVlID0gY2hpbGQwOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNy
ZWF0ZXMgYSBkdXBsaWNhdGUgYWRkLiBUaGF0J3MgZGFuZ2Vyb3VzIGJ1dCBwcm9iYWJseSBmaW5l
LCBzZWUgYWJvdmUuCisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdBZGQgPSB0cnlSZWR1
Y2luZyhBZGQsIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRyeVJlZHVjaW5nKEFkZCwgbmV3QWRkLCBjb25zdGFudCk7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZChTdWIoMCwgdmFsdWUp
LCAtMSkKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwgdmFsdWUpCisg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEpCisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHVzZWZ1bCBjYW5vbmljYWxpemF0aW9uLiBJdCdzIG5vdCBtZWFudCB0
byBiZSBhIHN0cmVuZ3RoIHJlZHVjdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwID09
IGNoaWxkMSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3QxID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDEp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoU2hsLCBjaGlsZDAsIGNv
bnN0MSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQxLT5v
cGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhT
dWIsIGNoaWxkMCwgY2hpbGQxLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoTmVnKHZhbHVlKSwgb3RoZXJWYWx1ZSkKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihvdGhlclZhbHVlLCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBOZWcpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnlSZWR1Y2luZyhTdWIsIGNoaWxkMSwgY2hpbGQwLT5jaGlsZCgwKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoU3ViKDAsIHZh
bHVlKSwgLTEpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IodmFsdWUsIC0x
KQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU3Vi
Ci0gICAgICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgtMSkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLT5pc0ludCgw
KSkgewotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oQml0WG9yLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLCBtX3ZhbHVlLT5j
aGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBTdWIgJiYgY2hpbGQxLT5p
c0ludCgtMSkgJiYgY2hpbGQwLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnlSZWR1Y2luZyhCaXRYb3IsIGNoaWxkMC0+Y2hpbGQoMSksIGNoaWxkMSk7
CiAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwot
CisgICAgICAgIAogICAgICAgICBjYXNlIFN1YjoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
U3ViKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25z
dGFudDEgLSBjb25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRTdWIgPSBt
X3ZhbHVlLT5jaGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50U3ViKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChWYWx1
ZSogY29uc3RhbnRTdWIgPSBjaGlsZDAtPnN1YkNvbnN0YW50KG1fcHJvYywgY2hpbGQxKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRTdWI7CiAKLSAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5pc0ludGVnZXIoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkMC0+aXNJbnRlZ2VyKCkp
IHsKICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFN1Yih2YWx1ZSwgY29uc3RhbnQpCiAg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIC1jb25zdGFudCkKLSAgICAg
ICAgICAgICAgICBpZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEp
LT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5lZ2F0ZWRDb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIEFk
ZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZWdhdGVkQ29uc3RhbnQp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBj
aGlsZDEtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnlSZWR1Y2luZyhBZGQsIGNoaWxkMCwgbmVnYXRlZENvbnN0YW50KTsKKwogICAgICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU3ViKDAsIHZhbHVlKQogICAgICAgICAgICAgICAgIC8vIEludG8g
dGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KE5l
ZywgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaGls
ZDAtPmlzSW50KDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoTmVn
LCBjaGlsZDEpOwogCiAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTdWIodmFsdWUsIHZh
bHVlKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVl
LCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQwID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCAwKTsKIAogICAgICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogU3ViKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCiAgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIG90aGVyVmFsdWUpCi0gICAgICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIG1f
dmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCkpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGNoaWxkMS0+b3Bjb2RlKCkgPT0gTmVnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5
UmVkdWNpbmcoQWRkLCBjaGlsZDAsIGNoaWxkMS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGNhc2UgTmVnOgog
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOZWcoY29uc3RhbnQpCiAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IC1jb25zdGFudAotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1f
dmFsdWUtPmNoaWxkKDApLT5uZWdDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3Rh
bnQgPSBjaGlsZDAtPm5lZ0NvbnN0YW50KG1fcHJvYykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnN0YW50OworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5lZyhOZWcodmFsdWUpKQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBOZWcpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0
aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjaGls
ZDAtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwLT5jaGls
ZCgwKTsKKwogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIE5lZyhTdWIodmFsdWUs
IG90aGVyVmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIob3RoZXJWYWx1ZSwg
dmFsdWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkgJiYgbV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IFN1YikgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPihTdWIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpbGQwLT5pc0ludGVnZXIoKSAm
JiBjaGlsZDAtPm9wY29kZSgpID09IFN1YikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVk
dWNpbmcoU3ViLCBjaGlsZDAtPmNoaWxkKDEpLCBjaGlsZDAtPmNoaWxkKDApKTsKIAogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAgICAgICBoYW5kbGVDb21t
dXRhdGl2aXR5KCk7CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gdHJ5UmVkdWNpbmdD
b21tdXRhdGl2aXR5KGtpbmQsIGNoaWxkMCwgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWU7CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKGNvbnN0YW50MSwgY29u
c3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKiBjb25zdGFudDIK
LSAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+bXVsQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChjaGlsZDEtPmhhc0ludCgpKSB7CisgICAgICAgICAgICAg
ICAgaW50NjRfdCBmYWN0b3IgPSBjaGlsZDEtPmFzSW50KCk7CiAKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90IGZh
Y3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOwotCiAgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBNdWwodmFsdWUsIDApCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiAw
CiAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGRvIHRoaXMgZm9yIGRvdWJs
ZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBleGFtcGxlLCAtMSAqIDAKICAgICAgICAgICAg
ICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVyZW50IHJlc3VsdHMuCi0gICAgICAgICAgICAg
ICAgaWYgKCFmYWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkMTsKIAogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVs
KHZhbHVlLCAxKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWUKLSAgICAgICAg
ICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdp
dGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAKICAgICAgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IE11bCh2YWx1ZSwgLTEpCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBT
dWIoMCwgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAtMSkgewotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ViLCBt
X3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLCAwKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBOZWcodmFsdWUpCisgICAgICAgICAgICAgICAgaWYgKGZhY3Rv
ciA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKE5lZywgY2hp
bGQwKTsKKwogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFu
dCkKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9nMihjb25zdGFu
dCkpCiAgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9nMihzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oZmFjdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIHNoaWZ0QW1vdW50KSkpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHNoaWZ0Q29uc3RhbnQgPSBt
X2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmln
aW4oKSwgc2hpZnRBbW91bnQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNp
bmcoU2hsLCBjaGlsZDAsIHNoaWZ0Q29uc3RhbnQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0RvdWJsZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgZG91YmxlIGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0RvdWJsZSgp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZDEtPmhhc0RvdWJsZSgpICYmIGNoaWxkMS0+
YXNEb3VibGUoKSA9PSAxLjApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAK
LSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKLSAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hp
bGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRGl2OgpA
QCAtNzQyLDMxICs2NjcsMjUgQEAKICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHVzZXMg
RGl2PENoaWxsPiBzZW1hbnRpY3MuIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZSBydWxlcyBmb3Ig
RGl2CiAgICAgICAgICAgICAvLyBhcmUgc3RyaWN0bHkgd2Vha2VyOiBpdCBoYXMgY29ybmVyIGNh
c2VzIHdoZXJlIGl0J3MgYWxsb3dlZCB0byBkbyBhbnl0aGluZyBpdAogICAgICAgICAgICAgLy8g
bGlrZXMuCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGls
ZCgwKS0+ZGl2Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+ZGl2
Q29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsK
IAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCkpIHsKKyAgICAgICAg
ICAgIGlmIChjaGlsZDEtPmhhc0ludCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjaGls
ZDEtPmFzSW50KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIC0xOgogICAgICAgICAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IERpdih2YWx1ZSwgLTEpCiAgICAgICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogTmVnKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oTmVnLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKE5lZywg
Y2hpbGQwKTsKICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogRGl2KHZhbHVlLCAwKQogICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IDAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHRoaXMgYmVjYXVzZSBpdCdz
IHByZWNpc2VseSBjb3JyZWN0IGZvciBDaGlsbERpdiBhbmQgZm9yIERpdiB3ZQogICAgICAgICAg
ICAgICAgICAgICAvLyBhcmUgYWxsb3dlZCB0byBkbyB3aGF0ZXZlciB3ZSB3YW50LgotICAgICAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNo
aWxkMTsKICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogRGl2KHZhbHVlLCAxKQogICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+
Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkMDsKIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFBlcmZvcm0gc3VwZXIgY29tcHJlaGVuc2l2ZSBzdHJlbmd0aCByZWR1Y3Rp
b24gb2YgZGl2aXNpb24uIEN1cnJlbnRseSB3ZQpAQCAtNzc0LDg2ICs2OTMsNjggQEAKICAgICAg
ICAgICAgICAgICAgICAgLy8gb3BlcmF0aW9uLiBXZSBlbXVsYXRlIGl0IHVzaW5nIDY0LWJpdCBt
dWx0aXBseS4gV2UgY2FuJ3QgZW11bGF0ZSA2NC1iaXQKICAgICAgICAgICAgICAgICAgICAgLy8g
aGlnaCBtdWx0aXBseSB3aXRoIGEgMTI4LWJpdCBtdWx0aXBseSBiZWNhdXNlIHdlIGRvbid0IGhh
dmUgYSAxMjgtYml0CiAgICAgICAgICAgICAgICAgICAgIC8vIG11bHRpcGx5LiBXZSBjb3VsZCBk
byBpdCB3aXRoIGEgcGF0Y2hwb2ludCBpZiB3ZSBjYXJlZCBiYWRseSBlbm91Z2guCi0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSAhPSBJbnQzMikKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkMC0+dHlwZSgpICE9IEludDMyKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9wcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0gbV92YWx1ZS0+Y2hpbGQo
MSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgZGl2aXNvciA9IGNoaWxkMS0+YXNJbnQzMigpOwogICAgICAgICAgICAgICAgICAg
ICBEaXZpc2lvbk1hZ2ljPGludDMyX3Q+IG1hZ2ljID0gY29tcHV0ZURpdmlzaW9uTWFnaWMoZGl2
aXNvcik7Ci0KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFBl
cmZvcm0gdGhlICJoaWdoIiBtdWx0aXBsaWNhdGlvbi4gV2UgZG8gaXQganVzdCB0byBnZXQgdGhl
IGhpZ2ggYml0cy4KICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0IG9mIGxpa2Ug
bXVsdGlwbHlpbmcgYnkgdGhlIHJlY2lwcm9jYWwsIGp1c3QgbW9yZSBnbmFybHkuIEl0J3MKICAg
ICAgICAgICAgICAgICAgICAgLy8gZnJvbSBIYWNrZXIncyBEZWxpZ2h0IGFuZCBJIGRvbid0IGNs
YWltIHRvIHVuZGVyc3RhbmQgaXQuCi0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYWdpY1F1
b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleCwgWlNociwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgTXVsLCBtX3ZhbHVlLT5vcmlnaW4oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFNFeHQz
MiwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmln
aW4oKSwgbWFnaWMubWFnaWNNdWx0aXBsaWVyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAzMikpKTsKKyAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIHNleHQzMkNoaWxkMCA9IHRyeVJlZHVjaW5nKFNFeHQzMiwg
Y2hpbGQwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0TWFnaWNNdWx0aXBsaWVy
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1hZ2ljLm1hZ2ljTXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBwcm9kdWN0ID0gdHJ5UmVkdWNpbmcoTXVsLCBzZXh0MzJDaGlsZDAsIGNvbnN0TWFnaWNN
dWx0aXBsaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0MzIgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwg
MzIpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogc2hpZnQgPSB0cnlSZWR1Y2luZyhaU2hy
LCBwcm9kdWN0LCBjb25zdDMyKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1hZ2ljUXVv
dGllbnQgPSB0cnlSZWR1Y2luZyhUcnVuYywgc2hpZnQpOwogCi0gICAgICAgICAgICAgICAgICAg
IGlmIChkaXZpc29yID4gMCAmJiBtYWdpYy5tYWdpY011bHRpcGxpZXIgPCAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtYWdpY1F1b3RpZW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUt
Pm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LCBtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGRpdmlzb3IgPCAwICYmIG1hZ2lj
Lm1hZ2ljTXVsdGlwbGllciA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVv
dGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXgsIFN1YiwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2ljUXVvdGllbnQs
IG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiAoZGl2aXNvciA+IDAgJiYgbWFnaWMubWFnaWNNdWx0aXBsaWVyIDwgMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSB0cnlSZWR1Y2luZyhBZGQsIG1h
Z2ljUXVvdGllbnQsIGNoaWxkMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlz
b3IgPCAwICYmIG1hZ2ljLm1hZ2ljTXVsdGlwbGllciA+IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICBtYWdpY1F1b3RpZW50ID0gdHJ5UmVkdWNpbmcoU3ViLCBtYWdpY1F1b3RpZW50LCBjaGls
ZDApOworCiAgICAgICAgICAgICAgICAgICAgIGlmIChtYWdpYy5zaGlmdCA+IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFNTaHIsIG1fdmFs
dWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFnaWMuc2hpZnQpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtYWdpY1NoaWZ0ID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hZ2lj
LnNoaWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljUXVvdGllbnQgPSB0cnlSZWR1
Y2luZyhTU2hyLCBtYWdpY1F1b3RpZW50LCBtYWdpY1NoaWZ0KTsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1
b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFpTaHIs
IG1fdmFsdWUtPm9yaWdpbigpLCBtYWdpY1F1b3RpZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAz
MSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBjb25zdDMxID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9p
bmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIDMxKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUq
IHNoaWZ0ZWRNYWdpY1F1b3RpZW50ID0gdHJ5UmVkdWNpbmcoWlNociwgbWFnaWNRdW90aWVudCwg
Y29uc3QzMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhBZGQsIG1h
Z2ljUXVvdGllbnQsIHNoaWZ0ZWRNYWdpY1F1b3RpZW50KTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgVURpdjoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdihj
b25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQx
IC8gY29uc3RhbnQyCi0gICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVl
LT5jaGlsZCgwKS0+dURpdkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBjaGls
ZDAtPnVEaXZDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOwogCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewot
ICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBVRGl2KHZhbHVlLCAwKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGRvIHdoYXRldmVyIHdlIHdhbnQgaGVyZSBzbyB3
ZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGlsbCB0aGluZywKLSAgICAgICAgICAgICAgICAgICAg
Ly8gaW4gY2FzZSB3ZSBhZGQgY2hpbGwgdmVyc2lvbnMgb2YgVURpdiBpbiB0aGUgZnV0dXJlLgot
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVURpdih2YWx1ZSwgMSkKLSAgICAg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0cmVuZ3RoIHJlZHVjdGlvbiBm
b3IgdW5zaWduZWQgbnVtYmVycy4gTGlrZWx5LAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3
aWxsIGp1c3Qgd2FudCBjb3B5IHdoYXQgbGx2bSBkb2VzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODA5Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKGNoaWxkMS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGNoaWxkMS0+YXNJbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUsIDApCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGNhbiBkbyB3aGF0ZXZlciB3ZSB3YW50IGhlcmUgc28gd2UgbWlnaHQgYXMgd2VsbCBkbyB0
aGUgY2hpbGwgdGhpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGFk
ZCBjaGlsbCB2ZXJzaW9ucyBvZiBVRGl2IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2hpbGQxOworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFVEaXYodmFsdWUsIDEpCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2hpbGQwOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBjb21wcmVoZW5zaXZlIHN0
cmVuZ3RoIHJlZHVjdGlvbiBmb3IgdW5zaWduZWQgbnVtYmVycy4gTGlrZWx5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBqdXN0IHdhbnQgY29weSB3aGF0IGxsdm0gZG9lcy4g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIE1vZDoKQEAgLTg2MCw1NjIgKzc2
MSwzMDIgQEAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTW9kKGNvbnN0YW50MSwgY29uc3Rh
bnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgLyBjb25zdGFudDIKICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHVzZXMgTW9kPENoaWxsPiBzZW1hbnRpY3MuCi0g
ICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+bW9k
Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IGNoaWxkMC0+bW9kQ29uc3RhbnQo
bV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKIAogICAgICAg
ICAgICAgLy8gTW9kdWxvIGJ5IGNvbnN0YW50IGlzIG1vcmUgZWZmaWNpZW50IGlmIHdlIHR1cm4g
aXQgaW50byBEaXYsIGFuZCB0aGVuIGxldCBEaXYgZ2V0CiAgICAgICAgICAgICAvLyBvcHRpbWl6
ZWQuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNb2Qo
dmFsdWUsIDApCi0gICAgICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogMAotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGNvcnJlY3QgYWNjb3JkaW5nIHRvIENoaWxsTW9kIHNlbWFu
dGljcy4KLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5j
aGlsZCgxKSk7CisgICAgICAgICAgICBpZiAoY2hpbGQxLT5oYXNJbnQoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogTW9kKHZhbHVlLCAwKQorICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogMAorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgY29ycmVjdCBhY2NvcmRpbmcg
dG8gQ2hpbGxNb2Qgc2VtYW50aWNzLgorICAgICAgICAgICAgICAgIGlmICghY2hpbGQxLT5hc0lu
dCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQxOworCisgICAgICAgICAgICAg
ICAgaWYgKG1fcHJvYy5vcHRMZXZlbCgpIDwgMikKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBpZiAobV9w
cm9jLm9wdExldmVsKCkgPCAyKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE1vZChO
LCBEKQotICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFN1YihOLCBNdWwoRGl2KE4s
IEQpLCBEKSkKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIHNwZWVkLXVwIGJlY2F1c2Ugd2UgdXNlIG91ciBleGlzdGluZyBEaXYgb3B0aW1p
emF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8g
SGVyZSdzIGFuIGVhc2llciB3YXkgdG8gbG9vayBhdCBpdDoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIE4gJSBEID0gTiAtIE4gLyBEICogRAotICAgICAgICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIGZvciBEID0g
MCBhbmQgQ2hpbGxNb2QuIFRoZSBleHBlY3RlZCByZXN1bHQgaXMgMC4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGhhdCdzIHdoeSB3ZSBoYXZlIGEgc3BlY2lhbC1jYXNlIGFib3ZlLgotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgWCAlIDAgPSBYIC0gWCAvIDAgKiAwID0gWCAgICAgKHNob3Vs
ZCBiZSAwKQotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGRvZXMgd29yayBmb3IgdGhlIEQgPSAtMSBzcGVjaWFsIGNhc2UuCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAtMl4zMSAlIC0xID0gLTJeMzEgLSAtMl4zMSAvIC0xICogLTEKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMxICogLTEKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4zMSAtIC0yXjMxCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgID0gMAorICAgICAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogTW9kKE4sIEQpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTdWIo
TiwgTXVsKERpdihOLCBEKSwgRCkpCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgc3BlZWQtdXAgYmVjYXVzZSB3ZSB1c2Ugb3VyIGV4aXN0aW5nIERpdiBv
cHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gSGVy
ZSdzIGFuIGVhc2llciB3YXkgdG8gbG9vayBhdCBpdDoKKyAgICAgICAgICAgICAgICAvLyAgICAg
TiAlIEQgPSBOIC0gTiAvIEQgKiBECisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB3b3JrIGZvciBEID0gMCBhbmQgQ2hpbGxNb2Qu
IFRoZSBleHBlY3RlZCByZXN1bHQgaXMgMC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgd2h5
IHdlIGhhdmUgYSBzcGVjaWFsLWNhc2UgYWJvdmUuCisgICAgICAgICAgICAgICAgLy8gICAgIFgg
JSAwID0gWCAtIFggLyAwICogMCA9IFggICAgIChzaG91bGQgYmUgMCkKKyAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgIC8vIFRoaXMgZG9lcyB3b3JrIGZvciB0aGUgRCA9IC0xIHNw
ZWNpYWwgY2FzZS4KKyAgICAgICAgICAgICAgICAvLyAgICAgLTJeMzEgJSAtMSA9IC0yXjMxIC0g
LTJeMzEgLyAtMSAqIC0xCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgPSAtMl4z
MSAtIC0yXjMxICogLTEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IC0yXjMx
IC0gLTJeMzEKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICA9IDAKKyAgICAgICAg
ICAgICAgICBLaW5kIGRpdktpbmQgPSBEaXY7CisgICAgICAgICAgICAgICAgZGl2S2luZC5zZXRJ
c0NoaWxsKG1fdmFsdWUtPmlzQ2hpbGwoKSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGRpdiA9
IHRyeVJlZHVjaW5nKGRpdktpbmQsIGNoaWxkMCwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICBW
YWx1ZSogbXVsID0gdHJ5UmVkdWNpbmcoTXVsLCBkaXYsIGNoaWxkMSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRyeVJlZHVjaW5nKFN1YiwgY2hpbGQwLCBtdWwpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgICAgIEtpbmQgZGl2S2luZCA9IERpdjsKLSAgICAgICAgICAgICAg
ICAgICAgZGl2S2luZC5zZXRJc0NoaWxsKG1fdmFsdWUtPmlzQ2hpbGwoKSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleCwgU3ViLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBNdWwsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgZGl2S2luZCwgbV92YWx1ZS0+b3JpZ2lu
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSwgbV92YWx1ZS0+Y2hpbGQoMSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLT5jaGlsZCgxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFVNb2Q6CiAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IFVNb2QoY29uc3RhbnQxLCBjb25zdGFudDIpCiAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAvIGNvbnN0YW50MgotICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+dU1vZENvbnN0YW50KG1fcHJvYywgbV92
YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBjaGlsZDAt
PnVNb2RDb25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworCiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIHdoYXQgd2UgZG8gZm9y
IE1vZCBzaW5jZSB0aGUgc2FtZSBwcmluY2lwbGUgYXBwbGllcyBoZXJlLgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDgwOQogICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgICAgICBoYW5kbGVD
b21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKGNvbnN0
YW50MSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgJiBj
b25zdGFudDIKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRCaXRBbmQgPSBtX3ZhbHVl
LT5jaGlsZCgwKS0+Yml0QW5kQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsK
LSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50Qml0QW5kKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBCaXRBbmQoQml0QW5kKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQy
KS4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5k
KSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MSktPmJpdEFuZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsK
LSAgICAgICAgICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFu
dDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKHZh
bHVlWCwgdmFsdWVYKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZVguCi0gICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBCaXRBbmQodmFsdWUsIHplcm8tY29uc3RhbnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IHplcm8tY29uc3RhbnQuCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlz
SW50KDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5j
aGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKHZhbHVlLCBhbGwtb25lcykKLSAgICAgICAgICAg
IC8vIEludG8gdGhpczogdmFsdWUuCi0gICAgICAgICAgICBpZiAoKG1fdmFsdWUtPnR5cGUoKSA9
PSBJbnQ2NCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZmZmZmZmZmZmKSkK
LSAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IEludDMyICYmIG1fdmFsdWUt
PmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmKSkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoNjQtYml0
IHZhbHVlLCAzMiBvbmVzKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBaRXh0MzIoVHJ1bmMo
NjQtYml0IHZhbHVlKSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQ2
NCgweGZmZmZmZmZmbGx1KSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdWYWx1ZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXgs
IFpFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgVHJ1bmMsIG1fdmFsdWUtPm9yaWdpbigpLCBt
X3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHko
bmV3VmFsdWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0OCh2YWx1ZSksIG1hc2spIHdoZXJlICht
YXNrICYgMHhmZmZmZmYwMCkgPT0gMAotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQo
dmFsdWUsIG1hc2spCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IFNFeHQ4ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAgICAgICAg
ICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpICYgMHhmZmZmZmYwMCkpIHsKLSAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgwKTsKLSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChTRXh0MTYodmFsdWUpLCBtYXNrKSB3
aGVyZSAobWFzayAmIDB4ZmZmZjAwMDApID09IDAKLSAgICAgICAgICAgIC8vIEludG8gdGhpczog
Qml0QW5kKHZhbHVlLCBtYXNrKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBTRXh0MTYgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAg
ICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCkgJiAweGZmZmYwMDAw
KSkgewotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKFNFeHQzMih2YWx1ZSks
IG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmZmZmZjAwMDAwMDAwKSA9PSAwCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IEJpdEFuZChaRXh0MzIodmFsdWUpLCBtYXNrKQotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MzIgJiYgbV92YWx1ZS0+Y2hp
bGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDEp
LT5hc0ludDMyKCkgJiAweGZmZmZmZmZmMDAwMDAwMDBsbHUpKSB7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBaRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLAotICAgICAg
ICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKSk7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoT3AodmFsdWUsIGNv
bnN0YW50MSksIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50
MSAmIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vICAgICAgIGFuZCBPcCBpcyBCaXRPciBvciBC
aXRYb3IKLSAgICAgICAgICAgIC8vIGludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFudDIp
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaW50NjRfdCBjb25zdGFudDIgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQoKTsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkgewot
ICAgICAgICAgICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhh
c0ludCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKS0+YXNJbnQoKSAmIGNvbnN0YW50MikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7
Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IoY29uc3RhbnQxLCBjb25zdGFudDIp
Ci0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSB8IGNvbnN0YW50MgotICAgICAg
ICAgICAgaWYgKFZhbHVlKiBjb25zdGFudEJpdE9yID0gbV92YWx1ZS0+Y2hpbGQoMCktPmJpdE9y
Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50Qml0T3IpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKEJpdE9y
KHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEJpdE9yKHZhbHVlLCBjb25zdGFudDEgJiBjb25zdGFudDIpLgotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRPcikgewotICAgICAgICAgICAgICAgIFZh
bHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRPckNvbnN0YW50KG1fcHJv
YywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3
Q29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFs
dWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5j
aGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IodmFsdWVYLCB2YWx1ZVgpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHZhbHVlWC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgw
KSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRl
bnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVlLCB6ZXJvLWNv
bnN0YW50KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZS4KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZSwg
YWxsLW9uZXMpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGFsbC1vbmVzLgotICAgICAgICAg
ICAgaWYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlz
SW50KDB4ZmZmZmZmZmZmZmZmZmZmZikpCi0gICAgICAgICAgICAgICAgfHwgKG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZmZmZmZikpKSB7
Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRp
dml0eSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihjb25zdGFudDEsIGNv
bnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxIF4gY29uc3RhbnQy
Ci0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0WG9yID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmJpdFhvckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudEJpdFhvcik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Qml0WG9yKEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBCaXRYb3IodmFsdWUsIGNvbnN0YW50MSBeIGNvbnN0YW50MikuCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcikgewotICAg
ICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRY
b3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29uc3RhbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcihjb21wYXJlLCAx
KQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBpbnZlcnRlZENvbXBhcmUKLSAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkgewotICAgICAgICAgICAgICAgIGlm
IChWYWx1ZSogaW52ZXJ0ZWRDb21wYXJlID0gbV92YWx1ZS0+Y2hpbGQoMCktPmludmVydGVkQ29t
cGFyZShtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUo
aW52ZXJ0ZWRDb21wYXJlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhv
cih2YWx1ZVgsIHZhbHVlWCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogemVyby1jb25zdGFu
dC4KLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgx
KSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENv
bnN0YW50KG1fdmFsdWUsIDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IodmFsdWUsIHplcm8tY29uc3Rh
bnQpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlLgotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
SWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLQogICAgICAgICBjYXNlIFNobDoKICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogU2hsKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPDwgY29uc3RhbnQyCi0gICAgICAgICAgICBp
ZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnNobENvbnN0YW50KG1fcHJv
YywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdW
YWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQwLT5zaGxDb25zdGFudChtX3By
b2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50OwogCi0gICAgICAg
ICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9
IHRyeVJlZHVjaW5nU2hpZnQoa2luZCwgY2hpbGQwLCBjaGlsZDEpKQorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKKwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTU2hy
OgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTU2hyKGNvbnN0YW50MSwgY29uc3RhbnQyKQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgPj4gY29uc3RhbnQyCi0gICAgICAg
ICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPnNTaHJDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkMC0+c1NockNvbnN0
YW50KG1fcHJvYywgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7CiAK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQotICAgICAgICAg
ICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTaGwKLSAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAg
ICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpID09IG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3Zh
bHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQxLT5oYXNJ
bnQzMigpCisgICAgICAgICAgICAgICAgJiYgY2hpbGQwLT5vcGNvZGUoKSA9PSBTaGwKKyAgICAg
ICAgICAgICAgICAmJiBjaGlsZDAtPmNoaWxkKDEpLT5oYXNJbnQzMigpCisgICAgICAgICAgICAg
ICAgJiYgY2hpbGQxLT5hc0ludDMyKCkgPT0gY2hpbGQwLT5jaGlsZCgxKS0+YXNJbnQzMigpKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZDEtPmFzSW50MzIoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50MzIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkMC0+dHlwZSgpID09IElu
dDMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNTaHIoU2hsKHZh
bHVlLCAxNiksIDE2KQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0
MTYodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTRXh0MTYsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnlSZWR1Y2luZyhTRXh0MTYsIGNoaWxkMC0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSAy
NDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT50eXBlKCkgPT0gSW50MzIpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU1NocihTaGwodmFsdWUsIDI0KSwgMjQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNFeHQ4KHZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU0V4dDgsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhTRXh0
OCwgY2hpbGQwLT5jaGlsZCgwKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIDMyOgotICAgICAgICAgICAg
ICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDY0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaGlsZDAtPnR5cGUoKSA9PSBJbnQ2NCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBTU2hyKFNobCh2YWx1ZSwgMzIpLCAzMikKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEludG8gdGhpczogU0V4dDMyKFRydW5jKHZhbHVlKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNFeHQzMiwgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBUcnVuYywgbV92YWx1ZS0+b3JpZ2luKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogdHJ1bmMgPSB0cnlSZWR1Y2luZyhU
cnVuYywgY2hpbGQwLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ5UmVkdWNpbmcoU0V4dDMyLCB0cnVuYyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIGNh
c2VzIGZvciA0OCBhbmQgNTYsIGJ1dCB0aGF0IHdvdWxkIHRyYW5zbGF0ZSB0byBTRXh0MzIoU0V4
dDgpIG9yCi0gICAgICAgICAgICAgICAgLy8gU0V4dDMyKFNFeHQxNiksIHdoaWNoIHdlIGRvbid0
IGN1cnJlbnRseSBsb3dlciBlZmZpY2llbnRseS4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEFkZCBjYXNlcyBmb3IgNDggYW5kIDU2LCBidXQgdGhhdCB3b3VsZCB0cmFuc2xhdGUgdG8g
U0V4dDMyKFNFeHQ4KSBvcgorICAgICAgICAgICAgICAgICAgICAvLyBTRXh0MzIoU0V4dDE2KSwg
d2hpY2ggd2UgZG9uJ3QgY3VycmVudGx5IGxvd2VyIGVmZmljaWVudGx5LgogCiAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPm9wY29kZSgpICE9IFNTaHIpCi0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBo
YW5kbGVTaGlmdEFtb3VudCgpOworICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IHRyeVJl
ZHVjaW5nU2hpZnQoa2luZCwgY2hpbGQwLCBjaGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVy
biB2YWx1ZTsKKwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBaU2hyOgogICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBaU2hyKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiAodW5zaWduZWQpY29uc3RhbnQxID4+IGNvbnN0YW50MgotICAg
ICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT56U2hyQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPnpTaHJD
b25zdGFudChtX3Byb2MsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gdHJ5UmVkdWNp
bmdTaGlmdChraW5kLCBjaGlsZDAsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwogCi0gICAgICAgICAgICBoYW5kbGVTaGlmdEFtb3VudCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBSb3RSOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBSb3RS
KGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiAoY29uc3Rh
bnQxID4+IGNvbnN0YW50MikgfCAoY29uc3RhbnQxIDw8IHNpemVvZihjb25zdGFudDEpICogOCAt
IGNvbnN0YW50MikKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+cm90UkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50
ID0gY2hpbGQwLT5yb3RSQ29uc3RhbnQobV9wcm9jLCBjaGlsZDEpKQorICAgICAgICAgICAgICAg
IHJldHVybiBjb25zdGFudDsKIAotICAgICAgICAgICAgaGFuZGxlU2hpZnRBbW91bnQoKTsKKyAg
ICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ1NoaWZ0KGtpbmQsIGNoaWxk
MCwgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgUm90TDoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
Um90TChjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogKGNv
bnN0YW50MSA8PCBjb25zdGFudDIpIHwgKGNvbnN0YW50MSA+PiBzaXplb2YoY29uc3RhbnQxKSAq
IDggLSBjb25zdGFudDIpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1
ZS0+Y2hpbGQoMCktPnJvdExDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25z
dGFudCA9IGNoaWxkMC0+cm90TENvbnN0YW50KG1fcHJvYywgY2hpbGQxKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY29uc3RhbnQ7CiAKLSAgICAgICAgICAgIGhhbmRsZVNoaWZ0QW1vdW50KCk7
CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gdHJ5UmVkdWNpbmdTaGlmdChraW5kLCBj
aGlsZDAsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworCiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFiczoKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQWJzKGNvbnN0YW50KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBmYWJzPHZhbHVlLT50
eXBlKCk+KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFs
dWUtPmNoaWxkKDApLT5hYnNDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQwLT5hYnND
b25zdGFudChtX3Byb2MpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudDsKIAogICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBBYnMoQWJzKHZhbHVlKSkKICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogQWJzKHZhbHVlKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5v
cGNvZGUoKSA9PSBBYnMpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1f
dmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjaGlsZDAtPm9wY29kZSgpID09IEFi
cykKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwOworCiAgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEFicyhOZWcodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBYnModmFs
dWUpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE5lZykg
ewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChjaGlsZDAtPm9wY29kZSgpID09IE5lZykKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ5UmVkdWNpbmcoQWJzLCBjaGlsZDAtPmNoaWxkKDApKTsKIAogICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBBYnMoQml0d2lzZUNhc3QodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBCaXR3aXNlQ2FzdChBbmQodmFsdWUsIG1hc2stdG9wLWJpdCkpCi0gICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdHdpc2VDYXN0KSB7CisgICAgICAg
ICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBCaXR3aXNlQ2FzdCkgewogICAgICAgICAgICAg
ICAgIFZhbHVlKiBtYXNrOwotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgPT0g
RG91YmxlKQorICAgICAgICAgICAgICAgIGlmIChjaGlsZDAtPnR5cGUoKSA9PSBEb3VibGUpCiAg
ICAgICAgICAgICAgICAgICAgIG1hc2sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZh
bHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgfigxbGwgPDwgNjMpKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSBtX2luc2VydGlvblNldC5p
bnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgfigxbCA8PCAz
MSkpOwogCi0gICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4obV9pbmRleCwgQml0QW5kLCBtX3ZhbHVlLT5vcmlnaW4oKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLAotICAgICAgICAgICAgICAg
ICAgICBtYXNrKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSogY2FzdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgQml0d2lzZUNhc3QsIG1fdmFsdWUtPm9yaWdpbigpLCBi
aXRBbmQpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkoY2FzdCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgVmFsdWUqIGJpdEFuZCA9IHRyeVJl
ZHVjaW5nKEJpdEFuZCwgY2hpbGQwLT5jaGlsZCgwKSwgbWFzayk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRyeVJlZHVjaW5nKEJpdHdpc2VDYXN0LCBiaXRBbmQpOwogICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIENlaWw6CiAgICAgICAgICAgICAv
LyBUdXJuIHRoaXM6IENlaWwoY29uc3RhbnQpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNl
aWw8dmFsdWUtPnR5cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNlaWxDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQg
PSBjaGlsZDAtPmNlaWxDb25zdGFudChtX3Byb2MpKQorICAgICAgICAgICAgICAgIHJldHVybiBj
b25zdGFudDsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBDZWlsKHJv
dW5kZWRWYWx1ZSkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogcm91bmRlZFZhbHVlCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzUm91bmRlZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpbGQwLT5pc1Jv
dW5kZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQwOworCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIEZsb29yOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBG
bG9vcihjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogZmxvb3I8dmFsdWUtPnR5
cGUoKT4oY29uc3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmZsb29yQ29uc3RhbnQobV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJl
cGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IGNoaWxkMC0+Zmxv
b3JDb25zdGFudChtX3Byb2MpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudDsKIAog
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBGbG9vcihyb3VuZGVkVmFsdWUpCiAgICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IHJvdW5kZWRWYWx1ZQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5pc1JvdW5kZWQoKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGNoaWxkMC0+aXNSb3VuZGVkKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkMDsKKwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBT
cXJ0OgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTcXJ0KGNvbnN0YW50KQogICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBzcXJ0PHZhbHVlLT50eXBlKCk+KGNvbnN0YW50KQotICAgICAgICAg
ICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDApLT5zcXJ0Q29uc3RhbnQo
bV9wcm9jKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnQp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KFZhbHVlKiBjb25zdGFudCA9IGNoaWxkMC0+c3FydENvbnN0YW50KG1fcHJvYykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0YW50OworCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIEJpdHdpc2VDYXN0OgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXR3aXNlQ2Fz
dChjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogYml0d2lzZV9jYXN0PHZhbHVl
LT50eXBlKCk+KGNvbnN0YW50KQotICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudCA9IG1f
dmFsdWUtPmNoaWxkKDApLT5iaXR3aXNlQ2FzdENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBj
aGlsZDAtPmJpdHdpc2VDYXN0Q29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gY29uc3RhbnQ7CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0d2lzZUNhc3QoQml0
d2lzZUNhc3QodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2YWx1ZQotICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXR3aXNlQ2FzdCkgewot
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChjaGlsZDAtPm9wY29kZSgpID09IEJpdHdpc2VDYXN0KQorICAgICAgICAgICAgICAg
IHJldHVybiBjaGlsZDAtPmNoaWxkKDApOworCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBjYXNlIFNFeHQ4OgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChjb25zdGFudCkK
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogc3RhdGljX2Nhc3Q8aW50OF90Pihjb25zdGFudCkK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAg
ICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50OF90PihtX3ZhbHVlLT5j
aGlsZCgwKS0+YXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVl
KG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCByZXN1bHQpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChjaGlsZDAtPmhhc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDhfdD4oY2hpbGQwLT5hc0lu
dDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2MuYWRkPENvbnN0MzJWYWx1ZT4o
bV92YWx1ZS0+b3JpZ2luKCksIHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU0V4dDgoU0V4dDgodmFsdWUpKQogICAgICAgICAgICAgLy8gICBvciB0
aGlzOiBTRXh0OChTRXh0MTYodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0
OCh2YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
U0V4dDggfHwgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNikgewotICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDAp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBTRXh0OCB8fCBjaGlsZDAtPm9wY29kZSgp
ID09IFNFeHQxNikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgY2hp
bGQwLT5jaGlsZCgwKSk7CiAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gQml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIo
KSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgwKTsKLSAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChjaGlsZDAtPm9wY29kZSgpID09IEJpdEFuZCAmJiBjaGlsZDAtPmNoaWxkKDEpLT5oYXNJbnQz
MigpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gY2hpbGQwLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBjaGlsZDAtPmNoaWxkKDEpLT5hc0ludDMy
KCk7CisKICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQ4KEJpdEFuZChpbnB1dCwg
bWFzaykpIHdoZXJlIChtYXNrICYgMHhmZikgPT0gMHhmZgogICAgICAgICAgICAgICAgIC8vIElu
dG8gdGhpczogU0V4dDgoaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZikg
PT0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IGlucHV0
OwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKChtYXNrICYgMHhmZikgPT0gMHhmZikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRyeVJlZHVjaW5nKGtpbmQsIGlucHV0KTsKKwogICAgICAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogU0V4dDgoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwKSA9
PSAwCi0gICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQoaW5wdXQsIGNvbnN0ICYg
MHg3ZikKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwgbWFzayAm
IDB4N2YpCiAgICAgICAgICAgICAgICAgaWYgKCEobWFzayAmIDB4ODApKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBt
X3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRBbmQsIG1f
dmFsdWUtPm9yaWdpbigpLCBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdmKSkpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld01h
c2sgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVl
LT5vcmlnaW4oKSwgbWFzayAmIDB4N2YpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5
UmVkdWNpbmcoQml0QW5kLCBpbnB1dCwgbmV3TWFzayk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1
aXJrcygpKSB7CiAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0OChBdG9taWNYY2hn
X19fKQogICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQXRvbWljWGNoZ19fXwotICAgICAg
ICAgICAgICAgIGlmIChpc0F0b21pY1hjaGcobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKQot
ICAgICAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+YXM8QXRvbWljVmFsdWU+
KCktPmFjY2Vzc1dpZHRoKCkgPT0gV2lkdGg4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBpZiAoaXNBdG9taWNYY2hnKGNoaWxkMC0+b3Bjb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgICYmIGNoaWxkMC0+YXM8QXRvbWljVmFsdWU+KCktPmFjY2Vz
c1dpZHRoKCkgPT0gV2lkdGg4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIFNFeHQxNjoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDE2
KGNvbnN0YW50KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQxNl90
Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIo
KSkgewotICAgICAgICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50MTZf
dD4obV92YWx1ZS0+Y2hpbGQoMCktPmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgcmVwbGFj
ZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92YWx1ZSwgcmVzdWx0KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY2hpbGQwLT5oYXNJbnQzMigp
KSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQxNl90
PihjaGlsZDAtPmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvYy5hZGQ8
Q29uc3QzMlZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgcmVzdWx0KTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTRXh0MTYoU0V4dDE2KHZhbHVlKSkKICAgICAg
ICAgICAgIC8vIEludG8gdGhpczogU0V4dDE2KHZhbHVlKQotICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0MTYpIHsKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNo
aWxkMC0+b3Bjb2RlKCkgPT0gU0V4dDE2KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnlSZWR1
Y2luZyhraW5kLCBjaGlsZDAtPmNoaWxkKDApKTsKIAogICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBTRXh0MTYoU0V4dDgodmFsdWUpKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTRXh0OCh2
YWx1ZSkKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4
dDgpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxk
KDApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjaGlsZDAtPm9wY29kZSgpID09IFNFeHQ4KQorICAgICAgICAgICAgICAgIHJldHVybiBj
aGlsZDA7CiAKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0g
Qml0QW5kICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50MzIoKSkgewotICAg
ICAgICAgICAgICAgIFZhbHVlKiBpbnB1dCA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsK
LSAgICAgICAgICAgICAgICBpbnQzMl90IG1hc2sgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmFzSW50MzIoKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjaGlsZDAt
Pm9wY29kZSgpID09IEJpdEFuZCAmJiBjaGlsZDAtPmNoaWxkKDEpLT5oYXNJbnQzMigpKSB7Cisg
ICAgICAgICAgICAgICAgVmFsdWUqIGlucHV0ID0gY2hpbGQwLT5jaGlsZCgwKTsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IG1hc2sgPSBjaGlsZDAtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisKICAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNFeHQxNihCaXRBbmQoaW5wdXQsIG1hc2spKSB3
aGVyZSAobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmCiAgICAgICAgICAgICAgICAgLy8gSW50byB0
aGlzOiBTRXh0MTYoaW5wdXQpCi0gICAgICAgICAgICAgICAgaWYgKChtYXNrICYgMHhmZmZmKSA9
PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBpbnB1
dDsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmICgobWFzayAmIDB4ZmZmZikgPT0gMHhmZmZmKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgaW5wdXQpOworCiAgICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBTRXh0MTYoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAw
eDgwMDApID09IDAKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZChpbnB1dCwg
Y29uc3QgJiAweDdmZmYpCiAgICAgICAgICAgICAgICAgaWYgKCEobWFzayAmIDB4ODAwMCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYy5hZGQ8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJpdEFuZCwgbV92YWx1ZS0+b3JpZ2luKCksIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgbWFzayAmIDB4
N2ZmZikpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBuZXdNYXNrID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9p
bmRleCwgbV92YWx1ZS0+b3JpZ2luKCksIG1hc2sgJiAweDdmZmYpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQml0QW5kLCBpbnB1dCwgbmV3TWFzayk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xNDIyLDE3MyArMTA2Myw0NzkgQEAKICAg
ICAgICAgICAgIGlmICghbV9wcm9jLmhhc1F1aXJrcygpKSB7CiAgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBTRXh0MTYoQXRvbWljWGNoZ19fXykKICAgICAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEF0b21pY1hjaGdfX18KLSAgICAgICAgICAgICAgICBpZiAoaXNBdG9taWNYY2hnKG1f
dmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgbV92YWx1
ZS0+Y2hpbGQoMCktPmFzPEF0b21pY1ZhbHVlPigpLT5hY2Nlc3NXaWR0aCgpID09IFdpZHRoMTYp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGls
ZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChp
c0F0b21pY1hjaGcoY2hpbGQwLT5vcGNvZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgY2hp
bGQwLT5hczxBdG9taWNWYWx1ZT4oKS0+YWNjZXNzV2lkdGgoKSA9PSBXaWR0aDE2KSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNFeHQzMjoKICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogU0V4dDMyKGNvbnN0YW50KQogICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb25zdGFudCkKLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZEludENvbnN0YW50KG1fdmFsdWUsIG1fdmFsdWUtPmNo
aWxkKDApLT5hc0ludDMyKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChjaGlsZDAtPmhhc0ludDMyKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oY2hpbGQwLT5hc0ludDMyKCkpKTsKIAogICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBTRXh0MzIoQml0QW5kKGlucHV0LCBtYXNrKSkgd2hlcmUgKG1hc2sgJiAweDgwMDAw
MDAwKSA9PSAwCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFpFeHQzMihCaXRBbmQoaW5wdXQs
IG1hc2spKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBC
aXRBbmQgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5oYXNJbnQzMigpCi0gICAgICAg
ICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4
ODAwMDAwMDApKSB7Ci0gICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAg
ICBaRXh0MzIsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNoaWxkMC0+b3Bjb2RlKCkgPT0gQml0
QW5kICYmIGNoaWxkMC0+Y2hpbGQoMSktPmhhc0ludDMyKCkKKyAgICAgICAgICAgICAgICAmJiAh
KGNoaWxkMC0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ODAwMDAwMDApKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRyeVJlZHVjaW5nKFpFeHQzMiwgY2hpbGQwKTsKICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBaRXh0MzI6CiAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IFpFeHQzMihjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8gdGhp
czogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb25zdGFudCkp
Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludDMyKCkpIHsKLSAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBtX3By
b2MuYWRkSW50Q29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVp
bnQzMl90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQzMigpKSkpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGlmIChjaGlsZDAtPmhhc0ludDMyKCkpIHsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGNoaWxkMC0+YXNJbnQzMigpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihtX3ZhbHVlLT5vcmlnaW4oKSwgcmVzdWx0KTsKICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBUcnVuYzoK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoY29uc3RhbnQpCiAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IHN0YXRpY19jYXN0PGludDMyX3Q+KGNvbnN0YW50KQotICAgICAgICAgICAg
aWYgKG1fdmFsdWUtPmNoaWxkKDApLT5oYXNJbnQ2NCgpIHx8IG1fdmFsdWUtPmNoaWxkKDApLT5o
YXNEb3VibGUoKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAg
ICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRJbnRDb25zdGFudChtX3ZhbHVlLCBzdGF0aWNfY2Fz
dDxpbnQzMl90PihtX3ZhbHVlLT5jaGlsZCgwKS0+YXNJbnQ2NCgpKSkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoaWxkMC0+aGFzSW50
NjQoKSB8fCBjaGlsZDAtPmhhc0RvdWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3By
b2MuYWRkPENvbnN0MzJWYWx1ZT4obV92YWx1ZS0+b3JpZ2luKCksIHN0YXRpY19jYXN0PGludDMy
X3Q+KGNoaWxkMC0+YXNJbnQ2NCgpKSk7CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVHJ1
bmMoU0V4dDMyKHZhbHVlKSkgb3IgVHJ1bmMoWkV4dDMyKHZhbHVlKSkKICAgICAgICAgICAgIC8v
IEludG8gdGhpczogdmFsdWUKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bj
b2RlKCkgPT0gU0V4dDMyIHx8IG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBaRXh0MzIp
IHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoY2hpbGQwLT5vcGNvZGUoKSA9PSBTRXh0MzIgfHwgY2hpbGQwLT5vcGNvZGUo
KSA9PSBaRXh0MzIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMC0+Y2hpbGQoMCk7CiAK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogVHJ1bmMoT3AodmFsdWUsIGNvbnN0YW50KSkKICAg
ICAgICAgICAgIC8vICAgICB3aGVyZSAhKGNvbnN0YW50ICYgMHhmZmZmZmZmZikKICAgICAgICAg
ICAgIC8vICAgICAgIGFuZCBPcCBpcyBBZGQsIFN1YiwgQml0T3IsIG9yIEJpdFhvcgogICAgICAg
ICAgICAgLy8gaW50byB0aGlzOiBUcnVuYyh2YWx1ZSkKLSAgICAgICAgICAgIHN3aXRjaCAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFkZDoKLSAgICAg
ICAgICAgIGNhc2UgU3ViOgotICAgICAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAgIGNh
c2UgQml0WG9yOgotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmhhc0ludDY0KCkKLSAgICAgICAgICAgICAgICAgICAgJiYgIShtX3ZhbHVlLT5jaGlsZCgw
KS0+Y2hpbGQoMSktPmFzSW50NjQoKSAmIDB4ZmZmZmZmZmZsbCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBzd2l0Y2gg
KGNoaWxkMC0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFkZDoKKyAgICAgICAg
ICAgICAgICBjYXNlIFN1YjoKKyAgICAgICAgICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICAg
ICAgICAgIGNhc2UgQml0WG9yOgorICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQwLT5jaGls
ZCgxKS0+aGFzSW50NjQoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShjaGlsZDAtPmNo
aWxkKDEpLT5hc0ludDY0KCkgJiAweGZmZmZmZmZmbGwpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgY2hpbGQwLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgY2FzZSBJVG9EOgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJVG9EKGNvbnN0YW50
KQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBDb25zdERvdWJsZShjb25zdGFudCkKLSAgICAg
ICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aVRvRENvbnN0
YW50KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPmlUb0RDb25zdGFudChtX3Byb2MpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBjb25zdGFudDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgSVRvRjoKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSVRvRihjb25zdGFudCkK
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogQ29uc3RGbG9hdChjb25zdGFudCkKLSAgICAgICAg
ICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aVRvRkNvbnN0YW50
KG1fcHJvYykpIHsKLSAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChWYWx1ZSogY29uc3RhbnQgPSBjaGlsZDAtPmlUb0ZDb25zdGFudChtX3Byb2MpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBjb25zdGFudDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgRmxvYXRUb0RvdWJsZToKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRmxvYXRUb0Rv
dWJsZShjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogQ29uc3REb3VibGUoY29u
c3RhbnQpCi0gICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmZsb2F0VG9Eb3VibGVDb25zdGFudChtX3Byb2MpKSB7Ci0gICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZShjb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50ID0gY2hpbGQwLT5mbG9h
dFRvRG91YmxlQ29uc3RhbnQobV9wcm9jKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3Rh
bnQ7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIERvdWJsZVRvRmxvYXQ6CiAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IERvdWJsZVRvRmxvYXQoRmxvYXRUb0RvdWJsZSh2YWx1
ZSkpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCi0gICAgICAgICAgICBpZiAobV92
YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEZsb2F0VG9Eb3VibGUpIHsKLSAgICAgICAgICAg
ICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGlmIChj
aGlsZDAtPm9wY29kZSgpID09IEZsb2F0VG9Eb3VibGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGNoaWxkMC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogRG91YmxlVG9GbG9hdChjb25zdGFudCkKICAgICAgICAgICAgIC8vIEludG8gdGhpczogQ29u
c3RGbG9hdChjb25zdGFudCkKLSAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+ZG91YmxlVG9GbG9hdENvbnN0YW50KG1fcHJvYykpIHsKLSAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnQgPSBj
aGlsZDAtPmRvdWJsZVRvRmxvYXRDb25zdGFudChtX3Byb2MpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjb25zdGFudDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU2VsZWN0
OgogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTZWxlY3QoY29uc3RhbnQsIGEsIGIpCiAgICAg
ICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50ID8gYSA6IGIKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT5jaGlsZCgwKS0+aGFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHJlcGxhY2VX
aXRoSWRlbnRpdHkoCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5hc0lu
dDMyKCkgPyBtX3ZhbHVlLT5jaGlsZCgxKSA6IG1fdmFsdWUtPmNoaWxkKDIpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGlsZDAtPmhh
c0ludDMyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZDAtPmFzSW50MzIoKSA/IGNo
aWxkMSA6IGNoaWxkMik7CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogU2VsZWN0KEVxdWFs
KHgsIDApLCBhLCBiKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTZWxlY3QoeCwgYiwgYSkK
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gRXF1YWwgJiYg
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludCgwKSkgewotICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwotICAgICAg
ICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5jaGlsZCgxKSwgbV92YWx1ZS0+Y2hpbGQoMikp
OwotICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAoY2hp
bGQwLT5vcGNvZGUoKSA9PSBFcXVhbCAmJiBjaGlsZDAtPmNoaWxkKDEpLT5pc0ludCgwKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgY2hpbGQwLT5jaGlsZCgwKSwg
Y2hpbGQyLCBjaGlsZDEpOworCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVjdChCaXRY
b3IoYm9vbCwgMSksIGEsIGIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNlbGVjdChib29s
LCBiLCBhKQorICAgICAgICAgICAgaWYgKGNoaWxkMC0+b3Bjb2RlKCkgPT0gQml0WG9yICYmIGNo
aWxkMC0+Y2hpbGQoMSktPmlzSW50MzIoMSkgJiYgY2hpbGQwLT5jaGlsZCgwKS0+cmV0dXJuc0Jv
b2woKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgY2hpbGQwLT5j
aGlsZCgwKSwgY2hpbGQyLCBjaGlsZDEpOworCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNl
bGVjdChCaXRBbmQoYm9vbCwgeHl6MSksIGEsIGIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IFNlbGVjdChib29sLCBhLCBiKQorICAgICAgICAgICAgaWYgKGNoaWxkMC0+b3Bjb2RlKCkgPT0g
Qml0QW5kCisgICAgICAgICAgICAgICAgJiYgY2hpbGQwLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAg
ICAgICAgICAgICAgICAmJiBjaGlsZDAtPmNoaWxkKDEpLT5hc0ludCgpICYgMQorICAgICAgICAg
ICAgICAgICYmIGNoaWxkMC0+Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2luZCwgY2hpbGQwLT5jaGlsZCgwKSwgY2hpbGQxLCBj
aGlsZDIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNlbGVj
dChzdHVmZiwgeCwgeCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogeAorICAgICAgICAgICAg
aWYgKGNoaWxkMSA9PSBjaGlsZDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkMTsKKwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgIGlm
IChWYWx1ZSogdmFsdWUgPSB0cnlSZWR1Y2luZ0NvbW11dGF0aXZpdHkoa2luZCwgY2hpbGQwLCBj
aGlsZDEpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgICAgICAgICAgaWYg
KGNoaWxkMC0+cmV0dXJuc0Jvb2woKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
RXF1YWwoYm9vbCwgMCkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcihib29s
LCAxKQorICAgICAgICAgICAgICAgIGlmIChjaGlsZDEtPmlzSW50MzIoMCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIGNvbnN0MSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMy
VmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRyeVJlZHVjaW5nKEJpdFhvciwgY2hpbGQwLCBjb25zdDEpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpcyBFcXVhbChib29sLCAxKQor
ICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogYm9vbAorICAgICAgICAgICAgICAgIGlmIChj
aGlsZDEtPmlzSW50MzIoMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBj
b25zdDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSA9PSBjb25zdDIKKyAgICAg
ICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBtX3Byb2MuYWRkQm9vbENvbnN0YW50KG1fdmFsdWUt
Pm9yaWdpbigpLCBjaGlsZDAtPmVxdWFsQ29uc3RhbnQoY2hpbGQxKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5v
dEVxdWFsOgorICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1ZSA9IHRyeVJlZHVjaW5nQ29tbXV0
YXRpdml0eShraW5kLCBjaGlsZDAsIGNoaWxkMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOworCisgICAgICAgICAgICBpZiAoY2hpbGQwLT5yZXR1cm5zQm9vbCgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAwKQorICAgICAgICAgICAgICAg
IC8vIEludG8gdGhpczogYm9vbAorICAgICAgICAgICAgICAgIGlmIChjaGlsZDEtPmlzSW50MzIo
MCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDA7CisKKyAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGJvb2wsIDEpCisgICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBCaXRYb3IoYm9vbCwgMSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQxLT5pc0lu
dDMyKDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoQml0WG9yLCBj
aGlsZDAsIGNoaWxkMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogTm90RXF1YWwoY29uc3QxLCBjb25zdDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNv
bnN0MSAhPSBjb25zdDIKKyAgICAgICAgICAgIGlmIChWYWx1ZSogdmFsdWUgPSBtX3Byb2MuYWRk
Qm9vbENvbnN0YW50KG1fdmFsdWUtPm9yaWdpbigpLCBjaGlsZDAtPm5vdEVxdWFsQ29uc3RhbnQo
Y2hpbGQxKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
ICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gdHJ5UmVkdWNpbmdDb21tdXRhdGl2aXR5KGtpbmQs
IGNoaWxkMCwgY2hpbGQxKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoY29uc3QxLCBjb25zdDIpCisgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IGlzdW5vcmRlcmVkKGNvbnN0MSwgY29uc3QyKSB8fCBjb25zdDEgPT0gY29u
c3QyLgorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbCh2YWx1ZSwgY29uc3RfTmFOKQor
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAxLgorICAgICAgICAgICAgaWYgKFZhbHVlKiB2YWx1
ZSA9IG1fcHJvYy5hZGRCb29sQ29uc3RhbnQobV92YWx1ZS0+b3JpZ2luKCksIGNoaWxkMS0+ZXF1
YWxPclVub3JkZXJlZENvbnN0YW50KGNoaWxkMCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdpdmVVcCkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoY2hpbGQxID09IG51bGxwdHIpCisgICAgICAg
ICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBraW5kLCBt
X3ZhbHVlLT5vcmlnaW4oKSwgY2hpbGQwKTsKKyAgICAgICAgaWYgKGNoaWxkMiA9PSBudWxscHRy
KQorICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRl
eCwga2luZCwgbV92YWx1ZS0+b3JpZ2luKCksIGNoaWxkMCwgY2hpbGQxKTsKKyAgICAgICAgcmV0
dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwga2luZCwgbV92YWx1ZS0+
b3JpZ2luKCksIGNoaWxkMCwgY2hpbGQxLCBjaGlsZDIpOworICAgIH0KKworICAgIC8vIFdlIGNh
bm9uaWNhbGl6ZSBjb21tdXRhdGl2ZSBvcGVyYXRpb25zIGluIHRocmVlIHdheXM6CisgICAgLy8g
LSBBdG9taWNTdHJvbmdDQVMgZmlyc3QgKGltcG9ydGFudCBmb3Igc29tZSBwYXR0ZXJucyB0byBi
ZSByZWNvZ25pemVkIGJ5IExvd2VyVG9BaXIpCisgICAgLy8gLSBDb25zdGFudHMgbGFzdCAobWFr
ZXMgaXQgZWFzaWVyIHRvIGVsaW1pbmF0ZSB0aGVtKQorICAgIC8vIC0gT3RoZXIgb3BlcmFuZHMg
c29ydGVkIGJ5IHRoZWlyIGluZGV4ICh3ZSB1c2UgdGhlIGluZGV4IG92ZXIgdGhlIGFkZHJlc3Mg
dG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdodGx5IGRldGVybWluaXN0aWMpCisgICAgVmFsdWUq
IHRyeVJlZHVjaW5nQ29tbXV0YXRpdml0eShLaW5kIGtpbmQsIFZhbHVlKiBjaGlsZDAsIFZhbHVl
KiBjaGlsZDEpCisgICAgeworICAgICAgICBBU1NFUlQoY2hpbGQwICE9IG51bGxwdHIpOworICAg
ICAgICBBU1NFUlQoY2hpbGQxICE9IG51bGxwdHIpOworCisgICAgICAgIGlmIChjaGlsZDEtPmlz
Q29uc3RhbnQoKSB8fCBjaGlsZDAtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChjaGlsZDAtPmlzQ29uc3RhbnQo
KSB8fCBjaGlsZDEtPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUyB8fCBjaGlsZDAtPmluZGV4
KCkgPiBjaGlsZDEtPmluZGV4KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ5UmVkdWNpbmcoa2lu
ZCwgY2hpbGQxLCBjaGlsZDApOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgVmFsdWUqIHRyeVJlZHVjaW5nU2hpZnQoS2luZCBraW5kLCBWYWx1ZSogY2hp
bGQwLCBWYWx1ZSogY2hpbGQxKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNoaWxkMCAhPSBudWxs
cHRyKTsKKyAgICAgICAgQVNTRVJUKGNoaWxkMSAhPSBudWxscHRyKTsKKworICAgICAgICAvLyBT
aGlmdCBhbnl0aGluZyBieSB6ZXJvIGlzIGlkZW50aXR5LgorICAgICAgICBpZiAoY2hpbGQxLT5p
c0ludDMyKDApKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMDsKKworICAgICAgICAvLyBUaGUg
c2hpZnQgYWxyZWFkeSBtYXNrcyBpdHMgc2hpZnQgYW1vdW50LiBJZiB0aGUgc2hpZnQgYW1vdW50
IGlzIGJlaW5nIG1hc2tlZCBieSBhCisgICAgICAgIC8vIHJlZHVuZGFudCBhbW91bnQsIHRoZW4g
cmVtb3ZlIHRoZSBtYXNrLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgLy8gVHVybiB0aGlzOiBTaGwo
QHgsIEJpdEFuZChAeSwgNjMpKQorICAgICAgICAvLyBJbnRvIHRoaXM6IFNobChAeCwgQHkpCisg
ICAgICAgIHVuc2lnbmVkIG1hc2sgPSBzaXplb2ZUeXBlKGNoaWxkMC0+dHlwZSgpKSAqIDggLSAx
OworICAgICAgICBpZiAoY2hpbGQxLT5vcGNvZGUoKSA9PSBCaXRBbmQgJiYgY2hpbGQxLT5jaGls
ZCgxKS0+aGFzSW50MzIoKSAmJiAoY2hpbGQxLT5jaGlsZCgxKS0+YXNJbnQzMigpICYgbWFzaykg
PT0gbWFzaykKKyAgICAgICAgICAgIHJldHVybiB0cnlSZWR1Y2luZyhraW5kLCBjaGlsZDAsIGNo
aWxkMS0+Y2hpbGQoMCkpOworCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHZvaWQgcmVkdWNlVmFsdWVTdHJlbmd0aCgpCisgICAgeworICAgICAgICBWYWx1ZSogcmVkdWNl
ZFZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgc3dpdGNoKG1fdmFsdWUtPm51bUNoaWxkcmVuKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICByZWR1Y2VkVmFsdWUgPSB0
cnlSZWR1Y2luZyhtX3ZhbHVlLT5raW5kKCksIG1fdmFsdWUtPmNoaWxkKDApLCBudWxscHRyLCBu
dWxscHRyLCB0cnVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
MjoKKyAgICAgICAgICAgICAgICByZWR1Y2VkVmFsdWUgPSB0cnlSZWR1Y2luZyhtX3ZhbHVlLT5r
aW5kKCksIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSwgbnVsbHB0ciwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgcmVkdWNlZFZhbHVlID0gdHJ5UmVkdWNpbmcobV92YWx1ZS0+a2luZCgpLCBtX3Zh
bHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDIpLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZHVjZWRWYWx1ZSkgewor
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShyZWR1Y2VkVmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUo
KSkgeworICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZp
dHkoKTsKKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoY29uc3RhbnQxLCBjb25z
dGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSAmIGNvbnN0YW50Mgor
ICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudEJpdEFuZCA9IG1fdmFsdWUtPmNoaWxkKDAp
LT5iaXRBbmRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgeworICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRCaXRBbmQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IFNl
bGVjdChCaXRYb3IoYm9vbCwgMSksIGEsIGIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNl
bGVjdChib29sLCBiLCBhKQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBCaXRYb3IKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSktPmlzSW50MzIoMSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0
QW5kKEJpdEFuZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCisgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdEFuZCkgeworICAgICAg
ICAgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRBbmRD
b25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAgICAg
ICAgICAgaWYgKG5ld0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3Q29uc3RhbnQ7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZCh2YWx1ZVgsIHZhbHVl
WCkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogdmFsdWVYLgorICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAgICAg
cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5k
KHZhbHVlLCB6ZXJvLWNvbnN0YW50KQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNv
bnN0YW50LgorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgwKSkgewor
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEJpdEFuZCh2YWx1ZSwgYWxsLW9uZXMpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IHZhbHVlLgorICAgICAgICAgICAgaWYgKChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQgJiYg
bV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KDB4ZmZmZmZmZmZmZmZmZmZmZikpCisgICAgICAgICAg
ICAgICAgfHwgKG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+
aXNJbnQoMHhmZmZmZmZmZikpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKDY0LWJpdCB2YWx1ZSwgMzIg
b25lcykKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogWkV4dDMyKFRydW5jKDY0LWJpdCB2YWx1
ZSkpCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50NjQoMHhmZmZmZmZm
ZmxsdSkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbmV3VmFsdWUgPSBtX2luc2VydGlvblNl
dC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBaRXh0MzIsIG1f
dmFsdWUtPm9yaWdpbigpLAorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQ8VmFsdWU+KG1faW5kZXgsIFRydW5jLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hp
bGQoMCkpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG5ld1ZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoU0V4dDgodmFsdWUpLCBtYXNrKSB3aGVyZSAobWFzayAmIDB4ZmZm
ZmZmMDApID09IDAKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBtYXNr
KQorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBTRXh0OCAm
JiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQorICAgICAgICAgICAgICAgICYmICEobV92
YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZmZmMDApKSB7CiAgICAgICAgICAgICAg
ICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDEpLCBtX3ZhbHVlLT5jaGlsZCgy
KSk7CiAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBTZWxlY3Qo
Qml0QW5kKGJvb2wsIHh5ejEpLCBhLCBiKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTZWxl
Y3QoYm9vbCwgYSwgYikKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQml0QW5kCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKS0+YXNJbnQoKSAmIDEKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPnJldHVybnNCb29sKCkpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0
QW5kKFNFeHQxNih2YWx1ZSksIG1hc2spIHdoZXJlIChtYXNrICYgMHhmZmZmMDAwMCkgPT0gMAor
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIG1hc2spCisgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQxNiAmJiBtX3ZhbHVlLT5j
aGlsZCgxKS0+aGFzSW50MzIoKQorICAgICAgICAgICAgICAgICYmICEobV92YWx1ZS0+Y2hpbGQo
MSktPmFzSW50MzIoKSAmIDB4ZmZmZjAwMDApKSB7CiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0
aGlzOiBCaXRBbmQoU0V4dDMyKHZhbHVlKSwgbWFzaykgd2hlcmUgKG1hc2sgJiAweGZmZmZmZmZm
MDAwMDAwMDApID09IDAKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKFpFeHQzMih2
YWx1ZSksIG1hc2spCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgp
ID09IFNFeHQzMiAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50MzIoKQorICAgICAgICAgICAg
ICAgICYmICEobV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIDB4ZmZmZmZmZmYwMDAwMDAw
MGxsdSkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIFpFeHQzMiwg
bV92YWx1ZS0+b3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEJpdEFuZChPcCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAg
ICAgLy8gICAgIHdoZXJlICEoY29uc3RhbnQxICYgY29uc3RhbnQyKQorICAgICAgICAgICAgLy8g
ICAgICAgYW5kIE9wIGlzIEJpdE9yIG9yIEJpdFhvcgorICAgICAgICAgICAgLy8gaW50byB0aGlz
OiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MikKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGNvbnN0YW50MiA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAobV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAg
ICAgICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgxKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICYmICEobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5hc0ludCgpICYgY29uc3RhbnQyKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAg
ICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBC
aXRPcihjb25zdGFudDEsIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogY29u
c3RhbnQxIHwgY29uc3RhbnQyCisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50Qml0T3Ig
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0T3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxk
KDEpKSkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoY29uc3RhbnRCaXRP
cik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IC8vIFR1cm4gdGhpczogU2VsZWN0KHN0dWZmLCB4LCB4KQotICAgICAgICAgICAgLy8gSW50byB0
aGlzOiB4Ci0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hp
bGQoMikpIHsKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IoQml0T3IodmFsdWUsIGNv
bnN0YW50MSksIGNvbnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0T3IodmFs
dWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMCktPm9wY29kZSgpID09IEJpdE9yKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0Nv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdE9yQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGlmIChuZXdDb25zdGFudCkg
eworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4
LCBuZXdDb25zdGFudCk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgxKSA9IG5ld0NvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcih2YWx1ZVgsIHZhbHVlWCkKKyAgICAgICAgICAgIC8vIEludG8g
dGhpczogdmFsdWVYLgorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFs
dWUtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IodmFsdWUsIHplcm8tY29uc3RhbnQpCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlLgorICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDEpLT5pc0ludCgwKSkgeworICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRp
dHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdE9yKHZhbHVlLCBhbGwtb25lcykK
KyAgICAgICAgICAgIC8vIEludG8gdGhpczogYWxsLW9uZXMuCisgICAgICAgICAgICBpZiAoKG1f
dmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMHhmZmZm
ZmZmZmZmZmZmZmZmKSkKKyAgICAgICAgICAgICAgICB8fCAobV92YWx1ZS0+dHlwZSgpID09IElu
dDMyICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgweGZmZmZmZmZmKSkpIHsKICAgICAgICAg
ICAgICAgICByZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYnJlYWs7CiAKKyAg
ICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisK
KyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbnN0YW50MSwgY29uc3RhbnQyKQor
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFudDIKKyAgICAgICAg
ICAgIGlmIChWYWx1ZSogY29uc3RhbnRCaXRYb3IgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Yml0WG9y
Q29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKKyAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKGNvbnN0YW50Qml0WG9yKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoQml0
WG9yKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KKyAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7CisgICAgICAgICAgICAg
ICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdFhvckNvbnN0YW50
KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBp
ZiAobmV3Q29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOworICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbXBhcmUsIDEpCisgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IGludmVydGVkQ29tcGFyZQorICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7CisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBp
bnZlcnRlZENvbXBhcmUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+aW52ZXJ0ZWRDb21wYXJlKG1fcHJv
YykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShpbnZlcnRlZENv
bXBhcmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKHZhbHVlWCwg
dmFsdWVYKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiB6ZXJvLWNvbnN0YW50LgorICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7CisgICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkSW50Q29uc3RhbnQobV92
YWx1ZSwgMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdFhvcih2YWx1ZSwgemVyby1jb25zdGFudCkKKyAgICAg
ICAgICAgIC8vIEludG8gdGhpczogdmFsdWUuCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eSht
X3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIAorICAgICAgICAKKworICAgICAgICAK
KworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAg
ICAKKwogICAgICAgICBjYXNlIExvYWQ4WjoKICAgICAgICAgY2FzZSBMb2FkOFM6CiAgICAgICAg
IGNhc2UgTG9hZDE2WjoKQEAgLTE2NTIsNjIgKzE1OTksOCBAQAogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBFcXVhbDoKLSAgICAgICAg
ICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgCiAKLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogRXF1YWwoYm9vbCwgMCkKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9y
KGJvb2wsIDEpCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPnJldHVybnNCb29s
KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkpIHsKLSAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIEJpdFhvciwgbV92YWx1
ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4o
KSwgMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAg
IC8vIEludG8gdGhpczogYm9vbAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5y
ZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Ci0gICAgICAg
ICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogRXF1YWwoY29uc3QxLCBjb25zdDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0
MSA9PSBjb25zdDIKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUoCi0gICAgICAgICAg
ICAgICAgbV9wcm9jLmFkZEJvb2xDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+b3JpZ2luKCksCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLT5lcXVh
bENvbnN0YW50KG1fdmFsdWUtPmNoaWxkKDEpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBOb3RFcXVhbDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11
dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5yZXR1cm5z
Qm9vbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBOb3RFcXVhbChib29sLCAw
KQotICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogYm9vbAotICAgICAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigwKSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoYm9vbCwgMSkKLSAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IEVxdWFsKGJvb2wsIDApCi0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRo
TmV3PFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIEVxdWFsLCBtX3ZhbHVlLT5vcmln
aW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnRJbnRDb25zdGFudChtX2luZGV4LCBtX3ZhbHVlLT5vcmlnaW4oKSwgSW50
MzIsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5vdEVxdWFsKGNvbnN0
MSwgY29uc3QyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgIT0gY29uc3QyCi0g
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5h
ZGRCb29sQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAot
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKS0+bm90RXF1YWxDb25zdGFudCht
X3ZhbHVlLT5jaGlsZCgxKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2Ug
TGVzc1RoYW46CiAgICAgICAgIGNhc2UgR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2UgTGVzc0Vx
dWFsOgpAQCAtMTc1OSwxOSArMTY1Miw2IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCi0gICAgICAgIGNhc2UgRXF1YWxPclVub3JkZXJlZDoKLSAgICAgICAgICAgIGhhbmRsZUNv
bW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBFcXVhbChjb25zdDEs
IGNvbnN0MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogaXN1bm9yZGVyZWQoY29uc3QxLCBj
b25zdDIpIHx8IGNvbnN0MSA9PSBjb25zdDIuCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVx
dWFsKHZhbHVlLCBjb25zdF9OYU4pCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IDEuCi0gICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgIG1fcHJvYy5hZGRC
b29sQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigpLAotICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKS0+ZXF1YWxPclVub3JkZXJlZENvbnN0
YW50KG1fdmFsdWUtPmNoaWxkKDApKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAg
Y2FzZSBDaGVja0FkZDogewogICAgICAgICAgICAgaWYgKHJlcGxhY2VXaXRoTmV3VmFsdWUobV92
YWx1ZS0+Y2hpbGQoMCktPmNoZWNrQWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyMywyNyArMjIwMyw2IEBACiAgICAg
ICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBoYW5kbGVTaGlmdEFtb3Vu
dCgpCi0gICAgewotICAgICAgICAvLyBTaGlmdCBhbnl0aGluZyBieSB6ZXJvIGlzIGlkZW50aXR5
LgotICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkpIHsKLSAgICAgICAg
ICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlIHNoaWZ0IGFscmVhZHkgbWFza3Mg
aXRzIHNoaWZ0IGFtb3VudC4gSWYgdGhlIHNoaWZ0IGFtb3VudCBpcyBiZWluZyBtYXNrZWQgYnkg
YQotICAgICAgICAvLyByZWR1bmRhbnQgYW1vdW50LCB0aGVuIHJlbW92ZSB0aGUgbWFzay4gRm9y
IGV4YW1wbGUsCi0gICAgICAgIC8vIFR1cm4gdGhpczogU2hsKEB4LCBCaXRBbmQoQHksIDYzKSkK
LSAgICAgICAgLy8gSW50byB0aGlzOiBTaGwoQHgsIEB5KQotICAgICAgICB1bnNpZ25lZCBtYXNr
ID0gc2l6ZW9mVHlwZShtX3ZhbHVlLT50eXBlKCkpICogOCAtIDE7Ci0gICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgxKS0+b3Bjb2RlKCkgPT0gQml0QW5kCi0gICAgICAgICAgICAmJiBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMSktPmhhc0ludDMyKCkKLSAgICAgICAgICAgICYmIChtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMSktPmFzSW50MzIoKSAmIG1hc2spID09IG1hc2spIHsKLSAgICAg
ICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwot
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHZv
aWQgcmVwbGFjZUlmUmVkdW5kYW50KCkKICAgICB7CiAgICAgICAgIG1fY2hhbmdlZCB8PSBtX3B1
cmVDU0UucHJvY2VzcyhtX3ZhbHVlLCAqbV9kb21pbmF0b3JzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyNDExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NCw3ICszOTg0LDcgQEAK
IHsKICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOwotICAgIFZhbHVlKiBuZWcgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFi
cywgT3JpZ2luKCksCisgICAgVmFsdWUqIG5lZyA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgTmVnLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApKTsKICAgICBWYWx1ZSog
YWJzID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYnMsIE9yaWdpbigpLCBuZWcpOwog
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBh
YnMpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>