<?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>142518</bug_id>
          
          <creation_ts>2015-03-09 17:56:08 -0700</creation_ts>
          <short_desc>HashTable::size() should return unsigned integer</short_desc>
          <delta_ts>2015-03-10 14:54:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075837</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 17:56:08 -0700</bug_when>
    <thetext>Comparing HashSet and Vector sizes exposed the problem that HashSet sizes have been signed since http://trac.webkit.org/changeset/10653
Changing the representation to unsigned makes our int/unsigned usage more consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075840</commentid>
    <comment_count>1</comment_count>
      <attachid>248304</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 18:07:52 -0700</bug_when>
    <thetext>Created attachment 248304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075980</commentid>
    <comment_count>2</comment_count>
      <attachid>248304</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-03-10 10:32:58 -0700</bug_when>
    <thetext>Comment on attachment 248304
Patch

You should rebase the patch and upload a new one so EWS can chew on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076020</commentid>
    <comment_count>3</comment_count>
      <attachid>248343</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-10 12:03:49 -0700</bug_when>
    <thetext>Created attachment 248343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076028</commentid>
    <comment_count>4</comment_count>
      <attachid>248345</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-10 12:20:04 -0700</bug_when>
    <thetext>Created attachment 248345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076052</commentid>
    <comment_count>5</comment_count>
      <attachid>248350</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-10 13:23:54 -0700</bug_when>
    <thetext>Created attachment 248350
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076070</commentid>
    <comment_count>6</comment_count>
      <attachid>248350</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-10 13:56:04 -0700</bug_when>
    <thetext>Comment on attachment 248350
Patch

Nice!
rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076093</commentid>
    <comment_count>7</comment_count>
      <attachid>248350</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-10 14:54:51 -0700</bug_when>
    <thetext>Comment on attachment 248350
Patch

Clearing flags on attachment: 248350

Committed r181348: &lt;http://trac.webkit.org/changeset/181348&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076094</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-10 14:54:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248304</attachid>
            <date>2015-03-09 18:07:52 -0700</date>
            <delta_ts>2015-03-10 12:03:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142518-20150309180729.patch</filename>
            <type>text/plain</type>
            <size>38565</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMjk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE1LTAzLTA5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNpemUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1MTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNv
bXBpbGVTdHViKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrU2V0Lmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrU2V0OjpyZW1vdmUpOgorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjpjcmVhdGVUYWJsZSk6CisgICAgICAgICogcnVu
dGltZS9Mb29rdXAuaDoKKyAgICAgICAgKEpTQzo6SGFzaFRhYmxlOjplbnRyeSk6CisgICAgICAg
IChKU0M6Okhhc2hUYWJsZTo6Q29uc3RJdGVyYXRvcjo6Q29uc3RJdGVyYXRvcik6CisgICAgICAg
IEtlZXAgdGhlIGNoZWNrcyBmb3IgLTEuCisgICAgICAgICogcnVudGltZS9XZWFrR0NNYXAuaDoK
KyAgICAgICAgKiBydW50aW1lL1dlYWtNYXBEYXRhLmg6CisgICAgICAgIENoYW5nZWQgaW50IHRv
IHVuc2lnbmVkLgorCiAyMDE1LTAzLTA5ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNv
bT4KIAogICAgICAgICBTdGFsZSBlbnRyaWVzIGluIFdlYWtHQ01hcHMgYXJlIGtlZXBpbmcgdG9u
cyBvZiBXZWFrQmxvY2tzIGFsaXZlIHVubmVjZXNzYXJpbHkuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCShyZXZpc2lvbiAxODEy
OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBBdmFpbGFiaWxpdHlNYXA6OnBy
dW5lKCkKICAgICAgICAgICAgIHBvc3NpYmxlTm9kZXMuYWRkKG1fbG9jYWxzW2ldLm5vZGUoKSk7
CiAgICAgfQogCi0gICAgaW50IG9sZFBvc3NpYmxlTm9kZXNTaXplOworICAgIHVuc2lnbmVkIG9s
ZFBvc3NpYmxlTm9kZXNTaXplOwogICAgIGRvIHsKICAgICAgICAgb2xkUG9zc2libGVOb2Rlc1Np
emUgPSBwb3NzaWJsZU5vZGVzLnNpemUoKTsKICAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2hl
YXApIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHJldmlzaW9uIDE4MTI5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3
IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICB0b01hdGVyaWFsaXplLmFkZCht
YXRlcmlhbGl6YXRpb24pOwogICAgIAogICAgIHdoaWxlICghdG9NYXRlcmlhbGl6ZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgaW50IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUgPSB0b01hdGVyaWFs
aXplLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNUb01hdGVyaWFsaXplU2l6ZSA9
IHRvTWF0ZXJpYWxpemUuc2l6ZSgpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gd29ya2xpc3Q7CiAgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZFJhbmdlKHRvTWF0ZXJpYWxpemUuYmVnaW4oKSwgdG9NYXRlcmlhbGl6ZS5lbmQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrU2V0LmgJKHJldmlzaW9u
IDE4MTI5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2tT
ZXQ6OmFkZChNYXJrZWRCbAogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9ja1NldDo6cmVtb3ZlKE1h
cmtlZEJsb2NrKiBibG9jaykKIHsKLSAgICBpbnQgb2xkQ2FwYWNpdHkgPSBtX3NldC5jYXBhY2l0
eSgpOworICAgIHVuc2lnbmVkIG9sZENhcGFjaXR5ID0gbV9zZXQuY2FwYWNpdHkoKTsKICAgICBt
X3NldC5yZW1vdmUoYmxvY2spOwogICAgIGlmIChtX3NldC5jYXBhY2l0eSgpICE9IG9sZENhcGFj
aXR5KSAvLyBJbmRpY2F0ZXMgd2UndmUgcmVtb3ZlZCBhIGxvdCBvZiBibG9ja3MuCiAgICAgICAg
IHJlY29tcHV0ZUZpbHRlcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TG9va3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9M
b29rdXAuY3BwCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Mb29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIHZvaWQgSGFz
aFRhYmxlOjpjcmVhdGVUYWJsZSgpIGNvbnN0CiAgICAgQVNTRVJUKCFrZXlzKTsKICAgICBrZXlz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcioqPihmYXN0TWFsbG9jKHNpemVvZihjaGFyKikgKiBu
dW1iZXJPZlZhbHVlcykpOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlZhbHVl
czsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mVmFsdWVzOyAr
K2kpIHsKICAgICAgICAgaWYgKHZhbHVlc1tpXS5tX2tleSkKICAgICAgICAgICAgIGtleXNbaV0g
PSB2YWx1ZXNbaV0ubV9rZXk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xvb2t1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0xvb2t1cC5oCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Mb29rdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjksOCArNjksOCBAQCBz
dHJ1Y3QgSGFzaFRhYmxlVmFsdWUgewogfTsKIAogc3RydWN0IEhhc2hUYWJsZSB7Ci0gICAgbXV0
YWJsZSBpbnQgbnVtYmVyT2ZWYWx1ZXM7Ci0gICAgaW50IGluZGV4TWFzazsKKyAgICBtdXRhYmxl
IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzOworICAgIHVuc2lnbmVkIGluZGV4TWFzazsKICAgICBi
b29sIGhhc1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzOwogCiAgICAgY29uc3QgSGFzaFRhYmxl
VmFsdWUqIHZhbHVlczsgLy8gRml4ZWQgdmFsdWVzIGdlbmVyYXRlZCBieSBzY3JpcHQuCkBAIC0x
MDMsMjYgKzEwMywyNiBAQCBzdHJ1Y3QgSGFzaFRhYmxlIHsKIAogICAgICAgICBBU1NFUlQoa2V5
cyk7CiAKLSAgICAgICAgaW50IGluZGV4RW50cnkgPSBpbXBsLT5leGlzdGluZ0hhc2goKSAmIGlu
ZGV4TWFzazsKLSAgICAgICAgaW50IHZhbHVlSW5kZXggPSBpbmRleFtpbmRleEVudHJ5XS52YWx1
ZTsKLSAgICAgICAgaWYgKHZhbHVlSW5kZXggPT0gLTEpCisgICAgICAgIHVuc2lnbmVkIGluZGV4
RW50cnkgPSBpbXBsLT5leGlzdGluZ0hhc2goKSAmIGluZGV4TWFzazsKKyAgICAgICAgaWYgKGlu
ZGV4W2luZGV4RW50cnldLnZhbHVlID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHVuc2lnbmVkIHZhbHVlSW5kZXggPSBpbmRleFtpbmRleEVudHJ5XS52YWx1ZTsKIAogICAg
ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgaWYgKFdURjo6ZXF1YWwoaW1wbCwga2V5
c1t2YWx1ZUluZGV4XSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZ2YWx1ZXNbdmFsdWVJbmRl
eF07CiAKLSAgICAgICAgICAgIGluZGV4RW50cnkgPSBpbmRleFtpbmRleEVudHJ5XS5uZXh0Owot
ICAgICAgICAgICAgaWYgKGluZGV4RW50cnkgPT0gLTEpCisgICAgICAgICAgICBpZiAoaW5kZXhb
aW5kZXhFbnRyeV0ubmV4dCA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIGluZGV4RW50cnkgPSBpbmRleFtpbmRleEVudHJ5XS5uZXh0OwogICAgICAg
ICAgICAgdmFsdWVJbmRleCA9IGluZGV4W2luZGV4RW50cnldLnZhbHVlOwotICAgICAgICAgICAg
QVNTRVJUKHZhbHVlSW5kZXggIT0gLTEpOworICAgICAgICAgICAgQVNTRVJUKGluZGV4W2luZGV4
RW50cnldLnZhbHVlICE9IC0xKTsKICAgICAgICAgfTsKICAgICB9CiAKICAgICBjbGFzcyBDb25z
dEl0ZXJhdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENvbnN0SXRlcmF0b3IoY29uc3QgSGFz
aFRhYmxlKiB0YWJsZSwgaW50IHBvc2l0aW9uKQorICAgICAgICBDb25zdEl0ZXJhdG9yKGNvbnN0
IEhhc2hUYWJsZSogdGFibGUsIHVuc2lnbmVkIHBvc2l0aW9uKQogICAgICAgICAgICAgOiBtX3Rh
YmxlKHRhYmxlKQogICAgICAgICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICAgICB7
CkBAIC0xNjgsNyArMTY4LDcgQEAgc3RydWN0IEhhc2hUYWJsZSB7CiAgICAgICAgIH0KIAogICAg
ICAgICBjb25zdCBIYXNoVGFibGUqIG1fdGFibGU7Ci0gICAgICAgIGludCBtX3Bvc2l0aW9uOwor
ICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOwogICAgIH07CiAKICAgICBDb25zdEl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtH
Q01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtH
Q01hcC5oCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrR0NNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IGludCBtaW5HQ1RocmVzaG9sZCA9
IDM7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkdDVGhyZXNob2xkID0gMzsKIAogICAg
IE5FVkVSX0lOTElORSB2b2lkIGdjTWFwKCkKICAgICB7CkBAIC0xMjksMTEgKzEyOSwxMSBAQCBw
cml2YXRlOgogICAgIH0KIAogICAgIEhhc2hNYXBUeXBlIG1fbWFwOwotICAgIGludCBtX2djVGhy
ZXNob2xkOworICAgIHVuc2lnbmVkIG1fZ2NUaHJlc2hvbGQ7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIFJhd01hcHBlZEFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlw
ZW5hbWUgS2V5VHJhaXRzQXJnPgotY29uc3QgaW50IFdlYWtHQ01hcDxLZXlBcmcsIFJhd01hcHBl
ZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPjo6bWluR0NUaHJlc2hvbGQ7Citjb25zdCB1bnNp
Z25lZCBXZWFrR0NNYXA8S2V5QXJnLCBSYXdNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
Zz46Om1pbkdDVGhyZXNob2xkOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5oCShyZXZpc2lvbiAxODEyOTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgcHJpdmF0ZToKICAgICAgICAg
dmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7
Ci0gICAgICAgIGludCBtX2xpdmVLZXlDb3VudDsKKyAgICAgICAgdW5zaWduZWQgbV9saXZlS2V5
Q291bnQ7CiAgICAgICAgIFdlYWtNYXBEYXRhKiBtX3RhcmdldDsKICAgICB9OwogICAgIERlYWRL
ZXlDbGVhbmVyIG1fZGVhZEtleUNsZWFuZXI7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMjk5KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAx
NS0wMy0wOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisg
ICAgICAgIFVzZSB1bnNpZ25lZCBmb3IgSGFzaFNldCBzaXplLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTE4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSGFzaENvdW50ZWRTZXQuaDoKKyAg
ICAgICAgKFdURjo6VHJhaXRzPjo6c2l6ZSk6CisgICAgICAgIChXVEY6OlRyYWl0cz46OmNhcGFj
aXR5KToKKyAgICAgICAgKiB3dGYvSGFzaE1hcC5oOgorICAgICAgICAoV1RGOjpYPjo6c2l6ZSk6
CisgICAgICAgIChXVEY6Olg+OjpjYXBhY2l0eSk6CisgICAgICAgICogd3RmL0hhc2hTZXQuaDoK
KyAgICAgICAgKFdURjo6Vj46OnNpemUpOgorICAgICAgICAoV1RGOjpWPjo6Y2FwYWNpdHkpOgor
ICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpTdGF0
czo6cmVjb3JkQ29sbGlzaW9uQXRDb3VudCk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6U3Rh
dHM6OmR1bXBTdGF0cyk6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6c2l6ZSk6CisgICAgICAg
IChXVEY6Okhhc2hUYWJsZTo6Y2FwYWNpdHkpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+Ojpk
ZWFsbG9jYXRlVGFibGUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpjaGVja1RhYmxlQ29u
c2lzdGVuY3lFeGNlcHRTaXplKToKKyAgICAgICAgKiB3dGYvSGFzaFRyYWl0cy5oOgorICAgICAg
ICAqIHd0Zi9MaXN0SGFzaFNldC5oOgorICAgICAgICAoV1RGOjpVPjo6c2l6ZSk6CisgICAgICAg
IChXVEY6OlU+OjpjYXBhY2l0eSk6CisgICAgICAgIENoYW5nZWQgaW50IHRvIHVuc2lnbmVkLgor
CiAyMDE1LTAzLTA5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbRUZMXSBNb3ZlIERpc3BhdGNoUXVldWUgdG8gV1RGCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9IYXNoQ291bnRlZFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hD
b3VudGVkU2V0LmgJKHJldmlzaW9uIDE4MTI5MCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hDb3Vu
dGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIAogICAgICAgICB2b2lkIHN3YXAoSGFzaENvdW50ZWRTZXQmKTsKICAgICAgICAg
Ci0gICAgICAgIGludCBzaXplKCkgY29uc3Q7Ci0gICAgICAgIGludCBjYXBhY2l0eSgpIGNvbnN0
OworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGNhcGFj
aXR5KCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgICAgICAKICAg
ICAgICAgLy8gSXRlcmF0b3JzIGl0ZXJhdGUgb3ZlciBwYWlycyBvZiB2YWx1ZXMgYW5kIGNvdW50
cy4KQEAgLTg0LDEzICs4NCwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAgICAgCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KLSAgICBpbmxpbmUgaW50IEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rp
b25zLCBUcmFpdHM+OjpzaXplKCkgY29uc3QKKyAgICBpbmxpbmUgdW5zaWduZWQgSGFzaENvdW50
ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnNpemUoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogICAgIH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgotICAgIGlubGluZSBpbnQgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmNhcGFjaXR5KCkgY29uc3QKKyAgICBpbmxpbmUgdW5zaWduZWQgSGFzaENvdW50ZWRT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNhcGFjaXR5KCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiAgICAgfQpJbmRleDogU291cmNl
L1dURi93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hNYXAu
aAkocmV2aXNpb24gMTgxMjkwKQorKysgU291cmNlL1dURi93dGYvSGFzaE1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3dhcChIYXNoTWFw
Jik7CiAKLSAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgIGludCBjYXBhY2l0eSgpIGNvbnN0Owor
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0
OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCiAgICAgLy8gaXRlcmF0b3JzIGl0ZXJhdGUg
b3ZlciBwYWlycyBvZiBrZXlzIGFuZCB2YWx1ZXMKQEAgLTE5NSwxMyArMTk1LDEzIEBAIGlubGlu
ZSB2b2lkIEhhc2hNYXA8VCwgVSwgViwgVywgWD46OnN3YXAKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVywgdHlwZW5hbWUgWD4KLWlu
bGluZSBpbnQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2l6ZSgpIGNvbnN0CitpbmxpbmUgdW5z
aWduZWQgSGFzaE1hcDxULCBVLCBWLCBXLCBYPjo6c2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1faW1wbC5zaXplKCk7IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGludCBIYXNoTWFwPFQs
IFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNvbnN0CitpbmxpbmUgdW5zaWduZWQgSGFzaE1hcDxU
LCBVLCBWLCBXLCBYPjo6Y2FwYWNpdHkoKSBjb25zdAogeyAKICAgICByZXR1cm4gbV9pbXBsLmNh
cGFjaXR5KCk7IAogfQpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTgxMjkwKQorKysgU291cmNl
L1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBAIG5hbWVz
cGFjZSBXVEYgewogCiAgICAgICAgIHZvaWQgc3dhcChIYXNoU2V0Jik7CiAKLSAgICAgICAgaW50
IHNpemUoKSBjb25zdDsKLSAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsK
ICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdDsKQEAgLTE0OSwxMyArMTQ5LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5s
aW5lIGludCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkgY29uc3QKKyAgICBpbmxpbmUgdW5zaWdu
ZWQgSGFzaFNldDxULCBVLCBWPjo6c2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9pbXBsLnNpemUoKTsgCiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgaW50IEhhc2hTZXQ8VCwgVSwgVj46OmNhcGFj
aXR5KCkgY29uc3QKKyAgICBpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNp
dHkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKICAg
ICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24gMTgxMjkwKQorKysgU291cmNlL1dURi93
dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxNiArMzEzLDE2IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
bnQgbnVtQWNjZXNzZXM7Ci0gICAgICAgICAgICBpbnQgbnVtUmVoYXNoZXM7Ci0gICAgICAgICAg
ICBpbnQgbnVtUmVtb3ZlczsKLSAgICAgICAgICAgIGludCBudW1SZWluc2VydHM7Ci0KLSAgICAg
ICAgICAgIGludCBtYXhDb2xsaXNpb25zOwotICAgICAgICAgICAgaW50IG51bUNvbGxpc2lvbnM7
Ci0gICAgICAgICAgICBpbnQgY29sbGlzaW9uR3JhcGhbNDA5Nl07CisgICAgICAgICAgICB1bnNp
Z25lZCBudW1BY2Nlc3NlczsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bVJlaGFzaGVzOworICAg
ICAgICAgICAgdW5zaWduZWQgbnVtUmVtb3ZlczsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bVJl
aW5zZXJ0czsKKworICAgICAgICAgICAgdW5zaWduZWQgbWF4Q29sbGlzaW9uczsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG51bUNvbGxpc2lvbnM7CisgICAgICAgICAgICB1bnNpZ25lZCBjb2xsaXNp
b25HcmFwaFs0MDk2XTsKIAotICAgICAgICAgICAgdm9pZCByZWNvcmRDb2xsaXNpb25BdENvdW50
KGludCBjb3VudCkKKyAgICAgICAgICAgIHZvaWQgcmVjb3JkQ29sbGlzaW9uQXRDb3VudCh1bnNp
Z25lZCBjb3VudCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoY291bnQgPiBt
YXhDb2xsaXNpb25zKQogICAgICAgICAgICAgICAgICAgICBtYXhDb2xsaXNpb25zID0gY291bnQ7
CkBAIC0zMzYsNyArMzM2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiVkIGFjY2Vzc2VzXG4iLCBudW1BY2Nlc3Nlcyk7CiAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiVkIHRvdGFsIGNvbGxpc2lvbnMsIGF2ZXJhZ2UgJS4yZiBwcm9iZXMgcGVyIGFjY2Vz
c1xuIiwgbnVtQ29sbGlzaW9ucywgMS4wICogKG51bUFjY2Vzc2VzICsgbnVtQ29sbGlzaW9ucykg
LyBudW1BY2Nlc3Nlcyk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoImxvbmdlc3QgY29sbGlz
aW9uIGNoYWluOiAlZFxuIiwgbWF4Q29sbGlzaW9ucyk7Ci0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPD0gbWF4Q29sbGlzaW9uczsgaSsrKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8PSBtYXhDb2xsaXNpb25zOyBpKyspIHsKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIiAgJWQgbG9va3VwcyB3aXRoIGV4YWN0bHkgJWQgY29sbGlzaW9u
cyAoJS4yZiUlICwgJS4yZiUlIHdpdGggdGhpcyBtYW55IG9yIG1vcmUpXG4iLCBjb2xsaXNpb25H
cmFwaFtpXSwgaSwgMTAwLjAgKiAoY29sbGlzaW9uR3JhcGhbaV0gLSBjb2xsaXNpb25HcmFwaFtp
KzFdKSAvIG51bUFjY2Vzc2VzLCAxMDAuMCAqIGNvbGxpc2lvbkdyYXBoW2ldIC8gbnVtQWNjZXNz
ZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgcmVo
YXNoZXNcbiIsIG51bVJlaGFzaGVzKTsKQEAgLTM3MSw4ICszNzEsOCBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpc0VtcHR5
KCkgPyBlbmQoKSA6IG1ha2VDb25zdEl0ZXJhdG9yKG1fdGFibGUpOyB9CiAgICAgICAgIGNvbnN0
X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1ha2VLbm93bkdvb2RDb25zdEl0ZXJhdG9y
KG1fdGFibGUgKyBtX3RhYmxlU2l6ZSk7IH0KIAotICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5Q291bnQ7IH0KLSAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3QgeyByZXR1
cm4gbV90YWJsZVNpemU7IH0KKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5Q291bnQ7IH0KKyAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX3RhYmxlU2l6ZTsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAh
bV9rZXlDb3VudDsgfQogCiAgICAgICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBlJiB2
YWx1ZSkgeyByZXR1cm4gYWRkPElkZW50aXR5VHJhbnNsYXRvclR5cGU+KEV4dHJhY3Rvcjo6ZXh0
cmFjdCh2YWx1ZSksIHZhbHVlKTsgfQpAQCAtNDIxLDggKzQyMSw4IEBAIG5hbWVzcGFjZSBXVEYg
ewogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxv
Y2F0ZVRhYmxlKGludCBzaXplKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVRhYmxl
KFZhbHVlVHlwZSogdGFibGUsIGludCBzaXplKTsKKyAgICAgICAgc3RhdGljIFZhbHVlVHlwZSog
YWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBzaXplKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVhbGxv
Y2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpOwogCiAgICAgICAgIHR5
cGVkZWYgc3RkOjpwYWlyPFZhbHVlVHlwZSosIGJvb2w+IExvb2t1cFR5cGU7CiAgICAgICAgIHR5
cGVkZWYgc3RkOjpwYWlyPExvb2t1cFR5cGUsIHVuc2lnbmVkPiBGdWxsTG9va3VwVHlwZTsKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVmFsdWVUeXBlKiBleHBh
bmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOwogICAgICAgICB2b2lkIHNocmluaygpIHsg
cmVoYXNoKG1fdGFibGVTaXplIC8gMiwgbnVsbHB0cik7IH0KIAotICAgICAgICBWYWx1ZVR5cGUq
IHJlaGFzaChpbnQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKKyAgICAgICAgVmFs
dWVUeXBlKiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsK
ICAgICAgICAgVmFsdWVUeXBlKiByZWluc2VydChWYWx1ZVR5cGUmJik7CiAKICAgICAgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZUJ1Y2tldChWYWx1ZVR5cGUmIGJ1Y2tldCk7CkBAIC00NjksMTQg
KzQ2OSwxNCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0
ZUl0ZXJhdG9ycygpIHsgfQogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBtX21h
eExvYWQgPSAyOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1fbWluTG9hZCA9IDY7CisgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtX21heExvYWQgPSAyOworICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbV9taW5Mb2FkID0gNjsKIAogICAgICAgICBWYWx1ZVR5cGUqIG1fdGFi
bGU7Ci0gICAgICAgIGludCBtX3RhYmxlU2l6ZTsKLSAgICAgICAgaW50IG1fdGFibGVTaXplTWFz
azsKLSAgICAgICAgaW50IG1fa2V5Q291bnQ7Ci0gICAgICAgIGludCBtX2RlbGV0ZWRDb3VudDsK
KyAgICAgICAgdW5zaWduZWQgbV90YWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG1fdGFibGVT
aXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgbV9rZXlDb3VudDsKKyAgICAgICAgdW5zaWduZWQg
bV9kZWxldGVkQ291bnQ7CiAKICNpZiBDSEVDS19IQVNIVEFCTEVfSVRFUkFUT1JTCiAgICAgcHVi
bGljOgpAQCAtNTI2LDcgKzUyNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHN0cnVjdCBIYXNo
VGFibGVDYXBhY2l0eUZvclNpemUgewogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFs
dWUgPSBIYXNoVGFibGVDYXBhY2l0eUZvclNpemVTcGxpdHRlcjxzaXplLCAhKHNpemUgJiAoc2l6
ZSAtIDEpKT46OnZhbHVlOwogICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplID4gMCwgSGFzaFRh
YmxlTm9uWmVyb01pbmltdW1DYXBhY2l0eSk7Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKCFzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlID4+IDMxKSwgSGFzaFRhYmxlTm9DYXBhY2l0eU92ZXJmbG93KTsK
KyAgICAgICAgQ09NUElMRV9BU1NFUlQoIXN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSA+PiAz
MSksIEhhc2hUYWJsZU5vQ2FwYWNpdHlPdmVyZmxvdyk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHZhbHVlID4gKDIgKiBzaXplKSwgSGFzaFRhYmxlQ2FwYWNpdHlIb2xkc0NvbnRlbnRTaXplKTsK
ICAgICB9OwogCkBAIC01ODksMTEgKzU4OSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB7CiAg
ICAgICAgIGNoZWNrS2V5PEhhc2hUcmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludCBrID0g
MDsKLSAgICAgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgICAgICB1bnNp
Z25lZCBrID0gMDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7
CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwogICAgICAgICB1bnNpZ25lZCBo
ID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5KTsKLSAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1h
c2s7CisgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgc2l6ZU1hc2s7CiAKICAgICAgICAgaWYgKCF0
YWJsZSkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtNjQ2LDE1ICs2NDYsMTUgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChtX3RhYmxlKTsKICAgICAgICAgY2hlY2tLZXk8SGFz
aFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAgaW50IGsgPSAwOworICAgICAgICB1bnNpZ25l
ZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIGlu
dCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sg
PSBtX3RhYmxlU2l6ZU1hc2s7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6
aGFzaChrZXkpOwotICAgICAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAg
ICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2VzOwotICAgICAgICBpbnQgcHJvYmVDb3VudCA9
IDA7CisgICAgICAgIHVuc2lnbmVkIHByb2JlQ291bnQgPSAwOwogI2VuZGlmCiAKICNpZiBEVU1Q
X0hBU0hUQUJMRV9TVEFUU19QRVJfVEFCTEUKQEAgLTcwNywxMSArNzA3LDExIEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBBU1NFUlQobV90YWJsZSk7CiAgICAgICAgIGNoZWNrS2V5PEhhc2hU
cmFuc2xhdG9yPihrZXkpOwogCi0gICAgICAgIGludCBrID0gMDsKKyAgICAgICAgdW5zaWduZWQg
ayA9IDA7CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICBpbnQg
c2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0g
bV90YWJsZVNpemVNYXNrOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhh
c2goa2V5KTsKLSAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVk
IGkgPSBoICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICAr
K0hhc2hUYWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTgwMSwxMSArODAxLDExIEBAIG5hbWVz
cGFjZSBXVEYgewogCiAgICAgICAgIEFTU0VSVChtX3RhYmxlKTsKIAotICAgICAgICBpbnQgayA9
IDA7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUqIHRhYmxlID0g
bV90YWJsZTsKLSAgICAgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNrOworICAgICAg
ICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAgdW5zaWduZWQg
aCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIGludCBpID0gaCAmIHNpemVN
YXNrOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYgRFVNUF9IQVNI
VEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNzZXM7CkBAIC0x
MDU4LDIyICsxMDU4LDIyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5h
bWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0g
ICAgYXV0byBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBU
cmFpdHMsIEtleVRyYWl0cz46OmFsbG9jYXRlVGFibGUoaW50IHNpemUpIC0+IFZhbHVlVHlwZSoK
KyAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6YWxsb2NhdGVUYWJsZSh1bnNpZ25lZCBzaXplKSAtPiBWYWx1
ZVR5cGUqCiAgICAgewogICAgICAgICAvLyB3b3VsZCB1c2UgYSB0ZW1wbGF0ZSBtZW1iZXIgZnVu
Y3Rpb24gd2l0aCBleHBsaWNpdCBzcGVjaWFsaXphdGlvbnMgaGVyZSwgYnV0CiAgICAgICAgIC8v
IGdjYyBkb2Vzbid0IGFwcGVhciB0byBzdXBwb3J0IHRoYXQKICAgICAgICAgaWYgKFRyYWl0czo6
ZW1wdHlWYWx1ZUlzWmVybykKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVR5
cGUqPihmYXN0WmVyb2VkTWFsbG9jKHNpemUgKiBzaXplb2YoVmFsdWVUeXBlKSkpOwogICAgICAg
ICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGZhc3RNYWxsb2Mo
c2l6ZSAqIHNpemVvZihWYWx1ZVR5cGUpKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQog
ICAgICAgICAgICAgaW5pdGlhbGl6ZUJ1Y2tldChyZXN1bHRbaV0pOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUg
VHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+Ci0gICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1
ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmRlYWxsb2Nh
dGVUYWJsZShWYWx1ZVR5cGUqIHRhYmxlLCBpbnQgc2l6ZSkKKyAgICB2b2lkIEhhc2hUYWJsZTxL
ZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6
ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIHVuc2lnbmVkIHNpemUpCiAgICAgewot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIWlzRGVsZXRl
ZEJ1Y2tldCh0YWJsZVtpXSkpCiAgICAgICAgICAgICAgICAgdGFibGVbaV0uflZhbHVlVHlwZSgp
OwogICAgICAgICB9CkBAIC0xMDgzLDcgKzEwODMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3Is
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJh
aXRzPgogICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0
aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFs
dWVUeXBlKgogICAgIHsKLSAgICAgICAgaW50IG5ld1NpemU7CisgICAgICAgIHVuc2lnbmVkIG5l
d1NpemU7CiAgICAgICAgIGlmIChtX3RhYmxlU2l6ZSA9PSAwKQogICAgICAgICAgICAgbmV3U2l6
ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsKICAgICAgICAgZWxzZSBpZiAobXVzdFJl
aGFzaEluUGxhY2UoKSkKQEAgLTEwOTUsMTEgKzEwOTUsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5
cGVuYW1lIEtleVRyYWl0cz4KLSAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0
b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6cmVoYXNoKGludCBuZXdUYWJs
ZVNpemUsIFZhbHVlVHlwZSogZW50cnkpIC0+IFZhbHVlVHlwZSoKKyAgICBhdXRvIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRz
Pjo6cmVoYXNoKHVuc2lnbmVkIG5ld1RhYmxlU2l6ZSwgVmFsdWVUeXBlKiBlbnRyeSkgLT4gVmFs
dWVUeXBlKgogICAgIHsKICAgICAgICAgaW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3lFeGNl
cHRTaXplKCk7CiAKLSAgICAgICAgaW50IG9sZFRhYmxlU2l6ZSA9IG1fdGFibGVTaXplOworICAg
ICAgICB1bnNpZ25lZCBvbGRUYWJsZVNpemUgPSBtX3RhYmxlU2l6ZTsKICAgICAgICAgVmFsdWVU
eXBlKiBvbGRUYWJsZSA9IG1fdGFibGU7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwpAQCAt
MTExNyw3ICsxMTE3LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIG1fdGFibGUgPSBhbGxv
Y2F0ZVRhYmxlKG5ld1RhYmxlU2l6ZSk7CiAKICAgICAgICAgVmFsdWUqIG5ld0VudHJ5ID0gbnVs
bHB0cjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gb2xkVGFibGVTaXplOyArK2kpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgewog
ICAgICAgICAgICAgaWYgKGlzRW1wdHlPckRlbGV0ZWRCdWNrZXQob2xkVGFibGVbaV0pKSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKCZvbGRUYWJsZVtpXSAhPSBlbnRyeSk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CkBAIC0xMjU0LDkgKzEyNTQsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgaWYgKCFtX3RhYmxlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGludCBj
b3VudCA9IDA7Ci0gICAgICAgIGludCBkZWxldGVkQ291bnQgPSAwOwotICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IG1fdGFibGVTaXplOyArK2opIHsKKyAgICAgICAgdW5zaWduZWQgY291bnQg
PSAwOworICAgICAgICB1bnNpZ25lZCBkZWxldGVkQ291bnQgPSAwOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbV90YWJsZVNpemU7ICsraikgewogICAgICAgICAgICAgVmFsdWVU
eXBlKiBlbnRyeSA9IG1fdGFibGUgKyBqOwogICAgICAgICAgICAgaWYgKGlzRW1wdHlCdWNrZXQo
KmVudHJ5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0hhc2hUcmFpdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgJ
KHJldmlzaW9uIDE4MTI5MCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgR2Vu
ZXJpY0hhc2hUCiAKICAgICAvLyBUaGUgc3RhcnRpbmcgdGFibGUgc2l6ZS4gQ2FuIGJlIG92ZXJy
aWRkZW4gd2hlbiB3ZSBrbm93IGJlZm9yZWhhbmQgdGhhdAogICAgIC8vIGEgaGFzaCB0YWJsZSB3
aWxsIGhhdmUgYXQgbGVhc3QgTiBlbnRyaWVzLgotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11
bVRhYmxlU2l6ZSA9IDg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1UYWJsZVNp
emUgPSA4OwogfTsKIAogLy8gRGVmYXVsdCBpbnRlZ2VyIHRyYWl0cyBkaXNhbGxvdyBib3RoIDAg
YW5kIC0xIGFzIGtleXMgKG1heCB2YWx1ZSBpbnN0ZWFkIG9mIC0xIGZvciB1bnNpZ25lZCkuCkBA
IC0xNjcsNyArMTY3LDcgQEAgc3RydWN0IFBhaXJIYXNoVHJhaXRzIDogR2VuZXJpY0hhc2hUcmFp
dAogICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBGaXJzdFRyYWl0czo6
ZW1wdHlWYWx1ZUlzWmVybyAmJiBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm87CiAgICAg
c3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5VmFsdWUoKSB7IHJldHVybiBzdGQ6Om1ha2VfcGFp
cihGaXJzdFRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBTZWNvbmRUcmFpdHM6OmVtcHR5VmFsdWUoKSk7
IH0KIAotICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IEZpcnN0VHJhaXRz
OjptaW5pbXVtVGFibGVTaXplOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtVGFi
bGVTaXplID0gRmlyc3RUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CiAKICAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoVHJhaXRUeXBlJiBzbG90KSB7IEZpcnN0VHJhaXRzOjpj
b25zdHJ1Y3REZWxldGVkVmFsdWUoc2xvdC5maXJzdCk7IH0KICAgICBzdGF0aWMgYm9vbCBpc0Rl
bGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBGaXJzdFRyYWl0czo6
aXNEZWxldGVkVmFsdWUodmFsdWUuZmlyc3QpOyB9CkBAIC0yMTIsNyArMjEyLDcgQEAgc3RydWN0
IEtleVZhbHVlUGFpckhhc2hUcmFpdHMgOiBHZW5lcmljSAogICAgIHN0YXRpYyBjb25zdCBib29s
IGVtcHR5VmFsdWVJc1plcm8gPSBLZXlUcmFpdHM6OmVtcHR5VmFsdWVJc1plcm8gJiYgVmFsdWVU
cmFpdHM6OmVtcHR5VmFsdWVJc1plcm87CiAgICAgc3RhdGljIEVtcHR5VmFsdWVUeXBlIGVtcHR5
VmFsdWUoKSB7IHJldHVybiBLZXlWYWx1ZVBhaXI8dHlwZW5hbWUgS2V5VHJhaXRzOjpFbXB0eVZh
bHVlVHlwZSwgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OkVtcHR5VmFsdWVUeXBlPihLZXlUcmFpdHM6
OmVtcHR5VmFsdWUoKSwgVmFsdWVUcmFpdHM6OmVtcHR5VmFsdWUoKSk7IH0KIAotICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0
czo6bWluaW11bVRhYmxlU2l6ZTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRW
YWx1ZShUcmFpdFR5cGUmIHNsb3QpIHsgS2V5VHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUo
c2xvdC5rZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgVHJhaXRU
eXBlJiB2YWx1ZSkgeyByZXR1cm4gS2V5VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5rZXkp
OyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9MaXN0SGFzaFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0xpc3RIYXNoU2V0LmgJKHJldmlzaW9uIDE4MTI5MCkKKysrIFNvdXJjZS9X
VEYvd3RmL0xpc3RIYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzd2FwKExpc3RIYXNoU2V0Jik7CiAKLSAgICBpbnQgc2l6ZSgpIGNv
bnN0OwotICAgIGludCBjYXBhY2l0eSgpIGNvbnN0OworICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0OwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtYWtlSXRlcmF0b3IobV9oZWFk
KTsgfQpAQCAtMzQ3LDEzICszNDcsMTMgQEAgaW5saW5lIExpc3RIYXNoU2V0PFQsIFU+Ojp+TGlz
dEhhc2hTZXQoKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotaW5saW5l
IGludCBMaXN0SGFzaFNldDxULCBVPjo6c2l6ZSgpIGNvbnN0CitpbmxpbmUgdW5zaWduZWQgTGlz
dEhhc2hTZXQ8VCwgVT46OnNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuc2l6ZSgp
OyAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLWlubGluZSBpbnQgTGlz
dEhhc2hTZXQ8VCwgVT46OmNhcGFjaXR5KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBMaXN0SGFz
aFNldDxULCBVPjo6Y2FwYWNpdHkoKSBjb25zdAogewogICAgIHJldHVybiBtX2ltcGwuY2FwYWNp
dHkoKTsgCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODEyOTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNS0wMy0w
OSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IFVzZSB1bnNpZ25lZCBmb3IgSGFzaFNldCBzaXplLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVm
bGF0ZUZyYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRFeHRlbnNpb25EZWZs
YXRlRnJhbWU6OnByb2Nlc3NSZXNwb25zZSk6CisgICAgICAgICogZG9tL1NjcmlwdFJ1bm5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRSdW5uZXI6On5TY3JpcHRSdW5uZXIpOgorICAg
ICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpw
dXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRDYWNoZUlP
Uy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5c3RlbUZhbGxi
YWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRG
bGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGbGV4Qm94SXRlcmF0b3I6Om5leHQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjb21wdXRlT3ZlcmZsb3dGcm9tQ2VsbHMpOgor
ICAgICAgICBDaGFuZ2VkIGludCB0byB1bnNpZ25lZC4KKwogMjAxNS0wMy0wOSAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3
Njk3OCk6IElubGluZS1ibG9ja3Mgd2l0aCBvdmVyZmxvd2luZyBjb250ZW50cyBoYXZlIGFzY2Vu
dHMgdGhhdCBhcmUgdG9vIGxhcmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCShyZXZp
c2lvbiAxODEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0RGVmbGF0ZUZyYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgYm9v
bCBXZWJTb2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnBybwogICAgIH0KICAgICBtX3Jlc3Bv
bnNlUHJvY2Vzc2VkID0gdHJ1ZTsKIAotICAgIGludCBleHBlY3RlZE51bVBhcmFtZXRlcnMgPSAw
OworICAgIHVuc2lnbmVkIGV4cGVjdGVkTnVtUGFyYW1ldGVycyA9IDA7CiAgICAgaW50IHdpbmRv
d0JpdHMgPSAxNTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
cGFyYW1ldGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJtYXhfd2luZG93X2JpdHMiKTsKICAg
ICBpZiAocGFyYW1ldGVyICE9IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBTY3JpcHRSdW5uZXI6On5TY3JpcHRSdW5uZXIoKQogICAgICAgICBtX2RvY3VtZW50LmRlY3Jl
bWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
c2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fZG9jdW1lbnQu
ZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bV9wZW5kaW5nQXN5bmNTY3JpcHRzLnNpemUoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3BlbmRpbmdBc3luY1NjcmlwdHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fZG9j
dW1lbnQuZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCShyZXZpc2lvbiAxODEy
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBwcml2YXRlOgogICAgICAgICB0eXBlZGVm
IEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4gUmVxdWVzdE1hcDsKICAgICAgICAgUmVx
dWVzdE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKICAgICAgICAgY29uc3QgU3RyaW5nIG1fbmFtZTsK
LSAgICAgICAgY29uc3QgaW50IG1fbWF4UmVxdWVzdHNJbkZsaWdodDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0OwogICAgIH07CiAKICAgICBlbnVtIENyZWF0
ZUhvc3RQb2xpY3kgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsMTUgKzM2
OCwxNSBAQCBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9udHMoKQogCiAKICNpZiBQTEFU
Rk9STShJT1MpCi1jb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSAxMjA7Ci1jb25zdCBp
bnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAxMDA7Citjb25zdCB1bnNpZ25lZCBjTWF4SW5h
Y3RpdmVGb250RGF0YSA9IDEyMDsKK2NvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnRE
YXRhID0gMTAwOwogI2Vsc2UKLWNvbnN0IGludCBjTWF4SW5hY3RpdmVGb250RGF0YSA9IDIyNTsK
LWNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsKK2NvbnN0IHVuc2lnbmVk
IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMjI1OworY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0
aXZlRm9udERhdGEgPSAyMDA7CiAjZW5kaWYKIAotY29uc3QgaW50IGNNYXhVbmRlck1lbW9yeVBy
ZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwotY29uc3QgaW50IGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOworY29uc3QgdW5zaWduZWQgY01heFVuZGVy
TWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7Citjb25zdCB1bnNpZ25lZCBjVGFy
Z2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAzMDsKIAogUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGJvb2wgY2hlY2tpbmdBbHRl
cm5hdGVOYW1lKQogewpAQCAtNDExLDE5ICs0MTEsMTkgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdl
VGltZXJGaXJlZCgpCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVk
ZWQoKQogewogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9IE1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCk7Ci0gICAgaW50IGluYWN0
aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQ
cmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKKyAgICB1bnNp
Z25lZCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY01heFVu
ZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01heEluYWN0aXZlRm9udERhdGE7
CiAKICAgICBpZiAoY2FjaGVkRm9udHMoKS5zaXplKCkgPCBpbmFjdGl2ZUZvbnREYXRhTGltaXQp
CiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENv
dW50KCk7CisgICAgdW5zaWduZWQgaW5hY3RpdmVDb3VudCA9IGluYWN0aXZlRm9udENvdW50KCk7
CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpbnQgdGFyZ2V0Rm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJl
c3N1cmUgPyBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjVGFy
Z2V0SW5hY3RpdmVGb250RGF0YTsKKyAgICB1bnNpZ25lZCB0YXJnZXRGb250RGF0YUxpbWl0ID0g
dW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVG
b250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOwogICAgIHB1cmdlSW5hY3RpdmVGb250
RGF0YShpbmFjdGl2ZUNvdW50IC0gdGFyZ2V0Rm9udERhdGFMaW1pdCk7CiB9CiAKLXZvaWQgRm9u
dENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IHB1cmdlQ291bnQpCit2b2lkIEZvbnRD
YWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1cmdlQ291bnQpCiB7CiAgICAg
cHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRlQ2FjaGUoKTsKICAgICBwcnVu
ZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDcg
KzE0MCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHNpemVfdCBmb250Q291bnQo
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzaXplX3QgaW5hY3RpdmVGb250Q291bnQoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQgPSBJTlRf
TUFYKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1cmdlSW5hY3RpdmVGb250RGF0YSh1bnNp
Z25lZCBjb3VudCA9IFVJTlRfTUFYKTsKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBSZWZQdHI8
Rm9udD4gZm9udEZyb21EZXNjcmlwdGlvbkFuZExvZ0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9u
JiwgY29uc3QgTE9HRk9OVCYsIEF0b21pY1N0cmluZyYgb3V0Rm9udEZhbWlseU5hbWUpOwpAQCAt
MTY1LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgaW1wbGVt
ZW50ZWQgYnkgZWFjaCBwbGF0Zm9ybS4KICNpZiBQTEFURk9STShJT1MpCiAgICAgRm9udFBsYXRm
b3JtRGF0YSogZ2V0Q3VzdG9tRmFsbGJhY2tGb250KGNvbnN0IFVJbnQzMiwgY29uc3QgRm9udERl
c2NyaXB0aW9uJik7Ci0gICAgUGFzc1JlZlB0cjxGb250PiBnZXRTeXN0ZW1Gb250RmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqLCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisgICAgUGFzc1JlZlB0cjxGb250PiBnZXRT
eXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNv
bnN0IEZvbnQqLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKICNl
bmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaW9zL0ZvbnRD
YWNoZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9pb3MvRm9udENhY2hlSU9TLm1tCShyZXZpc2lvbiAxODEyOTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw3ICs3Myw3IEBAIHN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBwaG9uZUZhbGxiYWNrQ2gK
ICAgICByZXR1cm4gY2hhcmFjdGVyU2V0OwogfQogCi1QYXNzUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpn
ZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRhKCk7CiAgICAg
Q1RGb250UmVmIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CkBAIC0xOTQsMTEgKzE5NCwx
MSBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAgICAgcmV0dXJu
IExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1G
YWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
Y29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICAvLyBVbmxpa2UgT1MgWCwgb3VyIGZhbGxiYWNr
IGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzb21l
IGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCiAgICAgLy8gRmFsbCBiYWNrIHRvIHRo
ZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4KLSAgICBpZiAobGVuZ3RoID4gMCAm
JiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycykpIHsKKyAgICBpZiAobGVu
Z3RoICYmIHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzKSkgewogICAgICAg
ICBhdXRvKiBmYWxsYmFjayA9IGdldEN1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycywgZGVz
Y3JpcHRpb24pOwogICAgICAgICBpZiAoIWZhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0yMTcsNyArMjE3LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVt
RmFsbGJhY2tGbwogICAgIH0KIAogICAgIExhbmd1YWdlU3BlY2lmaWNGb250IGxhbmd1YWdlU3Bl
Y2lmaWNGb250ID0gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYgKGxlbmd0aCA+
IDApCisgICAgaWYgKGxlbmd0aCkKICAgICAgICAgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBsYW5n
dWFnZVNwZWNpZmljRmFsbGJhY2tGb250KGMpOwogCiAgICAgUmVmUHRyPEZvbnQ+IGZvbnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTgxMjkwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghbV9vcmRpbmFs
SXRlcmF0aW9uKQogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcmRpbmFsID0gbV9mb3J3
YXJkID8gMSA6IG1fbGFyZ2VzdE9yZGluYWw7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX29yZGluYWxJdGVyYXRpb24gPj0gbV9vcmRpbmFsVmFsdWVz
LnNpemUoKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX29yZGluYWxJdGVyYXRpb24g
PiBtX29yZGluYWxWYWx1ZXMuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjb3B5K3NvcnQgdGhlIHZhbHVlcyBv
bmNlIHBlciBsYXlvdXQgZXZlbiBpZiB0aGUgaXRlcmF0b3IgaXMgcmVzZXQuCkBAIC0xMTAsMTEg
KzExMCwxMSBAQCBwcml2YXRlOgogICAgIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveCogbV9i
b3g7CiAgICAgUmVuZGVyQm94KiBtX2N1cnJlbnRDaGlsZDsKICAgICBib29sIG1fZm9yd2FyZDsK
LSAgICB1bnNpZ25lZCBpbnQgbV9jdXJyZW50T3JkaW5hbDsKLSAgICB1bnNpZ25lZCBpbnQgbV9s
YXJnZXN0T3JkaW5hbDsKLSAgICBIYXNoU2V0PHVuc2lnbmVkIGludD4gbV9vcmRpbmFsVmFsdWVz
OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBpbnQ+IG1fc29ydGVkT3JkaW5hbFZhbHVlczsKLSAgICBp
bnQgbV9vcmRpbmFsSXRlcmF0aW9uOworICAgIHVuc2lnbmVkIG1fY3VycmVudE9yZGluYWw7Cisg
ICAgdW5zaWduZWQgbV9sYXJnZXN0T3JkaW5hbDsKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX29y
ZGluYWxWYWx1ZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3NvcnRlZE9yZGluYWxWYWx1ZXM7
CisgICAgdW5zaWduZWQgbV9vcmRpbmFsSXRlcmF0aW9uOwogfTsKIAogUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94OjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3goRWxlbWVudCYgZWxlbWVu
dCwgUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE4MTI5MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzcsNyArNjc3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmNvbXB1dGVP
dmVyZmxvdwogICAgIGNsZWFyT3ZlcmZsb3coKTsKICAgICBtX292ZXJmbG93aW5nQ2VsbHMuY2xl
YXIoKTsKICAgICB1bnNpZ25lZCB0b3RhbENlbGxzQ291bnQgPSBuRWZmQ29scyAqIHRvdGFsUm93
czsKLSAgICBpbnQgbWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbHNDb3VudCA9IHRvdGFsQ2VsbHND
b3VudCA8IGdNaW5UYWJsZVNpemVUb1VzZUZhc3RQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxs
ID8gMCA6IGdNYXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxsUmF0aW9Gb3JGYXN0UGFpbnRQYXRoICog
dG90YWxDZWxsc0NvdW50OworICAgIHVuc2lnbmVkIG1heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxz
Q291bnQgPSB0b3RhbENlbGxzQ291bnQgPCBnTWluVGFibGVTaXplVG9Vc2VGYXN0UGFpbnRQYXRo
V2l0aE92ZXJmbG93aW5nQ2VsbCA/IDAgOiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlv
Rm9yRmFzdFBhaW50UGF0aCAqIHRvdGFsQ2VsbHNDb3VudDsKIAogI2lmbmRlZiBOREVCVUcKICAg
ICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCA9IGZhbHNlOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMjk5KQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDMtMDkg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBV
c2UgdW5zaWduZWQgZm9yIEhhc2hTZXQgc2l6ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RJ
bml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xpc3RI
YXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBBZGRl
ZCB1bnNpZ25lZCBzdWZmaXguCisKIDIwMTUtMDMtMDYgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIG9wdGlvbiB0byBydW4td2Via2l0LXRlc3RzIHRv
IG92ZXJyaWRlIHRoZSBMYXlvdXRUZXN0cy8gZGlyZWN0b3J5CkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAkocmV2aXNpb24gMTgxMjkwKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Myw3ICsxNDMsNyBAQCBURVNUKFdURl9IYXNoTWFwLCBJbml0aWFsaXplckxpc3QpCiAgICAgICAg
IHsgNCwgImZvdXIiIH0sCiAgICAgfTsKIAotICAgIEVYUEVDVF9FUSg0LCBtYXAuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoNHUsIG1hcC5zaXplKCkpOwogCiAgICAgRVhQRUNUX0VRKCJvbmUiLCBt
YXAuZ2V0KDEpKTsKICAgICBFWFBFQ1RfRVEoInR3byIsIG1hcC5nZXQoMikpOwpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAJKHJldmlzaW9uIDE4MTI5MCkK
KysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgdGVzdEluaXRpYWxDYXBhY2l0eSgpCiAgICAgSGFz
aFNldDxpbnQsIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEluaXRpYWxDYXBhY2l0eVRlc3RIYXNo
VHJhaXRzPGluaXRpYWxDYXBhY2l0eT4gPiB0ZXN0U2V0OwogCiAgICAgLy8gSW5pdGlhbCBjYXBh
Y2l0eSBpcyBudWxsLgotICAgIEFTU0VSVF9FUSgwLCB0ZXN0U2V0LmNhcGFjaXR5KCkpOworICAg
IEFTU0VSVF9FUSgwdSwgdGVzdFNldC5jYXBhY2l0eSgpKTsKIAogICAgIC8vIEFkZGluZyBpdGVt
cyB1cCB0byBzaXplIHNob3VsZCBuZXZlciBjaGFuZ2UgdGhlIGNhcGFjaXR5LgogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvTGlzdEhhc2hTZXQuY3BwCShyZXZpc2lvbiAxODEyOTApCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIEFwcGVuZE9yTW92ZVRvTGFz
dAogICAgIHJlc3VsdCA9IGxpc3QuYXBwZW5kT3JNb3ZlVG9MYXN0KDMpOwogICAgIEFTU0VSVF9U
UlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKIAotICAgIEFTU0VSVF9FUShsaXN0LnNpemUoKSwgMyk7
CisgICAgQVNTRVJUX0VRKGxpc3Quc2l6ZSgpLCAzdSk7CiAKICAgICAvLyBUaGUgbGlzdCBzaG91
bGQgYmUgaW4gb3JkZXIgMSwgMiwgMy4KICAgICBMaXN0SGFzaFNldDxpbnQ+OjppdGVyYXRvciBp
dGVyYXRvciA9IGxpc3QuYmVnaW4oKTsKQEAgLTk5LDExICs5OSwxMSBAQCBURVNUKFdURl9MaXN0
SGFzaFNldCwgQXBwZW5kT3JNb3ZlVG9MYXN0CiAgICAgQVNTRVJUX1RSVUUocmVzdWx0LmlzTmV3
RW50cnkpOwogICAgIHJlc3VsdCA9IGxpc3QuYXBwZW5kT3JNb3ZlVG9MYXN0KDEpOwogICAgIEFT
U0VSVF9GQUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgQVNTRVJUX0VRKDEsIGxpc3Quc2l6
ZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUsIGxpc3Quc2l6ZSgpKTsKIAogICAgIGxpc3QuYWRkKDIp
OwogICAgIGxpc3QuYWRkKDMpOwotICAgIEFTU0VSVF9FUSgzLCBsaXN0LnNpemUoKSk7CisgICAg
QVNTRVJUX0VRKDN1LCBsaXN0LnNpemUoKSk7CiAKICAgICAvLyBBcHBlbmRpbmcgMiBtb3ZlIGl0
IHRvIHRoZSBlbmQuCiAgICAgQVNTRVJUX0VRKDMsIGxpc3QubGFzdCgpKTsKQEAgLTExOCw3ICsx
MTgsNyBAQCBURVNUKFdURl9MaXN0SGFzaFNldCwgQXBwZW5kT3JNb3ZlVG9MYXN0CiAgICAgQVNT
RVJUX0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQgPSBsaXN0LmFwcGVuZE9y
TW92ZVRvTGFzdCgxKTsKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOwotICAg
IEFTU0VSVF9FUSgzLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0LnNpemUo
KSk7CiAKICAgICBMaXN0SGFzaFNldDxpbnQ+OjppdGVyYXRvciBpdGVyYXRvciA9IGxpc3QuYmVn
aW4oKTsKICAgICBBU1NFUlRfRVEoMywgKml0ZXJhdG9yKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBU
RVNUKFdURl9MaXN0SGFzaFNldCwgUHJlcGVuZE9yTW92ZVRvTGFzCiAgICAgcmVzdWx0ID0gbGlz
dC5wcmVwZW5kT3JNb3ZlVG9GaXJzdCgzKTsKICAgICBBU1NFUlRfVFJVRShyZXN1bHQuaXNOZXdF
bnRyeSk7CiAKLSAgICBBU1NFUlRfRVEobGlzdC5zaXplKCksIDMpOworICAgIEFTU0VSVF9FUShs
aXN0LnNpemUoKSwgM3UpOwogCiAgICAgLy8gVGhlIGxpc3Qgc2hvdWxkIGJlIGluIG9yZGVyIDMs
IDEsIDIuCiAgICAgTGlzdEhhc2hTZXQ8aW50Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0LmJl
Z2luKCk7CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCBURVNUKFdURl9MaXN0SGFzaFNldCwgUHJlcGVu
ZE9yTW92ZVRvTGFzCiAgICAgQVNTRVJUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJl
c3VsdCA9IGxpc3QucHJlcGVuZE9yTW92ZVRvRmlyc3QoMSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJl
c3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlRfRVEoMSwgbGlzdC5zaXplKCkpOworICAgIEFT
U0VSVF9FUSgxdSwgbGlzdC5zaXplKCkpOwogCiAgICAgbGlzdC5hZGQoMik7CiAgICAgbGlzdC5h
ZGQoMyk7Ci0gICAgQVNTRVJUX0VRKDMsIGxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoM3Us
IGxpc3Quc2l6ZSgpKTsKIAogICAgIC8vIFByZXBlbmRpbmcgMiBtb3ZlIGl0IHRvIHRoZSBiZWdp
bm5pbmcuCiAgICAgQVNTRVJUX0VRKDEsIGxpc3QuZmlyc3QoKSk7CkBAIC0xNzksNyArMTc5LDcg
QEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIFByZXBlbmRPck1vdmVUb0xhcwogICAgIEFTU0VSVF9G
QUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgcmVzdWx0ID0gbGlzdC5wcmVwZW5kT3JNb3Zl
VG9GaXJzdCgzKTsKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOwotICAgIEFT
U0VSVF9FUSgzLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0LnNpemUoKSk7
CiAKICAgICBMaXN0SGFzaFNldDxpbnQ+OjppdGVyYXRvciBpdGVyYXRvciA9IGxpc3QuYmVnaW4o
KTsKICAgICBBU1NFUlRfRVEoMywgKml0ZXJhdG9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248343</attachid>
            <date>2015-03-10 12:03:49 -0700</date>
            <delta_ts>2015-03-10 12:20:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142518-20150310120325.patch</filename>
            <type>text/plain</type>
            <size>36063</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE1LTAzLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNpemUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1MTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNv
bXBpbGVTdHViKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrU2V0Lmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrU2V0OjpyZW1vdmUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERh
dGEuaDoKKwogMjAxNS0wMy0xMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxp
YS5jb20+CiAKICAgICAgICAgR0NDOiBDUkFTSCgpIHNob3VsZCBiZSBhbm5vdGF0ZWQgd2l0aCBO
T1JFVFVSTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZSgpCiAgICAgICAgICAgICBwb3NzaWJsZU5v
ZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOwogICAgIH0KIAotICAgIGludCBvbGRQb3NzaWJs
ZU5vZGVzU2l6ZTsKKyAgICB1bnNpZ25lZCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKICAgICBkbyB7
CiAgICAgICAgIG9sZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CiAg
ICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODEzMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
ICAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKICAgICAKICAgICB3
aGlsZSAoIXRvTWF0ZXJpYWxpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGludCBwcmV2aW91c1Rv
TWF0ZXJpYWxpemVTaXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CisgICAgICAgIHVuc2lnbmVk
IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUgPSB0b01hdGVyaWFsaXplLnNpemUoKTsKICAgICAg
ICAgCiAgICAgICAgIFZlY3RvcjxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmts
aXN0OwogICAgICAgICB3b3JrbGlzdC5hcHBlbmRSYW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCks
IHRvTWF0ZXJpYWxpemUuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9ja1NldC5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrU2V0OjphZGQoTWFya2VkQmwKIAogaW5saW5lIHZv
aWQgTWFya2VkQmxvY2tTZXQ6OnJlbW92ZShNYXJrZWRCbG9jayogYmxvY2spCiB7Ci0gICAgaW50
IG9sZENhcGFjaXR5ID0gbV9zZXQuY2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBvbGRDYXBhY2l0
eSA9IG1fc2V0LmNhcGFjaXR5KCk7CiAgICAgbV9zZXQucmVtb3ZlKGJsb2NrKTsKICAgICBpZiAo
bV9zZXQuY2FwYWNpdHkoKSAhPSBvbGRDYXBhY2l0eSkgLy8gSW5kaWNhdGVzIHdlJ3ZlIHJlbW92
ZWQgYSBsb3Qgb2YgYmxvY2tzLgogICAgICAgICByZWNvbXB1dGVGaWx0ZXIoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAkocmV2aXNpb24gMTgx
MzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJy
aWRlOwotICAgICAgICBpbnQgbV9saXZlS2V5Q291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbGl2
ZUtleUNvdW50OwogICAgICAgICBXZWFrTWFwRGF0YSogbV90YXJnZXQ7CiAgICAgfTsKICAgICBE
ZWFkS2V5Q2xlYW5lciBtX2RlYWRLZXlDbGVhbmVyOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTMzMSkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTUtMDMtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBVc2UgdW5zaWduZWQgZm9yIEhhc2hTZXQgc2l6ZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6
CisgICAgICAgIChXVEY6OlRyYWl0cz46OnNpemUpOgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpj
YXBhY2l0eSk6CisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAgKFdURjo6WD46OnNp
emUpOgorICAgICAgICAoV1RGOjpYPjo6Y2FwYWNpdHkpOgorICAgICAgICAqIHd0Zi9IYXNoU2V0
Lmg6CisgICAgICAgIChXVEY6OlY+OjpzaXplKToKKyAgICAgICAgKFdURjo6Vj46OmNhcGFjaXR5
KToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OlN0YXRzOjpkdW1wU3RhdHMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OnNpemUpOgorICAg
ICAgICAoV1RGOjpIYXNoVGFibGU6OmNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJs
ZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAg
ICAgICAgKiB3dGYvTGlzdEhhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6VT46OnNpemUpOgorICAg
ICAgICAoV1RGOjpVPjo6Y2FwYWNpdHkpOgorCiAyMDE1LTAzLTEwICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgYm1hbGxvYzogdHJ5RmFzdE1hbGxvYyBzaG91
bGRuJ3QgY3Jhc2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAkocmV2aXNpb24gMTgxMzMx
KQorKysgU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc3dh
cChIYXNoQ291bnRlZFNldCYpOwogICAgICAgICAKLSAgICAgICAgaW50IHNpemUoKSBjb25zdDsK
LSAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdDsKKyAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICAvLyBJdGVyYXRvcnMgaXRlcmF0ZSBv
dmVyIHBhaXJzIG9mIHZhbHVlcyBhbmQgY291bnRzLgpAQCAtODQsMTMgKzg0LDEzIEBAIG5hbWVz
cGFjZSBXVEYgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIGlubGluZSBpbnQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnNpemUoKSBjb25zdAor
ICAgIGlubGluZSB1bnNpZ25lZCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzPjo6c2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9pbXBsLnNpemUo
KTsgCiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5saW5lIGludCBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y2FwYWNpdHkoKSBjb25zdAorICAg
IGlubGluZSB1bnNpZ25lZCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6Y2FwYWNpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW1wbC5jYXBh
Y2l0eSgpOyAKICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzd2FwKEhhc2hNYXAmKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7
Ci0gICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Owor
ICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAKICAgICAvLyBpdGVyYXRvcnMgaXRlcmF0ZSBvdmVyIHBhaXJzIG9mIGtleXMgYW5kIHZhbHVl
cwpAQCAtMTk1LDEzICsxOTUsMTMgQEAgaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6c3dhcAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGludCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpzaXplKCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgaW50IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29u
c3QKK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNv
bnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNldC5o
CShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDggKzYzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgdm9pZCBz
d2FwKEhhc2hTZXQmKTsKIAotICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgICAgICBpbnQg
Y2FwYWNpdHkoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgICAg
ICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKIAogICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0OwpAQCAtMTQ5LDEzICsxNDksMTMg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgaW50IEhhc2hTZXQ8VCwgVSwgVj46OnNp
emUoKSBjb25zdAorICAgIGlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGlu
ZSBpbnQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAorICAgIGlubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZp
c2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEzLDE2ICszMTMsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBudW1BY2Nlc3NlczsKLSAgICAgICAgICAg
IGludCBudW1SZWhhc2hlczsKLSAgICAgICAgICAgIGludCBudW1SZW1vdmVzOwotICAgICAgICAg
ICAgaW50IG51bVJlaW5zZXJ0czsKLQotICAgICAgICAgICAgaW50IG1heENvbGxpc2lvbnM7Ci0g
ICAgICAgICAgICBpbnQgbnVtQ29sbGlzaW9uczsKLSAgICAgICAgICAgIGludCBjb2xsaXNpb25H
cmFwaFs0MDk2XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUFjY2Vzc2VzOworICAgICAgICAg
ICAgdW5zaWduZWQgbnVtUmVoYXNoZXM7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1SZW1vdmVz
OworICAgICAgICAgICAgdW5zaWduZWQgbnVtUmVpbnNlcnRzOworCisgICAgICAgICAgICB1bnNp
Z25lZCBtYXhDb2xsaXNpb25zOworICAgICAgICAgICAgdW5zaWduZWQgbnVtQ29sbGlzaW9uczsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNvbGxpc2lvbkdyYXBoWzQwOTZdOwogCi0gICAgICAgICAg
ICB2b2lkIHJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50IGNvdW50KQorICAgICAgICAgICAgdm9p
ZCByZWNvcmRDb2xsaXNpb25BdENvdW50KHVuc2lnbmVkIGNvdW50KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCiAgICAgICAgICAgICAg
ICAgICAgIG1heENvbGxpc2lvbnMgPSBjb3VudDsKQEAgLTMzNiw3ICszMzYsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgYWNjZXNzZXNcbiIsIG51bUFj
Y2Vzc2VzKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgdG90YWwgY29sbGlzaW9ucywg
YXZlcmFnZSAlLjJmIHByb2JlcyBwZXIgYWNjZXNzXG4iLCBudW1Db2xsaXNpb25zLCAxLjAgKiAo
bnVtQWNjZXNzZXMgKyBudW1Db2xsaXNpb25zKSAvIG51bUFjY2Vzc2VzKTsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigibG9uZ2VzdCBjb2xsaXNpb24gY2hhaW46ICVkXG4iLCBtYXhDb2xsaXNp
b25zKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtYXhDb2xsaXNpb25z
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG1heENv
bGxpc2lvbnM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAlZCBsb29r
dXBzIHdpdGggZXhhY3RseSAlZCBjb2xsaXNpb25zICglLjJmJSUgLCAlLjJmJSUgd2l0aCB0aGlz
IG1hbnkgb3IgbW9yZSlcbiIsIGNvbGxpc2lvbkdyYXBoW2ldLCBpLCAxMDAuMCAqIChjb2xsaXNp
b25HcmFwaFtpXSAtIGNvbGxpc2lvbkdyYXBoW2krMV0pIC8gbnVtQWNjZXNzZXMsIDEwMC4wICog
Y29sbGlzaW9uR3JhcGhbaV0gLyBudW1BY2Nlc3Nlcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIlZCByZWhhc2hlc1xuIiwgbnVtUmVoYXNoZXMpOwpAQCAt
MzcxLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUNvbnN0SXRlcmF0
b3IobV90YWJsZSk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJsZSArIG1fdGFibGVTaXplKTsgfQog
Ci0gICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQotICAgICAg
ICBpbnQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlU2l6ZTsgfQorICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgICAgICB1bnNp
Z25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CiAgICAgICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2tleUNvdW50OyB9CiAKICAgICAgICAgQWRk
UmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgdmFsdWUpOyB9CkBAIC00
MjEsOCArNDIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUoaW50IHNpemUpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgaW50IHNpemUp
OworICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUp
OworICAgICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwg
dW5zaWduZWQgc2l6ZSk7CiAKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwg
Ym9vbD4gTG9va3VwVHlwZTsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8TG9va3VwVHlwZSwg
dW5zaWduZWQ+IEZ1bGxMb29rdXBUeXBlOwpAQCAtNDQzLDcgKzQ0Myw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBWYWx1ZVR5cGUqIGV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0
cik7CiAgICAgICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2gobV90YWJsZVNpemUgLyAyLCBudWxs
cHRyKTsgfQogCi0gICAgICAgIFZhbHVlVHlwZSogcmVoYXNoKGludCBuZXdUYWJsZVNpemUsIFZh
bHVlVHlwZSogZW50cnkpOworICAgICAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1bnNpZ25lZCBuZXdU
YWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOwogICAgICAgICBWYWx1ZVR5cGUqIHJlaW5zZXJ0
KFZhbHVlVHlwZSYmKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZh
bHVlVHlwZSYgYnVja2V0KTsKQEAgLTQ2OSwxNCArNDY5LDE0IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CiAjZW5kaWYKIAot
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1fbWF4TG9hZCA9IDI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbV9taW5Mb2FkID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1f
bWF4TG9hZCA9IDI7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtX21pbkxvYWQgPSA2
OwogCiAgICAgICAgIFZhbHVlVHlwZSogbV90YWJsZTsKLSAgICAgICAgaW50IG1fdGFibGVTaXpl
OwotICAgICAgICBpbnQgbV90YWJsZVNpemVNYXNrOwotICAgICAgICBpbnQgbV9rZXlDb3VudDsK
LSAgICAgICAgaW50IG1fZGVsZXRlZENvdW50OworICAgICAgICB1bnNpZ25lZCBtX3RhYmxlU2l6
ZTsKKyAgICAgICAgdW5zaWduZWQgbV90YWJsZVNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBt
X2tleUNvdW50OworICAgICAgICB1bnNpZ25lZCBtX2RlbGV0ZWRDb3VudDsKIAogI2lmIENIRUNL
X0hBU0hUQUJMRV9JVEVSQVRPUlMKICAgICBwdWJsaWM6CkBAIC01MjYsNyArNTI2LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgc3RydWN0IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZSB7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6
ZVNwbGl0dGVyPHNpemUsICEoc2l6ZSAmIChzaXplIC0gMSkpPjo6dmFsdWU7CiAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemUgPiAwLCBIYXNoVGFibGVOb25aZXJvTWluaW11bUNhcGFjaXR5KTsK
LSAgICAgICAgQ09NUElMRV9BU1NFUlQoIXN0YXRpY19jYXN0PGludD4odmFsdWUgPj4gMzEpLCBI
YXNoVGFibGVOb0NhcGFjaXR5T3ZlcmZsb3cpOworICAgICAgICBDT01QSUxFX0FTU0VSVCghc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlID4+IDMxKSwgSGFzaFRhYmxlTm9DYXBhY2l0eU92ZXJm
bG93KTsKICAgICAgICAgQ09NUElMRV9BU1NFUlQodmFsdWUgPiAoMiAqIHNpemUpLCBIYXNoVGFi
bGVDYXBhY2l0eUhvbGRzQ29udGVudFNpemUpOwogICAgIH07CiAKQEAgLTU4OSwxMSArNTg5LDEx
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CiAKLSAgICAgICAgaW50IGsgPSAwOwotICAgICAgICBpbnQgc2l6ZU1hc2sgPSBt
X3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOworICAgICAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9
IG1fdGFibGU7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
OwotICAgICAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKIAogICAgICAgICBpZiAoIXRhYmxlKQogICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC02NDYsMTUgKzY0NiwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQVNTRVJUKG1f
dGFibGUpOwogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnQgayA9IDA7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUq
IHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNr
OworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAg
dW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIGludCBpID0g
aCAmIHNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNz
ZXM7Ci0gICAgICAgIGludCBwcm9iZUNvdW50ID0gMDsKKyAgICAgICAgdW5zaWduZWQgcHJvYmVD
b3VudCA9IDA7CiAjZW5kaWYKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQpA
QCAtNzA3LDExICs3MDcsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChtX3Rh
YmxlKTsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAg
aW50IGsgPSAwOworICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0
YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsK
KyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CiAgICAgICAgIHVu
c2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICBpbnQgaSA9IGgg
JiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2Vz
OwpAQCAtODAxLDExICs4MDEsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgQVNTRVJU
KG1fdGFibGUpOwogCi0gICAgICAgIGludCBrID0gMDsKKyAgICAgICAgdW5zaWduZWQgayA9IDA7
CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICBpbnQgc2l6ZU1h
c2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJs
ZVNpemVNYXNrOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5
KTsKLSAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIGkgPSBo
ICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hU
YWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTEwNTgsMjIgKzEwNTgsMjIgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWxsb2NhdGVU
YWJsZShpbnQgc2l6ZSkgLT4gVmFsdWVUeXBlKgorICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjphbGxvY2F0
ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKICAgICB7CiAgICAgICAgIC8vIHdv
dWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxp
emF0aW9ucyBoZXJlLCBidXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAogICAgICAgICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGZhc3RaZXJvZWRNYWxsb2Moc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKSk7CiAgICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8VmFsdWVUeXBlKj4oZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0
KHJlc3VsdFtpXSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIGlu
dCBzaXplKQorICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0
YWJsZSwgdW5zaWduZWQgc2l6ZSkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkKICAgICAgICAg
ICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KQEAgLTEwODMsNyArMTA4
Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgYXV0byBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmV4
cGFuZChWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUqCiAgICAgewotICAgICAgICBpbnQg
bmV3U2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbmV3U2l6ZTsKICAgICAgICAgaWYgKG1fdGFibGVT
aXplID09IDApCiAgICAgICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOwogICAgICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQpAQCAtMTA5NSwxMSAr
MTA5NSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGF1dG8g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSwgVmFsdWVUeXBlKiBlbnRyeSkgLT4g
VmFsdWVUeXBlKgorICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVT
aXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUqCiAgICAgewogICAgICAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAotICAgICAgICBpbnQgb2xk
VGFibGVTaXplID0gbV90YWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9
IG1fdGFibGVTaXplOwogICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKIAog
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCkBAIC0xMTE3LDcgKzExMTcsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKIAog
ICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBudWxscHRyOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaXNFbXB0eU9yRGVs
ZXRlZEJ1Y2tldChvbGRUYWJsZVtpXSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZFRh
YmxlW2ldICE9IGVudHJ5KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNTQsOSAr
MTI1NCw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgaW50IGRlbGV0
ZWRDb3VudCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV90YWJsZVNpemU7ICsr
aikgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGRlbGV0
ZWRDb3VudCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX3RhYmxlU2l6
ZTsgKytqKSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGo7CiAg
ICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFzaFQKIAogICAgIC8vIFRoZSBzdGFy
dGluZyB0YWJsZSBzaXplLiBDYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIHdlIGtub3cgYmVmb3JlaGFu
ZCB0aGF0CiAgICAgLy8gYSBoYXNoIHRhYmxlIHdpbGwgaGF2ZSBhdCBsZWFzdCBOIGVudHJpZXMu
Ci0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gODsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IDg7CiB9OwogCiAvLyBEZWZhdWx0IGlu
dGVnZXIgdHJhaXRzIGRpc2FsbG93IGJvdGggMCBhbmQgLTEgYXMga2V5cyAobWF4IHZhbHVlIGlu
c3RlYWQgb2YgLTEgZm9yIHVuc2lnbmVkKS4KQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdHJ1Y3QgUGFp
ckhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvICYmIFNlY29uZFRy
YWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKICAgICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlW
YWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlKCks
IFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBt
aW5pbXVtVGFibGVTaXplID0gRmlyc3RUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBGaXJzdFRyYWl0czo6bWluaW11
bVRhYmxlU2l6ZTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFp
dFR5cGUmIHNsb3QpIHsgRmlyc3RUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmZp
cnN0KTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYg
dmFsdWUpIHsgcmV0dXJuIEZpcnN0VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7
IH0KQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1Y3QgS2V5VmFsdWVQYWlySGFzaFRyYWl0cyA6IEdl
bmVyaWNICiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0
czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKICAg
ICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEtleVZhbHVlUGFp
cjx0eXBlbmFtZSBLZXlUcmFpdHM6OkVtcHR5VmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVRyYWl0
czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBWYWx1ZVRyYWl0czo6
ZW1wdHlWYWx1ZSgpKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXpl
ID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogCiAgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlU
cmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBLZXlUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmtleSk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xp
c3RIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAko
cmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsOCArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3YXAoTGlzdEhh
c2hTZXQmKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7Ci0gICAgaW50IGNhcGFjaXR5KCkgY29u
c3Q7CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1ha2VJdGVyYXRvcihtX2hlYWQpOyB9CkBAIC0zNDcsMTMgKzM0NywxMyBAQCBp
bmxpbmUgTGlzdEhhc2hTZXQ8VCwgVT46On5MaXN0SGFzaFNldCgpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgaW50IExpc3RIYXNoU2V0PFQsIFU+OjpzaXpl
KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBMaXN0SGFzaFNldDxULCBVPjo6c2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgotaW5saW5lIGludCBMaXN0SGFzaFNldDxULCBVPjo6Y2FwYWNpdHkoKSBj
b25zdAoraW5saW5lIHVuc2lnbmVkIExpc3RIYXNoU2V0PFQsIFU+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAzLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNp
emUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpjaGVja0ZvckR1cGxpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlQ29uc3RhbnRQb29sSW5kZXgpOgorICAg
ICAgICAqIGRvbS9TY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVu
bmVyOjp+U2NyaXB0UnVubmVyKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OmdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmxleEJveEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y29t
cHV0ZU92ZXJmbG93RnJvbUNlbGxzKToKKwogMjAxNS0wMy0xMCAgRGFuIEJlcm5zdGVpbiAgPG1p
dHpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeGVkIGEgY3Jhc2ggaW4gQ2VydGlmaWNhdGVJbmZv
Ojpjb250YWluc05vblJvb3RTSEExU2lnbmVkQ2VydGlmaWNhdGUgd2hlbiBsb2FkaW5nIGEgbm9u
LUhUVFBTIHdlYmFwZ2UuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3BwCShyZXZpc2lvbiAx
ODEzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVm
bGF0ZUZyYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBXZWJT
b2NrZXRFeHRlbnNpb25EZWZsYXRlRnJhbWU6OnBybwogICAgIH0KICAgICBtX3Jlc3BvbnNlUHJv
Y2Vzc2VkID0gdHJ1ZTsKIAotICAgIGludCBleHBlY3RlZE51bVBhcmFtZXRlcnMgPSAwOworICAg
IHVuc2lnbmVkIGV4cGVjdGVkTnVtUGFyYW1ldGVycyA9IDA7CiAgICAgaW50IHdpbmRvd0JpdHMg
PSAxNTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgcGFyYW1l
dGVyID0gc2VydmVyUGFyYW1ldGVycy5maW5kKCJtYXhfd2luZG93X2JpdHMiKTsKICAgICBpZiAo
cGFyYW1ldGVyICE9IHNlcnZlclBhcmFtZXRlcnMuZW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2
aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc1LDcgKzU3NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIEhhbmRsZSBkdXBsaWNhdGUgcmVmZXJlbmNlcwogICAgICAgICBpZiAoZm91
bmQgIT0gbV9vYmplY3RQb29sLmVuZCgpKSB7CiAgICAgICAgICAgICB3cml0ZShPYmplY3RSZWZl
cmVuY2VUYWcpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGZvdW5k
LT52YWx1ZSkgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChmb3Vu
ZC0+dmFsdWUgPCBtX29iamVjdFBvb2wuc2l6ZSgpKTsKICAgICAgICAgICAgIHdyaXRlT2JqZWN0
SW5kZXgoZm91bmQtPnZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CkBAIC05NjUsNyArOTY1LDcgQEAgcHJpdmF0ZToKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBUPiB2
b2lkIHdyaXRlQ29uc3RhbnRQb29sSW5kZXgoY29uc3QgVCYgY29uc3RhbnRQb29sLCB1bnNpZ25l
ZCBpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGkpIDwgY29u
c3RhbnRQb29sLnNpemUoKSk7CisgICAgICAgIEFTU0VSVChpIDwgY29uc3RhbnRQb29sLnNpemUo
KSk7CiAgICAgICAgIGlmIChjb25zdGFudFBvb2wuc2l6ZSgpIDw9IDB4RkYpCiAgICAgICAgICAg
ICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpKSk7CiAgICAgICAgIGVsc2UgaWYgKGNvbnN0
YW50UG9vbC5zaXplKCkgPD0gMHhGRkZGKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Njcmlw
dFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5l
ci5jcHAJKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5u
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIFNjcmlwdFJ1bm5lcjo6flNj
cmlwdFJ1bm5lcigpCiAgICAgICAgIG1fZG9jdW1lbnQuZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlD
b3VudCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zY3JpcHRzVG9FeGVjdXRlSW5P
cmRlci5zaXplKCk7ICsraSkKICAgICAgICAgbV9kb2N1bWVudC5kZWNyZW1lbnRMb2FkRXZlbnRE
ZWxheUNvdW50KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BlbmRpbmdBc3luY1Njcmlw
dHMuc2l6ZSgpOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGVuZGluZ0Fz
eW5jU2NyaXB0cy5zaXplKCk7ICsraSkKICAgICAgICAgbV9kb2N1bWVudC5kZWNyZW1lbnRMb2Fk
RXZlbnREZWxheUNvdW50KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgJKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8UmVz
b3VyY2VMb2FkZXI+PiBSZXF1ZXN0TWFwOwogICAgICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNM
b2FkaW5nOwogICAgICAgICBjb25zdCBTdHJpbmcgbV9uYW1lOwotICAgICAgICBjb25zdCBpbnQg
bV9tYXhSZXF1ZXN0c0luRmxpZ2h0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBtX21heFJlcXVl
c3RzSW5GbGlnaHQ7CiAgICAgfTsKIAogICAgIGVudW0gQ3JlYXRlSG9zdFBvbGljeSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJl
dmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCwxNSArMzY4LDE1IEBAIHN0YXRpYyBGb250
RGF0YUNhY2hlJiBjYWNoZWRGb250cygpCiAKIAogI2lmIFBMQVRGT1JNKElPUykKLWNvbnN0IGlu
dCBjTWF4SW5hY3RpdmVGb250RGF0YSA9IDEyMDsKLWNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVG
b250RGF0YSA9IDEwMDsKK2NvbnN0IHVuc2lnbmVkIGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMTIw
OworY29uc3QgdW5zaWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAxMDA7CiAjZWxzZQot
Y29uc3QgaW50IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMjI1OwotY29uc3QgaW50IGNUYXJnZXRJ
bmFjdGl2ZUZvbnREYXRhID0gMjAwOworY29uc3QgdW5zaWduZWQgY01heEluYWN0aXZlRm9udERh
dGEgPSAyMjU7Citjb25zdCB1bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIwMDsK
ICNlbmRpZgogCi1jb25zdCBpbnQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnRE
YXRhID0gNTA7Ci1jb25zdCBpbnQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZv
bnREYXRhID0gMzA7Citjb25zdCB1bnNpZ25lZCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0
aXZlRm9udERhdGEgPSA1MDsKK2NvbnN0IHVuc2lnbmVkIGNUYXJnZXRVbmRlck1lbW9yeVByZXNz
dXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOwogCiBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpmb250
Rm9yRmFtaWx5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSwgYm9vbCBjaGVja2luZ0FsdGVybmF0ZU5hbWUpCiB7CkBAIC00
MTEsMTkgKzQxMSwxOSBAQCB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VUaW1lckZpcmVkKCkKIHZvaWQg
Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGFJZk5lZWRlZCgpCiB7CiAgICAgYm9vbCB1
bmRlck1lbW9yeVByZXNzdXJlID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5p
c1VuZGVyTWVtb3J5UHJlc3N1cmUoKTsKLSAgICBpbnQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0g
dW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250
RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOworICAgIHVuc2lnbmVkIGluYWN0aXZlRm9udERh
dGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUlu
YWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVGb250RGF0YTsKIAogICAgIGlmIChjYWNoZWRG
b250cygpLnNpemUoKSA8IGluYWN0aXZlRm9udERhdGFMaW1pdCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGludCBpbmFjdGl2ZUNvdW50ID0gaW5hY3RpdmVGb250Q291bnQoKTsKKyAgICB1bnNpZ25l
ZCBpbmFjdGl2ZUNvdW50ID0gaW5hY3RpdmVGb250Q291bnQoKTsKICAgICBpZiAoaW5hY3RpdmVD
b3VudCA8PSBpbmFjdGl2ZUZvbnREYXRhTGltaXQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlu
dCB0YXJnZXRGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRl
ck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRh
OworICAgIHVuc2lnbmVkIHRhcmdldEZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJl
ID8gY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY1RhcmdldElu
YWN0aXZlRm9udERhdGE7CiAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGluYWN0aXZlQ291bnQg
LSB0YXJnZXRGb250RGF0YUxpbWl0KTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YShpbnQgcHVyZ2VDb3VudCkKK3ZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKIHsKICAgICBwcnVuZVVucmVmZXJlbmNlZEVu
dHJpZXNGcm9tRm9udENhc2NhZGVDYWNoZSgpOwogICAgIHBydW5lU3lzdGVtRmFsbGJhY2tGb250
cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmgJKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgog
CiAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGZvbnRDb3VudCgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHNpemVfdCBpbmFjdGl2ZUZvbnRDb3VudCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCA9IElOVF9NQVgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIGNvdW50ID0gVUlOVF9N
QVgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFJlZlB0cjxGb250PiBmb250RnJvbURlc2Ny
aXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05UJiwg
QXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CkBAIC0xNjUsNyArMTY1LDcgQEAgcHJp
dmF0ZToKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBsYXRm
b3JtLgogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDdXN0b21G
YWxsYmFja0ZvbnQoY29uc3QgVUludDMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAgICBQ
YXNzUmVmUHRyPEZvbnQ+IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKTsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IGdldFN5c3RlbUZvbnRGYWxsYmFja0Zv
ckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCosIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogI2VuZGlmCiAgICAgc3RkOjp1bmlx
dWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJT1Mu
bW0JKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgc3Rh
dGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaAogICAgIHJldHVybiBjaGFyYWN0
ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpnZXRTeXN0ZW1Gb250RmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQorUGFzc1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmdldFN5c3RlbUZvbnRGYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29uc3Qg
Rm9udCogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBv
cmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKICAgICBDVEZvbnRSZWYgY3RGb250ID0g
cGxhdGZvcm1EYXRhLmZvbnQoKTsKQEAgLTE5NCwxMSArMTk0LDExIEBAIHN0YXRpYyBMYW5ndWFn
ZVNwZWNpZmljRm9udCBsYW5ndWFnZVNwZWMKICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZpY0Zv
bnQ6Ok5vbmU7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9y
Q2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250
KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5h
bEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIC8vIFVubGlrZSBPUyBYLCBvdXIgZmFsbGJhY2sgZm9udCBvbiBpUGhvbmUgaXMg
QXJpYWwgVW5pY29kZSwgd2hpY2ggZG9lc24ndCBoYXZlIHNvbWUgYXBwbGUtc3BlY2lmaWMgZ2x5
cGhzIGxpa2UgRjhGRi4KICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIEFwcGxlIEZhbGxiYWNrIGZv
bnQgaW4gdGhpcyBjYXNlLgotICAgIGlmIChsZW5ndGggPiAwICYmIHJlcXVpcmVzQ3VzdG9tRmFs
bGJhY2tGb250KCpjaGFyYWN0ZXJzKSkgeworICAgIGlmIChsZW5ndGggJiYgcmVxdWlyZXNDdXN0
b21GYWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMpKSB7CiAgICAgICAgIGF1dG8qIGZhbGxiYWNrID0g
Z2V0Q3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzLCBkZXNjcmlwdGlvbik7CiAgICAgICAg
IGlmICghZmFsbGJhY2spCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxNyw3ICsy
MTcsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvCiAgICAgfQog
CiAgICAgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBMYW5ndWFn
ZVNwZWNpZmljRm9udDo6Tm9uZTsKLSAgICBpZiAobGVuZ3RoID4gMCkKKyAgICBpZiAobGVuZ3Ro
KQogICAgICAgICBsYW5ndWFnZVNwZWNpZmljRm9udCA9IGxhbmd1YWdlU3BlY2lmaWNGYWxsYmFj
a0ZvbnQoYyk7CiAKICAgICBSZWZQdHI8Rm9udD4gZm9udDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
CShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVw
cmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFtX29yZGluYWxJdGVyYXRpb24pCiAgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudE9yZGluYWwgPSBtX2ZvcndhcmQgPyAxIDogbV9sYXJnZXN0
T3JkaW5hbDsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fb3JkaW5hbEl0ZXJhdGlvbiA+PSBtX29yZGluYWxWYWx1ZXMuc2l6ZSgpICsgMSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fb3JkaW5hbEl0ZXJhdGlvbiA+IG1fb3JkaW5hbFZhbHVlcy5z
aXplKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAgICAg
ICAgICAgICAvLyBPbmx5IGNvcHkrc29ydCB0aGUgdmFsdWVzIG9uY2UgcGVyIGxheW91dCBldmVu
IGlmIHRoZSBpdGVyYXRvciBpcyByZXNldC4KQEAgLTExMCwxMSArMTEwLDExIEBAIHByaXZhdGU6
CiAgICAgUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94KiBtX2JveDsKICAgICBSZW5kZXJCb3gq
IG1fY3VycmVudENoaWxkOwogICAgIGJvb2wgbV9mb3J3YXJkOwotICAgIHVuc2lnbmVkIGludCBt
X2N1cnJlbnRPcmRpbmFsOwotICAgIHVuc2lnbmVkIGludCBtX2xhcmdlc3RPcmRpbmFsOwotICAg
IEhhc2hTZXQ8dW5zaWduZWQgaW50PiBtX29yZGluYWxWYWx1ZXM7Ci0gICAgVmVjdG9yPHVuc2ln
bmVkIGludD4gbV9zb3J0ZWRPcmRpbmFsVmFsdWVzOwotICAgIGludCBtX29yZGluYWxJdGVyYXRp
b247CisgICAgdW5zaWduZWQgbV9jdXJyZW50T3JkaW5hbDsKKyAgICB1bnNpZ25lZCBtX2xhcmdl
c3RPcmRpbmFsOworICAgIEhhc2hTZXQ8dW5zaWduZWQ+IG1fb3JkaW5hbFZhbHVlczsKKyAgICBW
ZWN0b3I8dW5zaWduZWQ+IG1fc29ydGVkT3JkaW5hbFZhbHVlczsKKyAgICB1bnNpZ25lZCBtX29y
ZGluYWxJdGVyYXRpb247CiB9OwogCiBSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3g6OlJlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveChFbGVtZW50JiBlbGVtZW50LCBSZWY8UmVuZGVyU3R5bGU+
JiYgc3R5bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw3ICs2Nzcs
NyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6Y29tcHV0ZU92ZXJmbG93CiAgICAgY2xlYXJP
dmVyZmxvdygpOwogICAgIG1fb3ZlcmZsb3dpbmdDZWxscy5jbGVhcigpOwogICAgIHVuc2lnbmVk
IHRvdGFsQ2VsbHNDb3VudCA9IG5FZmZDb2xzICogdG90YWxSb3dzOwotICAgIGludCBtYXhBbGxv
d2VkT3ZlcmZsb3dpbmdDZWxsc0NvdW50ID0gdG90YWxDZWxsc0NvdW50IDwgZ01pblRhYmxlU2l6
ZVRvVXNlRmFzdFBhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgPyAwIDogZ01heEFsbG93ZWRP
dmVyZmxvd2luZ0NlbGxSYXRpb0ZvckZhc3RQYWludFBhdGggKiB0b3RhbENlbGxzQ291bnQ7Cisg
ICAgdW5zaWduZWQgbWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbHNDb3VudCA9IHRvdGFsQ2VsbHND
b3VudCA8IGdNaW5UYWJsZVNpemVUb1VzZUZhc3RQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxs
ID8gMCA6IGdNYXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxsUmF0aW9Gb3JGYXN0UGFpbnRQYXRoICog
dG90YWxDZWxsc0NvdW50OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgaGFzT3ZlcmZsb3dp
bmdDZWxsID0gZmFsc2U7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODEzMzEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wMy0xMCAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSB1bnNpZ25lZCBmb3IgSGFz
aFNldCBzaXplLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyNTE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hT
ZXQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdEluaXRpYWxDYXBhY2l0eSk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTGlzdEhhc2hTZXQuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTUtMDMtMDYgIEplciBOb2JsZSAgPGplci5u
b2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIG9wdGlvbiB0byBydW4td2Via2l0LXRl
c3RzIHRvIG92ZXJyaWRlIHRoZSBMYXlvdXRUZXN0cy8gZGlyZWN0b3J5CkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Myw3ICsxNDMsNyBAQCBURVNUKFdURl9IYXNoTWFwLCBJbml0aWFsaXplckxpc3QpCiAg
ICAgICAgIHsgNCwgImZvdXIiIH0sCiAgICAgfTsKIAotICAgIEVYUEVDVF9FUSg0LCBtYXAuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoNHUsIG1hcC5zaXplKCkpOwogCiAgICAgRVhQRUNUX0VRKCJv
bmUiLCBtYXAuZ2V0KDEpKTsKICAgICBFWFBFQ1RfRVEoInR3byIsIG1hcC5nZXQoMikpOwpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAJKHJldmlzaW9uIDE4
MTMzMSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHZvaWQgdGVzdEluaXRpYWxDYXBhY2l0eSgpCiAg
ICAgSGFzaFNldDxpbnQsIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEluaXRpYWxDYXBhY2l0eVRl
c3RIYXNoVHJhaXRzPGluaXRpYWxDYXBhY2l0eT4gPiB0ZXN0U2V0OwogCiAgICAgLy8gSW5pdGlh
bCBjYXBhY2l0eSBpcyBudWxsLgotICAgIEFTU0VSVF9FUSgwLCB0ZXN0U2V0LmNhcGFjaXR5KCkp
OworICAgIEFTU0VSVF9FUSgwdSwgdGVzdFNldC5jYXBhY2l0eSgpKTsKIAogICAgIC8vIEFkZGlu
ZyBpdGVtcyB1cCB0byBzaXplIHNob3VsZCBuZXZlciBjaGFuZ2UgdGhlIGNhcGFjaXR5LgogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTGlzdEhhc2hTZXQuY3BwCShyZXZpc2lvbiAxODEzMzEpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9MaXN0SGFzaFNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDcgKzc4LDcgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIEFwcGVuZE9yTW92
ZVRvTGFzdAogICAgIHJlc3VsdCA9IGxpc3QuYXBwZW5kT3JNb3ZlVG9MYXN0KDMpOwogICAgIEFT
U0VSVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKIAotICAgIEFTU0VSVF9FUShsaXN0LnNpemUo
KSwgMyk7CisgICAgQVNTRVJUX0VRKGxpc3Quc2l6ZSgpLCAzdSk7CiAKICAgICAvLyBUaGUgbGlz
dCBzaG91bGQgYmUgaW4gb3JkZXIgMSwgMiwgMy4KICAgICBMaXN0SGFzaFNldDxpbnQ+OjppdGVy
YXRvciBpdGVyYXRvciA9IGxpc3QuYmVnaW4oKTsKQEAgLTk5LDExICs5OSwxMSBAQCBURVNUKFdU
Rl9MaXN0SGFzaFNldCwgQXBwZW5kT3JNb3ZlVG9MYXN0CiAgICAgQVNTRVJUX1RSVUUocmVzdWx0
LmlzTmV3RW50cnkpOwogICAgIHJlc3VsdCA9IGxpc3QuYXBwZW5kT3JNb3ZlVG9MYXN0KDEpOwog
ICAgIEFTU0VSVF9GQUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgQVNTRVJUX0VRKDEsIGxp
c3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUsIGxpc3Quc2l6ZSgpKTsKIAogICAgIGxpc3Qu
YWRkKDIpOwogICAgIGxpc3QuYWRkKDMpOwotICAgIEFTU0VSVF9FUSgzLCBsaXN0LnNpemUoKSk7
CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0LnNpemUoKSk7CiAKICAgICAvLyBBcHBlbmRpbmcgMiBt
b3ZlIGl0IHRvIHRoZSBlbmQuCiAgICAgQVNTRVJUX0VRKDMsIGxpc3QubGFzdCgpKTsKQEAgLTEx
OCw3ICsxMTgsNyBAQCBURVNUKFdURl9MaXN0SGFzaFNldCwgQXBwZW5kT3JNb3ZlVG9MYXN0CiAg
ICAgQVNTRVJUX0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQgPSBsaXN0LmFw
cGVuZE9yTW92ZVRvTGFzdCgxKTsKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkp
OwotICAgIEFTU0VSVF9FUSgzLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0
LnNpemUoKSk7CiAKICAgICBMaXN0SGFzaFNldDxpbnQ+OjppdGVyYXRvciBpdGVyYXRvciA9IGxp
c3QuYmVnaW4oKTsKICAgICBBU1NFUlRfRVEoMywgKml0ZXJhdG9yKTsKQEAgLTEzOSw3ICsxMzks
NyBAQCBURVNUKFdURl9MaXN0SGFzaFNldCwgUHJlcGVuZE9yTW92ZVRvTGFzCiAgICAgcmVzdWx0
ID0gbGlzdC5wcmVwZW5kT3JNb3ZlVG9GaXJzdCgzKTsKICAgICBBU1NFUlRfVFJVRShyZXN1bHQu
aXNOZXdFbnRyeSk7CiAKLSAgICBBU1NFUlRfRVEobGlzdC5zaXplKCksIDMpOworICAgIEFTU0VS
VF9FUShsaXN0LnNpemUoKSwgM3UpOwogCiAgICAgLy8gVGhlIGxpc3Qgc2hvdWxkIGJlIGluIG9y
ZGVyIDMsIDEsIDIuCiAgICAgTGlzdEhhc2hTZXQ8aW50Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBs
aXN0LmJlZ2luKCk7CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCBURVNUKFdURl9MaXN0SGFzaFNldCwg
UHJlcGVuZE9yTW92ZVRvTGFzCiAgICAgQVNTRVJUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOwog
ICAgIHJlc3VsdCA9IGxpc3QucHJlcGVuZE9yTW92ZVRvRmlyc3QoMSk7CiAgICAgQVNTRVJUX0ZB
TFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlRfRVEoMSwgbGlzdC5zaXplKCkpOwor
ICAgIEFTU0VSVF9FUSgxdSwgbGlzdC5zaXplKCkpOwogCiAgICAgbGlzdC5hZGQoMik7CiAgICAg
bGlzdC5hZGQoMyk7Ci0gICAgQVNTRVJUX0VRKDMsIGxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRf
RVEoM3UsIGxpc3Quc2l6ZSgpKTsKIAogICAgIC8vIFByZXBlbmRpbmcgMiBtb3ZlIGl0IHRvIHRo
ZSBiZWdpbm5pbmcuCiAgICAgQVNTRVJUX0VRKDEsIGxpc3QuZmlyc3QoKSk7CkBAIC0xNzksNyAr
MTc5LDcgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIFByZXBlbmRPck1vdmVUb0xhcwogICAgIEFT
U0VSVF9GQUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgcmVzdWx0ID0gbGlzdC5wcmVwZW5k
T3JNb3ZlVG9GaXJzdCgzKTsKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOwot
ICAgIEFTU0VSVF9FUSgzLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0LnNp
emUoKSk7CiAKICAgICBMaXN0SGFzaFNldDxpbnQ+OjppdGVyYXRvciBpdGVyYXRvciA9IGxpc3Qu
YmVnaW4oKTsKICAgICBBU1NFUlRfRVEoMywgKml0ZXJhdG9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248345</attachid>
            <date>2015-03-10 12:20:04 -0700</date>
            <delta_ts>2015-03-10 13:23:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142518-20150310121941.patch</filename>
            <type>text/plain</type>
            <size>39856</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE1LTAzLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNpemUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1MTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNv
bXBpbGVTdHViKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrU2V0Lmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrU2V0OjpyZW1vdmUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERh
dGEuaDoKKwogMjAxNS0wMy0xMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxp
YS5jb20+CiAKICAgICAgICAgR0NDOiBDUkFTSCgpIHNob3VsZCBiZSBhbm5vdGF0ZWQgd2l0aCBO
T1JFVFVSTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZSgpCiAgICAgICAgICAgICBwb3NzaWJsZU5v
ZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOwogICAgIH0KIAotICAgIGludCBvbGRQb3NzaWJs
ZU5vZGVzU2l6ZTsKKyAgICB1bnNpZ25lZCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKICAgICBkbyB7
CiAgICAgICAgIG9sZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CiAg
ICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODEzMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
ICAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKICAgICAKICAgICB3
aGlsZSAoIXRvTWF0ZXJpYWxpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGludCBwcmV2aW91c1Rv
TWF0ZXJpYWxpemVTaXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CisgICAgICAgIHVuc2lnbmVk
IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUgPSB0b01hdGVyaWFsaXplLnNpemUoKTsKICAgICAg
ICAgCiAgICAgICAgIFZlY3RvcjxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmts
aXN0OwogICAgICAgICB3b3JrbGlzdC5hcHBlbmRSYW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCks
IHRvTWF0ZXJpYWxpemUuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9ja1NldC5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrU2V0OjphZGQoTWFya2VkQmwKIAogaW5saW5lIHZv
aWQgTWFya2VkQmxvY2tTZXQ6OnJlbW92ZShNYXJrZWRCbG9jayogYmxvY2spCiB7Ci0gICAgaW50
IG9sZENhcGFjaXR5ID0gbV9zZXQuY2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBvbGRDYXBhY2l0
eSA9IG1fc2V0LmNhcGFjaXR5KCk7CiAgICAgbV9zZXQucmVtb3ZlKGJsb2NrKTsKICAgICBpZiAo
bV9zZXQuY2FwYWNpdHkoKSAhPSBvbGRDYXBhY2l0eSkgLy8gSW5kaWNhdGVzIHdlJ3ZlIHJlbW92
ZWQgYSBsb3Qgb2YgYmxvY2tzLgogICAgICAgICByZWNvbXB1dGVGaWx0ZXIoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAkocmV2aXNpb24gMTgx
MzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJy
aWRlOwotICAgICAgICBpbnQgbV9saXZlS2V5Q291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbGl2
ZUtleUNvdW50OwogICAgICAgICBXZWFrTWFwRGF0YSogbV90YXJnZXQ7CiAgICAgfTsKICAgICBE
ZWFkS2V5Q2xlYW5lciBtX2RlYWRLZXlDbGVhbmVyOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTMzMSkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTUtMDMtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBVc2UgdW5zaWduZWQgZm9yIEhhc2hTZXQgc2l6ZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6
CisgICAgICAgIChXVEY6OlRyYWl0cz46OnNpemUpOgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpj
YXBhY2l0eSk6CisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAgKFdURjo6WD46OnNp
emUpOgorICAgICAgICAoV1RGOjpYPjo6Y2FwYWNpdHkpOgorICAgICAgICAqIHd0Zi9IYXNoU2V0
Lmg6CisgICAgICAgIChXVEY6OlY+OjpzaXplKToKKyAgICAgICAgKFdURjo6Vj46OmNhcGFjaXR5
KToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OlN0YXRzOjpkdW1wU3RhdHMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OnNpemUpOgorICAg
ICAgICAoV1RGOjpIYXNoVGFibGU6OmNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJs
ZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAg
ICAgICAgKiB3dGYvTGlzdEhhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6VT46OnNpemUpOgorICAg
ICAgICAoV1RGOjpVPjo6Y2FwYWNpdHkpOgorCiAyMDE1LTAzLTEwICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgYm1hbGxvYzogdHJ5RmFzdE1hbGxvYyBzaG91
bGRuJ3QgY3Jhc2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAkocmV2aXNpb24gMTgxMzMx
KQorKysgU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc3dh
cChIYXNoQ291bnRlZFNldCYpOwogICAgICAgICAKLSAgICAgICAgaW50IHNpemUoKSBjb25zdDsK
LSAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdDsKKyAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICAvLyBJdGVyYXRvcnMgaXRlcmF0ZSBv
dmVyIHBhaXJzIG9mIHZhbHVlcyBhbmQgY291bnRzLgpAQCAtODQsMTMgKzg0LDEzIEBAIG5hbWVz
cGFjZSBXVEYgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIGlubGluZSBpbnQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnNpemUoKSBjb25zdAor
ICAgIGlubGluZSB1bnNpZ25lZCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzPjo6c2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9pbXBsLnNpemUo
KTsgCiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5saW5lIGludCBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y2FwYWNpdHkoKSBjb25zdAorICAg
IGlubGluZSB1bnNpZ25lZCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6Y2FwYWNpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW1wbC5jYXBh
Y2l0eSgpOyAKICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzd2FwKEhhc2hNYXAmKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7
Ci0gICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Owor
ICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAKICAgICAvLyBpdGVyYXRvcnMgaXRlcmF0ZSBvdmVyIHBhaXJzIG9mIGtleXMgYW5kIHZhbHVl
cwpAQCAtMTk1LDEzICsxOTUsMTMgQEAgaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6c3dhcAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGludCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpzaXplKCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgaW50IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29u
c3QKK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNv
bnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNldC5o
CShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDggKzYzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgdm9pZCBz
d2FwKEhhc2hTZXQmKTsKIAotICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgICAgICBpbnQg
Y2FwYWNpdHkoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgICAg
ICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKIAogICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0OwpAQCAtMTQ5LDEzICsxNDksMTMg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgaW50IEhhc2hTZXQ8VCwgVSwgVj46OnNp
emUoKSBjb25zdAorICAgIGlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGlu
ZSBpbnQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAorICAgIGlubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZp
c2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEzLDE2ICszMTMsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBudW1BY2Nlc3NlczsKLSAgICAgICAgICAg
IGludCBudW1SZWhhc2hlczsKLSAgICAgICAgICAgIGludCBudW1SZW1vdmVzOwotICAgICAgICAg
ICAgaW50IG51bVJlaW5zZXJ0czsKLQotICAgICAgICAgICAgaW50IG1heENvbGxpc2lvbnM7Ci0g
ICAgICAgICAgICBpbnQgbnVtQ29sbGlzaW9uczsKLSAgICAgICAgICAgIGludCBjb2xsaXNpb25H
cmFwaFs0MDk2XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUFjY2Vzc2VzOworICAgICAgICAg
ICAgdW5zaWduZWQgbnVtUmVoYXNoZXM7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1SZW1vdmVz
OworICAgICAgICAgICAgdW5zaWduZWQgbnVtUmVpbnNlcnRzOworCisgICAgICAgICAgICB1bnNp
Z25lZCBtYXhDb2xsaXNpb25zOworICAgICAgICAgICAgdW5zaWduZWQgbnVtQ29sbGlzaW9uczsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNvbGxpc2lvbkdyYXBoWzQwOTZdOwogCi0gICAgICAgICAg
ICB2b2lkIHJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50IGNvdW50KQorICAgICAgICAgICAgdm9p
ZCByZWNvcmRDb2xsaXNpb25BdENvdW50KHVuc2lnbmVkIGNvdW50KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCiAgICAgICAgICAgICAg
ICAgICAgIG1heENvbGxpc2lvbnMgPSBjb3VudDsKQEAgLTMzNiw3ICszMzYsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgYWNjZXNzZXNcbiIsIG51bUFj
Y2Vzc2VzKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgdG90YWwgY29sbGlzaW9ucywg
YXZlcmFnZSAlLjJmIHByb2JlcyBwZXIgYWNjZXNzXG4iLCBudW1Db2xsaXNpb25zLCAxLjAgKiAo
bnVtQWNjZXNzZXMgKyBudW1Db2xsaXNpb25zKSAvIG51bUFjY2Vzc2VzKTsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigibG9uZ2VzdCBjb2xsaXNpb24gY2hhaW46ICVkXG4iLCBtYXhDb2xsaXNp
b25zKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtYXhDb2xsaXNpb25z
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG1heENv
bGxpc2lvbnM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAlZCBsb29r
dXBzIHdpdGggZXhhY3RseSAlZCBjb2xsaXNpb25zICglLjJmJSUgLCAlLjJmJSUgd2l0aCB0aGlz
IG1hbnkgb3IgbW9yZSlcbiIsIGNvbGxpc2lvbkdyYXBoW2ldLCBpLCAxMDAuMCAqIChjb2xsaXNp
b25HcmFwaFtpXSAtIGNvbGxpc2lvbkdyYXBoW2krMV0pIC8gbnVtQWNjZXNzZXMsIDEwMC4wICog
Y29sbGlzaW9uR3JhcGhbaV0gLyBudW1BY2Nlc3Nlcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIlZCByZWhhc2hlc1xuIiwgbnVtUmVoYXNoZXMpOwpAQCAt
MzcxLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUNvbnN0SXRlcmF0
b3IobV90YWJsZSk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJsZSArIG1fdGFibGVTaXplKTsgfQog
Ci0gICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQotICAgICAg
ICBpbnQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlU2l6ZTsgfQorICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgICAgICB1bnNp
Z25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CiAgICAgICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2tleUNvdW50OyB9CiAKICAgICAgICAgQWRk
UmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgdmFsdWUpOyB9CkBAIC00
MjEsOCArNDIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUoaW50IHNpemUpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgaW50IHNpemUp
OworICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUp
OworICAgICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwg
dW5zaWduZWQgc2l6ZSk7CiAKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwg
Ym9vbD4gTG9va3VwVHlwZTsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8TG9va3VwVHlwZSwg
dW5zaWduZWQ+IEZ1bGxMb29rdXBUeXBlOwpAQCAtNDQzLDcgKzQ0Myw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBWYWx1ZVR5cGUqIGV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0
cik7CiAgICAgICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2gobV90YWJsZVNpemUgLyAyLCBudWxs
cHRyKTsgfQogCi0gICAgICAgIFZhbHVlVHlwZSogcmVoYXNoKGludCBuZXdUYWJsZVNpemUsIFZh
bHVlVHlwZSogZW50cnkpOworICAgICAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1bnNpZ25lZCBuZXdU
YWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOwogICAgICAgICBWYWx1ZVR5cGUqIHJlaW5zZXJ0
KFZhbHVlVHlwZSYmKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZh
bHVlVHlwZSYgYnVja2V0KTsKQEAgLTQ2OSwxNCArNDY5LDE0IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CiAjZW5kaWYKIAot
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1fbWF4TG9hZCA9IDI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbV9taW5Mb2FkID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1f
bWF4TG9hZCA9IDI7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtX21pbkxvYWQgPSA2
OwogCiAgICAgICAgIFZhbHVlVHlwZSogbV90YWJsZTsKLSAgICAgICAgaW50IG1fdGFibGVTaXpl
OwotICAgICAgICBpbnQgbV90YWJsZVNpemVNYXNrOwotICAgICAgICBpbnQgbV9rZXlDb3VudDsK
LSAgICAgICAgaW50IG1fZGVsZXRlZENvdW50OworICAgICAgICB1bnNpZ25lZCBtX3RhYmxlU2l6
ZTsKKyAgICAgICAgdW5zaWduZWQgbV90YWJsZVNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBt
X2tleUNvdW50OworICAgICAgICB1bnNpZ25lZCBtX2RlbGV0ZWRDb3VudDsKIAogI2lmIENIRUNL
X0hBU0hUQUJMRV9JVEVSQVRPUlMKICAgICBwdWJsaWM6CkBAIC01MjYsNyArNTI2LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgc3RydWN0IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZSB7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6
ZVNwbGl0dGVyPHNpemUsICEoc2l6ZSAmIChzaXplIC0gMSkpPjo6dmFsdWU7CiAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemUgPiAwLCBIYXNoVGFibGVOb25aZXJvTWluaW11bUNhcGFjaXR5KTsK
LSAgICAgICAgQ09NUElMRV9BU1NFUlQoIXN0YXRpY19jYXN0PGludD4odmFsdWUgPj4gMzEpLCBI
YXNoVGFibGVOb0NhcGFjaXR5T3ZlcmZsb3cpOworICAgICAgICBDT01QSUxFX0FTU0VSVCghc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlID4+IDMxKSwgSGFzaFRhYmxlTm9DYXBhY2l0eU92ZXJm
bG93KTsKICAgICAgICAgQ09NUElMRV9BU1NFUlQodmFsdWUgPiAoMiAqIHNpemUpLCBIYXNoVGFi
bGVDYXBhY2l0eUhvbGRzQ29udGVudFNpemUpOwogICAgIH07CiAKQEAgLTU4OSwxMSArNTg5LDEx
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CiAKLSAgICAgICAgaW50IGsgPSAwOwotICAgICAgICBpbnQgc2l6ZU1hc2sgPSBt
X3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOworICAgICAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9
IG1fdGFibGU7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
OwotICAgICAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKIAogICAgICAgICBpZiAoIXRhYmxlKQogICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC02NDYsMTUgKzY0NiwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQVNTRVJUKG1f
dGFibGUpOwogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnQgayA9IDA7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUq
IHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNr
OworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAg
dW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIGludCBpID0g
aCAmIHNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNz
ZXM7Ci0gICAgICAgIGludCBwcm9iZUNvdW50ID0gMDsKKyAgICAgICAgdW5zaWduZWQgcHJvYmVD
b3VudCA9IDA7CiAjZW5kaWYKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQpA
QCAtNzA3LDExICs3MDcsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChtX3Rh
YmxlKTsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAg
aW50IGsgPSAwOworICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0
YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsK
KyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CiAgICAgICAgIHVu
c2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICBpbnQgaSA9IGgg
JiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2Vz
OwpAQCAtODAxLDExICs4MDEsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgQVNTRVJU
KG1fdGFibGUpOwogCi0gICAgICAgIGludCBrID0gMDsKKyAgICAgICAgdW5zaWduZWQgayA9IDA7
CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICBpbnQgc2l6ZU1h
c2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJs
ZVNpemVNYXNrOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5
KTsKLSAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIGkgPSBo
ICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hU
YWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTEwNTgsMjIgKzEwNTgsMjIgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWxsb2NhdGVU
YWJsZShpbnQgc2l6ZSkgLT4gVmFsdWVUeXBlKgorICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjphbGxvY2F0
ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKICAgICB7CiAgICAgICAgIC8vIHdv
dWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxp
emF0aW9ucyBoZXJlLCBidXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAogICAgICAgICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGZhc3RaZXJvZWRNYWxsb2Moc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKSk7CiAgICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8VmFsdWVUeXBlKj4oZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0
KHJlc3VsdFtpXSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIGlu
dCBzaXplKQorICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0
YWJsZSwgdW5zaWduZWQgc2l6ZSkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkKICAgICAgICAg
ICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KQEAgLTEwODMsNyArMTA4
Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgYXV0byBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmV4
cGFuZChWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUqCiAgICAgewotICAgICAgICBpbnQg
bmV3U2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbmV3U2l6ZTsKICAgICAgICAgaWYgKG1fdGFibGVT
aXplID09IDApCiAgICAgICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOwogICAgICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQpAQCAtMTA5NSwxMSAr
MTA5NSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGF1dG8g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSwgVmFsdWVUeXBlKiBlbnRyeSkgLT4g
VmFsdWVUeXBlKgorICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVT
aXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUqCiAgICAgewogICAgICAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAotICAgICAgICBpbnQgb2xk
VGFibGVTaXplID0gbV90YWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9
IG1fdGFibGVTaXplOwogICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKIAog
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCkBAIC0xMTE3LDcgKzExMTcsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKIAog
ICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBudWxscHRyOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaXNFbXB0eU9yRGVs
ZXRlZEJ1Y2tldChvbGRUYWJsZVtpXSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZFRh
YmxlW2ldICE9IGVudHJ5KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNTQsOSAr
MTI1NCw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgaW50IGRlbGV0
ZWRDb3VudCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV90YWJsZVNpemU7ICsr
aikgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGRlbGV0
ZWRDb3VudCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX3RhYmxlU2l6
ZTsgKytqKSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGo7CiAg
ICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFzaFQKIAogICAgIC8vIFRoZSBzdGFy
dGluZyB0YWJsZSBzaXplLiBDYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIHdlIGtub3cgYmVmb3JlaGFu
ZCB0aGF0CiAgICAgLy8gYSBoYXNoIHRhYmxlIHdpbGwgaGF2ZSBhdCBsZWFzdCBOIGVudHJpZXMu
Ci0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gODsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IDg7CiB9OwogCiAvLyBEZWZhdWx0IGlu
dGVnZXIgdHJhaXRzIGRpc2FsbG93IGJvdGggMCBhbmQgLTEgYXMga2V5cyAobWF4IHZhbHVlIGlu
c3RlYWQgb2YgLTEgZm9yIHVuc2lnbmVkKS4KQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdHJ1Y3QgUGFp
ckhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvICYmIFNlY29uZFRy
YWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKICAgICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlW
YWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlKCks
IFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBt
aW5pbXVtVGFibGVTaXplID0gRmlyc3RUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBGaXJzdFRyYWl0czo6bWluaW11
bVRhYmxlU2l6ZTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFp
dFR5cGUmIHNsb3QpIHsgRmlyc3RUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmZp
cnN0KTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYg
dmFsdWUpIHsgcmV0dXJuIEZpcnN0VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7
IH0KQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1Y3QgS2V5VmFsdWVQYWlySGFzaFRyYWl0cyA6IEdl
bmVyaWNICiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0
czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKICAg
ICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEtleVZhbHVlUGFp
cjx0eXBlbmFtZSBLZXlUcmFpdHM6OkVtcHR5VmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVRyYWl0
czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBWYWx1ZVRyYWl0czo6
ZW1wdHlWYWx1ZSgpKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXpl
ID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogCiAgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlU
cmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBLZXlUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmtleSk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xp
c3RIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAko
cmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsOCArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3YXAoTGlzdEhh
c2hTZXQmKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7Ci0gICAgaW50IGNhcGFjaXR5KCkgY29u
c3Q7CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1ha2VJdGVyYXRvcihtX2hlYWQpOyB9CkBAIC0zNDcsMTMgKzM0NywxMyBAQCBp
bmxpbmUgTGlzdEhhc2hTZXQ8VCwgVT46On5MaXN0SGFzaFNldCgpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgaW50IExpc3RIYXNoU2V0PFQsIFU+OjpzaXpl
KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBMaXN0SGFzaFNldDxULCBVPjo6c2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgotaW5saW5lIGludCBMaXN0SGFzaFNldDxULCBVPjo6Y2FwYWNpdHkoKSBj
b25zdAoraW5saW5lIHVuc2lnbmVkIExpc3RIYXNoU2V0PFQsIFU+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4MTMzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDM3IEBACisyMDE1LTAzLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNp
emUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpjaGVja0ZvckR1cGxpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlQ29uc3RhbnRQb29sSW5kZXgpOgorICAg
ICAgICAqIGRvbS9TY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVu
bmVyOjp+U2NyaXB0UnVubmVyKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9u
dENhY2hlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTeXN0ZW1Gb250
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lz
dGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
c2ltaWxhckZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3Rl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGbGV4Qm94SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
Ojpjb21wdXRlT3ZlcmZsb3dGcm9tQ2VsbHMpOgorCiAyMDE1LTAzLTEwICBSb2dlciBGb25nICA8
cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRqdXN0bWVudHMgdG8gbWVkaWEgY29u
dHJvbCBmb250cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXREZWZsYXRlRnJhbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RGVmbGF0ZUZyYW1lci5jcHAJKHJldmlzaW9uIDE4MTMz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRl
RnJhbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBib29sIFdlYlNvY2tl
dEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvCiAgICAgfQogICAgIG1fcmVzcG9uc2VQcm9jZXNz
ZWQgPSB0cnVlOwogCi0gICAgaW50IGV4cGVjdGVkTnVtUGFyYW1ldGVycyA9IDA7CisgICAgdW5z
aWduZWQgZXhwZWN0ZWROdW1QYXJhbWV0ZXJzID0gMDsKICAgICBpbnQgd2luZG93Qml0cyA9IDE1
OwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBwYXJhbWV0ZXIg
PSBzZXJ2ZXJQYXJhbWV0ZXJzLmZpbmQoIm1heF93aW5kb3dfYml0cyIpOwogICAgIGlmIChwYXJh
bWV0ZXIgIT0gc2VydmVyUGFyYW1ldGVycy5lbmQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lv
biAxODEzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzUsNyArNTc1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gSGFuZGxlIGR1cGxpY2F0ZSByZWZlcmVuY2VzCiAgICAgICAgIGlmIChmb3VuZCAh
PSBtX29iamVjdFBvb2wuZW5kKCkpIHsKICAgICAgICAgICAgIHdyaXRlKE9iamVjdFJlZmVyZW5j
ZVRhZyk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZm91bmQtPnZh
bHVlKSA8IG1fb2JqZWN0UG9vbC5zaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGZvdW5kLT52
YWx1ZSA8IG1fb2JqZWN0UG9vbC5zaXplKCkpOwogICAgICAgICAgICAgd3JpdGVPYmplY3RJbmRl
eChmb3VuZC0+dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAg
LTk2NSw3ICs5NjUsNyBAQCBwcml2YXRlOgogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQg
d3JpdGVDb25zdGFudFBvb2xJbmRleChjb25zdCBUJiBjb25zdGFudFBvb2wsIHVuc2lnbmVkIGkp
CiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkgPCBjb25zdGFu
dFBvb2wuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKGkgPCBjb25zdGFudFBvb2wuc2l6ZSgpKTsK
ICAgICAgICAgaWYgKGNvbnN0YW50UG9vbC5zaXplKCkgPD0gMHhGRikKICAgICAgICAgICAgIHdy
aXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGkpKTsKICAgICAgICAgZWxzZSBpZiAoY29uc3RhbnRQ
b29sLnNpemUoKSA8PSAweEZGRkYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVu
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNw
cAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdFJ1bm5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgU2NyaXB0UnVubmVyOjp+U2NyaXB0
UnVubmVyKCkKICAgICAgICAgbV9kb2N1bWVudC5kZWNyZW1lbnRMb2FkRXZlbnREZWxheUNvdW50
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NjcmlwdHNUb0V4ZWN1dGVJbk9yZGVy
LnNpemUoKTsgKytpKQogICAgICAgICBtX2RvY3VtZW50LmRlY3JlbWVudExvYWRFdmVudERlbGF5
Q291bnQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcGVuZGluZ0FzeW5jU2NyaXB0cy5z
aXplKCk7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wZW5kaW5nQXN5bmNT
Y3JpcHRzLnNpemUoKTsgKytpKQogICAgICAgICBtX2RvY3VtZW50LmRlY3JlbWVudExvYWRFdmVu
dERlbGF5Q291bnQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFNjaGVkdWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyAr
MTA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxSZXNvdXJj
ZUxvYWRlcj4+IFJlcXVlc3RNYXA7CiAgICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRp
bmc7CiAgICAgICAgIGNvbnN0IFN0cmluZyBtX25hbWU7Ci0gICAgICAgIGNvbnN0IGludCBtX21h
eFJlcXVlc3RzSW5GbGlnaHQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1fbWF4UmVxdWVzdHNJ
bkZsaWdodDsKICAgICB9OwogCiAgICAgZW51bSBDcmVhdGVIb3N0UG9saWN5IHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxODEzMzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIyLDcgKzQyMiw3IEBAIFJlZlB0cjxGb250PiBGb250OjpzeXN0ZW1GYWxsYmFj
a0ZvbnRGb3IKIAogICAgIGlmICghZmFsbGJhY2tGb250KSB7CiAgICAgICAgIFVDaGFyIGNvZGVV
bml0c1syXTsKLSAgICAgICAgaW50IGNvZGVVbml0c0xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQg
Y29kZVVuaXRzTGVuZ3RoOwogICAgICAgICBpZiAoVV9JU19CTVAoY2hhcmFjdGVyKSkgewogICAg
ICAgICAgICAgY29kZVVuaXRzWzBdID0gRm9udENhc2NhZGU6Om5vcm1hbGl6ZVNwYWNlcyhjaGFy
YWN0ZXIpOwogICAgICAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkocmV2aXNpb24gMTgx
MzMxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY4LDE1ICszNjgsMTUgQEAgc3RhdGljIEZvbnREYXRhQ2FjaGUm
IGNhY2hlZEZvbnRzKCkKIAogCiAjaWYgUExBVEZPUk0oSU9TKQotY29uc3QgaW50IGNNYXhJbmFj
dGl2ZUZvbnREYXRhID0gMTIwOwotY29uc3QgaW50IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0g
MTAwOworY29uc3QgdW5zaWduZWQgY01heEluYWN0aXZlRm9udERhdGEgPSAxMjA7Citjb25zdCB1
bnNpZ25lZCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDEwMDsKICNlbHNlCi1jb25zdCBpbnQg
Y01heEluYWN0aXZlRm9udERhdGEgPSAyMjU7Ci1jb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9u
dERhdGEgPSAyMDA7Citjb25zdCB1bnNpZ25lZCBjTWF4SW5hY3RpdmVGb250RGF0YSA9IDIyNTsK
K2NvbnN0IHVuc2lnbmVkIGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMjAwOwogI2VuZGlmCiAK
LWNvbnN0IGludCBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSA1MDsK
LWNvbnN0IGludCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgPSAz
MDsKK2NvbnN0IHVuc2lnbmVkIGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0
YSA9IDUwOworY29uc3QgdW5zaWduZWQgY1RhcmdldFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2
ZUZvbnREYXRhID0gMzA7CiAKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OmZvbnRGb3JGYW1pbHko
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5LCBib29sIGNoZWNraW5nQWx0ZXJuYXRlTmFtZSkKIHsKQEAgLTQxMSwxOSArNDEx
LDE5IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZVRpbWVyRmlyZWQoKQogdm9pZCBGb250Q2FjaGU6
OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKCkKIHsKICAgICBib29sIHVuZGVyTWVtb3J5
UHJlc3N1cmUgPSBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1v
cnlQcmVzc3VyZSgpOwotICAgIGludCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9y
eVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01h
eEluYWN0aXZlRm9udERhdGE7CisgICAgdW5zaWduZWQgaW5hY3RpdmVGb250RGF0YUxpbWl0ID0g
dW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250
RGF0YSA6IGNNYXhJbmFjdGl2ZUZvbnREYXRhOwogCiAgICAgaWYgKGNhY2hlZEZvbnRzKCkuc2l6
ZSgpIDwgaW5hY3RpdmVGb250RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47Ci0gICAgaW50IGlu
YWN0aXZlQ291bnQgPSBpbmFjdGl2ZUZvbnRDb3VudCgpOworICAgIHVuc2lnbmVkIGluYWN0aXZl
Q291bnQgPSBpbmFjdGl2ZUZvbnRDb3VudCgpOwogICAgIGlmIChpbmFjdGl2ZUNvdW50IDw9IGlu
YWN0aXZlRm9udERhdGFMaW1pdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHRhcmdldEZv
bnREYXRhTGltaXQgPSB1bmRlck1lbW9yeVByZXNzdXJlID8gY1RhcmdldFVuZGVyTWVtb3J5UHJl
c3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY1RhcmdldEluYWN0aXZlRm9udERhdGE7CisgICAgdW5z
aWduZWQgdGFyZ2V0Rm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0
VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250
RGF0YTsKICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoaW5hY3RpdmVDb3VudCAtIHRhcmdldEZv
bnREYXRhTGltaXQpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KGludCBwdXJnZUNvdW50KQordm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YSh1
bnNpZ25lZCBwdXJnZUNvdW50KQogewogICAgIHBydW5lVW5yZWZlcmVuY2VkRW50cmllc0Zyb21G
b250Q2FzY2FkZUNhY2hlKCk7CiAgICAgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNp
b24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIEZvbnRDYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICAvLyBUaGlzIG1l
dGhvZCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCi0gICAgUmVmUHRyPEZvbnQ+IHN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgaW50IGxlbmd0aCk7CisgICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBGb250KiBvcmlnaW5h
bEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIC8vIEFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRm
b3JtLgogICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGlj
OgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IGZvbnRDb3VudCgpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHNpemVfdCBpbmFjdGl2ZUZvbnRDb3VudCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCA9IElOVF9NQVgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIGNvdW50ID0gVUlO
VF9NQVgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFJlZlB0cjxGb250PiBmb250RnJvbURl
c2NyaXB0aW9uQW5kTG9nRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBMT0dGT05U
JiwgQXRvbWljU3RyaW5nJiBvdXRGb250RmFtaWx5TmFtZSk7CkBAIC0xNjUsNyArMTY1LDcgQEAg
cHJpdmF0ZToKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBieSBlYWNoIHBs
YXRmb3JtLgogI2lmIFBMQVRGT1JNKElPUykKICAgICBGb250UGxhdGZvcm1EYXRhKiBnZXRDdXN0
b21GYWxsYmFja0ZvbnQoY29uc3QgVUludDMyLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKLSAg
ICBQYXNzUmVmUHRyPEZvbnQ+IGdldFN5c3RlbUZvbnRGYWxsYmFja0ZvckNoYXJhY3RlcnMoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCosIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBQYXNzUmVmUHRyPEZvbnQ+IGdldFN5c3RlbUZvbnRGYWxsYmFj
a0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgRm9udCosIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpOwogI2VuZGlmCiAgICAgc3RkOjp1
bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2lvcy9Gb250Q2FjaGVJ
T1MubW0JKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2lvcy9Gb250Q2FjaGVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAg
c3RhdGljIENGQ2hhcmFjdGVyU2V0UmVmIHBob25lRmFsbGJhY2tDaAogICAgIHJldHVybiBjaGFy
YWN0ZXJTZXQ7CiB9CiAKLVBhc3NSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpnZXRTeXN0ZW1Gb250
RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxGb250PiBGb250Q2FjaGU6OmdldFN5c3RlbUZvbnRGYWxs
YmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgY29u
c3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEg
PSBvcmlnaW5hbEZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKTsKICAgICBDVEZvbnRSZWYgY3RGb250
ID0gcGxhdGZvcm1EYXRhLmZvbnQoKTsKQEAgLTE5NCwxMSArMTk0LDExIEBAIHN0YXRpYyBMYW5n
dWFnZVNwZWNpZmljRm9udCBsYW5ndWFnZVNwZWMKICAgICByZXR1cm4gTGFuZ3VhZ2VTcGVjaWZp
Y0ZvbnQ6Ok5vbmU7CiB9CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNr
Rm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBG
b250KiBvcmlnaW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmln
aW5hbEZvbnREYXRhLCBib29sLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIC8vIFVubGlrZSBPUyBYLCBvdXIgZmFsbGJhY2sgZm9udCBvbiBpUGhvbmUg
aXMgQXJpYWwgVW5pY29kZSwgd2hpY2ggZG9lc24ndCBoYXZlIHNvbWUgYXBwbGUtc3BlY2lmaWMg
Z2x5cGhzIGxpa2UgRjhGRi4KICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIEFwcGxlIEZhbGxiYWNr
IGZvbnQgaW4gdGhpcyBjYXNlLgotICAgIGlmIChsZW5ndGggPiAwICYmIHJlcXVpcmVzQ3VzdG9t
RmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzKSkgeworICAgIGlmIChsZW5ndGggJiYgcmVxdWlyZXND
dXN0b21GYWxsYmFja0ZvbnQoKmNoYXJhY3RlcnMpKSB7CiAgICAgICAgIGF1dG8qIGZhbGxiYWNr
ID0gZ2V0Q3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzLCBkZXNjcmlwdGlvbik7CiAgICAg
ICAgIGlmICghZmFsbGJhY2spCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIxNyw3
ICsyMTcsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvCiAgICAg
fQogCiAgICAgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgPSBMYW5n
dWFnZVNwZWNpZmljRm9udDo6Tm9uZTsKLSAgICBpZiAobGVuZ3RoID4gMCkKKyAgICBpZiAobGVu
Z3RoKQogICAgICAgICBsYW5ndWFnZVNwZWNpZmljRm9udCA9IGxhbmd1YWdlU3BlY2lmaWNGYWxs
YmFja0ZvbnQoYyk7CiAKICAgICBSZWZQdHI8Rm9udD4gZm9udDsKQEAgLTQ3OSw3ICs0NzksNyBA
QCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zCiAgICAgICAgIHN0YXRp
YyBTdHJpbmcqIG1hdGNoV29yZHNbM10gPSB7ICZhcmFiaWMuZ2V0KCksICZwYXNodG8uZ2V0KCks
ICZ1cmR1LmdldCgpIH07CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJp
bmc+IGdlZXphUGxhaW4oIkdlZXphUHJvIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGdlZXph
Qm9sZCgiR2VlemFQcm8tQm9sZCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
OwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDMgJiYgIWZvbnQ7ICsraikgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7CiAgICAgICAgICAg
ICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRjaFdvcmRzW2pdLCBmYWxzZSkpCiAgICAgICAgICAg
ICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHkoZGVzY3JpcHRpb24sIGlzRm9udFdlaWdodEJvbGQo
ZGVzY3JpcHRpb24ud2VpZ2h0KCkpID8gZ2VlemFCb2xkIDogZ2VlemFQbGFpbik7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ZvbnRDYWNoZU1hYy5tbQkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDYWNoZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzI1
LDcgKzMyNSw3IEBAIHN0YXRpYyBib29sIHNob3VsZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQKICNl
bmRpZgogCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8QXRvbWljU3RyaW5nPj4g
a25vd25GYW1pbGllczsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1heENhY2hlU2l6ZSA9IDEyODsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q2FjaGVTaXplID0gMTI4OwogICAgIEFTU0VS
VChrbm93bkZhbWlsaWVzLmdldCgpLnNpemUoKSA8PSBtYXhDYWNoZVNpemUpOwogICAgIGlmIChr
bm93bkZhbWlsaWVzLmdldCgpLnNpemUoKSA9PSBtYXhDYWNoZVNpemUpCiAgICAgICAgIGtub3du
RmFtaWxpZXMuZ2V0KCkucmVtb3ZlKGtub3duRmFtaWxpZXMuZ2V0KCkuYmVnaW4oKSk7CkBAIC0z
MzQsNyArMzM0LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkQXV0b0FjdGl2YXRlRm9udElmTmVlZAog
ICAgIHJldHVybiBrbm93bkZhbWlsaWVzLmdldCgpLmFkZChmYW1pbHkpLmlzTmV3RW50cnk7CiB9
CiAKLVJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZv
bnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKK1JlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmln
aW5hbEZvbnREYXRhLCBib29sIGlzUGxhdGZvcm1Gb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFVDaGFyMzIgY2hhcmFjdGVyOwogICAgIFUxNl9H
RVQoY2hhcmFjdGVycywgMCwgMCwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwpAQCAtNDE0LDcgKzQxNCw3
IEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnMKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyBuZXcg
U3RyaW5nKCJBcmFiaWMiKSwgbmV3IFN0cmluZygiUGFzaHRvIiksIG5ldyBTdHJpbmcoIlVyZHUi
KSB9OwogICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5n
LCBnZWV6YVN0ciwgKCJHZWV6YSBQcm8iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMyAmJiAhZm9udDsgKytqKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCAzICYmICFmb250OyArK2opIHsKICAgICAg
ICAgICAgIGlmIChmYW1pbHkuY29udGFpbnMoKm1hdGNoV29yZHNbal0sIGZhbHNlKSkKICAgICAg
ICAgICAgICAgICBmb250ID0gZm9udEZvckZhbWlseShkZXNjcmlwdGlvbiwgZ2VlemFTdHIpOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlm
ICghbV9vcmRpbmFsSXRlcmF0aW9uKQogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcmRp
bmFsID0gbV9mb3J3YXJkID8gMSA6IG1fbGFyZ2VzdE9yZGluYWw7CiAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX29yZGluYWxJdGVyYXRpb24gPj0gbV9v
cmRpbmFsVmFsdWVzLnNpemUoKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX29yZGlu
YWxJdGVyYXRpb24gPiBtX29yZGluYWxWYWx1ZXMuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjb3B5K3NvcnQg
dGhlIHZhbHVlcyBvbmNlIHBlciBsYXlvdXQgZXZlbiBpZiB0aGUgaXRlcmF0b3IgaXMgcmVzZXQu
CkBAIC0xMTAsMTEgKzExMCwxMSBAQCBwcml2YXRlOgogICAgIFJlbmRlckRlcHJlY2F0ZWRGbGV4
aWJsZUJveCogbV9ib3g7CiAgICAgUmVuZGVyQm94KiBtX2N1cnJlbnRDaGlsZDsKICAgICBib29s
IG1fZm9yd2FyZDsKLSAgICB1bnNpZ25lZCBpbnQgbV9jdXJyZW50T3JkaW5hbDsKLSAgICB1bnNp
Z25lZCBpbnQgbV9sYXJnZXN0T3JkaW5hbDsKLSAgICBIYXNoU2V0PHVuc2lnbmVkIGludD4gbV9v
cmRpbmFsVmFsdWVzOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBpbnQ+IG1fc29ydGVkT3JkaW5hbFZh
bHVlczsKLSAgICBpbnQgbV9vcmRpbmFsSXRlcmF0aW9uOworICAgIHVuc2lnbmVkIG1fY3VycmVu
dE9yZGluYWw7CisgICAgdW5zaWduZWQgbV9sYXJnZXN0T3JkaW5hbDsKKyAgICBIYXNoU2V0PHVu
c2lnbmVkPiBtX29yZGluYWxWYWx1ZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3NvcnRlZE9y
ZGluYWxWYWx1ZXM7CisgICAgdW5zaWduZWQgbV9vcmRpbmFsSXRlcmF0aW9uOwogfTsKIAogUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3goRWxl
bWVudCYgZWxlbWVudCwgUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE4
MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NzcsNyArNjc3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OmNvbXB1dGVPdmVyZmxvdwogICAgIGNsZWFyT3ZlcmZsb3coKTsKICAgICBtX292ZXJmbG93
aW5nQ2VsbHMuY2xlYXIoKTsKICAgICB1bnNpZ25lZCB0b3RhbENlbGxzQ291bnQgPSBuRWZmQ29s
cyAqIHRvdGFsUm93czsKLSAgICBpbnQgbWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbHNDb3VudCA9
IHRvdGFsQ2VsbHNDb3VudCA8IGdNaW5UYWJsZVNpemVUb1VzZUZhc3RQYWludFBhdGhXaXRoT3Zl
cmZsb3dpbmdDZWxsID8gMCA6IGdNYXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxsUmF0aW9Gb3JGYXN0
UGFpbnRQYXRoICogdG90YWxDZWxsc0NvdW50OworICAgIHVuc2lnbmVkIG1heEFsbG93ZWRPdmVy
Zmxvd2luZ0NlbGxzQ291bnQgPSB0b3RhbENlbGxzQ291bnQgPCBnTWluVGFibGVTaXplVG9Vc2VG
YXN0UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCA/IDAgOiBnTWF4QWxsb3dlZE92ZXJmbG93
aW5nQ2VsbFJhdGlvRm9yRmFzdFBhaW50UGF0aCAqIHRvdGFsQ2VsbHNDb3VudDsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCA9IGZhbHNlOwpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgx
MzMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTUtMDMtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBVc2UgdW5zaWduZWQgZm9yIEhhc2hTZXQgc2l6ZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvSGFzaE1hcC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OnRlc3RJbml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0xpc3RIYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
CiAyMDE1LTAzLTA2ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhbiBvcHRpb24gdG8gcnVuLXdlYmtpdC10ZXN0cyB0byBvdmVycmlkZSB0aGUgTGF5b3V0
VGVzdHMvIGRpcmVjdG9yeQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aE1hcC5jcHAJKHJldmlzaW9uIDE4MTMzMSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0hhc2hNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgVEVTVChX
VEZfSGFzaE1hcCwgSW5pdGlhbGl6ZXJMaXN0KQogICAgICAgICB7IDQsICJmb3VyIiB9LAogICAg
IH07CiAKLSAgICBFWFBFQ1RfRVEoNCwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDR1LCBt
YXAuc2l6ZSgpKTsKIAogICAgIEVYUEVDVF9FUSgib25lIiwgbWFwLmdldCgxKSk7CiAgICAgRVhQ
RUNUX0VRKCJ0d28iLCBtYXAuZ2V0KDIpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0hhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0hhc2hTZXQuY3BwCShyZXZpc2lvbiAxODEzMzEpCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBA
QCB2b2lkIHRlc3RJbml0aWFsQ2FwYWNpdHkoKQogICAgIEhhc2hTZXQ8aW50LCBEZWZhdWx0SGFz
aDxpbnQ+OjpIYXNoLCBJbml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0czxpbml0aWFsQ2FwYWNp
dHk+ID4gdGVzdFNldDsKIAogICAgIC8vIEluaXRpYWwgY2FwYWNpdHkgaXMgbnVsbC4KLSAgICBB
U1NFUlRfRVEoMCwgdGVzdFNldC5jYXBhY2l0eSgpKTsKKyAgICBBU1NFUlRfRVEoMHUsIHRlc3RT
ZXQuY2FwYWNpdHkoKSk7CiAKICAgICAvLyBBZGRpbmcgaXRlbXMgdXAgdG8gc2l6ZSBzaG91bGQg
bmV2ZXIgY2hhbmdlIHRoZSBjYXBhY2l0eS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTGlzdEhhc2hT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xpc3RI
YXNoU2V0LmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvTGlzdEhhc2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIFRF
U1QoV1RGX0xpc3RIYXNoU2V0LCBBcHBlbmRPck1vdmVUb0xhc3QKICAgICByZXN1bHQgPSBsaXN0
LmFwcGVuZE9yTW92ZVRvTGFzdCgzKTsKICAgICBBU1NFUlRfVFJVRShyZXN1bHQuaXNOZXdFbnRy
eSk7CiAKLSAgICBBU1NFUlRfRVEobGlzdC5zaXplKCksIDMpOworICAgIEFTU0VSVF9FUShsaXN0
LnNpemUoKSwgM3UpOwogCiAgICAgLy8gVGhlIGxpc3Qgc2hvdWxkIGJlIGluIG9yZGVyIDEsIDIs
IDMuCiAgICAgTGlzdEhhc2hTZXQ8aW50Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0LmJlZ2lu
KCk7CkBAIC05OSwxMSArOTksMTEgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIEFwcGVuZE9yTW92
ZVRvTGFzdAogICAgIEFTU0VSVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQg
PSBsaXN0LmFwcGVuZE9yTW92ZVRvTGFzdCgxKTsKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0Lmlz
TmV3RW50cnkpOwotICAgIEFTU0VSVF9FUSgxLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VR
KDF1LCBsaXN0LnNpemUoKSk7CiAKICAgICBsaXN0LmFkZCgyKTsKICAgICBsaXN0LmFkZCgzKTsK
LSAgICBBU1NFUlRfRVEoMywgbGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgzdSwgbGlzdC5z
aXplKCkpOwogCiAgICAgLy8gQXBwZW5kaW5nIDIgbW92ZSBpdCB0byB0aGUgZW5kLgogICAgIEFT
U0VSVF9FUSgzLCBsaXN0Lmxhc3QoKSk7CkBAIC0xMTgsNyArMTE4LDcgQEAgVEVTVChXVEZfTGlz
dEhhc2hTZXQsIEFwcGVuZE9yTW92ZVRvTGFzdAogICAgIEFTU0VSVF9GQUxTRShyZXN1bHQuaXNO
ZXdFbnRyeSk7CiAgICAgcmVzdWx0ID0gbGlzdC5hcHBlbmRPck1vdmVUb0xhc3QoMSk7CiAgICAg
QVNTRVJUX0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlRfRVEoMywgbGlzdC5z
aXplKCkpOworICAgIEFTU0VSVF9FUSgzdSwgbGlzdC5zaXplKCkpOwogCiAgICAgTGlzdEhhc2hT
ZXQ8aW50Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0LmJlZ2luKCk7CiAgICAgQVNTRVJUX0VR
KDMsICppdGVyYXRvcik7CkBAIC0xMzksNyArMTM5LDcgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQs
IFByZXBlbmRPck1vdmVUb0xhcwogICAgIHJlc3VsdCA9IGxpc3QucHJlcGVuZE9yTW92ZVRvRmly
c3QoMyk7CiAgICAgQVNTRVJUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOwogCi0gICAgQVNTRVJU
X0VRKGxpc3Quc2l6ZSgpLCAzKTsKKyAgICBBU1NFUlRfRVEobGlzdC5zaXplKCksIDN1KTsKIAog
ICAgIC8vIFRoZSBsaXN0IHNob3VsZCBiZSBpbiBvcmRlciAzLCAxLCAyLgogICAgIExpc3RIYXNo
U2V0PGludD46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5iZWdpbigpOwpAQCAtMTYwLDExICsx
NjAsMTEgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIFByZXBlbmRPck1vdmVUb0xhcwogICAgIEFT
U0VSVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQgPSBsaXN0LnByZXBlbmRP
ck1vdmVUb0ZpcnN0KDEpOwogICAgIEFTU0VSVF9GQUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7Ci0g
ICAgQVNTRVJUX0VRKDEsIGxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUsIGxpc3Quc2l6
ZSgpKTsKIAogICAgIGxpc3QuYWRkKDIpOwogICAgIGxpc3QuYWRkKDMpOwotICAgIEFTU0VSVF9F
USgzLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0LnNpemUoKSk7CiAKICAg
ICAvLyBQcmVwZW5kaW5nIDIgbW92ZSBpdCB0byB0aGUgYmVnaW5uaW5nLgogICAgIEFTU0VSVF9F
USgxLCBsaXN0LmZpcnN0KCkpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIFRFU1QoV1RGX0xpc3RIYXNo
U2V0LCBQcmVwZW5kT3JNb3ZlVG9MYXMKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50
cnkpOwogICAgIHJlc3VsdCA9IGxpc3QucHJlcGVuZE9yTW92ZVRvRmlyc3QoMyk7CiAgICAgQVNT
RVJUX0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlRfRVEoMywgbGlzdC5zaXpl
KCkpOworICAgIEFTU0VSVF9FUSgzdSwgbGlzdC5zaXplKCkpOwogCiAgICAgTGlzdEhhc2hTZXQ8
aW50Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0LmJlZ2luKCk7CiAgICAgQVNTRVJUX0VRKDMs
ICppdGVyYXRvcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248350</attachid>
            <date>2015-03-10 13:23:54 -0700</date>
            <delta_ts>2015-03-10 14:54:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142518-20150310132330.patch</filename>
            <type>text/plain</type>
            <size>41782</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE1LTAzLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNpemUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1MTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkF2YWlsYWJpbGl0eU1hcDo6cHJ1bmUpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNv
bXBpbGVTdHViKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrU2V0Lmg6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrU2V0OjpyZW1vdmUpOgorICAgICAgICAqIHJ1bnRpbWUvV2Vha01hcERh
dGEuaDoKKwogMjAxNS0wMy0xMCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxp
YS5jb20+CiAKICAgICAgICAgR0NDOiBDUkFTSCgpIHNob3VsZCBiZSBhbm5vdGF0ZWQgd2l0aCBO
T1JFVFVSTgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlN
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxh
YmlsaXR5TWFwLmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBAIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZSgpCiAgICAgICAgICAgICBwb3NzaWJsZU5v
ZGVzLmFkZChtX2xvY2Fsc1tpXS5ub2RlKCkpOwogICAgIH0KIAotICAgIGludCBvbGRQb3NzaWJs
ZU5vZGVzU2l6ZTsKKyAgICB1bnNpZ25lZCBvbGRQb3NzaWJsZU5vZGVzU2l6ZTsKICAgICBkbyB7
CiAgICAgICAgIG9sZFBvc3NpYmxlTm9kZXNTaXplID0gcG9zc2libGVOb2Rlcy5zaXplKCk7CiAg
ICAgICAgIGZvciAoYXV0byBwYWlyIDogbV9oZWFwKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODEzMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigK
ICAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKICAgICAKICAgICB3
aGlsZSAoIXRvTWF0ZXJpYWxpemUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGludCBwcmV2aW91c1Rv
TWF0ZXJpYWxpemVTaXplID0gdG9NYXRlcmlhbGl6ZS5zaXplKCk7CisgICAgICAgIHVuc2lnbmVk
IHByZXZpb3VzVG9NYXRlcmlhbGl6ZVNpemUgPSB0b01hdGVyaWFsaXplLnNpemUoKTsKICAgICAg
ICAgCiAgICAgICAgIFZlY3RvcjxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbio+IHdvcmts
aXN0OwogICAgICAgICB3b3JrbGlzdC5hcHBlbmRSYW5nZSh0b01hdGVyaWFsaXplLmJlZ2luKCks
IHRvTWF0ZXJpYWxpemUuZW5kKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9ja1NldC5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrU2V0OjphZGQoTWFya2VkQmwKIAogaW5saW5lIHZv
aWQgTWFya2VkQmxvY2tTZXQ6OnJlbW92ZShNYXJrZWRCbG9jayogYmxvY2spCiB7Ci0gICAgaW50
IG9sZENhcGFjaXR5ID0gbV9zZXQuY2FwYWNpdHkoKTsKKyAgICB1bnNpZ25lZCBvbGRDYXBhY2l0
eSA9IG1fc2V0LmNhcGFjaXR5KCk7CiAgICAgbV9zZXQucmVtb3ZlKGJsb2NrKTsKICAgICBpZiAo
bV9zZXQuY2FwYWNpdHkoKSAhPSBvbGRDYXBhY2l0eSkgLy8gSW5kaWNhdGVzIHdlJ3ZlIHJlbW92
ZWQgYSBsb3Qgb2YgYmxvY2tzLgogICAgICAgICByZWNvbXB1dGVGaWx0ZXIoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAkocmV2aXNpb24gMTgx
MzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHByaXZhdGU6CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJy
aWRlOwotICAgICAgICBpbnQgbV9saXZlS2V5Q291bnQ7CisgICAgICAgIHVuc2lnbmVkIG1fbGl2
ZUtleUNvdW50OwogICAgICAgICBXZWFrTWFwRGF0YSogbV90YXJnZXQ7CiAgICAgfTsKICAgICBE
ZWFkS2V5Q2xlYW5lciBtX2RlYWRLZXlDbGVhbmVyOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTMzMSkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTUtMDMtMTAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBVc2UgdW5zaWduZWQgZm9yIEhhc2hTZXQgc2l6ZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxOAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVkU2V0Lmg6
CisgICAgICAgIChXVEY6OlRyYWl0cz46OnNpemUpOgorICAgICAgICAoV1RGOjpUcmFpdHM+Ojpj
YXBhY2l0eSk6CisgICAgICAgICogd3RmL0hhc2hNYXAuaDoKKyAgICAgICAgKFdURjo6WD46OnNp
emUpOgorICAgICAgICAoV1RGOjpYPjo6Y2FwYWNpdHkpOgorICAgICAgICAqIHd0Zi9IYXNoU2V0
Lmg6CisgICAgICAgIChXVEY6OlY+OjpzaXplKToKKyAgICAgICAgKFdURjo6Vj46OmNhcGFjaXR5
KToKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6
U3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6
OlN0YXRzOjpkdW1wU3RhdHMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6OnNpemUpOgorICAg
ICAgICAoV1RGOjpIYXNoVGFibGU6OmNhcGFjaXR5KToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRz
Pjo6ZGVhbGxvY2F0ZVRhYmxlKToKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6Y2hlY2tUYWJs
ZUNvbnNpc3RlbmN5RXhjZXB0U2l6ZSk6CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAg
ICAgICAgKiB3dGYvTGlzdEhhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6VT46OnNpemUpOgorICAg
ICAgICAoV1RGOjpVPjo6Y2FwYWNpdHkpOgorCiAyMDE1LTAzLTEwICBHZW9mZnJleSBHYXJlbiAg
PGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgYm1hbGxvYzogdHJ5RmFzdE1hbGxvYyBzaG91
bGRuJ3QgY3Jhc2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hDb3VudGVkU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAkocmV2aXNpb24gMTgxMzMx
KQorKysgU291cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgc3dh
cChIYXNoQ291bnRlZFNldCYpOwogICAgICAgICAKLSAgICAgICAgaW50IHNpemUoKSBjb25zdDsK
LSAgICAgICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdDsKKyAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsKICAgICAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICAvLyBJdGVyYXRvcnMgaXRlcmF0ZSBv
dmVyIHBhaXJzIG9mIHZhbHVlcyBhbmQgY291bnRzLgpAQCAtODQsMTMgKzg0LDEzIEBAIG5hbWVz
cGFjZSBXVEYgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIGlubGluZSBpbnQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnNpemUoKSBjb25zdAor
ICAgIGlubGluZSB1bnNpZ25lZCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzPjo6c2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9pbXBsLnNpemUo
KTsgCiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgaW5saW5lIGludCBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y2FwYWNpdHkoKSBjb25zdAorICAg
IGlubGluZSB1bnNpZ25lZCBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJh
aXRzPjo6Y2FwYWNpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW1wbC5jYXBh
Y2l0eSgpOyAKICAgICB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvSGFzaE1hcC5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9IYXNoTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzd2FwKEhhc2hNYXAmKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7
Ci0gICAgaW50IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Owor
ICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAKICAgICAvLyBpdGVyYXRvcnMgaXRlcmF0ZSBvdmVyIHBhaXJzIG9mIGtleXMgYW5kIHZhbHVl
cwpAQCAtMTk1LDEzICsxOTUsMTMgQEAgaW5saW5lIHZvaWQgSGFzaE1hcDxULCBVLCBWLCBXLCBY
Pjo6c3dhcAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
LCB0eXBlbmFtZSBXLCB0eXBlbmFtZSBYPgotaW5saW5lIGludCBIYXNoTWFwPFQsIFUsIFYsIFcs
IFg+OjpzaXplKCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+
OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFcsIHR5cGVu
YW1lIFg+Ci1pbmxpbmUgaW50IEhhc2hNYXA8VCwgVSwgViwgVywgWD46OmNhcGFjaXR5KCkgY29u
c3QKK2lubGluZSB1bnNpZ25lZCBIYXNoTWFwPFQsIFUsIFYsIFcsIFg+OjpjYXBhY2l0eSgpIGNv
bnN0CiB7IAogICAgIHJldHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9IYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNldC5o
CShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDggKzYzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgdm9pZCBz
d2FwKEhhc2hTZXQmKTsKIAotICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0OwotICAgICAgICBpbnQg
Y2FwYWNpdHkoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgICAg
ICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25z
dDsKIAogICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0OwpAQCAtMTQ5LDEzICsxNDksMTMg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgaW50IEhhc2hTZXQ8VCwgVSwgVj46OnNp
emUoKSBjb25zdAorICAgIGlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFY+OjpzaXplKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKICAgICB9CiAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGlu
ZSBpbnQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAorICAgIGlubGluZSB1bnNp
Z25lZCBIYXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZp
c2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEzLDE2ICszMTMsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBudW1BY2Nlc3NlczsKLSAgICAgICAgICAg
IGludCBudW1SZWhhc2hlczsKLSAgICAgICAgICAgIGludCBudW1SZW1vdmVzOwotICAgICAgICAg
ICAgaW50IG51bVJlaW5zZXJ0czsKLQotICAgICAgICAgICAgaW50IG1heENvbGxpc2lvbnM7Ci0g
ICAgICAgICAgICBpbnQgbnVtQ29sbGlzaW9uczsKLSAgICAgICAgICAgIGludCBjb2xsaXNpb25H
cmFwaFs0MDk2XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUFjY2Vzc2VzOworICAgICAgICAg
ICAgdW5zaWduZWQgbnVtUmVoYXNoZXM7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1SZW1vdmVz
OworICAgICAgICAgICAgdW5zaWduZWQgbnVtUmVpbnNlcnRzOworCisgICAgICAgICAgICB1bnNp
Z25lZCBtYXhDb2xsaXNpb25zOworICAgICAgICAgICAgdW5zaWduZWQgbnVtQ29sbGlzaW9uczsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNvbGxpc2lvbkdyYXBoWzQwOTZdOwogCi0gICAgICAgICAg
ICB2b2lkIHJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50IGNvdW50KQorICAgICAgICAgICAgdm9p
ZCByZWNvcmRDb2xsaXNpb25BdENvdW50KHVuc2lnbmVkIGNvdW50KQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCiAgICAgICAgICAgICAg
ICAgICAgIG1heENvbGxpc2lvbnMgPSBjb3VudDsKQEAgLTMzNiw3ICszMzYsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgYWNjZXNzZXNcbiIsIG51bUFj
Y2Vzc2VzKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiJWQgdG90YWwgY29sbGlzaW9ucywg
YXZlcmFnZSAlLjJmIHByb2JlcyBwZXIgYWNjZXNzXG4iLCBudW1Db2xsaXNpb25zLCAxLjAgKiAo
bnVtQWNjZXNzZXMgKyBudW1Db2xsaXNpb25zKSAvIG51bUFjY2Vzc2VzKTsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigibG9uZ2VzdCBjb2xsaXNpb24gY2hhaW46ICVkXG4iLCBtYXhDb2xsaXNp
b25zKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtYXhDb2xsaXNpb25z
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG1heENv
bGxpc2lvbnM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAlZCBsb29r
dXBzIHdpdGggZXhhY3RseSAlZCBjb2xsaXNpb25zICglLjJmJSUgLCAlLjJmJSUgd2l0aCB0aGlz
IG1hbnkgb3IgbW9yZSlcbiIsIGNvbGxpc2lvbkdyYXBoW2ldLCBpLCAxMDAuMCAqIChjb2xsaXNp
b25HcmFwaFtpXSAtIGNvbGxpc2lvbkdyYXBoW2krMV0pIC8gbnVtQWNjZXNzZXMsIDEwMC4wICog
Y29sbGlzaW9uR3JhcGhbaV0gLyBudW1BY2Nlc3Nlcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGRhdGFMb2dGKCIlZCByZWhhc2hlc1xuIiwgbnVtUmVoYXNoZXMpOwpAQCAt
MzcxLDggKzM3MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGlzRW1wdHkoKSA/IGVuZCgpIDogbWFrZUNvbnN0SXRlcmF0
b3IobV90YWJsZSk7IH0KICAgICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbWFrZUtub3duR29vZENvbnN0SXRlcmF0b3IobV90YWJsZSArIG1fdGFibGVTaXplKTsgfQog
Ci0gICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQotICAgICAg
ICBpbnQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlU2l6ZTsgfQorICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgICAgICB1bnNp
Z25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGVTaXplOyB9CiAgICAgICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2tleUNvdW50OyB9CiAKICAgICAgICAgQWRk
UmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSB7IHJldHVybiBhZGQ8SWRlbnRpdHlU
cmFuc2xhdG9yVHlwZT4oRXh0cmFjdG9yOjpleHRyYWN0KHZhbHVlKSwgdmFsdWUpOyB9CkBAIC00
MjEsOCArNDIxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHN0YXRpYyBWYWx1ZVR5cGUqIGFsbG9jYXRlVGFibGUoaW50IHNpemUpOwotICAgICAg
ICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwgaW50IHNpemUp
OworICAgICAgICBzdGF0aWMgVmFsdWVUeXBlKiBhbGxvY2F0ZVRhYmxlKHVuc2lnbmVkIHNpemUp
OworICAgICAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0YWJsZSwg
dW5zaWduZWQgc2l6ZSk7CiAKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwg
Ym9vbD4gTG9va3VwVHlwZTsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8TG9va3VwVHlwZSwg
dW5zaWduZWQ+IEZ1bGxMb29rdXBUeXBlOwpAQCAtNDQzLDcgKzQ0Myw3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBWYWx1ZVR5cGUqIGV4cGFuZChWYWx1ZVR5cGUqIGVudHJ5ID0gbnVsbHB0
cik7CiAgICAgICAgIHZvaWQgc2hyaW5rKCkgeyByZWhhc2gobV90YWJsZVNpemUgLyAyLCBudWxs
cHRyKTsgfQogCi0gICAgICAgIFZhbHVlVHlwZSogcmVoYXNoKGludCBuZXdUYWJsZVNpemUsIFZh
bHVlVHlwZSogZW50cnkpOworICAgICAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1bnNpZ25lZCBuZXdU
YWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOwogICAgICAgICBWYWx1ZVR5cGUqIHJlaW5zZXJ0
KFZhbHVlVHlwZSYmKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQnVja2V0KFZh
bHVlVHlwZSYgYnVja2V0KTsKQEAgLTQ2OSwxNCArNDY5LDE0IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CiAjZW5kaWYKIAot
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1fbWF4TG9hZCA9IDI7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbV9taW5Mb2FkID0gNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1f
bWF4TG9hZCA9IDI7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtX21pbkxvYWQgPSA2
OwogCiAgICAgICAgIFZhbHVlVHlwZSogbV90YWJsZTsKLSAgICAgICAgaW50IG1fdGFibGVTaXpl
OwotICAgICAgICBpbnQgbV90YWJsZVNpemVNYXNrOwotICAgICAgICBpbnQgbV9rZXlDb3VudDsK
LSAgICAgICAgaW50IG1fZGVsZXRlZENvdW50OworICAgICAgICB1bnNpZ25lZCBtX3RhYmxlU2l6
ZTsKKyAgICAgICAgdW5zaWduZWQgbV90YWJsZVNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBt
X2tleUNvdW50OworICAgICAgICB1bnNpZ25lZCBtX2RlbGV0ZWRDb3VudDsKIAogI2lmIENIRUNL
X0hBU0hUQUJMRV9JVEVSQVRPUlMKICAgICBwdWJsaWM6CkBAIC01MjYsNyArNTI2LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgc3RydWN0IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZSB7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IEhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6
ZVNwbGl0dGVyPHNpemUsICEoc2l6ZSAmIChzaXplIC0gMSkpPjo6dmFsdWU7CiAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemUgPiAwLCBIYXNoVGFibGVOb25aZXJvTWluaW11bUNhcGFjaXR5KTsK
LSAgICAgICAgQ09NUElMRV9BU1NFUlQoIXN0YXRpY19jYXN0PGludD4odmFsdWUgPj4gMzEpLCBI
YXNoVGFibGVOb0NhcGFjaXR5T3ZlcmZsb3cpOworICAgICAgICBDT01QSUxFX0FTU0VSVCghc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlID4+IDMxKSwgSGFzaFRhYmxlTm9DYXBhY2l0eU92ZXJm
bG93KTsKICAgICAgICAgQ09NUElMRV9BU1NFUlQodmFsdWUgPiAoMiAqIHNpemUpLCBIYXNoVGFi
bGVDYXBhY2l0eUhvbGRzQ29udGVudFNpemUpOwogICAgIH07CiAKQEAgLTU4OSwxMSArNTg5LDEx
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0
b3I+KGtleSk7CiAKLSAgICAgICAgaW50IGsgPSAwOwotICAgICAgICBpbnQgc2l6ZU1hc2sgPSBt
X3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOworICAgICAgICB1bnNpZ25l
ZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAgVmFsdWVUeXBlKiB0YWJsZSA9
IG1fdGFibGU7CiAgICAgICAgIHVuc2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkp
OwotICAgICAgICBpbnQgaSA9IGggJiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaSA9IGgg
JiBzaXplTWFzazsKIAogICAgICAgICBpZiAoIXRhYmxlKQogICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC02NDYsMTUgKzY0NiwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgQVNTRVJUKG1f
dGFibGUpOwogICAgICAgICBjaGVja0tleTxIYXNoVHJhbnNsYXRvcj4oa2V5KTsKIAotICAgICAg
ICBpbnQgayA9IDA7CisgICAgICAgIHVuc2lnbmVkIGsgPSAwOwogICAgICAgICBWYWx1ZVR5cGUq
IHRhYmxlID0gbV90YWJsZTsKLSAgICAgICAgaW50IHNpemVNYXNrID0gbV90YWJsZVNpemVNYXNr
OworICAgICAgICB1bnNpZ25lZCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsKICAgICAgICAg
dW5zaWduZWQgaCA9IEhhc2hUcmFuc2xhdG9yOjpoYXNoKGtleSk7Ci0gICAgICAgIGludCBpID0g
aCAmIHNpemVNYXNrOworICAgICAgICB1bnNpZ25lZCBpID0gaCAmIHNpemVNYXNrOwogCiAjaWYg
RFVNUF9IQVNIVEFCTEVfU1RBVFMKICAgICAgICAgKytIYXNoVGFibGVTdGF0czo6bnVtQWNjZXNz
ZXM7Ci0gICAgICAgIGludCBwcm9iZUNvdW50ID0gMDsKKyAgICAgICAgdW5zaWduZWQgcHJvYmVD
b3VudCA9IDA7CiAjZW5kaWYKIAogI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTX1BFUl9UQUJMRQpA
QCAtNzA3LDExICs3MDcsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChtX3Rh
YmxlKTsKICAgICAgICAgY2hlY2tLZXk8SGFzaFRyYW5zbGF0b3I+KGtleSk7CiAKLSAgICAgICAg
aW50IGsgPSAwOworICAgICAgICB1bnNpZ25lZCBrID0gMDsKICAgICAgICAgVmFsdWVUeXBlKiB0
YWJsZSA9IG1fdGFibGU7Ci0gICAgICAgIGludCBzaXplTWFzayA9IG1fdGFibGVTaXplTWFzazsK
KyAgICAgICAgdW5zaWduZWQgc2l6ZU1hc2sgPSBtX3RhYmxlU2l6ZU1hc2s7CiAgICAgICAgIHVu
c2lnbmVkIGggPSBIYXNoVHJhbnNsYXRvcjo6aGFzaChrZXkpOwotICAgICAgICBpbnQgaSA9IGgg
JiBzaXplTWFzazsKKyAgICAgICAgdW5zaWduZWQgaSA9IGggJiBzaXplTWFzazsKIAogI2lmIERV
TVBfSEFTSFRBQkxFX1NUQVRTCiAgICAgICAgICsrSGFzaFRhYmxlU3RhdHM6Om51bUFjY2Vzc2Vz
OwpAQCAtODAxLDExICs4MDEsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgQVNTRVJU
KG1fdGFibGUpOwogCi0gICAgICAgIGludCBrID0gMDsKKyAgICAgICAgdW5zaWduZWQgayA9IDA7
CiAgICAgICAgIFZhbHVlVHlwZSogdGFibGUgPSBtX3RhYmxlOwotICAgICAgICBpbnQgc2l6ZU1h
c2sgPSBtX3RhYmxlU2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIHNpemVNYXNrID0gbV90YWJs
ZVNpemVNYXNrOwogICAgICAgICB1bnNpZ25lZCBoID0gSGFzaFRyYW5zbGF0b3I6Omhhc2goa2V5
KTsKLSAgICAgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CisgICAgICAgIHVuc2lnbmVkIGkgPSBo
ICYgc2l6ZU1hc2s7CiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwogICAgICAgICArK0hhc2hU
YWJsZVN0YXRzOjpudW1BY2Nlc3NlczsKQEAgLTEwNTgsMjIgKzEwNTgsMjIgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KLSAgICBhdXRvIEhhc2hUYWJsZTxLZXksIFZhbHVl
LCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cywgS2V5VHJhaXRzPjo6YWxsb2NhdGVU
YWJsZShpbnQgc2l6ZSkgLT4gVmFsdWVUeXBlKgorICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFs
dWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjphbGxvY2F0
ZVRhYmxlKHVuc2lnbmVkIHNpemUpIC0+IFZhbHVlVHlwZSoKICAgICB7CiAgICAgICAgIC8vIHdv
dWxkIHVzZSBhIHRlbXBsYXRlIG1lbWJlciBmdW5jdGlvbiB3aXRoIGV4cGxpY2l0IHNwZWNpYWxp
emF0aW9ucyBoZXJlLCBidXQKICAgICAgICAgLy8gZ2NjIGRvZXNuJ3QgYXBwZWFyIHRvIHN1cHBv
cnQgdGhhdAogICAgICAgICBpZiAoVHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvKQogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGZhc3RaZXJvZWRNYWxsb2Moc2l6ZSAq
IHNpemVvZihWYWx1ZVR5cGUpKSk7CiAgICAgICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8VmFsdWVUeXBlKj4oZmFzdE1hbGxvYyhzaXplICogc2l6ZW9mKFZhbHVlVHlwZSkpKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgICAgICBpbml0aWFsaXplQnVja2V0
KHJlc3VsdFtpXSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4K
LSAgICB2b2lkIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0b3IsIEhhc2hGdW5jdGlvbnMs
IFRyYWl0cywgS2V5VHJhaXRzPjo6ZGVhbGxvY2F0ZVRhYmxlKFZhbHVlVHlwZSogdGFibGUsIGlu
dCBzaXplKQorICAgIHZvaWQgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpkZWFsbG9jYXRlVGFibGUoVmFsdWVUeXBlKiB0
YWJsZSwgdW5zaWduZWQgc2l6ZSkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgICAgIGlmICghaXNEZWxldGVkQnVja2V0KHRhYmxlW2ldKSkKICAgICAgICAg
ICAgICAgICB0YWJsZVtpXS5+VmFsdWVUeXBlKCk7CiAgICAgICAgIH0KQEAgLTEwODMsNyArMTA4
Myw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+CiAgICAgYXV0byBIYXNoVGFibGU8S2V5
LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHMsIEtleVRyYWl0cz46OmV4
cGFuZChWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUqCiAgICAgewotICAgICAgICBpbnQg
bmV3U2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbmV3U2l6ZTsKICAgICAgICAgaWYgKG1fdGFibGVT
aXplID09IDApCiAgICAgICAgICAgICBuZXdTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVT
aXplOwogICAgICAgICBlbHNlIGlmIChtdXN0UmVoYXNoSW5QbGFjZSgpKQpAQCAtMTA5NSwxMSAr
MTA5NSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hG
dW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgotICAgIGF1dG8g
SGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBL
ZXlUcmFpdHM+OjpyZWhhc2goaW50IG5ld1RhYmxlU2l6ZSwgVmFsdWVUeXBlKiBlbnRyeSkgLT4g
VmFsdWVUeXBlKgorICAgIGF1dG8gSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFz
aEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFpdHM+OjpyZWhhc2godW5zaWduZWQgbmV3VGFibGVT
aXplLCBWYWx1ZVR5cGUqIGVudHJ5KSAtPiBWYWx1ZVR5cGUqCiAgICAgewogICAgICAgICBpbnRl
cm5hbENoZWNrVGFibGVDb25zaXN0ZW5jeUV4Y2VwdFNpemUoKTsKIAotICAgICAgICBpbnQgb2xk
VGFibGVTaXplID0gbV90YWJsZVNpemU7CisgICAgICAgIHVuc2lnbmVkIG9sZFRhYmxlU2l6ZSA9
IG1fdGFibGVTaXplOwogICAgICAgICBWYWx1ZVR5cGUqIG9sZFRhYmxlID0gbV90YWJsZTsKIAog
I2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCkBAIC0xMTE3LDcgKzExMTcsNyBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRlVGFibGUobmV3VGFibGVTaXplKTsKIAog
ICAgICAgICBWYWx1ZSogbmV3RW50cnkgPSBudWxscHRyOwotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSAhPSBvbGRUYWJsZVNpemU7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICE9IG9sZFRhYmxlU2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaXNFbXB0eU9yRGVs
ZXRlZEJ1Y2tldChvbGRUYWJsZVtpXSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZFRh
YmxlW2ldICE9IGVudHJ5KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNTQsOSAr
MTI1NCw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoIW1fdGFibGUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgaW50IGRlbGV0
ZWRDb3VudCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV90YWJsZVNpemU7ICsr
aikgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGRlbGV0
ZWRDb3VudCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX3RhYmxlU2l6
ZTsgKytqKSB7CiAgICAgICAgICAgICBWYWx1ZVR5cGUqIGVudHJ5ID0gbV90YWJsZSArIGo7CiAg
ICAgICAgICAgICBpZiAoaXNFbXB0eUJ1Y2tldCgqZW50cnkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpJbmRleDogU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNl
L1dURi93dGYvSGFzaFRyYWl0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBHZW5lcmljSGFzaFQKIAogICAgIC8vIFRoZSBzdGFy
dGluZyB0YWJsZSBzaXplLiBDYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIHdlIGtub3cgYmVmb3JlaGFu
ZCB0aGF0CiAgICAgLy8gYSBoYXNoIHRhYmxlIHdpbGwgaGF2ZSBhdCBsZWFzdCBOIGVudHJpZXMu
Ci0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0gODsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IDg7CiB9OwogCiAvLyBEZWZhdWx0IGlu
dGVnZXIgdHJhaXRzIGRpc2FsbG93IGJvdGggMCBhbmQgLTEgYXMga2V5cyAobWF4IHZhbHVlIGlu
c3RlYWQgb2YgLTEgZm9yIHVuc2lnbmVkKS4KQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdHJ1Y3QgUGFp
ckhhc2hUcmFpdHMgOiBHZW5lcmljSGFzaFRyYWl0CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1w
dHlWYWx1ZUlzWmVybyA9IEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlSXNaZXJvICYmIFNlY29uZFRy
YWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKICAgICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlW
YWx1ZSgpIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEZpcnN0VHJhaXRzOjplbXB0eVZhbHVlKCks
IFNlY29uZFRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBt
aW5pbXVtVGFibGVTaXplID0gRmlyc3RUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1pbmltdW1UYWJsZVNpemUgPSBGaXJzdFRyYWl0czo6bWluaW11
bVRhYmxlU2l6ZTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShUcmFp
dFR5cGUmIHNsb3QpIHsgRmlyc3RUcmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmZp
cnN0KTsgfQogICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFRyYWl0VHlwZSYg
dmFsdWUpIHsgcmV0dXJuIEZpcnN0VHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZS5maXJzdCk7
IH0KQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1Y3QgS2V5VmFsdWVQYWlySGFzaFRyYWl0cyA6IEdl
bmVyaWNICiAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IEtleVRyYWl0
czo6ZW1wdHlWYWx1ZUlzWmVybyAmJiBWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZUlzWmVybzsKICAg
ICBzdGF0aWMgRW1wdHlWYWx1ZVR5cGUgZW1wdHlWYWx1ZSgpIHsgcmV0dXJuIEtleVZhbHVlUGFp
cjx0eXBlbmFtZSBLZXlUcmFpdHM6OkVtcHR5VmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVRyYWl0
czo6RW1wdHlWYWx1ZVR5cGU+KEtleVRyYWl0czo6ZW1wdHlWYWx1ZSgpLCBWYWx1ZVRyYWl0czo6
ZW1wdHlWYWx1ZSgpKTsgfQogCi0gICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXpl
ID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtaW5pbXVtVGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwogCiAgICAg
c3RhdGljIHZvaWQgY29uc3RydWN0RGVsZXRlZFZhbHVlKFRyYWl0VHlwZSYgc2xvdCkgeyBLZXlU
cmFpdHM6OmNvbnN0cnVjdERlbGV0ZWRWYWx1ZShzbG90LmtleSk7IH0KICAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBUcmFpdFR5cGUmIHZhbHVlKSB7IHJldHVybiBLZXlUcmFp
dHM6OmlzRGVsZXRlZFZhbHVlKHZhbHVlLmtleSk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xp
c3RIYXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAko
cmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dURi93dGYvTGlzdEhhc2hTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsOCArNzgsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN3YXAoTGlzdEhh
c2hTZXQmKTsKIAotICAgIGludCBzaXplKCkgY29uc3Q7Ci0gICAgaW50IGNhcGFjaXR5KCkgY29u
c3Q7CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICAgICBpdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1ha2VJdGVyYXRvcihtX2hlYWQpOyB9CkBAIC0zNDcsMTMgKzM0NywxMyBAQCBp
bmxpbmUgTGlzdEhhc2hTZXQ8VCwgVT46On5MaXN0SGFzaFNldCgpCiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci1pbmxpbmUgaW50IExpc3RIYXNoU2V0PFQsIFU+OjpzaXpl
KCkgY29uc3QKK2lubGluZSB1bnNpZ25lZCBMaXN0SGFzaFNldDxULCBVPjo6c2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5zaXplKCk7IAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgotaW5saW5lIGludCBMaXN0SGFzaFNldDxULCBVPjo6Y2FwYWNpdHkoKSBj
b25zdAoraW5saW5lIHVuc2lnbmVkIExpc3RIYXNoU2V0PFQsIFU+OjpjYXBhY2l0eSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE4MTM0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQxIEBACisyMDE1LTAzLTEwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHVuc2lnbmVkIGZvciBIYXNoU2V0IHNp
emUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRlZmxhdGVGcmFtZTo6cHJvY2Vzc1Jlc3BvbnNlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpjaGVja0ZvckR1cGxpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OndyaXRlQ29uc3RhbnRQb29sSW5kZXgpOgorICAg
ICAgICAqIGRvbS9TY3JpcHRSdW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UnVu
bmVyOjp+U2NyaXB0UnVubmVyKToKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U3lz
dGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fj
aGU6OnN5c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OnNpbWlsYXJGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENhY2hlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkQXV0b0FjdGl2YXRlRm9udElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JD
aGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c2ltaWxhckZvbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RmxleEJveEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2Vj
dGlvbjo6Y29tcHV0ZU92ZXJmbG93RnJvbUNlbGxzKToKKwogMjAxNS0wMy0xMCAgVGltb3RoeSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBidWls
ZApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxh
dGVGcmFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldERlZmxhdGVGcmFtZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9u
RGVmbGF0ZUZyYW1lOjpwcm8KICAgICB9CiAgICAgbV9yZXNwb25zZVByb2Nlc3NlZCA9IHRydWU7
CiAKLSAgICBpbnQgZXhwZWN0ZWROdW1QYXJhbWV0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBleHBl
Y3RlZE51bVBhcmFtZXRlcnMgPSAwOwogICAgIGludCB3aW5kb3dCaXRzID0gMTU7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIHBhcmFtZXRlciA9IHNlcnZlclBh
cmFtZXRlcnMuZmluZCgibWF4X3dpbmRvd19iaXRzIik7CiAgICAgaWYgKHBhcmFtZXRlciAhPSBz
ZXJ2ZXJQYXJhbWV0ZXJzLmVuZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDE4MTMzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU3NSw3ICs1NzUsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBI
YW5kbGUgZHVwbGljYXRlIHJlZmVyZW5jZXMKICAgICAgICAgaWYgKGZvdW5kICE9IG1fb2JqZWN0
UG9vbC5lbmQoKSkgewogICAgICAgICAgICAgd3JpdGUoT2JqZWN0UmVmZXJlbmNlVGFnKTsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90Pihmb3VuZC0+dmFsdWUpIDwgbV9v
YmplY3RQb29sLnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQoZm91bmQtPnZhbHVlIDwgbV9v
YmplY3RQb29sLnNpemUoKSk7CiAgICAgICAgICAgICB3cml0ZU9iamVjdEluZGV4KGZvdW5kLT52
YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtOTY1LDcgKzk2
NSw3IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9pZCB3cml0ZUNvbnN0
YW50UG9vbEluZGV4KGNvbnN0IFQmIGNvbnN0YW50UG9vbCwgdW5zaWduZWQgaSkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQzMl90PihpKSA8IGNvbnN0YW50UG9vbC5zaXpl
KCkpOworICAgICAgICBBU1NFUlQoaSA8IGNvbnN0YW50UG9vbC5zaXplKCkpOwogICAgICAgICBp
ZiAoY29uc3RhbnRQb29sLnNpemUoKSA8PSAweEZGKQogICAgICAgICAgICAgd3JpdGUoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oaSkpOwogICAgICAgICBlbHNlIGlmIChjb25zdGFudFBvb2wuc2l6ZSgp
IDw9IDB4RkZGRikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRSdW5uZXIuY3BwCShyZXZpc2lv
biAxODEzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0UnVubmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBTY3JpcHRSdW5uZXI6On5TY3JpcHRSdW5uZXIoKQog
ICAgICAgICBtX2RvY3VtZW50LmRlY3JlbWVudExvYWRFdmVudERlbGF5Q291bnQoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2NyaXB0c1RvRXhlY3V0ZUluT3JkZXIuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIG1fZG9jdW1lbnQuZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3VudCgpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9wZW5kaW5nQXN5bmNTY3JpcHRzLnNpemUoKTsgKytp
KQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BlbmRpbmdBc3luY1NjcmlwdHMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIG1fZG9jdW1lbnQuZGVjcmVtZW50TG9hZEV2ZW50RGVsYXlDb3Vu
dCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNj
aGVkdWxlci5oCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBw
cml2YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPFJlc291cmNlTG9hZGVyPj4g
UmVxdWVzdE1hcDsKICAgICAgICAgUmVxdWVzdE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKICAgICAg
ICAgY29uc3QgU3RyaW5nIG1fbmFtZTsKLSAgICAgICAgY29uc3QgaW50IG1fbWF4UmVxdWVzdHNJ
bkZsaWdodDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0Owog
ICAgIH07CiAKICAgICBlbnVtIENyZWF0ZUhvc3RQb2xpY3kgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MjIsNyArNDIyLDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnQ6OnN5c3RlbUZhbGxiYWNrRm9udEZvcgog
CiAgICAgaWYgKCFmYWxsYmFja0ZvbnQpIHsKICAgICAgICAgVUNoYXIgY29kZVVuaXRzWzJdOwot
ICAgICAgICBpbnQgY29kZVVuaXRzTGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBjb2RlVW5pdHNM
ZW5ndGg7CiAgICAgICAgIGlmIChVX0lTX0JNUChjaGFyYWN0ZXIpKSB7CiAgICAgICAgICAgICBj
b2RlVW5pdHNbMF0gPSBGb250Q2FzY2FkZTo6bm9ybWFsaXplU3BhY2VzKGNoYXJhY3Rlcik7CiAg
ICAgICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAxODEzMzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgsMTUgKzM2OCwxNSBAQCBzdGF0aWMgRm9udERhdGFDYWNoZSYgY2FjaGVkRm9u
dHMoKQogCiAKICNpZiBQTEFURk9STShJT1MpCi1jb25zdCBpbnQgY01heEluYWN0aXZlRm9udERh
dGEgPSAxMjA7Ci1jb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAxMDA7Citjb25z
dCB1bnNpZ25lZCBjTWF4SW5hY3RpdmVGb250RGF0YSA9IDEyMDsKK2NvbnN0IHVuc2lnbmVkIGNU
YXJnZXRJbmFjdGl2ZUZvbnREYXRhID0gMTAwOwogI2Vsc2UKLWNvbnN0IGludCBjTWF4SW5hY3Rp
dmVGb250RGF0YSA9IDIyNTsKLWNvbnN0IGludCBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSA9IDIw
MDsKK2NvbnN0IHVuc2lnbmVkIGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMjI1OworY29uc3QgdW5z
aWduZWQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAyMDA7CiAjZW5kaWYKIAotY29uc3QgaW50
IGNNYXhVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDUwOwotY29uc3QgaW50
IGNUYXJnZXRVbmRlck1lbW9yeVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA9IDMwOworY29uc3Qg
dW5zaWduZWQgY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhID0gNTA7Citj
b25zdCB1bnNpZ25lZCBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEg
PSAzMDsKIAogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6Zm9udEZvckZhbWlseShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHks
IGJvb2wgY2hlY2tpbmdBbHRlcm5hdGVOYW1lKQogewpAQCAtNDExLDE5ICs0MTEsMTkgQEAgdm9p
ZCBGb250Q2FjaGU6OnB1cmdlVGltZXJGaXJlZCgpCiB2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhSWZOZWVkZWQoKQogewogICAgIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSA9
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJl
KCk7Ci0gICAgaW50IGluYWN0aXZlRm9udERhdGFMaW1pdCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUg
PyBjTWF4VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0aXZlRm9udERhdGEgOiBjTWF4SW5hY3RpdmVG
b250RGF0YTsKKyAgICB1bnNpZ25lZCBpbmFjdGl2ZUZvbnREYXRhTGltaXQgPSB1bmRlck1lbW9y
eVByZXNzdXJlID8gY01heFVuZGVyTWVtb3J5UHJlc3N1cmVJbmFjdGl2ZUZvbnREYXRhIDogY01h
eEluYWN0aXZlRm9udERhdGE7CiAKICAgICBpZiAoY2FjaGVkRm9udHMoKS5zaXplKCkgPCBpbmFj
dGl2ZUZvbnREYXRhTGltaXQpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgaW5hY3RpdmVDb3Vu
dCA9IGluYWN0aXZlRm9udENvdW50KCk7CisgICAgdW5zaWduZWQgaW5hY3RpdmVDb3VudCA9IGlu
YWN0aXZlRm9udENvdW50KCk7CiAgICAgaWYgKGluYWN0aXZlQ291bnQgPD0gaW5hY3RpdmVGb250
RGF0YUxpbWl0KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgdGFyZ2V0Rm9udERhdGFMaW1p
dCA9IHVuZGVyTWVtb3J5UHJlc3N1cmUgPyBjVGFyZ2V0VW5kZXJNZW1vcnlQcmVzc3VyZUluYWN0
aXZlRm9udERhdGEgOiBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXRGb250RGF0YUxpbWl0ID0gdW5kZXJNZW1vcnlQcmVzc3VyZSA/IGNUYXJnZXRVbmRlck1lbW9y
eVByZXNzdXJlSW5hY3RpdmVGb250RGF0YSA6IGNUYXJnZXRJbmFjdGl2ZUZvbnREYXRhOwogICAg
IHB1cmdlSW5hY3RpdmVGb250RGF0YShpbmFjdGl2ZUNvdW50IC0gdGFyZ2V0Rm9udERhdGFMaW1p
dCk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW50IHB1cmdl
Q291bnQpCit2b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKHVuc2lnbmVkIHB1
cmdlQ291bnQpCiB7CiAgICAgcHJ1bmVVbnJlZmVyZW5jZWRFbnRyaWVzRnJvbUZvbnRDYXNjYWRl
Q2FjaGUoKTsKICAgICBwcnVuZVN5c3RlbUZhbGxiYWNrRm9udHMoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAxODEzMzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgRm9udENhY2hlJiBzaW5nbGV0b24oKTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGlt
cGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4KLSAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJh
Y2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdp
bmFsRm9udERhdGEsIGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKTsKKyAgICBSZWZQdHI8Rm9udD4gc3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEs
IGJvb2wgaXNQbGF0Zm9ybUZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpOwogCiAgICAgLy8gQWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXQoKTsKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBzaXplX3QgZm9udENvdW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc2l6
ZV90IGluYWN0aXZlRm9udENvdW50KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXJnZUlu
YWN0aXZlRm9udERhdGEoaW50IGNvdW50ID0gSU5UX01BWCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgY291bnQgPSBVSU5UX01BWCk7CiAK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgUmVmUHRyPEZvbnQ+IGZvbnRGcm9tRGVzY3JpcHRpb25B
bmRMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IExPR0ZPTlQmLCBBdG9taWNT
dHJpbmcmIG91dEZvbnRGYW1pbHlOYW1lKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCBwcml2YXRlOgog
ICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcGxhdGZvcm0uCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgIEZvbnRQbGF0Zm9ybURhdGEqIGdldEN1c3RvbUZhbGxiYWNr
Rm9udChjb25zdCBVSW50MzIsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOwotICAgIFBhc3NSZWZQ
dHI8Rm9udD4gZ2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250RGVz
Y3JpcHRpb24mLCBjb25zdCBGb250KiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpOworICAgIFBhc3NSZWZQdHI8Rm9udD4gZ2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFj
dGVycyhjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBGb250KiwgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
Q2FjaGVGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsNyArODAsNyBAQCBGY1BhdHRlcm4qIGZpbmRCZXN0Rm9udEdpdmVuRmFsbGJh
Y2tzKGNvCiAgICAgcmV0dXJuIEZjRm9udFNldE1hdGNoKDAsIHNldHMsIDEsIHBhdHRlcm4sICZm
b250Q29uZmlnUmVzdWx0KTsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFs
bGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNv
bnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQq
IG9yaWdpbmFsRm9udERhdGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgUmVmUHRyPEZjUGF0dGVybj4gcGF0dGVybiA9IGFkb3B0UmVmKGNy
ZWF0ZUZvbnRDb25maWdQYXR0ZXJuRm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsK
ICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSA9IG9yaWdpbmFsRm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aW9zL0ZvbnRDYWNoZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCShyZXZpc2lvbiAxODEzMzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9pb3MvRm9udENhY2hlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBDRkNoYXJhY3RlclNldFJlZiBwaG9uZUZh
bGxiYWNrQ2gKICAgICByZXR1cm4gY2hhcmFjdGVyU2V0OwogfQogCi1QYXNzUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6Z2V0U3lzdGVtRm9udEZhbGxiYWNrRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBGb250KiBvcmlnaW5hbEZvbnREYXRhLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK1Bhc3NSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpnZXRTeXN0ZW1Gb250RmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gb3JpZ2luYWxGb250RGF0YS0+cGxhdGZvcm1EYXRh
KCk7CiAgICAgQ1RGb250UmVmIGN0Rm9udCA9IHBsYXRmb3JtRGF0YS5mb250KCk7CkBAIC0xOTQs
MTEgKzE5NCwxMSBAQCBzdGF0aWMgTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQgbGFuZ3VhZ2VTcGVjCiAg
ICAgcmV0dXJuIExhbmd1YWdlU3BlY2lmaWNGb250OjpOb25lOwogfQogCi1SZWZQdHI8Rm9udD4g
Rm9udENhY2hlOjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICAvLyBVbmxpa2UgT1MgWCwgb3Vy
IGZhbGxiYWNrIGZvbnQgb24gaVBob25lIGlzIEFyaWFsIFVuaWNvZGUsIHdoaWNoIGRvZXNuJ3Qg
aGF2ZSBzb21lIGFwcGxlLXNwZWNpZmljIGdseXBocyBsaWtlIEY4RkYuCiAgICAgLy8gRmFsbCBi
YWNrIHRvIHRoZSBBcHBsZSBGYWxsYmFjayBmb250IGluIHRoaXMgY2FzZS4KLSAgICBpZiAobGVu
Z3RoID4gMCAmJiByZXF1aXJlc0N1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFjdGVycykpIHsKKyAg
ICBpZiAobGVuZ3RoICYmIHJlcXVpcmVzQ3VzdG9tRmFsbGJhY2tGb250KCpjaGFyYWN0ZXJzKSkg
ewogICAgICAgICBhdXRvKiBmYWxsYmFjayA9IGdldEN1c3RvbUZhbGxiYWNrRm9udCgqY2hhcmFj
dGVycywgZGVzY3JpcHRpb24pOwogICAgICAgICBpZiAoIWZhbGxiYWNrKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0yMTcsNyArMjE3LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNo
ZTo6c3lzdGVtRmFsbGJhY2tGbwogICAgIH0KIAogICAgIExhbmd1YWdlU3BlY2lmaWNGb250IGxh
bmd1YWdlU3BlY2lmaWNGb250ID0gTGFuZ3VhZ2VTcGVjaWZpY0ZvbnQ6Ok5vbmU7Ci0gICAgaWYg
KGxlbmd0aCA+IDApCisgICAgaWYgKGxlbmd0aCkKICAgICAgICAgbGFuZ3VhZ2VTcGVjaWZpY0Zv
bnQgPSBsYW5ndWFnZVNwZWNpZmljRmFsbGJhY2tGb250KGMpOwogCiAgICAgUmVmUHRyPEZvbnQ+
IGZvbnQ7CkBAIC00NzksNyArNDc5LDcgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxh
ckZvbnQoY29ucwogICAgICAgICBzdGF0aWMgU3RyaW5nKiBtYXRjaFdvcmRzWzNdID0geyAmYXJh
YmljLmdldCgpLCAmcGFzaHRvLmdldCgpLCAmdXJkdS5nZXQoKSB9OwogICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YVBsYWluKCJHZWV6YVBybyIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8QXRvbWljU3RyaW5nPiBnZWV6YUJvbGQoIkdlZXphUHJvLUJvbGQiLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAz
ICYmICFmb250OyArK2opIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IDMgJiYg
IWZvbnQ7ICsraikgewogICAgICAgICAgICAgaWYgKGZhbWlseS5jb250YWlucygqbWF0Y2hXb3Jk
c1tqXSwgZmFsc2UpKQogICAgICAgICAgICAgICAgIGZvbnQgPSBmb250Rm9yRmFtaWx5KGRlc2Ny
aXB0aW9uLCBpc0ZvbnRXZWlnaHRCb2xkKGRlc2NyaXB0aW9uLndlaWdodCgpKSA/IGdlZXphQm9s
ZCA6IGdlZXphUGxhaW4pOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvRm9udENhY2hlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMubW0JKHJldmlzaW9uIDE4MTMz
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q2FjaGVNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMyNSw3ICszMjUsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRB
dXRvQWN0aXZhdGVGb250SWZOZWVkCiAjZW5kaWYKIAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PEF0b21pY1N0cmluZz4+IGtub3duRmFtaWxpZXM7Ci0gICAgc3RhdGljIGNvbnN0
IGludCBtYXhDYWNoZVNpemUgPSAxMjg7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENh
Y2hlU2l6ZSA9IDEyODsKICAgICBBU1NFUlQoa25vd25GYW1pbGllcy5nZXQoKS5zaXplKCkgPD0g
bWF4Q2FjaGVTaXplKTsKICAgICBpZiAoa25vd25GYW1pbGllcy5nZXQoKS5zaXplKCkgPT0gbWF4
Q2FjaGVTaXplKQogICAgICAgICBrbm93bkZhbWlsaWVzLmdldCgpLnJlbW92ZShrbm93bkZhbWls
aWVzLmdldCgpLmJlZ2luKCkpOwpAQCAtMzM0LDcgKzMzNCw3IEBAIHN0YXRpYyBib29sIHNob3Vs
ZEF1dG9BY3RpdmF0ZUZvbnRJZk5lZWQKICAgICByZXR1cm4ga25vd25GYW1pbGllcy5nZXQoKS5h
ZGQoZmFtaWx5KS5pc05ld0VudHJ5OwogfQogCi1SZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzeXN0
ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9udCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCitSZWZQdHI8Rm9udD4gRm9udENhY2hl
OjpzeXN0ZW1GYWxsYmFja0ZvckNoYXJhY3RlcnMoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiwgY29uc3QgRm9udCogb3JpZ2luYWxGb250RGF0YSwgYm9vbCBpc1BsYXRmb3JtRm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBVQ2hh
cjMyIGNoYXJhY3RlcjsKICAgICBVMTZfR0VUKGNoYXJhY3RlcnMsIDAsIDAsIGxlbmd0aCwgY2hh
cmFjdGVyKTsKQEAgLTQxNCw3ICs0MTQsNyBAQCBSZWZQdHI8Rm9udD4gRm9udENhY2hlOjpzaW1p
bGFyRm9udChjb25zCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgc3RhdGljIFN0cmlu
ZyogbWF0Y2hXb3Jkc1szXSA9IHsgbmV3IFN0cmluZygiQXJhYmljIiksIG5ldyBTdHJpbmcoIlBh
c2h0byIpLCBuZXcgU3RyaW5nKCJVcmR1IikgfTsKICAgICAgICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZ2VlemFTdHIsICgiR2VlemEgUHJvIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwotICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IDMgJiYgIWZvbnQ7ICsraikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
MyAmJiAhZm9udDsgKytqKSB7CiAgICAgICAgICAgICBpZiAoZmFtaWx5LmNvbnRhaW5zKCptYXRj
aFdvcmRzW2pdLCBmYWxzZSkpCiAgICAgICAgICAgICAgICAgZm9udCA9IGZvbnRGb3JGYW1pbHko
ZGVzY3JpcHRpb24sIGdlZXphU3RyKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJldmlz
aW9uIDE4MTMzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FjaGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5LDcgQEAgc3RhdGljIEhG
T05UIGNyZWF0ZU1MYW5nRm9udChJTUxhbmdGb250TAogICAgIHJldHVybiBoZm9udDsKIH0KIAot
UmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERh
dGEsIGJvb2wsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQorUmVmUHRyPEZv
bnQ+IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEZvbnQqIG9yaWdpbmFsRm9udERhdGEsIGJvb2ws
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVUNoYXIg
Y2hhcmFjdGVyID0gY2hhcmFjdGVyc1swXTsKICAgICBSZWZQdHI8Rm9udD4gZm9udERhdGE7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVj
YXRlZEZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gMTgxMzMxKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGlmICghbV9vcmRpbmFs
SXRlcmF0aW9uKQogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRPcmRpbmFsID0gbV9mb3J3
YXJkID8gMSA6IG1fbGFyZ2VzdE9yZGluYWw7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX29yZGluYWxJdGVyYXRpb24gPj0gbV9vcmRpbmFsVmFsdWVz
LnNpemUoKSArIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIChtX29yZGluYWxJdGVyYXRpb24g
PiBtX29yZGluYWxWYWx1ZXMuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjb3B5K3NvcnQgdGhlIHZhbHVlcyBv
bmNlIHBlciBsYXlvdXQgZXZlbiBpZiB0aGUgaXRlcmF0b3IgaXMgcmVzZXQuCkBAIC0xMTAsMTEg
KzExMCwxMSBAQCBwcml2YXRlOgogICAgIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveCogbV9i
b3g7CiAgICAgUmVuZGVyQm94KiBtX2N1cnJlbnRDaGlsZDsKICAgICBib29sIG1fZm9yd2FyZDsK
LSAgICB1bnNpZ25lZCBpbnQgbV9jdXJyZW50T3JkaW5hbDsKLSAgICB1bnNpZ25lZCBpbnQgbV9s
YXJnZXN0T3JkaW5hbDsKLSAgICBIYXNoU2V0PHVuc2lnbmVkIGludD4gbV9vcmRpbmFsVmFsdWVz
OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBpbnQ+IG1fc29ydGVkT3JkaW5hbFZhbHVlczsKLSAgICBp
bnQgbV9vcmRpbmFsSXRlcmF0aW9uOworICAgIHVuc2lnbmVkIG1fY3VycmVudE9yZGluYWw7Cisg
ICAgdW5zaWduZWQgbV9sYXJnZXN0T3JkaW5hbDsKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX29y
ZGluYWxWYWx1ZXM7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3NvcnRlZE9yZGluYWxWYWx1ZXM7
CisgICAgdW5zaWduZWQgbV9vcmRpbmFsSXRlcmF0aW9uOwogfTsKIAogUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94OjpSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3goRWxlbWVudCYgZWxlbWVu
dCwgUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDE4MTMzMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NzcsNyArNjc3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmNvbXB1dGVP
dmVyZmxvdwogICAgIGNsZWFyT3ZlcmZsb3coKTsKICAgICBtX292ZXJmbG93aW5nQ2VsbHMuY2xl
YXIoKTsKICAgICB1bnNpZ25lZCB0b3RhbENlbGxzQ291bnQgPSBuRWZmQ29scyAqIHRvdGFsUm93
czsKLSAgICBpbnQgbWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbHNDb3VudCA9IHRvdGFsQ2VsbHND
b3VudCA8IGdNaW5UYWJsZVNpemVUb1VzZUZhc3RQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxs
ID8gMCA6IGdNYXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxsUmF0aW9Gb3JGYXN0UGFpbnRQYXRoICog
dG90YWxDZWxsc0NvdW50OworICAgIHVuc2lnbmVkIG1heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxz
Q291bnQgPSB0b3RhbENlbGxzQ291bnQgPCBnTWluVGFibGVTaXplVG9Vc2VGYXN0UGFpbnRQYXRo
V2l0aE92ZXJmbG93aW5nQ2VsbCA/IDAgOiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlv
Rm9yRmFzdFBhaW50UGF0aCAqIHRvdGFsQ2VsbHNDb3VudDsKIAogI2lmbmRlZiBOREVCVUcKICAg
ICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCA9IGZhbHNlOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMzMxKQorKysgVG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDMtMTAg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBV
c2UgdW5zaWduZWQgZm9yIEhhc2hTZXQgc2l6ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjUxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RJ
bml0aWFsQ2FwYWNpdHkpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xpc3RI
YXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE1LTAzLTA2
ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhbiBvcHRp
b24gdG8gcnVuLXdlYmtpdC10ZXN0cyB0byBvdmVycmlkZSB0aGUgTGF5b3V0VGVzdHMvIGRpcmVj
dG9yeQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHAJKHJl
dmlzaW9uIDE4MTMzMSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgVEVTVChXVEZfSGFzaE1hcCwg
SW5pdGlhbGl6ZXJMaXN0KQogICAgICAgICB7IDQsICJmb3VyIiB9LAogICAgIH07CiAKLSAgICBF
WFBFQ1RfRVEoNCwgbWFwLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDR1LCBtYXAuc2l6ZSgpKTsK
IAogICAgIEVYUEVDVF9FUSgib25lIiwgbWFwLmdldCgxKSk7CiAgICAgRVhQRUNUX0VRKCJ0d28i
LCBtYXAuZ2V0KDIpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hT
ZXQuY3BwCShyZXZpc2lvbiAxODEzMzEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9IYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIHRlc3RJ
bml0aWFsQ2FwYWNpdHkoKQogICAgIEhhc2hTZXQ8aW50LCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNo
LCBJbml0aWFsQ2FwYWNpdHlUZXN0SGFzaFRyYWl0czxpbml0aWFsQ2FwYWNpdHk+ID4gdGVzdFNl
dDsKIAogICAgIC8vIEluaXRpYWwgY2FwYWNpdHkgaXMgbnVsbC4KLSAgICBBU1NFUlRfRVEoMCwg
dGVzdFNldC5jYXBhY2l0eSgpKTsKKyAgICBBU1NFUlRfRVEoMHUsIHRlc3RTZXQuY2FwYWNpdHko
KSk7CiAKICAgICAvLyBBZGRpbmcgaXRlbXMgdXAgdG8gc2l6ZSBzaG91bGQgbmV2ZXIgY2hhbmdl
IHRoZSBjYXBhY2l0eS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTGlzdEhhc2hTZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xpc3RIYXNoU2V0LmNwcAko
cmV2aXNpb24gMTgxMzMxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTGlzdEhh
c2hTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIFRFU1QoV1RGX0xpc3RI
YXNoU2V0LCBBcHBlbmRPck1vdmVUb0xhc3QKICAgICByZXN1bHQgPSBsaXN0LmFwcGVuZE9yTW92
ZVRvTGFzdCgzKTsKICAgICBBU1NFUlRfVFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7CiAKLSAgICBB
U1NFUlRfRVEobGlzdC5zaXplKCksIDMpOworICAgIEFTU0VSVF9FUShsaXN0LnNpemUoKSwgM3Up
OwogCiAgICAgLy8gVGhlIGxpc3Qgc2hvdWxkIGJlIGluIG9yZGVyIDEsIDIsIDMuCiAgICAgTGlz
dEhhc2hTZXQ8aW50Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBsaXN0LmJlZ2luKCk7CkBAIC05OSwx
MSArOTksMTEgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIEFwcGVuZE9yTW92ZVRvTGFzdAogICAg
IEFTU0VSVF9UUlVFKHJlc3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQgPSBsaXN0LmFwcGVu
ZE9yTW92ZVRvTGFzdCgxKTsKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOwot
ICAgIEFTU0VSVF9FUSgxLCBsaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDF1LCBsaXN0LnNp
emUoKSk7CiAKICAgICBsaXN0LmFkZCgyKTsKICAgICBsaXN0LmFkZCgzKTsKLSAgICBBU1NFUlRf
RVEoMywgbGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgzdSwgbGlzdC5zaXplKCkpOwogCiAg
ICAgLy8gQXBwZW5kaW5nIDIgbW92ZSBpdCB0byB0aGUgZW5kLgogICAgIEFTU0VSVF9FUSgzLCBs
aXN0Lmxhc3QoKSk7CkBAIC0xMTgsNyArMTE4LDcgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIEFw
cGVuZE9yTW92ZVRvTGFzdAogICAgIEFTU0VSVF9GQUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7CiAg
ICAgcmVzdWx0ID0gbGlzdC5hcHBlbmRPck1vdmVUb0xhc3QoMSk7CiAgICAgQVNTRVJUX0ZBTFNF
KHJlc3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlRfRVEoMywgbGlzdC5zaXplKCkpOworICAg
IEFTU0VSVF9FUSgzdSwgbGlzdC5zaXplKCkpOwogCiAgICAgTGlzdEhhc2hTZXQ8aW50Pjo6aXRl
cmF0b3IgaXRlcmF0b3IgPSBsaXN0LmJlZ2luKCk7CiAgICAgQVNTRVJUX0VRKDMsICppdGVyYXRv
cik7CkBAIC0xMzksNyArMTM5LDcgQEAgVEVTVChXVEZfTGlzdEhhc2hTZXQsIFByZXBlbmRPck1v
dmVUb0xhcwogICAgIHJlc3VsdCA9IGxpc3QucHJlcGVuZE9yTW92ZVRvRmlyc3QoMyk7CiAgICAg
QVNTRVJUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOwogCi0gICAgQVNTRVJUX0VRKGxpc3Quc2l6
ZSgpLCAzKTsKKyAgICBBU1NFUlRfRVEobGlzdC5zaXplKCksIDN1KTsKIAogICAgIC8vIFRoZSBs
aXN0IHNob3VsZCBiZSBpbiBvcmRlciAzLCAxLCAyLgogICAgIExpc3RIYXNoU2V0PGludD46Oml0
ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5iZWdpbigpOwpAQCAtMTYwLDExICsxNjAsMTEgQEAgVEVT
VChXVEZfTGlzdEhhc2hTZXQsIFByZXBlbmRPck1vdmVUb0xhcwogICAgIEFTU0VSVF9UUlVFKHJl
c3VsdC5pc05ld0VudHJ5KTsKICAgICByZXN1bHQgPSBsaXN0LnByZXBlbmRPck1vdmVUb0ZpcnN0
KDEpOwogICAgIEFTU0VSVF9GQUxTRShyZXN1bHQuaXNOZXdFbnRyeSk7Ci0gICAgQVNTRVJUX0VR
KDEsIGxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUsIGxpc3Quc2l6ZSgpKTsKIAogICAg
IGxpc3QuYWRkKDIpOwogICAgIGxpc3QuYWRkKDMpOwotICAgIEFTU0VSVF9FUSgzLCBsaXN0LnNp
emUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCBsaXN0LnNpemUoKSk7CiAKICAgICAvLyBQcmVwZW5k
aW5nIDIgbW92ZSBpdCB0byB0aGUgYmVnaW5uaW5nLgogICAgIEFTU0VSVF9FUSgxLCBsaXN0LmZp
cnN0KCkpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIFRFU1QoV1RGX0xpc3RIYXNoU2V0LCBQcmVwZW5k
T3JNb3ZlVG9MYXMKICAgICBBU1NFUlRfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOwogICAgIHJl
c3VsdCA9IGxpc3QucHJlcGVuZE9yTW92ZVRvRmlyc3QoMyk7CiAgICAgQVNTRVJUX0ZBTFNFKHJl
c3VsdC5pc05ld0VudHJ5KTsKLSAgICBBU1NFUlRfRVEoMywgbGlzdC5zaXplKCkpOworICAgIEFT
U0VSVF9FUSgzdSwgbGlzdC5zaXplKCkpOwogCiAgICAgTGlzdEhhc2hTZXQ8aW50Pjo6aXRlcmF0
b3IgaXRlcmF0b3IgPSBsaXN0LmJlZ2luKCk7CiAgICAgQVNTRVJUX0VRKDMsICppdGVyYXRvcik7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>