<?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>5532</bug_id>
          
          <creation_ts>2005-10-28 07:39:41 -0700</creation_ts>
          <short_desc>Clean up bidi.cpp</short_desc>
          <delta_ts>2005-11-04 00:14:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>5172</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23120</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-10-28 07:39:41 -0700</bug_when>
    <thetext>Clean up WebCore/khtml/rendering/bidi.cpp to follow the WebKit coding style guidelines. Also change the 
dir and adjustEmbedding file statics into BidiState members (this could help with bug 5172) and remove 
some redundancy from bidiReorderLine().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23121</commentid>
    <comment_count>1</comment_count>
      <attachid>4508</attachid>
    <who name="">mitz</who>
    <bug_when>2005-10-28 07:41:38 -0700</bug_when>
    <thetext>Created attachment 4508
Cleanup patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23122</commentid>
    <comment_count>2</comment_count>
      <attachid>4508</attachid>
    <who name="">mitz</who>
    <bug_when>2005-10-28 07:43:02 -0700</bug_when>
    <thetext>Comment on attachment 4508
Cleanup patch

I verified that all layout tests pass (except one that fails regardless of this
patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23127</commentid>
    <comment_count>3</comment_count>
      <attachid>4508</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-28 10:43:29 -0700</bug_when>
    <thetext>Comment on attachment 4508
Cleanup patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23643</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-03 13:33:53 -0800</bug_when>
    <thetext>I&apos;ll handle merging this since I&apos;m doing some other cleanup.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23654</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-03 15:52:42 -0800</bug_when>
    <thetext>Landed with some edits.  See Changelog.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23675</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-11-04 00:14:39 -0800</bug_when>
    <thetext>Hmm... my bidiReorderLine() changes weren&apos;t committed. I guess I&apos;ll just stick them together with the 
patch for bug 5172. Also, the patch eliminated most tabs from the source, but these changes weren&apos;t 
committed either, so the tabs stay.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4508</attachid>
            <date>2005-10-28 07:41:38 -0700</date>
            <delta_ts>2005-10-28 10:43:29 -0700</delta_ts>
            <desc>Cleanup patch</desc>
            <filename>5532_r1.patch</filename>
            <type>text/plain</type>
            <size>84382</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTMKZGlmZiAt
cCAtdSAtcjEuMTUzIGJpZGkuY3BwCi0tLSBiaWRpLmNwcAkyNCBPY3QgMjAwNSAyMjo1MTowNiAt
MDAwMAkxLjE1MworKysgYmlkaS5jcHAJMjggT2N0IDIwMDUgMTQ6NDU6MzMgLTAwMDAKQEAgLTQ4
LDcgKzQ4LDcgQEAgc3RydWN0IEJpZGlJdGVyYXRvcgogICAgIEJpZGlJdGVyYXRvcigpIDogcGFy
KDApLCBvYmooMCksIHBvcygwKSB7fQogICAgIEJpZGlJdGVyYXRvcihSZW5kZXJCbG9jayAqX3Bh
ciwgUmVuZGVyT2JqZWN0ICpfb2JqLCB1bnNpZ25lZCBpbnQgX3BvcykgOiBwYXIoX3BhciksIG9i
aihfb2JqKSwgcG9zKF9wb3MpIHt9CiAgICAgCi0gICAgdm9pZCBpbmNyZW1lbnQoIEJpZGlTdGF0
ZSAmYmlkaSApOworICAgIHZvaWQgaW5jcmVtZW50KEJpZGlTdGF0ZSAmYmlkaSk7CiAgICAgCiAg
ICAgYm9vbCBhdEVuZCgpIGNvbnN0OwogICAgIApAQCAtNjksNyArNjksNyBAQCBzdHJ1Y3QgQmlk
aVN0YXR1cyB7CiB9OwogICAgIAogc3RydWN0IEJpZGlTdGF0ZSB7Ci0gICAgQmlkaVN0YXRlKCkg
OiBjb250ZXh0KDApIHt9CisgICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0KDApLCBkaXIoUUNoYXI6
OkRpck9OKSwgYWRqdXN0RW1iZWRkaW5nKGZhbHNlKSB7fQogICAgIAogICAgIEJpZGlJdGVyYXRv
ciBzb3I7CiAgICAgQmlkaUl0ZXJhdG9yIGVvcjsKQEAgLTc3LDE0ICs3NywxNiBAQCBzdHJ1Y3Qg
QmlkaVN0YXRlIHsKICAgICBCaWRpSXRlcmF0b3IgY3VycmVudDsKICAgICBCaWRpQ29udGV4dCAq
Y29udGV4dDsKICAgICBCaWRpU3RhdHVzIHN0YXR1czsKKyAgICBRQ2hhcjo6RGlyZWN0aW9uIGRp
cjsKKyAgICBib29sIGFkanVzdEVtYmVkZGluZzsKIH07CiAKIC8vIFVzZWQgdG8gdHJhY2sgYSBs
aXN0IG9mIGNoYWluZWQgYmlkaSBydW5zLgotc3RhdGljIEJpZGlSdW4qIHNGaXJzdEJpZGlSdW47
Ci1zdGF0aWMgQmlkaVJ1biogc0xhc3RCaWRpUnVuOworc3RhdGljIEJpZGlSdW4gKnNGaXJzdEJp
ZGlSdW47CitzdGF0aWMgQmlkaVJ1biAqc0xhc3RCaWRpUnVuOwogc3RhdGljIGludCBzQmlkaVJ1
bkNvdW50Owotc3RhdGljIEJpZGlSdW4qIHNDb21wYWN0Rmlyc3RCaWRpUnVuOwotc3RhdGljIEJp
ZGlSdW4qIHNDb21wYWN0TGFzdEJpZGlSdW47CitzdGF0aWMgQmlkaVJ1biAqc0NvbXBhY3RGaXJz
dEJpZGlSdW47CitzdGF0aWMgQmlkaVJ1biAqc0NvbXBhY3RMYXN0QmlkaVJ1bjsKIHN0YXRpYyBp
bnQgc0NvbXBhY3RCaWRpUnVuQ291bnQ7CiBzdGF0aWMgYm9vbCBzQnVpbGRpbmdDb21wYWN0UnVu
czsKIApAQCAtOTgsMTMgKzEwMCwxMSBAQCBzdGF0aWMgYm9vbCBiZXR3ZWVuTWlkcG9pbnRzOwog
CiBzdGF0aWMgYm9vbCBpc0xpbmVFbXB0eSA9IHRydWU7CiBzdGF0aWMgYm9vbCBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkgPSB0cnVlOwotc3RhdGljIFFDaGFyOjpEaXJlY3Rpb24gZGlyOwotc3Rh
dGljIGJvb2wgYWRqdXN0RW1iZWRkaW5nOwogc3RhdGljIGJvb2wgZW1wdHlSdW4gPSB0cnVlOwog
c3RhdGljIGludCBudW1TcGFjZXM7CiAKLXN0YXRpYyB2b2lkIGVtYmVkKCBRQ2hhcjo6RGlyZWN0
aW9uIGQsIEJpZGlTdGF0ZSAmYmlkaSApOwotc3RhdGljIHZvaWQgYXBwZW5kUnVuKCBCaWRpU3Rh
dGUgJmJpZGkgKTsKK3N0YXRpYyB2b2lkIGVtYmVkKFFDaGFyOjpEaXJlY3Rpb24gZCwgQmlkaVN0
YXRlICZiaWRpKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFJ1bihCaWRpU3RhdGUgJmJpZGkpOwogCiBz
dGF0aWMgaW50IGdldEJQTVdpZHRoKGludCBjaGlsZFZhbHVlLCBMZW5ndGggY3NzVW5pdCkKIHsK
QEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGdldEJQTVdpZHRoKGludCBjaGlsZFZhbHVl
LCBMCiAKIHN0YXRpYyBpbnQgZ2V0Qm9yZGVyUGFkZGluZ01hcmdpbihSZW5kZXJPYmplY3QqIGNo
aWxkLCBib29sIGVuZE9mSW5saW5lKQogewotICAgIFJlbmRlclN0eWxlKiBjc3R5bGUgPSBjaGls
ZC0+c3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSAqY3N0eWxlID0gY2hpbGQtPnN0eWxlKCk7CiAg
ICAgaW50IHJlc3VsdCA9IDA7CiAgICAgYm9vbCBsZWZ0U2lkZSA9IChjc3R5bGUtPmRpcmVjdGlv
bigpID09IExUUikgPyAhZW5kT2ZJbmxpbmUgOiBlbmRPZklubGluZTsKICAgICByZXN1bHQgKz0g
Z2V0QlBNV2lkdGgoKGxlZnRTaWRlID8gY2hpbGQtPm1hcmdpbkxlZnQoKSA6IGNoaWxkLT5tYXJn
aW5SaWdodCgpKSwKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgaW50IGdldEJvcmRlclBhZGRp
bmdNYXJnaW4oUmVuZGVyCiBzdGF0aWMgaW50IGlubGluZVdpZHRoKFJlbmRlck9iamVjdCogY2hp
bGQsIGJvb2wgc3RhcnQgPSB0cnVlLCBib29sIGVuZCA9IHRydWUpCiB7CiAgICAgaW50IGV4dHJh
V2lkdGggPSAwOwotICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gY2hpbGQtPnBhcmVudCgpOwor
ICAgIFJlbmRlck9iamVjdCAqcGFyZW50ID0gY2hpbGQtPnBhcmVudCgpOwogICAgIHdoaWxlIChw
YXJlbnQtPmlzSW5saW5lKCkgJiYgIXBhcmVudC0+aXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUo
KSkgewogICAgICAgICBpZiAoc3RhcnQgJiYgcGFyZW50LT5maXJzdENoaWxkKCkgPT0gY2hpbGQp
CiAgICAgICAgICAgICBleHRyYVdpZHRoICs9IGdldEJvcmRlclBhZGRpbmdNYXJnaW4ocGFyZW50
LCBmYWxzZSk7CkBAIC0xNDcsNyArMTQ3LDcgQEAgc3RhdGljIGludCBpbmxpbmVXaWR0aChSZW5k
ZXJPYmplY3QqIGNoaQogc3RhdGljIGJvb2wgaW5CaWRpUnVuRGVzdHJveTsKICNlbmRpZgogCi12
b2lkIEJpZGlSdW46OmRlc3Ryb3koUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKQordm9pZCBCaWRp
UnVuOjpkZXN0cm95KFJlbmRlckFyZW5hICpyZW5kZXJBcmVuYSkKIHsKICNpZm5kZWYgTkRFQlVH
CiAgICAgaW5CaWRpUnVuRGVzdHJveSA9IHRydWU7CkBAIC0xNjEsMTIgKzE2MSwxMiBAQCB2b2lk
IEJpZGlSdW46OmRlc3Ryb3koUmVuZGVyQXJlbmEqIHJlbmRlCiAgICAgcmVuZGVyQXJlbmEtPmZy
ZWUoKihzaXplX3QgKil0aGlzLCB0aGlzKTsKIH0KIAotdm9pZCogQmlkaVJ1bjo6b3BlcmF0b3Ig
bmV3KHNpemVfdCBzeiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJvdygpCit2b2lkKiBC
aWRpUnVuOjpvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSAqcmVuZGVyQXJlbmEp
IHRocm93KCkKIHsKICAgICByZXR1cm4gcmVuZGVyQXJlbmEtPmFsbG9jYXRlKHN6KTsKIH0KIAot
dm9pZCBCaWRpUnVuOjpvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3opCit2b2lk
IEJpZGlSdW46Om9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwdHIsIHNpemVfdCBzeikKIHsKICAgICBh
c3NlcnQoaW5CaWRpUnVuRGVzdHJveSk7CiAKQEAgLTE3NCwxNSArMTc0LDE1IEBAIHZvaWQgQmlk
aVJ1bjo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwKICAgICAqKHNpemVfdCopcHRyID0gc3o7
CiB9CiAKLXN0YXRpYyB2b2lkIGRlbGV0ZUJpZGlSdW5zKFJlbmRlckFyZW5hKiBhcmVuYSkKK3N0
YXRpYyB2b2lkIGRlbGV0ZUJpZGlSdW5zKFJlbmRlckFyZW5hICphcmVuYSkKIHsKICAgICBlbXB0
eVJ1biA9IHRydWU7CiAgICAgaWYgKCFzRmlyc3RCaWRpUnVuKQogICAgICAgICByZXR1cm47CiAK
LSAgICBCaWRpUnVuKiBjdXJyID0gc0ZpcnN0QmlkaVJ1bjsKKyAgICBCaWRpUnVuICpjdXJyID0g
c0ZpcnN0QmlkaVJ1bjsKICAgICB3aGlsZSAoY3VycikgewotICAgICAgICBCaWRpUnVuKiBzID0g
Y3Vyci0+bmV4dFJ1bjsKKyAgICAgICAgQmlkaVJ1biAqcyA9IGN1cnItPm5leHRSdW47CiAgICAg
ICAgIGN1cnItPmRlc3Ryb3koYXJlbmEpOwogICAgICAgICBjdXJyID0gczsKICAgICB9CkBAIC0x
OTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgdm9pZCBkZWxldGVCaWRpUnVucyhSZW5kZXJBcmVuYSog
CiAgICByZWxheW91dGluZwogKi8KIEJpZGlDb250ZXh0OjpCaWRpQ29udGV4dCh1bnNpZ25lZCBj
aGFyIGwsIFFDaGFyOjpEaXJlY3Rpb24gZSwgQmlkaUNvbnRleHQgKnAsIGJvb2wgbykKLSAgICA6
IGxldmVsKGwpICwgb3ZlcnJpZGUobyksIGRpcihlKQorICAgIDogbGV2ZWwobCksIG92ZXJyaWRl
KG8pLCBkaXIoZSkKIHsKICAgICBwYXJlbnQgPSBwOwotICAgIGlmKHApIHsKKyAgICBpZiAocCkg
ewogICAgICAgICBwLT5yZWYoKTsKICAgICAgICAgYmFzaWNEaXIgPSBwLT5iYXNpY0RpcjsKICAg
ICB9IGVsc2UKQEAgLTIxMiw3ICsyMTIsOCBAQCBCaWRpQ29udGV4dDo6QmlkaUNvbnRleHQodW5z
aWduZWQgY2hhciBsCiAKIEJpZGlDb250ZXh0Ojp+QmlkaUNvbnRleHQoKQogewotICAgIGlmKHBh
cmVudCkgcGFyZW50LT5kZXJlZigpOworICAgIGlmIChwYXJlbnQpCisgICAgICAgIHBhcmVudC0+
ZGVyZWYoKTsKIH0KIAogdm9pZCBCaWRpQ29udGV4dDo6cmVmKCkgY29uc3QKQEAgLTIyMyw1MSAr
MjI0LDQ5IEBAIHZvaWQgQmlkaUNvbnRleHQ6OnJlZigpIGNvbnN0CiB2b2lkIEJpZGlDb250ZXh0
OjpkZXJlZigpIGNvbnN0CiB7CiAgICAgY291bnQtLTsKLSAgICBpZihjb3VudCA8PSAwKSBkZWxl
dGUgdGhpczsKKyAgICBpZiAoY291bnQgPD0gMCkgZGVsZXRlIHRoaXM7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBCaWRpSXRlcmF0b3IgJml0
MSwgY29uc3QgQmlkaUl0ZXJhdG9yICZpdDIgKQogewotICAgIGlmKGl0MS5wb3MgIT0gaXQyLnBv
cykgcmV0dXJuIGZhbHNlOwotICAgIGlmKGl0MS5vYmogIT0gaXQyLm9iaikgcmV0dXJuIGZhbHNl
OworICAgIGlmIChpdDEucG9zICE9IGl0Mi5wb3MpIHJldHVybiBmYWxzZTsKKyAgICBpZiAoaXQx
Lm9iaiAhPSBpdDIub2JqKSByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IEJpZGlJdGVyYXRvciAmaXQxLCBjb25zdCBCaWRp
SXRlcmF0b3IgJml0MiApCiB7Ci0gICAgaWYoaXQxLnBvcyAhPSBpdDIucG9zKSByZXR1cm4gdHJ1
ZTsKLSAgICBpZihpdDEub2JqICE9IGl0Mi5vYmopIHJldHVybiB0cnVlOworICAgIGlmIChpdDEu
cG9zICE9IGl0Mi5wb3MpIHJldHVybiB0cnVlOworICAgIGlmIChpdDEub2JqICE9IGl0Mi5vYmop
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBSZW5k
ZXJPYmplY3QgKkJpZGluZXh0KFJlbmRlck9iamVjdCAqcGFyLCBSZW5kZXJPYmplY3QgKmN1cnJl
bnQsIEJpZGlTdGF0ZSAmYmlkaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNraXBJbmxpbmVzID0gdHJ1ZSwgYm9vbCogZW5kT2ZJbmxpbmUgPSAwKQorc3RhdGlj
IGlubGluZSBSZW5kZXJPYmplY3QgKkJpZGluZXh0KFJlbmRlck9iamVjdCAqcGFyLCBSZW5kZXJP
YmplY3QgKmN1cnJlbnQsIEJpZGlTdGF0ZSYgYmlkaSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNraXBJbmxpbmVzID0gdHJ1ZSwgYm9vbCAqZW5kT2ZJbmxpbmUg
PSAwKQogewogICAgIFJlbmRlck9iamVjdCAqbmV4dCA9IDA7CiAgICAgYm9vbCBvbGRFbmRPZklu
bGluZSA9IGVuZE9mSW5saW5lID8gKmVuZE9mSW5saW5lIDogZmFsc2U7CiAgICAgaWYgKGVuZE9m
SW5saW5lKQogICAgICAgICAqZW5kT2ZJbmxpbmUgPSBmYWxzZTsKIAotICAgIHdoaWxlKGN1cnJl
bnQgIT0gMCkKLSAgICB7CisgICAgd2hpbGUoY3VycmVudCAhPSAwKSB7CiAgICAgICAgIC8va2RE
ZWJ1ZyggNjA0MCApIDw8ICJjdXJyZW50ID0gIiA8PCBjdXJyZW50IDw8IGVuZGw7CiAgICAgICAg
IGlmICghb2xkRW5kT2ZJbmxpbmUgJiYgIWN1cnJlbnQtPmlzRmxvYXRpbmcoKSAmJiAhY3VycmVu
dC0+aXNSZXBsYWNlZCgpICYmICFjdXJyZW50LT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAg
ICAgbmV4dCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmICggbmV4dCAm
JiBhZGp1c3RFbWJlZGRpbmcgKSB7CisgICAgICAgICAgICBpZiAobmV4dCAmJiBiaWRpLmFkanVz
dEVtYmVkZGluZykgewogICAgICAgICAgICAgICAgIEVVbmljb2RlQmlkaSB1YiA9IG5leHQtPnN0
eWxlKCktPnVuaWNvZGVCaWRpKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCB1YiAhPSBVQk5vcm1h
bCApIHsKKyAgICAgICAgICAgICAgICBpZiAodWIgIT0gVUJOb3JtYWwpIHsKICAgICAgICAgICAg
ICAgICAgICAgRURpcmVjdGlvbiBkaXIgPSBuZXh0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKTsKLVFD
aGFyOjpEaXJlY3Rpb24gZCA9ICggdWIgPT0gRW1iZWQgPyAoIGRpciA9PSBSVEwgPyBRQ2hhcjo6
RGlyUkxFIDogUUNoYXI6OkRpckxSRSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogKCBkaXIgPT0gUlRMID8gUUNoYXI6OkRpclJMTyA6IFFDaGFyOjpEaXJMUk8gKSApOwot
ICAgICAgICAgICAgICAgICAgICBlbWJlZCggZCwgYmlkaSApOworICAgICAgICAgICAgICAgICAg
ICBRQ2hhcjo6RGlyZWN0aW9uIGQgPSAodWIgPT0gRW1iZWQgPyAoZGlyID09IFJUTCA/IFFDaGFy
OjpEaXJSTEUgOiBRQ2hhcjo6RGlyTFJFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IChkaXIgPT0gUlRMID8gUUNoYXI6OkRpclJMTyA6IFFDaGFyOjpEaXJMUk8pKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW1iZWQoZCwgYmlkaSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghbmV4dCkgewotICAgICAgICAgICAg
aWYgKCFza2lwSW5saW5lcyAmJiAhb2xkRW5kT2ZJbmxpbmUgJiYgY3VycmVudC0+aXNJbmxpbmVG
bG93KCkpCi0gICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXNraXBJbmxpbmVzICYmICFv
bGRFbmRPZklubGluZSAmJiBjdXJyZW50LT5pc0lubGluZUZsb3coKSkgewogICAgICAgICAgICAg
ICAgIG5leHQgPSBjdXJyZW50OwogICAgICAgICAgICAgICAgIGlmIChlbmRPZklubGluZSkKICAg
ICAgICAgICAgICAgICAgICAgKmVuZE9mSW5saW5lID0gdHJ1ZTsKQEAgLTI3NiwxMCArMjc1LDEw
IEBAIFFDaGFyOjpEaXJlY3Rpb24gZCA9ICggdWIgPT0gRW1iZWQgPyAoIGQKIAogICAgICAgICAg
ICAgd2hpbGUgKGN1cnJlbnQgJiYgY3VycmVudCAhPSBwYXIpIHsKICAgICAgICAgICAgICAgICBu
ZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dCkg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKCBhZGp1c3RFbWJlZGRpbmcgJiYgY3VycmVudC0+
c3R5bGUoKS0+dW5pY29kZUJpZGkoKSAhPSBVQk5vcm1hbCApIHsKKyAgICAgICAgICAgICAgICBp
ZiAobmV4dCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYg
KGJpZGkuYWRqdXN0RW1iZWRkaW5nICYmIGN1cnJlbnQtPnN0eWxlKCktPnVuaWNvZGVCaWRpKCkg
IT0gVUJOb3JtYWwpCiAgICAgICAgICAgICAgICAgICAgIGVtYmVkKCBRQ2hhcjo6RGlyUERGLCBi
aWRpICk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5wYXJlbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIXNraXBJbmxpbmVzICYmIGN1cnJl
bnQgJiYgY3VycmVudCAhPSBwYXIgJiYgY3VycmVudC0+aXNJbmxpbmVGbG93KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgbmV4dCA9IGN1cnJlbnQ7CkBAIC0yOTAsNyArMjg5LDggQEAgUUNoYXI6
OkRpcmVjdGlvbiBkID0gKCB1YiA9PSBFbWJlZCA/ICggZAogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFuZXh0KSBicmVhazsKKyAgICAgICAgaWYgKCFuZXh0KQorICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKG5leHQtPmlzVGV4dCgpIHx8IG5leHQtPmlz
QlIoKSB8fCBuZXh0LT5pc0Zsb2F0aW5nKCkgfHwgbmV4dC0+aXNSZXBsYWNlZCgpIHx8IG5leHQt
PmlzUG9zaXRpb25lZCgpCiAgICAgICAgICAgICB8fCAoKCFza2lwSW5saW5lcyB8fCAhbmV4dC0+
Zmlyc3RDaGlsZCgpKSAvLyBBbHdheXMgcmV0dXJuIEVNUFRZIGlubGluZXMuCkBAIC0zMDEsNTIg
KzMwMSw1MyBAQCBRQ2hhcjo6RGlyZWN0aW9uIGQgPSAoIHViID09IEVtYmVkID8gKCBkCiAgICAg
cmV0dXJuIG5leHQ7CiB9CiAKLXN0YXRpYyBSZW5kZXJPYmplY3QgKmZpcnN0KCBSZW5kZXJPYmpl
Y3QgKnBhciwgQmlkaVN0YXRlICZiaWRpLCBib29sIHNraXBJbmxpbmVzID0gdHJ1ZSApCitzdGF0
aWMgUmVuZGVyT2JqZWN0ICpmaXJzdChSZW5kZXJPYmplY3QgKnBhciwgQmlkaVN0YXRlJiBiaWRp
LCBib29sIHNraXBJbmxpbmVzID0gdHJ1ZSkKIHsKLSAgICBpZighcGFyLT5maXJzdENoaWxkKCkp
IHJldHVybiAwOworICAgIGlmICghcGFyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiAw
OwogICAgIFJlbmRlck9iamVjdCAqbyA9IHBhci0+Zmlyc3RDaGlsZCgpOwogCiAgICAgaWYgKG8t
PmlzSW5saW5lRmxvdygpKSB7CiAgICAgICAgIGlmIChza2lwSW5saW5lcyAmJiBvLT5maXJzdENo
aWxkKCkpCi0gICAgICAgICAgICBvID0gQmlkaW5leHQoIHBhciwgbywgYmlkaSwgc2tpcElubGlu
ZXMgKTsKKyAgICAgICAgICAgIG8gPSBCaWRpbmV4dChwYXIsIG8sIGJpZGksIHNraXBJbmxpbmVz
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIG87IC8vIE5ldmVyIHNraXAgZW1w
dHkgaW5saW5lcy4KICAgICB9CiAKICAgICBpZiAobyAmJiAhby0+aXNUZXh0KCkgJiYgIW8tPmlz
QlIoKSAmJiAhby0+aXNSZXBsYWNlZCgpICYmICFvLT5pc0Zsb2F0aW5nKCkgJiYgIW8tPmlzUG9z
aXRpb25lZCgpKQotICAgICAgICBvID0gQmlkaW5leHQoIHBhciwgbywgYmlkaSwgc2tpcElubGlu
ZXMgKTsKKyAgICAgICAgbyA9IEJpZGluZXh0KHBhciwgbywgYmlkaSwgc2tpcElubGluZXMpOwog
ICAgIHJldHVybiBvOwogfQogCi1pbmxpbmUgdm9pZCBCaWRpSXRlcmF0b3I6OmluY3JlbWVudCAo
QmlkaVN0YXRlICZiaWRpKQoraW5saW5lIHZvaWQgQmlkaUl0ZXJhdG9yOjppbmNyZW1lbnQoQmlk
aVN0YXRlJiBiaWRpKQogewotICAgIGlmKCFvYmopIHJldHVybjsKLSAgICBpZihvYmotPmlzVGV4
dCgpKSB7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2JqLT5pc1Rl
eHQoKSkgewogICAgICAgICBwb3MrKzsKLSAgICAgICAgaWYocG9zID49IHN0YXRpY19jYXN0PFJl
bmRlclRleHQgKj4ob2JqKS0+c3RyaW5nTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIG9iaiA9IEJp
ZGluZXh0KCBwYXIsIG9iaiwgYmlkaSApOworICAgICAgICBpZiAocG9zID49IHN0YXRpY19jYXN0
PFJlbmRlclRleHQgKj4ob2JqKS0+c3RyaW5nTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIG9iaiA9
IEJpZGluZXh0KHBhciwgb2JqLCBiaWRpKTsKICAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewotICAgICAgICBvYmogPSBCaWRpbmV4dCggcGFyLCBvYmosIGJpZGkg
KTsKKyAgICAgICAgb2JqID0gQmlkaW5leHQocGFyLCBvYmosIGJpZGkpOwogICAgICAgICBwb3Mg
PSAwOwogICAgIH0KIH0KIAogaW5saW5lIGJvb2wgQmlkaUl0ZXJhdG9yOjphdEVuZCgpIGNvbnN0
CiB7Ci0gICAgaWYoIW9iaikgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiAhb2JqOwogfQogCi1jb25zdCBRQ2hhciAmQmlkaUl0ZXJhdG9yOjpjdXJyZW50KCkgY29u
c3QKK2NvbnN0IFFDaGFyJiBCaWRpSXRlcmF0b3I6OmN1cnJlbnQoKSBjb25zdAogewogICAgIHN0
YXRpYyBRQ2hhciBudWxsQ2hhcmFjdGVyOwogICAgIAogICAgIGlmICghb2JqIHx8ICFvYmotPmlz
VGV4dCgpKQotICAgICAgcmV0dXJuIG51bGxDaGFyYWN0ZXI7CisgICAgICAgIHJldHVybiBudWxs
Q2hhcmFjdGVyOwogICAgIAotICAgIFJlbmRlclRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Kj4ob2JqKTsKKyAgICBSZW5kZXJUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCo+KG9iaik7CiAgICAgaWYgKCF0ZXh0LT50ZXh0KCkpCiAgICAgICAgIHJldHVybiBudWxs
Q2hhcmFjdGVyOwogICAgIApAQCAtMzcwLDcgKzM3MSw3IEBAIEFMV0FZU19JTkxJTkUgUUNoYXI6
OkRpcmVjdGlvbiBCaWRpSXRlcmEKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1zdGF0aWMgdm9pZCBhZGRSdW4oQmlkaVJ1biogYmlkaVJ1bikKK3N0YXRp
YyB2b2lkIGFkZFJ1bihCaWRpUnVuICpiaWRpUnVuKQogewogICAgIGlmICghc0ZpcnN0QmlkaVJ1
bikKICAgICAgICAgc0ZpcnN0QmlkaVJ1biA9IHNMYXN0QmlkaVJ1biA9IGJpZGlSdW47CkBAIC0z
ODMsNyArMzg0LDcgQEAgc3RhdGljIHZvaWQgYWRkUnVuKEJpZGlSdW4qIGJpZGlSdW4pCiAKICAg
ICAvLyBDb21wdXRlIHRoZSBudW1iZXIgb2Ygc3BhY2VzIGluIHRoaXMgcnVuLAogICAgIGlmIChi
aWRpUnVuLT5vYmogJiYgYmlkaVJ1bi0+b2JqLT5pc1RleHQoKSkgewotICAgICAgICBSZW5kZXJU
ZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KGJpZGlSdW4tPm9iaik7CisgICAg
ICAgIFJlbmRlclRleHQgKnRleHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oYmlkaVJ1bi0+
b2JqKTsKICAgICAgICAgaWYgKHRleHQtPnRleHQoKSkgewogICAgICAgICAgICAgZm9yIChpbnQg
aSA9IGJpZGlSdW4tPnN0YXJ0OyBpIDwgYmlkaVJ1bi0+c3RvcDsgaSsrKSB7CiAgICAgICAgICAg
ICAgICAgY29uc3QgUUNoYXIgYyA9IHRleHQtPnRleHQoKVtpXTsKQEAgLTQwMyw4ICs0MDQsOCBA
QCBzdGF0aWMgdm9pZCByZXZlcnNlUnVucyhpbnQgc3RhcnQsIGludCBlCiAgICAgCiAgICAgLy8g
R2V0IHRoZSBpdGVtIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHJ1bnMgdG8gcmV2ZXJzZSBhbmQg
cHV0IGl0IGluCiAgICAgLy8gfGJlZm9yZVN0YXJ0fC4gIHxjdXJyfCBzaG91bGQgcG9pbnQgdG8g
dGhlIGZpcnN0IHJ1biB0byByZXZlcnNlLgotICAgIEJpZGlSdW4qIGN1cnIgPSBzRmlyc3RCaWRp
UnVuOwotICAgIEJpZGlSdW4qIGJlZm9yZVN0YXJ0ID0gMDsKKyAgICBCaWRpUnVuICpjdXJyID0g
c0ZpcnN0QmlkaVJ1bjsKKyAgICBCaWRpUnVuICpiZWZvcmVTdGFydCA9IDA7CiAgICAgaW50IGkg
PSAwOwogICAgIHdoaWxlIChpIDwgc3RhcnQpIHsKICAgICAgICAgaSsrOwpAQCAtNDEyLDIwICs0
MTMsMjAgQEAgc3RhdGljIHZvaWQgcmV2ZXJzZVJ1bnMoaW50IHN0YXJ0LCBpbnQgZQogICAgICAg
ICBjdXJyID0gY3Vyci0+bmV4dFJ1bjsKICAgICB9CiAKLSAgICBCaWRpUnVuKiBzdGFydFJ1biA9
IGN1cnI7CisgICAgQmlkaVJ1biAqc3RhcnRSdW4gPSBjdXJyOwogICAgIHdoaWxlIChpIDwgZW5k
KSB7CiAgICAgICAgIGkrKzsKICAgICAgICAgY3VyciA9IGN1cnItPm5leHRSdW47CiAgICAgfQot
ICAgIEJpZGlSdW4qIGVuZFJ1biA9IGN1cnI7Ci0gICAgQmlkaVJ1biogYWZ0ZXJFbmQgPSBjdXJy
LT5uZXh0UnVuOworICAgIEJpZGlSdW4gKmVuZFJ1biA9IGN1cnI7CisgICAgQmlkaVJ1biAqYWZ0
ZXJFbmQgPSBjdXJyLT5uZXh0UnVuOwogCiAgICAgaSA9IHN0YXJ0OwogICAgIGN1cnIgPSBzdGFy
dFJ1bjsKLSAgICBCaWRpUnVuKiBuZXdOZXh0ID0gYWZ0ZXJFbmQ7CisgICAgQmlkaVJ1biAqbmV3
TmV4dCA9IGFmdGVyRW5kOwogICAgIHdoaWxlIChpIDw9IGVuZCkgewogICAgICAgICAvLyBEbyB0
aGUgcmV2ZXJzYWwuCi0gICAgICAgIEJpZGlSdW4qIG5leHQgPSBjdXJyLT5uZXh0UnVuOworICAg
ICAgICBCaWRpUnVuICpuZXh0ID0gY3Vyci0+bmV4dFJ1bjsKICAgICAgICAgY3Vyci0+bmV4dFJ1
biA9IG5ld05leHQ7CiAgICAgICAgIG5ld05leHQgPSBjdXJyOwogICAgICAgICBjdXJyID0gbmV4
dDsKQEAgLTQ0NSw4ICs0NDYsOSBAQCBzdGF0aWMgdm9pZCByZXZlcnNlUnVucyhpbnQgc3RhcnQs
IGludCBlCiAKIHN0YXRpYyB2b2lkIGNob3BNaWRwb2ludHNBdChSZW5kZXJPYmplY3QqIG9iaiwg
dWludCBwb3MpCiB7Ci0gICAgaWYgKCFzTnVtTWlkcG9pbnRzKSByZXR1cm47Ci0gICAgQmlkaUl0
ZXJhdG9yKiBtaWRwb2ludHMgPSBzbWlkcG9pbnRzLT5kYXRhKCk7CisgICAgaWYgKCFzTnVtTWlk
cG9pbnRzKQorICAgICAgICByZXR1cm47CisgICAgQmlkaUl0ZXJhdG9yICptaWRwb2ludHMgPSBz
bWlkcG9pbnRzLT5kYXRhKCk7CiAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgc051bU1pZHBvaW50
czsgaSsrKSB7CiAgICAgICAgIGNvbnN0IEJpZGlJdGVyYXRvciYgcG9pbnQgPSBtaWRwb2ludHNb
aV07CiAgICAgICAgIGlmIChwb2ludC5vYmogPT0gb2JqICYmIHBvaW50LnBvcyA9PSBwb3MpIHsK
QEAgLTQ1NiwyNSArNDU4LDI1IEBAIHN0YXRpYyB2b2lkIGNob3BNaWRwb2ludHNBdChSZW5kZXJP
YmplY3QKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrTWlkcG9pbnRzKEJpZGlJdGVyYXRv
ciYgbEJyZWFrLCBCaWRpU3RhdGUgJmJpZGkpCitzdGF0aWMgdm9pZCBjaGVja01pZHBvaW50cyhC
aWRpSXRlcmF0b3ImIGxCcmVhaywgQmlkaVN0YXRlJiBiaWRpKQogewogICAgIC8vIENoZWNrIHRv
IHNlZSBpZiBvdXIgbGFzdCBtaWRwb2ludCBpcyBhIHN0YXJ0IHBvaW50IGJleW9uZCB0aGUgbGlu
ZSBicmVhay4gIElmIHNvLAogICAgIC8vIHNoYXZlIGl0IG9mZiB0aGUgbGlzdCwgYW5kIHNoYXZl
IG9mZiBhIHRyYWlsaW5nIHNwYWNlIGlmIHRoZSBwcmV2aW91cyBlbmQgcG9pbnQgaXNuJ3QKICAg
ICAvLyB3aGl0ZS1zcGFjZTogcHJlLgogICAgIGlmIChsQnJlYWsub2JqICYmIHNOdW1NaWRwb2lu
dHMgJiYgc051bU1pZHBvaW50cyUyID09IDApIHsKLSAgICAgICAgQmlkaUl0ZXJhdG9yKiBtaWRw
b2ludHMgPSBzbWlkcG9pbnRzLT5kYXRhKCk7CisgICAgICAgIEJpZGlJdGVyYXRvciAqbWlkcG9p
bnRzID0gc21pZHBvaW50cy0+ZGF0YSgpOwogICAgICAgICBCaWRpSXRlcmF0b3ImIGVuZHBvaW50
ID0gbWlkcG9pbnRzW3NOdW1NaWRwb2ludHMtMl07CiAgICAgICAgIGNvbnN0IEJpZGlJdGVyYXRv
ciYgc3RhcnRwb2ludCA9IG1pZHBvaW50c1tzTnVtTWlkcG9pbnRzLTFdOwogICAgICAgICBCaWRp
SXRlcmF0b3IgY3VycnBvaW50ID0gZW5kcG9pbnQ7CiAgICAgICAgIHdoaWxlICghY3VycnBvaW50
LmF0RW5kKCkgJiYgY3VycnBvaW50ICE9IHN0YXJ0cG9pbnQgJiYgY3VycnBvaW50ICE9IGxCcmVh
aykKLSAgICAgICAgICAgIGN1cnJwb2ludC5pbmNyZW1lbnQoIGJpZGkgKTsKKyAgICAgICAgICAg
IGN1cnJwb2ludC5pbmNyZW1lbnQoYmlkaSk7CiAgICAgICAgIGlmIChjdXJycG9pbnQgPT0gbEJy
ZWFrKSB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGxpbmUgYnJlYWsgYmVmb3JlIHRoZSBz
dGFydCBwb2ludC4gIFNoYXZlIG9mZiB0aGUgc3RhcnQgcG9pbnQuCiAgICAgICAgICAgICBzTnVt
TWlkcG9pbnRzLS07CiAgICAgICAgICAgICBpZiAoZW5kcG9pbnQub2JqLT5zdHlsZSgpLT53aGl0
ZVNwYWNlKCkgIT0gUFJFKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVuZHBvaW50Lm9iai0+aXNU
ZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2hhdmUgYSBjaGFyYWN0ZXIg
b2ZmIHRoZSBlbmRwb2ludCBpZiBpdCB3YXMgZnJvbSBhIHNvZnQgaHlwaGVuLgotICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0T2JqID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+
KGVuZHBvaW50Lm9iaik7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgKnRleHRPYmog
PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oZW5kcG9pbnQub2JqKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVuZHBvaW50LnBvcysxIDwgdGV4dE9iai0+bGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXh0T2JqLT50ZXh0KClbZW5kcG9pbnQucG9zKzFdLnVuaWNv
ZGUoKSA9PSBTT0ZUX0hZUEhFTikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC00OTgsMTEgKzUwMCwxMSBAQCBzdGF0aWMgdm9pZCBhZGRNaWRwb2ludChjb25zdCBCaWRp
SXRlcmF0CiAgICAgaWYgKHNtaWRwb2ludHMtPnNpemUoKSA8PSBzTnVtTWlkcG9pbnRzKQogICAg
ICAgICBzbWlkcG9pbnRzLT5yZXNpemUoc051bU1pZHBvaW50cysxMCk7CiAKLSAgICBCaWRpSXRl
cmF0b3IqIG1pZHBvaW50cyA9IHNtaWRwb2ludHMtPmRhdGEoKTsKKyAgICBCaWRpSXRlcmF0b3Ig
Km1pZHBvaW50cyA9IHNtaWRwb2ludHMtPmRhdGEoKTsKICAgICBtaWRwb2ludHNbc051bU1pZHBv
aW50cysrXSA9IG1pZHBvaW50OwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRSdW5zRm9yT2JqZWN0
KGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0KiBvYmosIEJpZGlTdGF0ZSAmYmlkaSkK
K3N0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5k
ZXJPYmplY3QgKm9iaiwgQmlkaVN0YXRlJiBiaWRpKQogewogICAgIGlmIChzdGFydCA+IGVuZCB8
fCBvYmotPmlzRmxvYXRpbmcoKSB8fAogICAgICAgICAob2JqLT5pc1Bvc2l0aW9uZWQoKSAmJiAh
b2JqLT5oYXNTdGF0aWNYKCkgJiYgIW9iai0+aGFzU3RhdGljWSgpICYmICFvYmotPmNvbnRhaW5l
cigpLT5pc0lubGluZUZsb3coKSkpCkBAIC01MjQsOCArNTI2LDggQEAgc3RhdGljIHZvaWQgYXBw
ZW5kUnVuc0Zvck9iamVjdChpbnQgc3RhcgogICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFJ1bnNG
b3JPYmplY3Qoc3RhcnQsIGVuZCwgb2JqLCBiaWRpKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGlmICghc21pZHBvaW50cyB8fCAhaGF2ZU5leHRNaWRwb2ludCB8fCAob2JqICE9IG5leHRN
aWRwb2ludC5vYmopKSB7Ci0gICAgICAgICAgICBhZGRSdW4obmV3IChvYmotPnJlbmRlckFyZW5h
KCkpIEJpZGlSdW4oc3RhcnQsIGVuZCwgb2JqLCBiaWRpLmNvbnRleHQsIGRpcikpOworICAgICAg
ICBpZiAoIXNtaWRwb2ludHMgfHwgIWhhdmVOZXh0TWlkcG9pbnQgfHwgb2JqICE9IG5leHRNaWRw
b2ludC5vYmopIHsKKyAgICAgICAgICAgIGFkZFJ1bihuZXcgKG9iai0+cmVuZGVyQXJlbmEoKSkg
QmlkaVJ1bihzdGFydCwgZW5kLCBvYmosIGJpZGkuY29udGV4dCwgYmlkaS5kaXIpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTUzNywxNiArNTM5LDE2IEBA
IHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoaW50IHN0YXIKICAgICAgICAgICAgIGlm
IChuZXh0TWlkcG9pbnQucG9zICE9IFVJTlRfTUFYKSB7IC8vIFVJTlRfTUFYIG1lYW5zIHN0b3Ag
YXQgdGhlIG9iamVjdCBhbmQgZG9uJ3QgaW5jbHVkZSBhbnkgb2YgaXQuCiAgICAgICAgICAgICAg
ICAgaWYgKGludChuZXh0TWlkcG9pbnQucG9zKzEpID4gc3RhcnQpCiAgICAgICAgICAgICAgICAg
ICAgIGFkZFJ1bihuZXcgKG9iai0+cmVuZGVyQXJlbmEoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEJpZGlSdW4oc3RhcnQsIG5leHRNaWRwb2ludC5wb3MrMSwgb2JqLCBiaWRpLmNvbnRleHQs
IGRpcikpOworICAgICAgICAgICAgICAgICAgICAgICAgQmlkaVJ1bihzdGFydCwgbmV4dE1pZHBv
aW50LnBvcysxLCBvYmosIGJpZGkuY29udGV4dCwgYmlkaS5kaXIpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gYXBwZW5kUnVuc0Zvck9iamVjdChuZXh0TWlkcG9pbnQucG9zKzEsIGVuZCwgb2Jq
LCBiaWRpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAg
ICAgIGFkZFJ1bihuZXcgKG9iai0+cmVuZGVyQXJlbmEoKSkgQmlkaVJ1bihzdGFydCwgZW5kLCBv
YmosIGJpZGkuY29udGV4dCwgZGlyKSk7CisgICAgICAgICAgIGFkZFJ1bihuZXcgKG9iai0+cmVu
ZGVyQXJlbmEoKSkgQmlkaVJ1bihzdGFydCwgZW5kLCBvYmosIGJpZGkuY29udGV4dCwgYmlkaS5k
aXIpKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFwcGVuZFJ1biggQmlkaVN0YXRlICZiaWRp
ICkKK3N0YXRpYyB2b2lkIGFwcGVuZFJ1bihCaWRpU3RhdGUmIGJpZGkpCiB7CiAgICAgaWYgKGVt
cHR5UnVuIHx8ICFiaWRpLmVvci5vYmopCiAgICAgICAgIHJldHVybjsKQEAgLTU1NCwxNSArNTU2
LDE1IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJ1biggQmlkaVN0YXRlICZiaWRpICkKICAgICBrZERl
YnVnKDYwNDEpIDw8ICJhcHBlbmRSdW46IGRpcj0iPDwoaW50KWRpcjw8ZW5kbDsKICNlbmRpZgog
Ci0gICAgYm9vbCBiID0gYWRqdXN0RW1iZWRkaW5nOwotICAgIGFkanVzdEVtYmVkZGluZyA9IGZh
bHNlOworICAgIGJvb2wgYiA9IGJpZGkuYWRqdXN0RW1iZWRkaW5nOworICAgIGJpZGkuYWRqdXN0
RW1iZWRkaW5nID0gZmFsc2U7CiAKICAgICBpbnQgc3RhcnQgPSBiaWRpLnNvci5wb3M7CiAgICAg
UmVuZGVyT2JqZWN0ICpvYmogPSBiaWRpLnNvci5vYmo7Ci0gICAgd2hpbGUoIG9iaiAmJiBvYmog
IT0gYmlkaS5lb3Iub2JqICkgeworICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGJpZGkuZW9yLm9i
aikgewogICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHN0YXJ0LCBvYmotPmxlbmd0aCgpLCBv
YmosIGJpZGkpOyAgICAgICAgCiAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgb2JqID0gQmlk
aW5leHQoIGJpZGkuc29yLnBhciwgb2JqLCBiaWRpICk7CisgICAgICAgIG9iaiA9IEJpZGluZXh0
KGJpZGkuc29yLnBhciwgb2JqLCBiaWRpKTsKICAgICB9CiAgICAgaWYgKG9iaikgewogICAgICAg
ICAvLyBJdCdzIE9LIHRvIGFkZCBydW5zIGZvciB6ZXJvLWxlbmd0aCBSZW5kZXJPYmplY3RzLCBq
dXN0IGRvbid0IG1ha2UgdGhlIHJ1biBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUKQEAgLTU3MCwx
MzcgKzU3MiwxMzcgQEAgc3RhdGljIHZvaWQgYXBwZW5kUnVuKCBCaWRpU3RhdGUgJmJpZGkgKQog
ICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHN0YXJ0LCBlbmQsIG9iaiwgYmlkaSk7CiAgICAg
fQogICAgIAotICAgIGJpZGkuZW9yLmluY3JlbWVudCggYmlkaSApOworICAgIGJpZGkuZW9yLmlu
Y3JlbWVudChiaWRpKTsKICAgICBiaWRpLnNvciA9IGJpZGkuZW9yOwotICAgIGRpciA9IFFDaGFy
OjpEaXJPTjsKKyAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKICAgICBiaWRpLnN0YXR1cy5l
b3IgPSBRQ2hhcjo6RGlyT047Ci0gICAgYWRqdXN0RW1iZWRkaW5nID0gYjsKKyAgICBiaWRpLmFk
anVzdEVtYmVkZGluZyA9IGI7CiB9CiAKLXN0YXRpYyB2b2lkIGVtYmVkKCBRQ2hhcjo6RGlyZWN0
aW9uIGQsIEJpZGlTdGF0ZSAmYmlkaSApCitzdGF0aWMgdm9pZCBlbWJlZChRQ2hhcjo6RGlyZWN0
aW9uIGQsIEJpZGlTdGF0ZSYgYmlkaSkKIHsKICNpZiBCSURJX0RFQlVHID4gMQogICAgIHFEZWJ1
ZygiKioqIGVtYmVkIGRpcj0lZCBlbXB0eXJ1bj0lZCIsIGQsIGVtcHR5UnVuICk7CiAjZW5kaWYK
LSAgICBib29sIGIgPSBhZGp1c3RFbWJlZGRpbmcgOwotICAgIGFkanVzdEVtYmVkZGluZyA9IGZh
bHNlOworICAgIGJvb2wgYiA9IGJpZGkuYWRqdXN0RW1iZWRkaW5nIDsKKyAgICBiaWRpLmFkanVz
dEVtYmVkZGluZyA9IGZhbHNlOwogICAgIGlmIChkID09IFFDaGFyOjpEaXJQREYpIHsKIAlCaWRp
Q29udGV4dCAqYyA9IGJpZGkuY29udGV4dC0+cGFyZW50OwotCWlmIChjKSB7Ci0JICAgIGlmICgg
IWVtcHR5UnVuICYmIGJpZGkuZW9yICE9IGJpZGkubGFzdCApIHsKLSAgICAgICAgICAgIGFzc2Vy
dChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpck9OKTsKLSAgICAgICAgICAgIC8vIGJpZGku
c29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVvcjsgbmVlZCB0byBhcHBlbmQgdGhlIGJp
ZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQgdGhyb3VnaCBiaWRpLmxhc3QKLSAgICAg
ICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJFUyB8fCBiaWRpLnN0
YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJFVCB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpE
aXJDUyB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJCTiB8fCBiaWRpLnN0YXR1cy5s
YXN0ID09IFFDaGFyOjpEaXJCIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpclMgfHwg
YmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyV1MgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBR
Q2hhcjo6RGlyT04pOwotICAgICAgICAgICAgaWYgKGRpciA9PSBRQ2hhcjo6RGlyT04pCi0gICAg
ICAgICAgICAgICAgZGlyID0gYmlkaS5jb250ZXh0LT5kaXI7Ci0gICAgICAgICAgICBpZiAoYmlk
aS5jb250ZXh0LT5kaXIgPT0gUUNoYXI6OkRpckwpIHsKLSAgICAgICAgICAgICAgICAvLyBiaWRp
LnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBMCi0gICAgICAgICAgICAgICAgaWYgKGJp
ZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gUUNoYXI6OkRpckwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRpciA9IFFDaGFyOjpEaXJFTjsKKyAgICAgICAgaWYgKGMpIHsKKyAgICAgICAg
ICAgIGlmICghZW1wdHlSdW4gJiYgYmlkaS5lb3IgIT0gYmlkaS5sYXN0KSB7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyT04pOworICAgICAgICAg
ICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVvcjsgbmVlZCB0
byBhcHBlbmQgdGhlIGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQgdGhyb3VnaCBi
aWRpLmxhc3QKKyAgICAgICAgICAgICAgICBhc3NlcnQoYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hh
cjo6RGlyRVMgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyRVQgfHwgYmlkaS5zdGF0
dXMubGFzdCA9PSBRQ2hhcjo6RGlyQ1MgfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGly
Qk4gfHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyQiB8fCBiaWRpLnN0YXR1cy5sYXN0
ID09IFFDaGFyOjpEaXJTIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpcldTIHx8IGJp
ZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpck9OKTsKKyAgICAgICAgICAgICAgICBpZiAoYmlk
aS5kaXIgPT0gUUNoYXI6OkRpck9OKQorICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJp
ZGkuY29udGV4dC0+ZGlyOworICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpciA9
PSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlk
aS5lb3IgLi4uIGJpZGkubGFzdCBMCisgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1
cy5lb3IgPT0gUUNoYXI6OkRpckVOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpckFO
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJBTjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFy
OjpEaXJBTikgewotICAgICAgICAgICAgICAgICAgICBkaXIgPSBRQ2hhcjo6RGlyQU47Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyTCkKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckwpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChi
aWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFy
OjpEaXJBTCkKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0
dXMuZW9yICE9IFFDaGFyOjpEaXJBTCkKLSAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7
Ci0gICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OworICAgICAgICAgICAgfQogCSAgICBhcHBlbmRS
dW4oYmlkaSk7CiAJICAgIGVtcHR5UnVuID0gdHJ1ZTsKLSAgICAgICAgLy8gc29yIGZvciB0aGUg
bmV3IHJ1biBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBoaWdoZXIgbGV2ZWwgKHJ1bGUgWDEwKQorICAg
ICAgICAgICAgLy8gc29yIGZvciB0aGUgbmV3IHJ1biBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBoaWdo
ZXIgbGV2ZWwgKHJ1bGUgWDEwKQogCSAgICBiaWRpLnN0YXR1cy5sYXN0ID0gYmlkaS5jb250ZXh0
LT5kaXI7CiAJICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPSBiaWRpLmNvbnRleHQtPmRpcjsK
IAkgICAgYmlkaS5jb250ZXh0LT5kZXJlZigpOwogCSAgICBiaWRpLmNvbnRleHQgPSBjOwotICAg
ICAgICBiaWRpLnN0YXR1cy5lb3IgPSBiaWRpLmNvbnRleHQtPmRpcjsKLSAgICAgICAgYmlkaS5l
b3Iub2JqID0gMDsKLQl9CisgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBiaWRpLmNvbnRl
eHQtPmRpcjsKKyAgICAgICAgICAgIGJpZGkuZW9yLm9iaiA9IDA7CisgICAgICAgIH0KICAgICB9
IGVsc2UgewogCVFDaGFyOjpEaXJlY3Rpb24gcnVuRGlyOwotCWlmKCBkID09IFFDaGFyOjpEaXJS
TEUgfHwgZCA9PSBRQ2hhcjo6RGlyUkxPICkKKyAgICAgICAgaWYgKGQgPT0gUUNoYXI6OkRpclJM
RSB8fCBkID09IFFDaGFyOjpEaXJSTE8pCiAJICAgIHJ1bkRpciA9IFFDaGFyOjpEaXJSOwogCWVs
c2UKIAkgICAgcnVuRGlyID0gUUNoYXI6OkRpckw7CiAJYm9vbCBvdmVycmlkZSA9IGQgPT0gUUNo
YXI6OkRpckxSTyB8fCBkID09IFFDaGFyOjpEaXJSTE87CiAKIAl1bnNpZ25lZCBjaGFyIGxldmVs
ID0gYmlkaS5jb250ZXh0LT5sZXZlbDsKLQlpZiAoIHJ1bkRpciA9PSBRQ2hhcjo6RGlyUiApIHsK
LQkgICAgaWYobGV2ZWwlMikgLy8gd2UgaGF2ZSBhbiBvZGQgbGV2ZWwKKyAgICAgICAgaWYgKHJ1
bkRpciA9PSBRQ2hhcjo6RGlyUikgeworICAgICAgICAgICAgaWYgKGxldmVsJTIpIC8vIHdlIGhh
dmUgYW4gb2RkIGxldmVsCiAJCWxldmVsICs9IDI7CiAJICAgIGVsc2UKIAkJbGV2ZWwrKzsKIAl9
IGVsc2UgewotCSAgICBpZihsZXZlbCUyKSAvLyB3ZSBoYXZlIGFuIG9kZCBsZXZlbAorICAgICAg
ICAgICAgaWYgKGxldmVsJTIpIC8vIHdlIGhhdmUgYW4gb2RkIGxldmVsCiAJCWxldmVsKys7CiAJ
ICAgIGVsc2UKIAkJbGV2ZWwgKz0gMjsKIAl9CiAKLQlpZihsZXZlbCA8IDYxKSB7Ci0JICAgIGlm
ICggIWVtcHR5UnVuICYmIGJpZGkuZW9yICE9IGJpZGkubGFzdCApIHsKLSAgICAgICAgICAgIGFz
c2VydChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpck9OKTsKLSAgICAgICAgICAgIC8vIGJp
ZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0IGVvcjsgbmVlZCB0byBhcHBlbmQgdGhl
IGJpZGkuc29yLWJpZGkuZW9yIHJ1biBvciBleHRlbmQgaXQgdGhyb3VnaCBiaWRpLmxhc3QKLSAg
ICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJFUyB8fCBiaWRp
LnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJFVCB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFy
OjpEaXJDUyB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJCTiB8fCBiaWRpLnN0YXR1
cy5sYXN0ID09IFFDaGFyOjpEaXJCIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpclMg
fHwgYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyV1MgfHwgYmlkaS5zdGF0dXMubGFzdCA9
PSBRQ2hhcjo6RGlyT04pOwotICAgICAgICAgICAgaWYgKGRpciA9PSBRQ2hhcjo6RGlyT04pCi0g
ICAgICAgICAgICAgICAgZGlyID0gcnVuRGlyOwotICAgICAgICAgICAgaWYgKHJ1bkRpciA9PSBR
Q2hhcjo6RGlyTCkgewotICAgICAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAu
Li4gYmlkaS5sYXN0IEwKLSAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFFD
aGFyOjpEaXJFTikgewotICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdFN0
cm9uZyAhPSBRQ2hhcjo6RGlyTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gUUNo
YXI6OkRpckVOOwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyICE9IFFDaGFyOjpEaXJM
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IFFDaGFyOjpEaXJSOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5l
b3IgPT0gUUNoYXI6OkRpckFOKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpciA9IFFDaGFyOjpE
aXJBTjsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0gUUNoYXI6OkRpckwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGlyID0gUUNoYXI6OkRpclI7CisgICAgICAgIGlmIChsZXZlbCA8IDYxKSB7CisgICAg
ICAgICAgICBpZiAoIWVtcHR5UnVuICYmIGJpZGkuZW9yICE9IGJpZGkubGFzdCkgeworICAgICAg
ICAgICAgICAgIGFzc2VydChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpck9OKTsKKyAgICAg
ICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFzdCBlb3I7IG5l
ZWQgdG8gYXBwZW5kIHRoZSBiaWRpLnNvci1iaWRpLmVvciBydW4gb3IgZXh0ZW5kIGl0IHRocm91
Z2ggYmlkaS5sYXN0CisgICAgICAgICAgICAgICAgYXNzZXJ0KGJpZGkuc3RhdHVzLmxhc3QgPT0g
UUNoYXI6OkRpckVTIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckVUIHx8IGJpZGku
c3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckNTIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6
OkRpckJOIHx8IGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRpckIgfHwgYmlkaS5zdGF0dXMu
bGFzdCA9PSBRQ2hhcjo6RGlyUyB8fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJXUyB8
fCBiaWRpLnN0YXR1cy5sYXN0ID09IFFDaGFyOjpEaXJPTik7CisgICAgICAgICAgICAgICAgaWYg
KGJpZGkuZGlyID09IFFDaGFyOjpEaXJPTikKKyAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBydW5EaXI7CisgICAgICAgICAgICAgICAgaWYgKHJ1bkRpciA9PSBRQ2hhcjo6RGlyTCkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBiaWRpLnNvciAuLi4gYmlkaS5lb3IgLi4uIGJpZGkubGFz
dCBMCisgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRp
ckVOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9u
ZyAhPSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGly
ID0gUUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihi
aWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIg
IT0gUUNoYXI6OkRpckwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGly
ID0gUUNoYXI6OkRpclI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJBTikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyQU47CiAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0gUUNoYXI6OkRpckwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmKGJpZGkuY29udGV4dC0+ZGlyID09IFFDaGFyOjpEaXJM
IHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckwpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpclI7
IAogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRp
LnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoYmlk
aS5jb250ZXh0LT5kaXIgPT0gUUNoYXI6OkRpckwgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9
PSBRQ2hhcjo6RGlyTCkKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVv
ciAhPSBRQ2hhcjo6RGlyUiAmJiBiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckFMKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGJpZGkuc29yIC4uLiBiaWRpLmVvciAuLi4gYmlkaS5sYXN0
IFI7IGJpZGkuZW9yPUwvRU4vQU47IEVOLEFOIGJlaGF2ZSBsaWtlIFIgKHJ1bGUgTjEpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpciA9PSBRQ2hhcjo6RGlyUiB8fCBi
aWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RT
dHJvbmcgPT0gUUNoYXI6OkRpckFMKQogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkaXIgPSBRQ2hhcjo6RGlyUjsgCisgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9
IFFDaGFyOjpEaXJMOyAKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyUiAmJiBiaWRpLnN0YXR1cy5lb3IgIT0gUUNo
YXI6OkRpckFMKSB7Ci0gICAgICAgICAgICAgICAgLy8gYmlkaS5zb3IgLi4uIGJpZGkuZW9yIC4u
LiBiaWRpLmxhc3QgUjsgYmlkaS5lb3I9TC9FTi9BTjsgRU4sQU4gYmVoYXZlIGxpa2UgUiAocnVs
ZSBOMSkKLSAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgPT0gUUNoYXI6OkRp
clIgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJBTCkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGly
ID0gUUNoYXI6OkRpckw7IAorICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0Owog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAg
IH0KLSAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICBlbXB0eVJ1biA9IHRydWU7Ci0J
ICAgIGJpZGkuY29udGV4dCA9IG5ldyBCaWRpQ29udGV4dChsZXZlbCwgcnVuRGlyLCBiaWRpLmNv
bnRleHQsIG92ZXJyaWRlKTsKLQkgICAgYmlkaS5jb250ZXh0LT5yZWYoKTsKLQkgICAgYmlkaS5z
dGF0dXMubGFzdCA9IHJ1bkRpcjsKLQkgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IHJ1bkRp
cjsKLQkgICAgYmlkaS5zdGF0dXMuZW9yID0gcnVuRGlyOwotICAgICAgICBiaWRpLmVvci5vYmog
PSAwOworICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgZW1wdHlSdW4g
PSB0cnVlOworICAgICAgICAgICAgYmlkaS5jb250ZXh0ID0gbmV3IEJpZGlDb250ZXh0KGxldmVs
LCBydW5EaXIsIGJpZGkuY29udGV4dCwgb3ZlcnJpZGUpOworICAgICAgICAgICAgYmlkaS5jb250
ZXh0LT5yZWYoKTsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBydW5EaXI7CisgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID0gcnVuRGlyOworICAgICAgICAgICAgYmlk
aS5zdGF0dXMuZW9yID0gcnVuRGlyOworICAgICAgICAgICAgYmlkaS5lb3Iub2JqID0gMDsKIAl9
CiAgICAgfQotICAgIGFkanVzdEVtYmVkZGluZyA9IGI7CisgICAgYmlkaS5hZGp1c3RFbWJlZGRp
bmcgPSBiOwogfQogCi1JbmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJveGVz
KFJlbmRlck9iamVjdCogb2JqKQorSW5saW5lRmxvd0JveCAqUmVuZGVyQmxvY2s6OmNyZWF0ZUxp
bmVCb3hlcyhSZW5kZXJPYmplY3QgKm9iaikKIHsKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbiB1
bmNvbnN0cnVjdGVkIGxpbmUgYm94IGZvciB0aGlzIG9iamVjdCB0aGF0IGlzIGFsc28KICAgICAv
LyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgogICAgIEtIVE1MQXNzZXJ0KG9iai0+aXNJbmxp
bmVGbG93KCkgfHwgb2JqID09IHRoaXMpOwotICAgIFJlbmRlckZsb3cqIGZsb3cgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJGbG93Kj4ob2JqKTsKKyAgICBSZW5kZXJGbG93ICpmbG93ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyRmxvdyo+KG9iaik7CiAKICAgICAvLyBHZXQgdGhlIGxhc3QgYm94IHdlIG1hZGUg
Zm9yIHRoaXMgcmVuZGVyIG9iamVjdC4KLSAgICBJbmxpbmVGbG93Qm94KiBib3ggPSBmbG93LT5s
YXN0TGluZUJveCgpOworICAgIElubGluZUZsb3dCb3ggKmJveCA9IGZsb3ctPmxhc3RMaW5lQm94
KCk7CiAKICAgICAvLyBJZiB0aGlzIGJveCBpcyBjb25zdHJ1Y3RlZCB0aGVuIGl0IGlzIGZyb20g
YSBwcmV2aW91cyBsaW5lLCBhbmQgd2UgbmVlZAogICAgIC8vIHRvIG1ha2UgYSBuZXcgYm94IGZv
ciBvdXIgbGluZS4gIElmIHRoaXMgYm94IGlzIHVuY29uc3RydWN0ZWQgYnV0IGl0IGhhcwpAQCAt
NzEwLDcgKzcxMiw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm8K
ICAgICBpZiAoIWJveCB8fCBib3gtPmlzQ29uc3RydWN0ZWQoKSB8fCBib3gtPm5leHRPbkxpbmUo
KSkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBuZXcgYm94IGZvciB0aGlzIHJlbmRl
ciBvYmplY3QuICBPbmNlCiAgICAgICAgIC8vIG1hZGUsIHdlIG5lZWQgdG8gcGxhY2UgaXQgYXQg
dGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICBJbmxpbmVCb3gqIG5ld0JveCA9
IG9iai0+Y3JlYXRlSW5saW5lQm94KGZhbHNlLCBvYmogPT0gdGhpcyk7CisgICAgICAgIElubGlu
ZUJveCAqbmV3Qm94ID0gb2JqLT5jcmVhdGVJbmxpbmVCb3goZmFsc2UsIG9iaiA9PSB0aGlzKTsK
ICAgICAgICAgS0hUTUxBc3NlcnQobmV3Qm94LT5pc0lubGluZUZsb3dCb3goKSk7CiAgICAgICAg
IGJveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihuZXdCb3gpOwogICAgICAgICBib3gt
PnNldEZpcnN0TGluZVN0eWxlQml0KG1fZmlyc3RMaW5lKTsKQEAgLTcyMCw3ICs3MjIsNyBAQCBJ
bmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJvCiAgICAgICAgIC8vIGlubGlu
ZSBib3ggZm9yIHRoZSBsaW5lLCBhbmQgaXQgZG9lc24ndCBoYXZlIHRvIGJlIGFwcGVuZGVkIHRv
IGFueSBwYXJlbnQKICAgICAgICAgLy8gaW5saW5lLgogICAgICAgICBpZiAob2JqICE9IHRoaXMp
IHsKLSAgICAgICAgICAgIElubGluZUZsb3dCb3gqIHBhcmVudEJveCA9IGNyZWF0ZUxpbmVCb3hl
cyhvYmotPnBhcmVudCgpKTsKKyAgICAgICAgICAgIElubGluZUZsb3dCb3ggKnBhcmVudEJveCA9
IGNyZWF0ZUxpbmVCb3hlcyhvYmotPnBhcmVudCgpKTsKICAgICAgICAgICAgIHBhcmVudEJveC0+
YWRkVG9MaW5lKGJveCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MjgsMjAgKzczMCwyMCBAQCBJ
bmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJvCiAgICAgcmV0dXJuIGJveDsK
IH0KIAotUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmNvbnN0cnVjdExpbmUoY29uc3QgQmlk
aUl0ZXJhdG9yICZzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yICZlbmQpCitSb290SW5saW5lQm94
ICpSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluZShjb25zdCBCaWRpSXRlcmF0b3ImIHN0YXJ0LCBj
b25zdCBCaWRpSXRlcmF0b3ImIGVuZCkKIHsKICAgICBpZiAoIXNGaXJzdEJpZGlSdW4pCiAgICAg
ICAgIHJldHVybiAwOyAvLyBXZSBoYWQgbm8gcnVucy4gRG9uJ3QgbWFrZSBhIHJvb3QgaW5saW5l
IGJveCBhdCBhbGwuIFRoZSBsaW5lIGlzIGVtcHR5LgogCi0gICAgSW5saW5lRmxvd0JveCogcGFy
ZW50Qm94ID0gMDsKLSAgICBmb3IgKEJpZGlSdW4qIHIgPSBzRmlyc3RCaWRpUnVuOyByOyByID0g
ci0+bmV4dFJ1bikgeworICAgIElubGluZUZsb3dCb3ggKnBhcmVudEJveCA9IDA7CisgICAgZm9y
IChCaWRpUnVuICpyID0gc0ZpcnN0QmlkaVJ1bjsgcjsgciA9IHItPm5leHRSdW4pIHsKICAgICAg
ICAgLy8gQ3JlYXRlIGEgYm94IGZvciBvdXIgb2JqZWN0LgogICAgICAgICByLT5ib3ggPSByLT5v
YmotPmNyZWF0ZUlubGluZUJveChyLT5vYmotPmlzUG9zaXRpb25lZCgpLCBmYWxzZSwgc0JpZGlS
dW5Db3VudCA9PSAxKTsKICAgICAgICAgaWYgKHItPmJveCkgewogICAgICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBubyBwYXJlbnQgYm94IHlldCwgb3IgaWYgdGhlIHJ1biBpcyBub3Qgc2ltcGx5IGEg
c2libGluZywKICAgICAgICAgICAgIC8vIHRoZW4gd2UgbmVlZCB0byBjb25zdHJ1Y3QgaW5saW5l
IGJveGVzIGFzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSBlbmNsb3NlIHRoZQogICAgICAgICAgICAg
Ly8gcnVuJ3MgaW5saW5lIGJveC4KLSAgICAgICAgICAgIGlmICghcGFyZW50Qm94IHx8IChwYXJl
bnRCb3gtPm9iamVjdCgpICE9IHItPm9iai0+cGFyZW50KCkpKQorICAgICAgICAgICAgaWYgKCFw
YXJlbnRCb3ggfHwgcGFyZW50Qm94LT5vYmplY3QoKSAhPSByLT5vYmotPnBhcmVudCgpKQogICAg
ICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW5saW5lIGJveGVzIGFsbCB0aGUgd2F5IGJhY2sg
dG8gdGhlIGFwcHJvcHJpYXRlIGluc2VydGlvbiBwb2ludC4KICAgICAgICAgICAgICAgICBwYXJl
bnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMoci0+b2JqLT5wYXJlbnQoKSk7CiAKQEAgLTc2NSw3ICs3
NjcsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluCiAgICAgLy8g
cGFpbnQgYm9yZGVycy9tYXJnaW5zL3BhZGRpbmcuICBUaGlzIGtub3dsZWRnZSB3aWxsIHVsdGlt
YXRlbHkgYmUgdXNlZCB3aGVuCiAgICAgLy8gd2UgZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIHBv
c2l0aW9ucyBhbmQgd2lkdGhzIG9mIGFsbCB0aGUgaW5saW5lIGJveGVzIG9uCiAgICAgLy8gdGhl
IGxpbmUuCi0gICAgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QgPSAwOworICAgIFJlbmRlck9iamVj
dCAqZW5kT2JqZWN0ID0gMDsKICAgICBib29sIGxhc3RMaW5lID0gIWVuZC5vYmo7CiAgICAgaWYg
KGVuZC5vYmogJiYgZW5kLnBvcyA9PSAwKQogICAgICAgICBlbmRPYmplY3QgPSBlbmQub2JqOwpA
QCAtNzg1LDcgKzc4Nyw3IEBAIGludCBSZW5kZXJCbG9jazo6dGFiV2lkdGgoYm9vbCBpc1doaXRl
c3AKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fdGFiV2lkdGgpIHsKLSAgICAgICAg
UUNoYXIgICBzcGFjZUNoYXIoJyAnKTsKKyAgICAgICAgUUNoYXIgc3BhY2VDaGFyKCcgJyk7CiAg
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5odG1sRm9udCgpOwogICAgICAgICBp
bnQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoJnNwYWNlQ2hhciwgMSwgMCwgMCk7CiAgICAgICAg
IG1fdGFiV2lkdGggPSBzcGFjZVdpZHRoICogODsKQEAgLTc5NSwxMiArNzk3LDEyIEBAIGludCBS
ZW5kZXJCbG9jazo6dGFiV2lkdGgoYm9vbCBpc1doaXRlc3AKICAgICByZXR1cm4gbV90YWJXaWR0
aDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JM
aW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIEJpZGlTdGF0ZSAmYmlkaSkKK3ZvaWQgUmVuZGVy
QmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94ICps
aW5lQm94LCBCaWRpU3RhdGUmIGJpZGkpCiB7CiAgICAgLy8gRmlyc3QgZGV0ZXJtaW5lIG91ciB0
b3RhbCB3aWR0aC4KICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBsaW5lV2lkdGgobV9oZWlnaHQp
OwogICAgIGludCB0b3RXaWR0aCA9IGxpbmVCb3gtPmdldEZsb3dTcGFjaW5nV2lkdGgoKTsKLSAg
ICBCaWRpUnVuKiByID0gMDsKKyAgICBCaWRpUnVuICpyID0gMDsKICAgICBib29sIG5lZWRzV29y
ZFNwYWNpbmcgPSBmYWxzZTsKICAgICBmb3IgKHIgPSBzRmlyc3RCaWRpUnVuOyByOyByID0gci0+
bmV4dFJ1bikgewogICAgICAgICBpZiAoIXItPmJveCB8fCByLT5vYmotPmlzUG9zaXRpb25lZCgp
KQpAQCAtODcxLDcgKzg3Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFs
UG9zaXQKICAgICAgICAgY2FzZSBDRU5URVI6CiAgICAgICAgIGNhc2UgS0hUTUxfQ0VOVEVSOgog
ICAgICAgICAgICAgaW50IHhkID0gKGF2YWlsYWJsZVdpZHRoIC0gdG90V2lkdGgpLzI7Ci0gICAg
ICAgICAgICB4ICs9IHhkID4wID8geGQgOiAwOworICAgICAgICAgICAgeCArPSB4ZCA+IDAgPyB4
ZCA6IDA7CiAgICAgICAgICAgICBudW1TcGFjZXMgPSAwOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtODg0LDcgKzg4Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9u
dGFsUG9zaXQKICAgICAgICAgICAgIGlmIChudW1TcGFjZXMgPiAwICYmIHItPm9iai0+aXNUZXh0
KCkgJiYgIXItPmNvbXBhY3QpIHsKICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIG51bWJlciBv
ZiBzcGFjZXMgaW4gdGhlIHJ1bgogICAgICAgICAgICAgICAgIGludCBzcGFjZXMgPSAwOwotICAg
ICAgICAgICAgICAgIGZvciAoIGludCBpID0gci0+c3RhcnQ7IGkgPCByLT5zdG9wOyBpKysgKSB7
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IHItPnN0YXJ0OyBpIDwgci0+c3RvcDsgaSsr
KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0ICo+KHItPm9iaiktPnRleHQoKVtpXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGMg
PT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGFjZXMrKzsKQEAgLTkxMiw3ICs5MTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
SG9yaXpvbnRhbFBvc2l0CiAgICAgbGluZUJveC0+c2V0SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRp
b25zKGxlZnRQb3NpdGlvbiwgcmlnaHRQb3NpdGlvbik7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCkK
K3ZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUoUm9vdElu
bGluZUJveCAqbGluZUJveCkKIHsKICAgICBsaW5lQm94LT52ZXJ0aWNhbGx5QWxpZ25Cb3hlcyht
X2hlaWdodCk7CiAgICAgbGluZUJveC0+c2V0QmxvY2tIZWlnaHQobV9oZWlnaHQpOwpAQCAtOTIz
LDggKzkyNSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVWZXJ0aWNhbFBvc2l0aW8KICAg
ICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGJvdHRvbU9mTGluZTsKICAgICAgICAgCiAgICAgLy8g
Tm93IG1ha2Ugc3VyZSB3ZSBwbGFjZSByZXBsYWNlZCByZW5kZXIgb2JqZWN0cyBjb3JyZWN0bHku
Ci0gICAgZm9yIChCaWRpUnVuKiByID0gc0ZpcnN0QmlkaVJ1bjsgcjsgciA9IHItPm5leHRSdW4p
IHsKLSAgICAgICAgaWYgKCFyLT5ib3gpIGNvbnRpbnVlOyAvLyBTa2lwIHJ1bnMgd2l0aCBubyBs
aW5lIGJveGVzLgorICAgIGZvciAoQmlkaVJ1biAqciA9IHNGaXJzdEJpZGlSdW47IHI7IHIgPSBy
LT5uZXh0UnVuKSB7CisgICAgICAgIGlmICghci0+Ym94KQorICAgICAgICAgICAgY29udGludWU7
IC8vIFNraXAgcnVucyB3aXRoIG5vIGxpbmUgYm94ZXMuCiAKICAgICAgICAgLy8gQWxpZ24gcG9z
aXRpb25lZCBib3hlcyB3aXRoIHRoZSB0b3Agb2YgdGhlIGxpbmUgYm94LiAgVGhpcyBpcwogICAg
ICAgICAvLyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBvZiBhbiBhcHByb3ByaWF0ZSB5IHBv
c2l0aW9uLgpAQCAtOTM4LDEyICs5NDEsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVZl
cnRpY2FsUG9zaXRpbwogfQogCiAvLyBjb2xsZWN0cyBvbmUgbGluZSBvZiB0aGUgcGFyYWdyYXBo
IGFuZCB0cmFuc2Zvcm1zIGl0IHRvIHZpc3VhbCBvcmRlcgotdm9pZCBSZW5kZXJCbG9jazo6Ymlk
aVJlb3JkZXJMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciAmc3RhcnQsIGNvbnN0IEJpZGlJdGVyYXRv
ciAmZW5kLCBCaWRpU3RhdGUgJmJpZGkpCit2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxp
bmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yJiBlbmQsIEJp
ZGlTdGF0ZSYgYmlkaSkKIHsKLSAgICBpZiAoIHN0YXJ0ID09IGVuZCApIHsKLSAgICAgICAgaWYg
KCBzdGFydC5jdXJyZW50KCkgPT0gJ1xuJyApIHsKLSAgICAgICAgICAgIG1faGVpZ2h0ICs9IGxp
bmVIZWlnaHQoIG1fZmlyc3RMaW5lLCB0cnVlICk7Ci0gICAgICAgIH0KKyAgICBpZiAoc3RhcnQg
PT0gZW5kKSB7CisgICAgICAgIGlmIChzdGFydC5jdXJyZW50KCkgPT0gJ1xuJykKKyAgICAgICAg
ICAgIG1faGVpZ2h0ICs9IGxpbmVIZWlnaHQobV9maXJzdExpbmUsIHRydWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC05NTcsNyArOTU5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Ymlk
aVJlb3JkZXJMaW5lKGNvbnN0IAogICAgIAogICAgIC8vICAgIGNvbnRleHQtPnJlZigpOwogCi0g
ICAgZGlyID0gUUNoYXI6OkRpck9OOworICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpck9OOwogCiAg
ICAgZW1wdHlSdW4gPSB0cnVlOwogICAgIGJpZGkuc3RhdHVzLmVvciA9IGJpZGkuY29udGV4dC0+
ZGlyOwpAQCAtOTY5LDE0ICs5NzEsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJM
aW5lKGNvbnN0IAogICAgIGJpZGkubGFzdCA9IGJpZGkuY3VycmVudDsKICAgICBib29sIGF0RW5k
ID0gZmFsc2U7CiAKLSAgICB3aGlsZSggMSApIHsKKyAgICB3aGlsZSAodHJ1ZSkgewogCiAgICAg
ICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyQ3VycmVudDsKICAgICAgICAgaWYgKGF0RW5kKSB7CiAg
ICAgICAgICAgICAvL2tkRGVidWcoNjA0MSkgPDwgImF0RW5kIiA8PCBlbmRsOwogICAgICAgICAg
ICAgQmlkaUNvbnRleHQgKmMgPSBiaWRpLmNvbnRleHQ7Ci0gICAgICAgICAgICBpZiAoIGJpZGku
Y3VycmVudC5hdEVuZCgpKQotICAgICAgICAgICAgICAgIHdoaWxlICggYy0+cGFyZW50ICkKKyAg
ICAgICAgICAgIGlmIChiaWRpLmN1cnJlbnQuYXRFbmQoKSkKKyAgICAgICAgICAgICAgICB3aGls
ZSAoYy0+cGFyZW50KQogICAgICAgICAgICAgICAgICAgICBjID0gYy0+cGFyZW50OwogICAgICAg
ICAgICAgZGlyQ3VycmVudCA9IGMtPmRpcjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTk5Myw3ICs5
OTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAg
IGtkRGVidWcoNjA0MSkgPDwgImRpcmVjdGlvbnM6IGRpcj0iIDw8IChpbnQpZGlyIDw8ICIgY3Vy
cmVudD0iIDw8IChpbnQpZGlyQ3VycmVudCA8PCAiIGxhc3Q9IiA8PCBzdGF0dXMubGFzdCA8PCAi
IGVvcj0iIDw8IHN0YXR1cy5lb3IgPDwgIiBsYXN0U3Ryb25nPSIgPDwgc3RhdHVzLmxhc3RTdHJv
bmcgPDwgIiBlbWJlZGRpbmc9IiA8PCAoaW50KWNvbnRleHQtPmRpciA8PCAiIGxldmVsID0iIDw8
IChpbnQpY29udGV4dC0+bGV2ZWwgPDwgZW5kbDsKICNlbmRpZgogICAgICAgICBhc3NlcnQoYmlk
aS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJPTik7Ci0gICAgICAgIHN3aXRjaChkaXJDdXJyZW50
KSB7CisgICAgICAgIHN3aXRjaCAoZGlyQ3VycmVudCkgewogCiAgICAgICAgICAgICAvLyBlbWJl
ZGRpbmcgYW5kIG92ZXJyaWRlcyAoWDEtWDkgaW4gdGhlIEJpZGkgc3BlY3MpCiAgICAgICAgIGNh
c2UgUUNoYXI6OkRpclJMRToKQEAgLTEwMDEsMjQgKzEwMDMsMjAgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICBjYXNlIFFDaGFyOjpEaXJSTE86CiAg
ICAgICAgIGNhc2UgUUNoYXI6OkRpckxSTzoKICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUERGOgot
ICAgICAgICAgICAgZW1iZWQoIGRpckN1cnJlbnQsIGJpZGkgKTsKKyAgICAgICAgICAgIGVtYmVk
KGRpckN1cnJlbnQsIGJpZGkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8v
IHN0cm9uZyB0eXBlcwogICAgICAgICBjYXNlIFFDaGFyOjpEaXJMOgotICAgICAgICAgICAgc3dp
dGNoKGJpZGkuc3RhdHVzLmxhc3QpCi0gICAgICAgICAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoKGJpZGkuc3RhdHVzLmxhc3QpIHsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJS
OgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFMOgogICAgICAgICAgICAgICAgIGNh
c2UgUUNoYXI6OkRpckVOOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFOOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBRQ2hhcjo6RGlyRU4gfHwg
YmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyTCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1biggYmlkaSApOwotICAgICAgICAgICAgICAgICAgICBkaXIgPSBRQ2hh
cjo6RGlyTDsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckw6Ci0gICAgICAgICAgICAgICAgICAg
IGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1
cy5lb3IgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVM6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6
RGlyRVQ6CkBAIC0xMDMxLDU0ICsxMDI5LDUwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9y
ZGVyTGluZShjb25zdCAKICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9
PSBRQ2hhcjo6RGlyRU4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIG51bWJlcnMgbmVlZCB0byBiZSBvbiBhIGhpZ2hlciBlbWJlZGRpbmcgbGV2ZWws
IHNvIGxldCdzIGNsb3NlIHRoYXQgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGly
ID0gUUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0g
UUNoYXI6OkRpckVOOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0g
UUNoYXI6OkRpckwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5l
dXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24sIHdoaWNoIGlzIFIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyQU4pIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEFyYWJpYyBudW1iZXJzIGFyZSBhbHdheXMgb24gYSBoaWdoZXIgZW1i
ZWRkaW5nIGxldmVsLCBzbyBsZXQncyBjbG9zZSB0aGF0IHJ1bgotICAgICAgICAgICAgICAgICAg
ICAgICAgZGlyID0gUUNoYXI6OkRpckFOOworICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5k
aXIgPSBRQ2hhcjo6RGlyQU47CiAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlk
aSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0gUUNo
YXI6OkRpckwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbmV1dHJhbHMg
dGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiwgd2hpY2ggaXMgUgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZGlyID0gUUNoYXI6OkRpclI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYoYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJMKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvL2xhc3Qgc3R1ZmYgdGFrZXMgZW1iZWRkaW5nIGRpcgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoYmlkaS5jb250ZXh0LT5kaXIgPT0gUUNoYXI6OkRpckwgfHwgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRSdW4oIGJpZGkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IFFDaGFyOjpEaXJSOyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpciAhPSBRQ2hhcjo6RGlyTCAm
JiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJMKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7IAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1biggYmlkaSApOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOyAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsgCiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJMOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50
OworICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckw7CiAgICAgICAgICAg
ICBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID0gUUNoYXI6OkRpckw7Ci0gICAgICAgICAgICBkaXIg
PSBRQ2hhcjo6RGlyTDsKKyAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckw7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6CiAgICAgICAgIGNhc2Ug
UUNoYXI6OkRpclI6Ci0gICAgICAgICAgICBzd2l0Y2goYmlkaS5zdGF0dXMubGFzdCkKLSAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJMOgogICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpckVOOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFOOgogICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6
RGlyUjoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKLSAgICAgICAgICAgICAg
ICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVTOgogICAgICAgICAgICAgICAgIGNh
c2UgUUNoYXI6OkRpckVUOgpAQCAtMTA5MCwxMTMgKzEwODQsOTIgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ck9OOgogICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpE
aXJSICYmIGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyQUwpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZihiaWRpLmNvbnRleHQtPmRpciA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0
YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMKSB7IAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1biggYmlkaSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIgPSBRQ2hhcjo6
RGlyTDsgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0g
UUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyUiAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFD
aGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlk
aS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1biggYmlkaSApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckw7IAogICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OworICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1
cnJlbnQ7CiAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyUjsKICAgICAg
ICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPSBkaXJDdXJyZW50OwotICAgICAgICAgICAg
ZGlyID0gUUNoYXI6OkRpclI7CisgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOwog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6CiAKICAgICAg
ICAgY2FzZSBRQ2hhcjo6RGlyRU46Ci0gICAgICAgICAgICBpZighKGJpZGkuc3RhdHVzLmxhc3RT
dHJvbmcgPT0gUUNoYXI6OkRpckFMKSkgeworICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxh
c3RTdHJvbmcgIT0gUUNoYXI6OkRpckFMKSB7CiAgICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBz
dHJvbmcgd2FzIEFMIGNoYW5nZSBFTiB0byBBTgotICAgICAgICAgICAgICAgIHN3aXRjaChiaWRp
LnN0YXR1cy5sYXN0KQotICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChiaWRpLnN0YXR1cy5sYXN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckVUOgotCQkJaWYgKCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIHx8
IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMICkgewotCQkJICAgIGFwcGVu
ZFJ1biggYmlkaSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IFFDaGFyOjpE
aXJFTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hh
cjo6RGlyRU47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdFN0
cm9uZyA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpE
aXJBTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJFTjsKIAkJCX0K
IAkJCS8vIGZhbGwgdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJF
TjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyQU46CiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFz
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1biggYmlkaSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkaXIgPSBRQ2hhcjo6RGlyRU47CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oYmlkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpE
aXJFTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
Q1M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6
OkRpckVOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1
cnJlbnQ7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckJOOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJCOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJTOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJXUzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZihiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpclIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRp
clIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXV0cmFscyBnbyB0byBSCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCBiaWRpICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyID0gUUNoYXI6OkRpckVOOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIGJpZGkuc3RhdHVzLmVvciA9
PSBRQ2hhcjo6RGlyTCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpZGku
c3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4gJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBR
Q2hhcjo6RGlyTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJp
ZGkuY3VycmVudDsgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRp
ckVOOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3Ig
IT0gUUNoYXI6OkRpckwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaWRp
LnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckVOIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0g
UUNoYXI6OkRpckwpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRp
ciAhPSBRQ2hhcjo6RGlyTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJl
cnMgb24gYm90aCBzaWRlcywgbmV1dHJhbHMgZ2V0IHJpZ2h0IHRvIGxlZnQgZGlyZWN0aW9uCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGlyICE9IFFDaGFyOjpEaXJMKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1biggYmlkaSApOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlyID0gUUNoYXI6OkRpclI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFJ1biggYmlkaSApOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXIgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmVvciA9IGJpZGkuY3VycmVudDsgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlk
aS5sYXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRp
clI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckVOOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBpZiAoZGlyPT1RQ2hhcjo6RGlyT04pCi0gICAgICAgICAgICAgICAgICAgIGRpciA9IFFD
aGFyOjpEaXJMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6
RGlyRU47CisgICAgICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09IFFDaGFyOjpEaXJPTikKKyAg
ICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQU46CiAgICAg
ICAgICAgICBkaXJDdXJyZW50ID0gUUNoYXI6OkRpckFOOwotICAgICAgICAgICAgc3dpdGNoKGJp
ZGkuc3RhdHVzLmxhc3QpCi0gICAgICAgICAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChi
aWRpLnN0YXR1cy5sYXN0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKICAg
ICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKLSAgICAgICAgICAgICAgICAgICAgYmlk
aS5lb3IgPSBiaWRpLmN1cnJlbnQ7IGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJBTjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpclI6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6CiAgICAgICAgICAg
ICAgICAgY2FzZSBRQ2hhcjo6RGlyRU46CiAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0g
YmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oIGJpZGkgKTsKLSAgICAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAg
ICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJBTjsKLSAgICAgICAgICAgICAgICAgICAg
ZGlyID0gUUNoYXI6OkRpckFOOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckNTOgotICAgICAgICAgICAgICAgICAgICBpZihiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6
OkRpckFOKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVu
dDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyQU4pCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAg
ICAgICBjYXNlIFFDaGFyOjpEaXJFVDoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJC
TjoKQEAgLTEyMDQsNTYgKzExNzcsNTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJM
aW5lKGNvbnN0IAogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclM6CiAgICAgICAgICAg
ICAgICAgY2FzZSBRQ2hhcjo6RGlyV1M6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
T046Ci0gICAgICAgICAgICAgICAgICAgIGlmKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGly
UiAmJiBiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckFMKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0dXMuZW9y
ICE9IFFDaGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVuIG9mIEwg
YmVmb3JlIG5ldXRyYWxzLCBuZXV0cmFscyB0YWtlIGVtYmVkZGluZyBkaXIgKE4yKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYoYmlkaS5jb250ZXh0LT5kaXIgPT0gUUNoYXI6OkRpclIgfHwg
YmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyUiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpciA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMKSB7IAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uIGlzIFIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSB0aGUgTCBydW4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oIGJpZGkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV1
dHJhbHMgYmVjb21lIGFuIFIgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gUUNoYXI6
OkRpclI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKCBiaWRpICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGVtYmVkZGluZyBkaXJlY3Rpb24gaXMgTAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFwcGVuZCBuZXV0cmFscyB0byB0aGUgTCBydW4gYW5kIGNsb3NlIGl0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlyID0gUUNoYXI6OkRpckw7IAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRp
ciA9IFFDaGFyOjpEaXJMOyAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlk
aS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGlyID0gUUNoYXI6OkRpckFOOwotICAgICAg
ICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyQU47CisgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OworICAgICAgICAgICAgICAgICAgICBhcHBl
bmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRpciA9PSBRQ2hh
cjo6RGlyT04pCi0gICAgICAgICAgICAgICAgZGlyID0gUUNoYXI6OkRpckFOOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CisgICAgICAgICAgICBi
aWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyQU47CisgICAgICAgICAgICBpZiAoYmlkaS5kaXIg
PT0gUUNoYXI6OkRpck9OKQorICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckFO
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVTOgogICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJDUzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFD
aGFyOjpEaXJFVDoKLSAgICAgICAgICAgIGlmKGJpZGkuc3RhdHVzLmxhc3QgPT0gUUNoYXI6OkRp
ckVOKSB7CisgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCA9PSBRQ2hhcjo6RGlyRU4p
IHsKICAgICAgICAgICAgICAgICBkaXJDdXJyZW50ID0gUUNoYXI6OkRpckVOOwotICAgICAgICAg
ICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OyBiaWRpLnN0YXR1cy5lb3IgPSBkaXJDdXJy
ZW50OworICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OworICAgICAgICAg
ICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IGRpckN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRp
clIgfHwgYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJBTCB8fCBiaWRpLnN0YXR1cy5lb3Ig
PT0gUUNoYXI6OkRpckFOIHx8IChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpckVOICYmIGJp
ZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpclIpKSAmJiBiaWRpLmxhc3QhPWJpZGku
Y3VycmVudCkgewogICAgICAgICAgICAgICAgIC8vIG1vc3Qgb2YgdGhlIHRpbWUgdGhpcyBpcyB1
bm5lY2Vzc2FyeSwgYnV0IHdlIG5lZWQgdG8gc2VjdXJlIHRoZSBSIHJ1biBpbiBjYXNlCiAgICAg
ICAgICAgICAgICAgLy8gdGhlIEVUIGVuZHMgdXAgYmVpbmcgbmV1dHJhbCBhbmQgZm9sbG93ZWQg
YnkgTAogICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0IT1RQ2hhcjo6RGlyRVQp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGlyID0gYmlkaS5zdGF0dXMuZW9yOworICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3RhdHVzLmVvcjsKICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGku
bGFzdDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9y
ID0gUUNoYXI6OkRpclI7Ci0gICAgICAgICAgICAgICAgZGlyID0gUUNoYXI6OkRpclI7CisgICAg
ICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI4MCwxMSArMTI0Nywx
MSBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAKICAgICAgICAg
Ly9jb3V0IDw8ICIgICAgIGFmdGVyOiBkaXI9IiA8PCAvLyAgICAgICAgZGlyIDw8ICIgY3VycmVu
dD0iIDw8IGRpckN1cnJlbnQgPDwgIiBsYXN0PSIgPDwgc3RhdHVzLmxhc3QgPDwgIiBlb3I9IiA8
PCBzdGF0dXMuZW9yIDw8ICIgbGFzdFN0cm9uZz0iIDw8IHN0YXR1cy5sYXN0U3Ryb25nIDw8ICIg
ZW1iZWRkaW5nPSIgPDwgY29udGV4dC0+ZGlyIDw8IGVuZGw7CiAKLSAgICAgICAgaWYoYmlkaS5j
dXJyZW50LmF0RW5kKCkpIGJyZWFrOworICAgICAgICBpZihiaWRpLmN1cnJlbnQuYXRFbmQoKSkK
KyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIHNldCBzdGF0dXMubGFzdCBhcyBuZWVk
ZWQuCi0gICAgICAgIHN3aXRjaChkaXJDdXJyZW50KQotICAgICAgICAgICAgeworICAgICAgICBz
d2l0Y2goZGlyQ3VycmVudCkgewogICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVQ6CiAgICAg
ICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3QgIT0gUUNoYXI6OkRpckVOKQogICAgICAg
ICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gUUNoYXI6OkRpckVUOwpAQCAtMTI5NCw4
ICsxMjYxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAg
ICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUzoKICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpcldT
OgogICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046Ci0gICAgICAgICAgICAgICAgc3dpdGNo
KGJpZGkuc3RhdHVzLmxhc3QpCi0gICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2goYmlkaS5zdGF0dXMubGFzdCkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJMOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgogICAgICAg
ICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKQEAgLTEzMDUsNyArMTI3MSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IFFDaGFyOjpEaXJPTjsKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgUUNoYXI6OkRpck5TTToKICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ckJOOgpAQCAtMTMyMCwxMCArMTI4NiwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRl
ckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50
OwotICAgICAgICAgICAgfQorICAgICAgICB9CiAjZW5kaWYKIAotCWlmICggYXRFbmQgKSBicmVh
azsKKyAgICAgICAgaWYgKGF0RW5kKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGJpZGku
bGFzdCA9IGJpZGkuY3VycmVudDsKIAogCWlmIChlbXB0eVJ1biAmJiAhKGRpckN1cnJlbnQgPT0g
UUNoYXI6OkRpclJMRSB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJMUkUgfHwgZGlyQ3VycmVu
dCA9PSBRQ2hhcjo6RGlyUkxPIHx8IGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpckxSTyB8fCBkaXJD
dXJyZW50ID09IFFDaGFyOjpEaXJQREYpKSB7CkBAIC0xMzMzLDkgKzEzMDAsOSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAKIAkvLyB0aGlzIGNhdXNlcyB0aGUg
b3BlcmF0b3IgKysgdG8gb3BlbiBhbmQgY2xvc2UgZW1iZWRkaW5nIGxldmVscyBhcyBuZWVkZWQK
IAkvLyBmb3IgdGhlIENTUyB1bmljb2RlLWJpZGkgcHJvcGVydHkKLQlhZGp1c3RFbWJlZGRpbmcg
PSB0cnVlOwotICAgICAgICBiaWRpLmN1cnJlbnQuaW5jcmVtZW50KCBiaWRpICk7Ci0JYWRqdXN0
RW1iZWRkaW5nID0gZmFsc2U7CisgICAgICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gdHJ1ZTsK
KyAgICAgICAgYmlkaS5jdXJyZW50LmluY3JlbWVudChiaWRpKTsKKyAgICAgICAgYmlkaS5hZGp1
c3RFbWJlZGRpbmcgPSBmYWxzZTsKICAgICAgICAgaWYgKGVtcHR5UnVuICYmIChkaXJDdXJyZW50
ID09IFFDaGFyOjpEaXJSTEUgfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyTFJFIHx8IGRpckN1
cnJlbnQgPT0gUUNoYXI6OkRpclJMTyB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJMUk8gfHwg
ZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyUERGKSkgewogICAgICAgICAgICAgLy8gZXhjbHVkZSB0
aGUgZW1iZWRkaW5nIGNoYXIgaXRzZWxmIGZyb20gdGhlIG5ldyBydW4gc28gdGhhdCBBVFNVSSB3
aWxsIG5ldmVyIHNlZSBpdAogICAgICAgICAgICAgYmlkaS5lb3Iub2JqID0gMDsKQEAgLTEzNDMs
OCArMTMxMCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAg
ICAgICAgICAgIGJpZGkuc29yID0gYmlkaS5jdXJyZW50OwogICAgICAgICB9CiAKLQlpZiAoIGJp
ZGkuY3VycmVudCA9PSBlbmQgKSB7Ci0JICAgIGlmICggZW1wdHlSdW4gKQorICAgICAgICBpZiAo
YmlkaS5jdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgaWYgKGVtcHR5UnVuKQogCQlicmVh
azsKIAkgICAgYXRFbmQgPSB0cnVlOwogCX0KQEAgLTEzNTQsOSArMTMyMSw5IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICBrZERlYnVnKDYwNDEpIDw8ICJy
ZWFjaGVkIGVuZCBvZiBsaW5lIGN1cnJlbnQ9IiA8PCBjdXJyZW50Lm9iaiA8PCAiLyIgPDwgY3Vy
cmVudC5wb3MKIAkJICA8PCAiLCBlb3I9IiA8PCBlb3Iub2JqIDw8ICIvIiA8PCBlb3IucG9zIDw8
IGVuZGw7CiAjZW5kaWYKLSAgICBpZiAoICFlbXB0eVJ1biAmJiBiaWRpLnNvciAhPSBiaWRpLmN1
cnJlbnQgKSB7CisgICAgaWYgKCFlbXB0eVJ1biAmJiBiaWRpLnNvciAhPSBiaWRpLmN1cnJlbnQp
IHsKIAkgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0JICAgIGFwcGVuZFJ1biggYmlkaSApOwor
ICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgIH0KIAogICAgIC8vIHJlb3JkZXIgbGlu
ZSBhY2NvcmRpbmcgdG8gcnVuIHN0cnVjdHVyZS4uLgpAQCAtMTM2NSwxMCArMTMzMiwxMCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgdWNoYXIgbGV2ZWxM
b3cgPSAxMjg7CiAgICAgdWNoYXIgbGV2ZWxIaWdoID0gMDsKICAgICBCaWRpUnVuICpyID0gc0Zp
cnN0QmlkaVJ1bjsKLSAgICB3aGlsZSAoIHIgKSB7Ci0gICAgICAgIGlmICggci0+bGV2ZWwgPiBs
ZXZlbEhpZ2ggKQorICAgIHdoaWxlIChyKSB7CisgICAgICAgIGlmIChyLT5sZXZlbCA+IGxldmVs
SGlnaCkKICAgICAgICAgICAgIGxldmVsSGlnaCA9IHItPmxldmVsOwotICAgICAgICBpZiAoIHIt
PmxldmVsIDwgbGV2ZWxMb3cgKQorICAgICAgICBpZiAoci0+bGV2ZWwgPCBsZXZlbExvdykKICAg
ICAgICAgICAgIGxldmVsTG93ID0gci0+bGV2ZWw7CiAgICAgICAgIHIgPSByLT5uZXh0UnVuOwog
ICAgIH0KQEAgLTEzNzgsNyArMTM0NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVy
TGluZShjb25zdCAKICAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNo
YXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCiAKICAgICAvLyByZXZl
cnNpbmcgaXMgb25seSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsCi0gICAgaWYoICEo
bGV2ZWxMb3clMikgKSBsZXZlbExvdysrOworICAgIGlmICghKGxldmVsTG93JTIpKQorICAgICAg
ICBsZXZlbExvdysrOwogCiAjaWYgQklESV9ERUJVRyA+IDAKICAgICBrZERlYnVnKDYwNDEpIDw8
ICJsaW5lTG93ID0gIiA8PCAodWludClsZXZlbExvdyA8PCAiLCBsaW5lSGlnaCA9ICIgPDwgKHVp
bnQpbGV2ZWxIaWdoIDw8IGVuZGw7CkBAIC0xMzkyLDE3ICsxMzYwLDE3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICBpbnQgY291bnQgPSBzQmlkaVJ1bkNv
dW50IC0gMTsKIAogICAgIC8vIGRvIG5vdCByZXZlcnNlIGZvciB2aXN1YWxseSBvcmRlcmVkIHdl
YiBzaXRlcwotICAgIGlmKCFzdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKSkgewotICAgICAgICB3
aGlsZShsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKKyAgICBpZiAoIXN0eWxlKCktPnZpc3VhbGx5
T3JkZXJlZCgpKSB7CisgICAgICAgIHdoaWxlIChsZXZlbEhpZ2ggPj0gbGV2ZWxMb3cpIHsKICAg
ICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgIEJpZGlSdW4qIGN1cnJSdW4gPSBzRmly
c3RCaWRpUnVuOwotICAgICAgICAgICAgd2hpbGUgKCBpIDwgY291bnQgKSB7CisgICAgICAgICAg
ICBCaWRpUnVuICpjdXJyUnVuID0gc0ZpcnN0QmlkaVJ1bjsKKyAgICAgICAgICAgIHdoaWxlIChp
IDwgY291bnQpIHsKICAgICAgICAgICAgICAgICB3aGlsZShpIDwgY291bnQgJiYgY3VyclJ1biAm
JiBjdXJyUnVuLT5sZXZlbCA8IGxldmVsSGlnaCkgewogICAgICAgICAgICAgICAgICAgICBpKys7
CiAgICAgICAgICAgICAgICAgICAgIGN1cnJSdW4gPSBjdXJyUnVuLT5uZXh0UnVuOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBpOwotICAgICAgICAgICAg
ICAgIHdoaWxlKGkgPD0gY291bnQgJiYgY3VyclJ1biAmJiBjdXJyUnVuLT5sZXZlbCA+PSBsZXZl
bEhpZ2gpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8PSBjb3VudCAmJiBjdXJyUnVuICYm
IGN1cnJSdW4tPmxldmVsID49IGxldmVsSGlnaCkgewogICAgICAgICAgICAgICAgICAgICBpKys7
CiAgICAgICAgICAgICAgICAgICAgIGN1cnJSdW4gPSBjdXJyUnVuLT5uZXh0UnVuOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTE0MjAsMjEgKzEzODgsMjEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Ymlk
aVJlb3JkZXJMaW5lKGNvbnN0IAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGJ1aWxkQ29tcGFj
dFJ1bnMoUmVuZGVyT2JqZWN0KiBjb21wYWN0T2JqLCBCaWRpU3RhdGUgJmJpZGkpCitzdGF0aWMg
dm9pZCBidWlsZENvbXBhY3RSdW5zKFJlbmRlck9iamVjdCAqY29tcGFjdE9iaiwgQmlkaVN0YXRl
JiBiaWRpKQogewogICAgIHNCdWlsZGluZ0NvbXBhY3RSdW5zID0gdHJ1ZTsKICAgICBpZiAoIWNv
bXBhY3RPYmotPmlzUmVuZGVyQmxvY2soKSkgewogICAgICAgICAvLyBKdXN0IGFwcGVuZCBhIHJ1
biBmb3Igb3VyIG9iamVjdC4KICAgICAgICAgaXNMaW5lRW1wdHkgPSBmYWxzZTsKLSAgICAgICAg
YWRkUnVuKG5ldyAoY29tcGFjdE9iai0+cmVuZGVyQXJlbmEoKSkgQmlkaVJ1bigwLCBjb21wYWN0
T2JqLT5sZW5ndGgoKSwgY29tcGFjdE9iaiwgYmlkaS5jb250ZXh0LCBkaXIpKTsKKyAgICAgICAg
YWRkUnVuKG5ldyAoY29tcGFjdE9iai0+cmVuZGVyQXJlbmEoKSkgQmlkaVJ1bigwLCBjb21wYWN0
T2JqLT5sZW5ndGgoKSwgY29tcGFjdE9iaiwgYmlkaS5jb250ZXh0LCBiaWRpLmRpcikpOwogICAg
IH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gRm9ybWF0IHRoZSBjb21wYWN0IGxpa2UgaXQgaXMg
aXRzIG93biBzaW5nbGUgbGluZS4gIFdlIGJ1aWxkIHVwIGFsbCB0aGUgcnVucyBmb3IKICAgICAg
ICAgLy8gdGhlIGxpdHRsZSBjb21wYWN0IGFuZCB0aGVuIHJlb3JkZXIgdGhlbSBmb3IgYmlkaS4K
LSAgICAgICAgUmVuZGVyQmxvY2sqIGNvbXBhY3RCbG9jayA9IHN0YXRpY19jYXN0PFJlbmRlckJs
b2NrKj4oY29tcGFjdE9iaik7Ci0gICAgICAgIGFkanVzdEVtYmVkZGluZyA9IHRydWU7CisgICAg
ICAgIFJlbmRlckJsb2NrICpjb21wYWN0QmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+
KGNvbXBhY3RPYmopOworICAgICAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IHRydWU7CiAgICAg
ICAgIEJpZGlJdGVyYXRvciBzdGFydChjb21wYWN0QmxvY2ssIGZpcnN0KGNvbXBhY3RCbG9jaywg
YmlkaSksIDApOwotICAgICAgICBhZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsKKyAgICAgICAgYmlk
aS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsKICAgICAgICAgQmlkaUl0ZXJhdG9yIGVuZCA9IHN0
YXJ0OwogICAgIAogICAgICAgICBiZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CkBAIC0xNTI2LDcg
KzE0OTQsNyBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oCiAgICAg
ICAgICAgICAgICAgICAgIG8tPmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQpOwogICAgICAgICAg
ICAgICAgIG8tPnNldE5lZWRzTGF5b3V0KGZhbHNlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG8gPSBCaWRpbmV4dCggdGhpcywgbywgYmlkaSwgZmFsc2UsICZlbmRPZklubGluZSk7Cisg
ICAgICAgICAgICBvID0gQmlkaW5leHQodGhpcywgbywgYmlkaSwgZmFsc2UsICZlbmRPZklubGlu
ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaGFzRmxvYXQpCkBAIC0xNTQ3LDExICsxNTE1
LDExIEBAIFFSZWN0IFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbigKICAgICAgICAg
fQogCiAgICAgICAgIEJpZGlDb250ZXh0ICpzdGFydEVtYmVkOwotICAgICAgICBpZiggc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSICkgewotICAgICAgICAgICAgc3RhcnRFbWJlZCA9IG5ldyBC
aWRpQ29udGV4dCggMCwgUUNoYXI6OkRpckwsIE5VTEwsIHN0eWxlKCktPnVuaWNvZGVCaWRpKCkg
PT0gT3ZlcnJpZGUgKTsKKyAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikg
eworICAgICAgICAgICAgc3RhcnRFbWJlZCA9IG5ldyBCaWRpQ29udGV4dCgwLCBRQ2hhcjo6RGly
TCwgTlVMTCwgc3R5bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSk7CiAgICAgICAgICAg
ICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHN0YXJ0RW1iZWQgPSBuZXcgQmlkaUNvbnRleHQoIDEsIFFDaGFyOjpEaXJSLCBOVUxM
LCBzdHlsZSgpLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlICk7CisgICAgICAgICAgICBzdGFy
dEVtYmVkID0gbmV3IEJpZGlDb250ZXh0KDEsIFFDaGFyOjpEaXJSLCBOVUxMLCBzdHlsZSgpLT51
bmljb2RlQmlkaSgpID09IE92ZXJyaWRlKTsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9
IFFDaGFyOjpEaXJSOwogICAgICAgICB9CiAgICAgICAgIHN0YXJ0RW1iZWQtPnJlZigpOwpAQCAt
MTU3MCwyMiArMTUzOCwyMiBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oCiAgICAgICAgIAogICAgICAgICAvLyBXZSB3YW50IHRvIHNraXAgYWhlYWQgdG8gdGhlIGZp
cnN0IGRpcnR5IGxpbmUKICAgICAgICAgQmlkaUl0ZXJhdG9yIHN0YXJ0OwotICAgICAgICBSb290
SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGZ1bGxMYXlvdXQs
IHN0YXJ0LCBiaWRpKTsKKyAgICAgICAgUm9vdElubGluZUJveCAqc3RhcnRMaW5lID0gZGV0ZXJt
aW5lU3RhcnRQb3NpdGlvbihmdWxsTGF5b3V0LCBzdGFydCwgYmlkaSk7CiAgICAgICAgIAogICAg
ICAgICAvLyBXZSBhbHNvIGZpbmQgdGhlIGZpcnN0IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhl
c2UgbGluZXMuICBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAgICAgLy8gaWYgd2UgZGV0ZXJt
aW5lIHRoYXQgd2UncmUgYWJsZSB0byBzeW5jaHJvbml6ZSBhZnRlciBoYW5kbGluZyBhbGwgb3Vy
IGRpcnR5IGxpbmVzLgogICAgICAgICBCaWRpSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7CiAgICAg
ICAgIGludCBlbmRMaW5lWVBvczsKLSAgICAgICAgUm9vdElubGluZUJveCogZW5kTGluZSA9IChm
dWxsTGF5b3V0IHx8ICFzdGFydExpbmUpID8gCisgICAgICAgIFJvb3RJbmxpbmVCb3ggKmVuZExp
bmUgPSAoZnVsbExheW91dCB8fCAhc3RhcnRMaW5lKSA/IAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5l
U3RhcnQsIGVuZExpbmVZUG9zKTsKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewogICAgICAgICAg
ICAgdXNlUmVwYWludFJlY3QgPSB0cnVlOwogICAgICAgICAgICAgc3RhcnRMaW5lQm90dG9tID0g
c3RhcnRMaW5lLT5ib3R0b21PdmVyZmxvdygpOwogICAgICAgICAgICAgcmVwYWludFJlY3Quc2V0
WShrTWluKG1faGVpZ2h0LCBzdGFydExpbmUtPnRvcE92ZXJmbG93KCkpKTsKLSAgICAgICAgICAg
IFJlbmRlckFyZW5hKiBhcmVuYSA9IHJlbmRlckFyZW5hKCk7Ci0gICAgICAgICAgICBSb290SW5s
aW5lQm94KiBib3ggPSBzdGFydExpbmU7CisgICAgICAgICAgICBSZW5kZXJBcmVuYSAqYXJlbmEg
PSByZW5kZXJBcmVuYSgpOworICAgICAgICAgICAgUm9vdElubGluZUJveCAqYm94ID0gc3RhcnRM
aW5lOwogICAgICAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgICAgIFJvb3RJbmxp
bmVCb3gqIG5leHQgPSBib3gtPm5leHRSb290Qm94KCk7CisgICAgICAgICAgICAgICAgUm9vdElu
bGluZUJveCAqbmV4dCA9IGJveC0+bmV4dFJvb3RCb3goKTsKICAgICAgICAgICAgICAgICBib3gt
PmRlbGV0ZUxpbmUoYXJlbmEpOwogICAgICAgICAgICAgICAgIGJveCA9IG5leHQ7CiAgICAgICAg
ICAgICB9CkBAIC0xNjA4LDcgKzE1NzYsOCBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhzdGFydCwgYmlkaSk7Ci0gICAg
ICAgICAgICBpZiggc3RhcnQuYXRFbmQoKSApIGJyZWFrOworICAgICAgICAgICAgaWYgKHN0YXJ0
LmF0RW5kKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoIWlzTGlu
ZUVtcHR5KSB7CiAgICAgICAgICAgICAgICAgYmlkaVJlb3JkZXJMaW5lKHN0YXJ0LCBlbmQsIGJp
ZGkpOwogCkBAIC0xNjIzLDcgKzE1OTIsNyBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5s
aW5lQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgICAgIHNCaWRpUnVuQ291bnQgKz0gc0NvbXBh
Y3RCaWRpUnVuQ291bnQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgUm9v
dElubGluZUJveCogbGluZUJveCA9IDA7CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCAq
bGluZUJveCA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKHNCaWRpUnVuQ291bnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgbGluZUJveCA9IGNvbnN0cnVjdExpbmUoc3RhcnQsIGVuZCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChsaW5lQm94KSB7CkBAIC0xNjQwLDkgKzE2MDksOSBAQCBRUmVj
dCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gc3RhcnQgfHwgKCFw
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkgJiYgZW5kLm9iaiAmJiBlbmQub2JqLT5zdHlsZSgpLT53
aGl0ZVNwYWNlKCkgPT0gUFJFICYmIGVuZC5jdXJyZW50KCkgPT0gUUNoYXIoJ1xuJykpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGFkanVzdEVtYmVkZGluZyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ZW5kLmluY3JlbWVudChiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0RW1iZWRkaW5n
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGxpbmVCb3gpCkBA
IC0xNjY5LDEzICsxNjM4LDEzIEBAIFFSZWN0IFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbigKICAgICAgICAgICAgICAgICAgICAgY3VycllQb3MgPSBrTWF4KGN1cnJZUG9zLCBsYXN0
Um9vdEJveCgpLT5ib3R0b21PdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBBdHRhY2ggYWxsIHRoZSByZW1haW5pbmcgbGluZXMsIGFuZCB0aGVuIGFkanVz
dCB0aGVpciB5LXBvc2l0aW9ucyBhcyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgZm9yIChSb290
SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94
KCkpCisgICAgICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94ICpsaW5lID0gZW5kTGluZTsg
bGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgIGxp
bmUtPmF0dGFjaExpbmUoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBO
b3cgYXBwbHkgdGhlIG9mZnNldCB0byBlYWNoIGxpbmUgaWYgbmVlZGVkLgogICAgICAgICAgICAg
ICAgIGludCBkZWx0YSA9IG1faGVpZ2h0IC0gZW5kTGluZVlQb3M7CiAgICAgICAgICAgICAgICAg
aWYgKGRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGlu
ZSA9IGVuZExpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKQorICAgICAgICAg
ICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3ggKmxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5l
ID0gbGluZS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUtPmFk
anVzdFBvc2l0aW9uKDAsIGRlbHRhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgbV9oZWlnaHQgPSBsYXN0Um9vdEJveCgpLT5ibG9ja0hlaWdodCgpOwpAQCAtMTY5MSwxMCAr
MTY2MCwxMCBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oCiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBEZWxldGUgYWxsIHRoZSByZW1haW5p
bmcgbGluZXMuCiAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGtNYXgobV9oZWln
aHQsIG1fb3ZlcmZsb3dIZWlnaHQpOwotICAgICAgICAgICAgICAgIElubGluZVJ1bkJveCogbGlu
ZSA9IGVuZExpbmU7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVy
QXJlbmEoKTsKKyAgICAgICAgICAgICAgICBJbmxpbmVSdW5Cb3ggKmxpbmUgPSBlbmRMaW5lOwor
ICAgICAgICAgICAgICAgIFJlbmRlckFyZW5hICphcmVuYSA9IHJlbmRlckFyZW5hKCk7CiAgICAg
ICAgICAgICAgICAgd2hpbGUgKGxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgSW5saW5lUnVu
Qm94KiBuZXh0ID0gbGluZS0+bmV4dExpbmVCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgSW5s
aW5lUnVuQm94ICpuZXh0ID0gbGluZS0+bmV4dExpbmVCb3goKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFuZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludFJlY3Quc2V0SGVp
Z2h0KGtNYXgobV9vdmVyZmxvd0hlaWdodCwgbGluZS0+Ym90dG9tT3ZlcmZsb3coKSkgLSByZXBh
aW50UmVjdC55KCkpOwogICAgICAgICAgICAgICAgICAgICBsaW5lLT5kZWxldGVMaW5lKGFyZW5h
KTsKQEAgLTE3NDQsMjcgKzE3MTMsMjYgQEAgUVJlY3QgUmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmVuKAogICAgIC8va2REZWJ1Zyg2MDQwKSA8PCAiaGVpZ2h0ID0gIiA8PCBtX2hlaWdo
dCA8PGVuZGw7CiB9CiAKLVJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFy
dFBvc2l0aW9uKGJvb2wgZnVsbExheW91dCwgQmlkaUl0ZXJhdG9yJiBzdGFydCwgQmlkaVN0YXRl
JiBiaWRpKQorUm9vdElubGluZUJveCAqUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRp
b24oYm9vbCBmdWxsTGF5b3V0LCBCaWRpSXRlcmF0b3ImIHN0YXJ0LCBCaWRpU3RhdGUmIGJpZGkp
CiB7Ci0gICAgUm9vdElubGluZUJveCogY3VyciA9IDA7Ci0gICAgUm9vdElubGluZUJveCogbGFz
dCA9IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdGFydE9iaiA9IDA7CisgICAgUm9vdElubGluZUJv
eCAqY3VyciA9IDA7CisgICAgUm9vdElubGluZUJveCAqbGFzdCA9IDA7CisgICAgUmVuZGVyT2Jq
ZWN0ICpzdGFydE9iaiA9IDA7CiAgICAgaW50IHBvcyA9IDA7CiAgICAgCiAgICAgaWYgKGZ1bGxM
YXlvdXQpIHsKICAgICAgICAgLy8gTnVrZSBhbGwgb3VyIGxpbmVzLgogICAgICAgICBpZiAoZmly
c3RSb290Qm94KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJlbmRlckFy
ZW5hKCk7CisgICAgICAgICAgICBSZW5kZXJBcmVuYSAqYXJlbmEgPSByZW5kZXJBcmVuYSgpOwog
ICAgICAgICAgICAgY3VyciA9IGZpcnN0Um9vdEJveCgpOyAKICAgICAgICAgICAgIHdoaWxlIChj
dXJyKSB7Ci0gICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogbmV4dCA9IGN1cnItPm5leHRS
b290Qm94KCk7CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCAqbmV4dCA9IGN1cnItPm5l
eHRSb290Qm94KCk7CiAgICAgICAgICAgICAgICAgY3Vyci0+ZGVsZXRlTGluZShhcmVuYSk7CiAg
ICAgICAgICAgICAgICAgY3VyciA9IG5leHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBL
SFRNTEFzc2VydCghbV9maXJzdExpbmVCb3ggJiYgIW1fbGFzdExpbmVCb3gpOwogICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoY3VyciA9IGZp
cnN0Um9vdEJveCgpOyBjdXJyICYmICFjdXJyLT5pc0RpcnR5KCk7IGN1cnIgPSBjdXJyLT5uZXh0
Um9vdEJveCgpKTsKICAgICAgICAgaWYgKGN1cnIpIHsKICAgICAgICAgICAgIC8vIFdlIGhhdmUg
YSBkaXJ0eSBsaW5lLgpAQCAtMTc3Myw4ICsxNzQxLDcgQEAgUm9vdElubGluZUJveCogUmVuZGVy
QmxvY2s6OmRldGVybWluZVN0YQogICAgICAgICAgICAgICAgIGlmICghY3Vyci0+cHJldlJvb3RC
b3goKS0+ZW5kc1dpdGhCcmVhaygpKQogICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+
cHJldlJvb3RCb3goKTsgIC8vIFRoZSBwcmV2aW91cyBsaW5lIGRpZG4ndCBicmVhayBjbGVhbmx5
LCBzbyB0cmVhdCBpdCBhcyBkaXJ0eSBhbHNvLgogICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTm8gZGlydHkg
bGluZXMgd2VyZSBmb3VuZC4KICAgICAgICAgICAgIC8vIElmIHRoZSBsYXN0IGxpbmUgZGlkbid0
IGJyZWFrIGNsZWFubHksIHRyZWF0IGl0IGFzIGRpcnR5LgogICAgICAgICAgICAgaWYgKGxhc3RS
b290Qm94KCkgJiYgIWxhc3RSb290Qm94KCktPmVuZHNXaXRoQnJlYWsoKSkKQEAgLTE3OTQsMjYg
KzE3NjEsMjUgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAg
ICAgICAgICAgbV9vdmVyZmxvd0hlaWdodCA9IGJvdHRvbU9mTGluZTsKICAgICAgICAgc3RhcnRP
YmogPSBsYXN0LT5saW5lQnJlYWtPYmooKTsKICAgICAgICAgcG9zID0gbGFzdC0+bGluZUJyZWFr
UG9zKCk7Ci0gICAgfQotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgc3RhcnRPYmogPSBm
aXJzdCh0aGlzLCBiaWRpLCAwKTsKICAgICAgICAgCi0gICAgYWRqdXN0RW1iZWRkaW5nID0gdHJ1
ZTsKKyAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IHRydWU7CiAgICAgc3RhcnQgPSBCaWRpSXRl
cmF0b3IodGhpcywgc3RhcnRPYmosIHBvcyk7CiAgICAgCi0gICAgYWRqdXN0RW1iZWRkaW5nID0g
ZmFsc2U7CisgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsKICAgICAKICAgICByZXR1
cm4gY3VycjsKIH0KIAotUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVuZFBv
c2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgQmlkaUl0ZXJhdG9yJiBjbGVhbkxpbmVT
dGFydCwKK1Jvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVFbmRQb3NpdGlvbihS
b290SW5saW5lQm94ICpzdGFydExpbmUsIEJpZGlJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiB5UG9z
KQogewotICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOworICAgIFJvb3RJbmxpbmVCb3ggKmxh
c3QgPSAwOwogICAgIGlmICghc3RhcnRMaW5lKQogICAgICAgICBsYXN0ID0gMDsKICAgICBlbHNl
IHsKLSAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gc3RhcnRMaW5lLT5uZXh0Um9v
dEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgeworICAgICAgICBmb3Ig
KFJvb3RJbmxpbmVCb3ggKmN1cnIgPSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoY3Vyci0+aXNEaXJ0
eSgpKQogICAgICAgICAgICAgICAgIGxhc3QgPSAwOwogICAgICAgICAgICAgZWxzZSBpZiAoIWxh
c3QpCkBAIC0xODI3LDcgKzE3OTMsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0
ZXJtaW5lRW5kCiAgICAgY2xlYW5MaW5lU3RhcnQgPSBCaWRpSXRlcmF0b3IodGhpcywgbGFzdC0+
cHJldlJvb3RCb3goKS0+bGluZUJyZWFrT2JqKCksIGxhc3QtPnByZXZSb290Qm94KCktPmxpbmVC
cmVha1BvcygpKTsKICAgICB5UG9zID0gbGFzdC0+cHJldlJvb3RCb3goKS0+YmxvY2tIZWlnaHQo
KTsKICAgICAKLSAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBsYXN0OyBsaW5lOyBsaW5l
ID0gbGluZS0+bmV4dFJvb3RCb3goKSkKKyAgICBmb3IgKFJvb3RJbmxpbmVCb3ggKmxpbmUgPSBs
YXN0OyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgbGluZS0+ZXh0
cmFjdExpbmUoKTsgLy8gRGlzY29ubmVjdCBhbGwgbGluZSBib3hlcyBmcm9tIHRoZWlyIHJlbmRl
ciBvYmplY3RzIHdoaWxlIHByZXNlcnZpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlaXIgY29ubmVjdGlvbnMgdG8gb25lIGFub3RoZXIuCiAgICAgCkBAIC0xODM1LDcgKzE4
MDEsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lRW5kCiB9CiAKIGJv
b2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQs
IGNvbnN0IEJpZGlJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94IComIGVuZExpbmUsIGlu
dCYgZW5kWVBvcykKIHsKICAgICBpZiAoc3RhcnQgPT0gZW5kTGluZVN0YXJ0KQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gVGhlIGNvbW1vbiBjYXNlLiBBbGwgdGhlIGRhdGEgd2UgYWxyZWFkeSBo
YXZlIGlzIGNvcnJlY3QuCkBAIC0xODQzLDIxICsxODA5LDIxIEBAIGJvb2wgUmVuZGVyQmxvY2s6
Om1hdGNoZWRFbmRMaW5lKGNvbnN0IEIKICAgICAgICAgLy8gVGhlIGZpcnN0IGNsZWFuIGxpbmUg
ZG9lc24ndCBtYXRjaCwgYnV0IHdlIGNhbiBjaGVjayBhIGhhbmRmdWwgb2YgZm9sbG93aW5nIGxp
bmVzIHRvIHRyeQogICAgICAgICAvLyB0byBtYXRjaCBiYWNrIHVwLgogICAgICAgICBzdGF0aWMg
aW50IG51bUxpbmVzID0gODsgLy8gVGhlICMgb2YgbGluZXMgd2UncmUgd2lsbGluZyB0byBtYXRj
aCBhZ2FpbnN0LgotICAgICAgICBSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsKKyAgICAg
ICAgUm9vdElubGluZUJveCAqbGluZSA9IGVuZExpbmU7CiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkg
ewogICAgICAgICAgICAgaWYgKGxpbmUtPmxpbmVCcmVha09iaigpID09IHN0YXJ0Lm9iaiAmJiBs
aW5lLT5saW5lQnJlYWtQb3MoKSA9PSBzdGFydC5wb3MpIHsKICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIGEgbWF0Y2guCi0gICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogcmVzdWx0ID0g
bGluZS0+bmV4dFJvb3RCb3goKTsKKyAgICAgICAgICAgICAgICBSb290SW5saW5lQm94ICpyZXN1
bHQgPSBsaW5lLT5uZXh0Um9vdEJveCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBTZXQgb3VyIHlQb3MgdG8gYmUgdGhlIGJsb2NrIGhlaWdo
dCBvZiBlbmRMaW5lLgogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICAg
ICAgICAgIGVuZFlQb3MgPSBsaW5lLT5ibG9ja0hlaWdodCgpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIC8vIE5vdyBkZWxldGUgdGhlIGxpbmVzIHRoYXQgd2UgZmFpbGVkIHRv
IHN5bmMuCi0gICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94VG9EZWxldGUgPSBlbmRM
aW5lOwotICAgICAgICAgICAgICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJlbmRlckFyZW5hKCk7
CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJveCAqYm94VG9EZWxldGUgPSBlbmRMaW5lOwor
ICAgICAgICAgICAgICAgIFJlbmRlckFyZW5hICphcmVuYSA9IHJlbmRlckFyZW5hKCk7CiAgICAg
ICAgICAgICAgICAgd2hpbGUgKGJveFRvRGVsZXRlICYmIGJveFRvRGVsZXRlICE9IHJlc3VsdCkg
ewotICAgICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBuZXh0ID0gYm94VG9EZWxldGUt
Pm5leHRSb290Qm94KCk7CisgICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3ggKm5leHQg
PSBib3hUb0RlbGV0ZS0+bmV4dFJvb3RCb3goKTsKICAgICAgICAgICAgICAgICAgICAgYm94VG9E
ZWxldGUtPmRlbGV0ZUxpbmUoYXJlbmEpOwogICAgICAgICAgICAgICAgICAgICBib3hUb0RlbGV0
ZSA9IG5leHQ7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTg3Miw3ICsxODM4LDcgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgQgogCiBzdGF0aWMgY29uc3QgdXNob3J0
IG5vbkJyZWFraW5nU3BhY2UgPSAweGEwOwogCi1pbmxpbmUgYm9vbCBSZW5kZXJCbG9jazo6c2tp
cE5vbkJyZWFraW5nU3BhY2UoQmlkaUl0ZXJhdG9yICZpdCkKK2lubGluZSBib29sIFJlbmRlckJs
b2NrOjpza2lwTm9uQnJlYWtpbmdTcGFjZShCaWRpSXRlcmF0b3ImIGl0KQogewogICAgIGlmIChp
dC5vYmotPnN0eWxlKCktPm5ic3BNb2RlKCkgIT0gU1BBQ0UgfHwgaXQuY3VycmVudCgpLnVuaWNv
ZGUoKSAhPSBub25CcmVha2luZ1NwYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xODkw
LDcgKzE4NTYsNyBAQCBpbmxpbmUgYm9vbCBSZW5kZXJCbG9jazo6c2tpcE5vbkJyZWFraW5nCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6c2tpcFdoaXRlc3BhY2UoQmlk
aUl0ZXJhdG9yICZpdCwgQmlkaVN0YXRlICZiaWRpKQoraW50IFJlbmRlckJsb2NrOjpza2lwV2hp
dGVzcGFjZShCaWRpSXRlcmF0b3ImIGl0LCBCaWRpU3RhdGUmIGJpZGkpCiB7CiAgICAgLy8gRklY
TUU6IFRoZSBlbnRpcmUgY29uY2VwdCBvZiB0aGUgc2tpcFdoaXRlc3BhY2UgZnVuY3Rpb24gaXMg
Zmxhd2VkLCBzaW5jZSB3ZSByZWFsbHkgbmVlZCB0byBiZSBidWlsZGluZwogICAgIC8vIGxpbmUg
Ym94ZXMgZXZlbiBmb3IgY29udGFpbmVycyB0aGF0IG1heSB1bHRpbWF0ZWx5IGNvbGxhcHNlIGF3
YXkuICBPdGhlcndpc2Ugd2UnbGwgbmV2ZXIgZ2V0IHBvc2l0aW9uZWQKQEAgLTE5MTEsNyArMTg3
Nyw3IEBAIGludCBSZW5kZXJCbG9jazo6c2tpcFdoaXRlc3BhY2UoQmlkaUl0ZXIKICAgICAgICAg
ICAgIGVsc2UgaWYgKG8tPmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBtYXRoIGhlcmUgaXMgYWN0dWFsbHkgbm90IHJlYWxseSByaWdodC4gIEl0J3MgYSBi
ZXN0LWd1ZXNzIGFwcHJveGltYXRpb24gdGhhdAogICAgICAgICAgICAgICAgIC8vIHdpbGwgd29y
ayBmb3IgdGhlIGNvbW1vbiBjYXNlcwotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYyA9
IG8tPmNvbnRhaW5lcigpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqYyA9IG8tPmNv
bnRhaW5lcigpOwogICAgICAgICAgICAgICAgIGlmIChjLT5pc0lubGluZUZsb3coKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBBIHJlbGF0aXZlIHBvc2l0aW9uZWQgaW5saW5lIGVuY2xvc2Vz
IHVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBhbHNvIGhhdmUgdG8gZGV0ZXJtaW5lIG91cgogICAgICAg
ICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBhcyB0aG91Z2ggd2Ugd2VyZSBhbiBpbmxpbmUuICBT
ZXQgfHN0YXRpY1h8IGFuZCB8c3RhdGljWXwgb24gdGhlIHJlbGF0aXZlIHBvc2l0aW9uZWQKQEAg
LTE5MzcsMTQgKzE5MDMsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpza2lwV2hpdGVzcGFjZShCaWRp
SXRlcgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBhZGp1c3RF
bWJlZGRpbmcgPSB0cnVlOworICAgICAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IHRydWU7CiAg
ICAgICAgIGl0LmluY3JlbWVudChiaWRpKTsKLSAgICAgICAgYWRqdXN0RW1iZWRkaW5nID0gZmFs
c2U7CisgICAgICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB3OwogfQogCi1CaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFr
KEJpZGlJdGVyYXRvciAmc3RhcnQsIEJpZGlTdGF0ZSAmYmlkaSkKK0JpZGlJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsoQmlkaUl0ZXJhdG9yJiBzdGFydCwgQmlkaVN0YXRl
JiBiaWRpKQogewogICAgIC8vIGVsaW1pbmF0ZSBzcGFjZXMgYXQgYmVnaW5uaW5nIG9mIGxpbmUK
ICAgICBpbnQgd2lkdGggPSBza2lwV2hpdGVzcGFjZShzdGFydCwgYmlkaSk7CkBAIC0xOTY4LDcg
KzE5MzQsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAg
Ly8gYSBydW4uCiAgICAgYm9vbCBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IGZhbHNlOwogICAg
IGJvb2wgY3VycmVudENoYXJhY3RlcklzV1MgPSBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QqIHRy
YWlsaW5nU3BhY2VPYmplY3QgPSAwOworICAgIFJlbmRlck9iamVjdCAqdHJhaWxpbmdTcGFjZU9i
amVjdCA9IDA7CiAKICAgICBCaWRpSXRlcmF0b3IgbEJyZWFrID0gc3RhcnQ7CiAKQEAgLTE5ODAs
MTEgKzE5NDYsMTEgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcgog
ICAgIGJvb2wgcHJldkxpbmVCcm9rZUNsZWFubHkgPSBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHk7
CiAgICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gZmFsc2U7CiAgICAgCi0gICAgd2hpbGUo
IG8gKSB7CisgICAgd2hpbGUgKG8pIHsKICNpZmRlZiBERUJVR19MSU5FQlJFQUtTCiAgICAgICAg
IGtkRGVidWcoNjA0MSkgPDwgIm5ldyBvYmplY3QgIjw8IG8gPDwiIHdpZHRoID0gIiA8PCB3IDw8
IiB0bXB3ID0gIiA8PCB0bXBXIDw8IGVuZGw7CiAjZW5kaWYKLSAgICAgICAgaWYoby0+aXNCUigp
KSB7CisgICAgICAgIGlmIChvLT5pc0JSKCkpIHsKICAgICAgICAgICAgIGlmICh3ICsgdG1wVyA8
PSB3aWR0aCkgewogICAgICAgICAgICAgICAgIGxCcmVhay5vYmogPSBvOwogICAgICAgICAgICAg
ICAgIGxCcmVhay5wb3MgPSAwOwpAQCAtMjAwMywxNSArMTk2OSwxNSBAQCBCaWRpSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgaWYgKCFpc0xpbmVF
bXB0eSkgewogICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGNoZWNrIHRoZSBjbGVhciBzdGF0
dXMgZm9yIG5vbi1lbXB0eSBsaW5lcy4KICAgICAgICAgICAgICAgICAgICAgRUNsZWFyIGNsZWFy
ID0gby0+c3R5bGUoKS0+Y2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoY2xlYXIgIT0g
Q05PTkUpCisgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhciAhPSBDTk9ORSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY2xlYXJTdGF0dXMgPSAoRUNsZWFyKSAobV9jbGVhclN0YXR1cyB8
IGNsZWFyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBn
b3RvIGVuZDsKICAgICAgICAgfQotICAgICAgICBpZiggby0+aXNGbG9hdGluZ09yUG9zaXRpb25l
ZCgpICkgeworICAgICAgICBpZiAoby0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKSB7CiAgICAg
ICAgICAgICAvLyBhZGQgdG8gc3BlY2lhbCBvYmplY3RzLi4uCi0gICAgICAgICAgICBpZihvLT5p
c0Zsb2F0aW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChvLT5pc0Zsb2F0aW5nKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChvKTsKICAgICAgICAgICAgICAgICAvLyBj
aGVjayBpZiBpdCBmaXRzIGluIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgICAgICAgICAgLy8g
SWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCkBAIC0yMDIw
LDggKzE5ODYsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAg
ICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoID0gbGluZVdpZHRoKG1faGVpZ2h0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkgeworICAg
ICAgICAgICAgfSBlbHNlIGlmIChvLT5pc1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgICAg
IC8vIElmIG91ciBvcmlnaW5hbCBkaXNwbGF5IHdhc24ndCBhbiBpbmxpbmUgdHlwZSwgdGhlbiB3
ZSBjYW4KICAgICAgICAgICAgICAgICAvLyBnbyBhaGVhZCBhbmQgZGV0ZXJtaW5lIG91ciBzdGF0
aWMgeCBwb3NpdGlvbiBub3cuCiAgICAgICAgICAgICAgICAgYm9vbCBpc0lubGluZVR5cGUgPSBv
LT5zdHlsZSgpLT5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKTsKQEAgLTIwNDIsNyArMjAw
Nyw3IEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYm9vbCBuZWVkVG9D
cmVhdGVMaW5lQm94ID0gbmVlZFRvU2V0U3RhdGljWCB8fCBuZWVkVG9TZXRTdGF0aWNZOwotICAg
ICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYyA9IG8tPmNvbnRhaW5lcigpOworICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCAqYyA9IG8tPmNvbnRhaW5lcigpOwogICAgICAgICAgICAgICAg
IGlmIChjLT5pc0lubGluZUZsb3coKSAmJiAoIW5lZWRUb1NldFN0YXRpY1ggfHwgIW5lZWRUb1Nl
dFN0YXRpY1kpKQogICAgICAgICAgICAgICAgICAgICBuZWVkVG9DcmVhdGVMaW5lQm94ID0gdHJ1
ZTsKIApAQCAtMjA2NCw3ICsyMDI5LDcgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5k
TmV4dExpbmVCcgogICAgICAgICAgICAgS0hUTUxBc3NlcnQoIW8tPmZpcnN0Q2hpbGQoKSk7CiAg
ICAgICAgICAgICB0bXBXICs9IG8tPm1hcmdpbkxlZnQoKStvLT5ib3JkZXJMZWZ0KCkrby0+cGFk
ZGluZ0xlZnQoKSsKICAgICAgICAgICAgICAgICAgICAgby0+bWFyZ2luUmlnaHQoKStvLT5ib3Jk
ZXJSaWdodCgpK28tPnBhZGRpbmdSaWdodCgpOwotICAgICAgICB9IGVsc2UgaWYgKCBvLT5pc1Jl
cGxhY2VkKCkgKSB7CisgICAgICAgIH0gZWxzZSBpZiAoby0+aXNSZXBsYWNlZCgpKSB7CiAgICAg
ICAgICAgICBFV2hpdGVTcGFjZSBjdXJyV1MgPSBvLT5zdHlsZSgpLT53aGl0ZVNwYWNlKCk7CiAg
ICAgICAgICAgICBFV2hpdGVTcGFjZSBsYXN0V1MgPSBsYXN0LT5zdHlsZSgpLT53aGl0ZVNwYWNl
KCk7CiAgICAgICAgICAgICAKQEAgLTIwOTAsNyArMjA1NSw3IEBAIEJpZGlJdGVyYXRvciBSZW5k
ZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKIAogICAgICAgICAgICAgdG1wVyArPSBvLT53aWR0aCgp
K28tPm1hcmdpbkxlZnQoKStvLT5tYXJnaW5SaWdodCgpK2lubGluZVdpZHRoKG8pOwogICAgICAg
ICAgICAgaWYgKGlnbm9yaW5nU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9y
IHN0YXJ0TWlkKCAwLCBvLCAwICk7CisgICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIHN0YXJ0
TWlkKDAsIG8sIDApOwogICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KHN0YXJ0TWlkKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gZmFsc2U7CkBAIC0yMTA2LDcg
KzIwNzEsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAg
ICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgYSBjb21tb24g
Y2FzZS4gSWYgd2UgY2FuJ3QgZmluZCB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBsaXN0CiAgICAgICAg
ICAgICAgICAgLy8gaXRlbSwgdGhlbiB0aGlzIGlzIGFsbCBtb290LiAtZHdoCi0gICAgICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gQmlkaW5leHQoIHN0YXJ0LnBhciwgbywgYmlkaSAp
OworICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCAqbmV4dCA9IEJpZGluZXh0KHN0YXJ0LnBh
ciwgbywgYmlkaSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZSAmJiBuZXh0ICYmIG5leHQt
PmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihuZXh0KS0+c3RyaW5nTGVuZ3Ro
KCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgKm5leHRUZXh0ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5leHQpOwogICAgICAgICAgICAgICAgICAgICBRQ2hhciBu
ZXh0Q2hhciA9IG5leHRUZXh0LT50ZXh0KClbMF07CkBAIC0yMTE3LDE4ICsyMDgyLDE4IEBAIEJp
ZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1dTID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlnbm9yaW5nU3BhY2VzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlJ
dGVyYXRvciBlbmRNaWQoIDAsIG8sIDAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlJ
dGVyYXRvciBlbmRNaWQoMCwgbywgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRw
b2ludChlbmRNaWQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCBvLT5pc1RleHQoKSApIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChvLT5pc1RleHQoKSkgewogICAgICAgICAgICAgUmVuZGVyVGV4dCAqdCA9
IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4obyk7CiAgICAgICAgICAgICBpbnQgc3RybGVuID0g
dC0+c3RyaW5nTGVuZ3RoKCk7CiAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuIC0gcG9zOwog
ICAgICAgICAgICAgUUNoYXIgKnN0ciA9IHQtPnRleHQoKTsKIAotICAgICAgICAgICAgY29uc3Qg
Rm9udCAqZiA9IHQtPmh0bWxGb250KCBtX2ZpcnN0TGluZSApOworICAgICAgICAgICAgY29uc3Qg
Rm9udCAqZiA9IHQtPmh0bWxGb250KG1fZmlyc3RMaW5lKTsKICAgICAgICAgICAgIC8vIHByb3Bv
cnRpb25hbCBmb250LCBuZWVkcyBhIGJpdCBtb3JlIHdvcmsuCiAgICAgICAgICAgICBpbnQgbGFz
dFNwYWNlID0gcG9zOwogICAgICAgICAgICAgYm9vbCBpc1ByZSA9IG8tPnN0eWxlKCktPndoaXRl
U3BhY2UoKSA9PSBQUkU7CkBAIC0yMTQxLDcgKzIxMDYsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVy
QmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICBpbnQgd3JhcFcgPSB0bXBXOwogICAg
ICAgICAgICAgaW50IG5leHRCcmVha2FibGUgPSAtMTsKIAotICAgICAgICAgICAgd2hpbGUobGVu
KSB7CisgICAgICAgICAgICB3aGlsZSAobGVuKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBwcmV2
aW91c0NoYXJhY3RlcklzU3BhY2UgPSBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZTsKICAgICAgICAg
ICAgICAgICBib29sIHByZXZpb3VzQ2hhcmFjdGVySXNXUyA9IGN1cnJlbnRDaGFyYWN0ZXJJc1dT
OwogICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyIGMgPSBzdHJbcG9zXTsKQEAgLTIyMDAsNyAr
MjE2NSw3IEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcG9pbnQuCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGlu
IGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmlkaUl0ZXJhdG9yIHN0YXJ0TWlkICggMCwgbywgcG9zICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQmlkaUl0ZXJhdG9yIHN0YXJ0TWlkICgwLCBvLCBwb3MpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KHN0YXJ0TWlkKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSnVzdCBrZWVw
IGlnbm9yaW5nIHRoZXNlIHNwYWNlcy4KQEAgLTIyMjIsNyArMjE4Nyw3IEBAIEJpZGlJdGVyYXRv
ciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICNpZmRlZiBERUJVR19MSU5FQlJFQUtTCiAg
ICAgICAgICAgICAgICAgICAgIGtkRGVidWcoNjA0MSkgPDwgImZvdW5kIHNwYWNlIGF0ICIgPDwg
cG9zIDw8ICIgaW4gc3RyaW5nICciIDw8IFFTdHJpbmcoIHN0ciwgc3RybGVuICkubGF0aW4xKCkg
PDwgIicgYWRkaW5nICIgPDwgdG1wVyA8PCAiIG5ldyB3aWR0aCA9ICIgPDwgdyA8PCBlbmRsOwog
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbCAmJiB3ICsgdG1wVyA+IHdp
ZHRoICYmIHcgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWwgJiYgdG1w
VyA+IHdpZHRoICYmIHcgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZiID0g
bmVhcmVzdEZsb2F0Qm90dG9tKG1faGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBuZXdMaW5lV2lkdGggPSBsaW5lV2lkdGgoZmIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2VlIGlmIHx0bXBXfCB3aWxsIGZpdCBvbiB0aGUgbmV3IGxpbmUuICBBcyBsb25nIGFzIGl0
IGRvZXMgbm90LApAQCAtMjI2MSwxMyArMjIyNiwxMiBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxv
Y2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBlbmQ7IC8vIERpZG4ndCBmaXQuIEp1bXAgdG8gdGhlIGVuZC4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvcyA+IDAgJiYg
c3RyW3Bvcy0xXS51bmljb2RlKCkgPT0gU09GVF9IWVBIRU4pCisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHBvcyA+IDAgJiYgc3RyW3Bvcy0xXS51bmljb2RlKCkgPT0gU09GVF9I
WVBIRU4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgdGhlIHdpZHRo
IG9mIHRoZSBzb2Z0IGh5cGhlbiBvdXQgc2luY2Ugd2UgZml0IG9uIGEgbGluZS4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0bXBXIC09IHQtPndpZHRoKHBvcy0xLCAxLCBmLCB3K3RtcFcp
OwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYoICooc3Ry
K3BvcykgPT0gJ1xuJyAmJiBpc1ByZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKihzdHIr
cG9zKSA9PSAnXG4nICYmIGlzUHJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsu
b2JqID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBwb3M7CiAKQEAg
LTIzMDMsMTMgKzIyNjcsMTIgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExp
bmVCcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTcGFjZSA9IHBvczsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpZ25vcmluZ1NwYWNlcykgeworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaWdub3JpbmdTcGFjZXMpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gU3RvcCBpZ25vcmluZyBzcGFjZXMgYW5kIGJlZ2luIGF0IHRoaXMKICAgICAgICAgICAg
ICAgICAgICAgLy8gbmV3IHBvaW50LgogICAgICAgICAgICAgICAgICAgICBpZ25vcmluZ1NwYWNl
cyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4s
ICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0g
ICAgICAgICAgICAgICAgICAgIEJpZGlJdGVyYXRvciBzdGFydE1pZCAoIDAsIG8sIHBvcyApOwor
ICAgICAgICAgICAgICAgICAgICBCaWRpSXRlcmF0b3Igc3RhcnRNaWQoMCwgbywgcG9zKTsKICAg
ICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQoc3RhcnRNaWQpOwogICAgICAgICAgICAgICAg
IH0KIApAQCAtMjMxOCwxMSArMjI4MSwxMCBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZp
bmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgICAgIGlnbm9yZVN0YXJ0LnBvcyA9IHBvczsK
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0
ZXJJc1dTICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoby0+c3R5bGUoKS0+a2h0bWxMaW5lQnJlYWsoKSA9PSBBRlRFUl9XSElURV9TUEFDRSAmJiBv
LT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgPT0gTk9STUFMKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsQnJlYWsub2JqID0gbzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3Mg
PSBwb3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWN1cnJl
bnRDaGFyYWN0ZXJJc1dTICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUworICAgICAgICAgICAgICAg
ICAgICAmJiBvLT5zdHlsZSgpLT5raHRtbExpbmVCcmVhaygpID09IEFGVEVSX1dISVRFX1NQQUNF
ICYmIG8tPnN0eWxlKCktPndoaXRlU3BhY2UoKSA9PSBOT1JNQUwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbEJyZWFrLm9iaiA9IG87CisgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBw
b3M7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmICghaXNQcmUgJiYgY3VycmVudENoYXJhY3RlcklzU3BhY2UgJiYgIWlnbm9yaW5nU3BhY2Vz
KQpAQCAtMjM0NCw3ICsyMzA2LDcgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4
dExpbmVCcgogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIEtIVE1MQXNzZXJ0KCBmYWxzZSAp
OwogCi0gICAgICAgIFJlbmRlck9iamVjdCogbmV4dCA9IEJpZGluZXh0KHN0YXJ0LnBhciwgbywg
YmlkaSk7CisgICAgICAgIFJlbmRlck9iamVjdCAqbmV4dCA9IEJpZGluZXh0KHN0YXJ0LnBhciwg
bywgYmlkaSk7CiAgICAgICAgIGJvb2wgaXNOb3JtYWwgPSBvLT5zdHlsZSgpLT53aGl0ZVNwYWNl
KCkgPT0gTk9STUFMOwogICAgICAgICBib29sIGNoZWNrRm9yQnJlYWsgPSBpc05vcm1hbDsKICAg
ICAgICAgaWYgKHcgJiYgdyArIHRtcFcgPiB3aWR0aCsxICYmIGxCcmVhay5vYmogJiYgby0+c3R5
bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUCkKQEAgLTIzNTUsMTUgKzIzMTcsMTUgQEAgQmlk
aUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcgogICAgICAgICAgICAgICAgICAg
ICBjaGVja0ZvckJyZWFrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tGb3JCcmVhayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJUZXh0KiBuZXh0VGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihuZXh0KTsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCAqbmV4dFRleHQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Kj4obmV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VGV4dC0+c3RyaW5n
TGVuZ3RoKCkgIT0gMCkgewotCSAgICAgICAgICAgICAgICAgICAgUUNoYXIgYyA9IG5leHRUZXh0
LT50ZXh0KClbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBRQ2hhciBjID0gbmV4dFRleHQt
PnRleHQoKVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcgJyB8fCBjID09
ICdcdCcgfHwgKGMgPT0gJ1xuJyAmJiBuZXh0LT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgIT0gUFJF
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgCS8vIElmIHRoZSBuZXh0IGl0ZW0gb24gdGhl
IGxpbmUgaXMgdGV4dCwgYW5kIGlmIHdlIGRpZCBub3QgZW5kIHdpdGgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAkvLyBhIHNwYWNlLCB0aGVuIHRoZSBuZXh0IHRleHQgcnVuIGNvbnRpbnVlcyBv
dXIgd29yZCAoYW5kIHNvIGl0IG5lZWRzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgIAkgCS8v
IGtlZXAgYWRkaW5nIHRvIHx0bXBXfC4gIEp1c3QgdXBkYXRlIGFuZCBjb250aW51ZS4KLSAJCQkJ
CQkJY2hlY2tGb3JCcmVhayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJdG1wVyAr
PSBuZXh0VGV4dC0+aHRtbEZvbnQobV9maXJzdExpbmUpLT5nZXRXb3JkU3BhY2luZygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXh0IGl0ZW0gb24gdGhlIGxpbmUg
aXMgdGV4dCwgYW5kIGlmIHdlIGRpZCBub3QgZW5kIHdpdGgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBhIHNwYWNlLCB0aGVuIHRoZSBuZXh0IHRleHQgcnVuIGNvbnRpbnVlcyBvdXIg
d29yZCAoYW5kIHNvIGl0IG5lZWRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
a2VlcCBhZGRpbmcgdG8gfHRtcFd8LiAgSnVzdCB1cGRhdGUgYW5kIGNvbnRpbnVlLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yQnJlYWsgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcFcgKz0gbmV4dFRleHQtPmh0bWxGb250KG1fZmlyc3RMaW5lKS0+
Z2V0V29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBib29sIGNhblBsYWNlT25MaW5lID0gKHcg
KyB0bXBXIDw9IHdpZHRoKzEpIHx8ICFpc05vcm1hbDsKQEAgLTIzOTQsNyArMjM1Niw3IEBAIEJp
ZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgICAgICBm
YiA9IG5lYXJlc3RGbG9hdEJvdHRvbShmYik7CiAgICAgICAgICAgICAgICAgbmV3TGluZVdpZHRo
ID0gbGluZVdpZHRoKGZiKTsKICAgICAgICAgICAgIH0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmKCAhdyAmJiBtX2hlaWdodCA8IGZiICYmIHdpZHRoIDwgbmV3TGluZVdpZHRoICkgeworICAg
ICAgICAgICAgaWYgKCF3ICYmIG1faGVpZ2h0IDwgZmIgJiYgd2lkdGggPCBuZXdMaW5lV2lkdGgg
KSB7CiAgICAgICAgICAgICAgICAgbV9oZWlnaHQgPSBmYjsKICAgICAgICAgICAgICAgICB3aWR0
aCA9IG5ld0xpbmVXaWR0aDsKICNpZmRlZiBERUJVR19MSU5FQlJFQUtTCkBAIC0yNDM0LDI1ICsy
Mzk2LDI1IEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICNpZmRl
ZiBERUJVR19MSU5FQlJFQUtTCiAgICAga2REZWJ1ZyggNjA0MSApIDw8ICJlbmQgb2YgcGFyLCB3
aWR0aCA9ICIgPDwgd2lkdGggPDwgIiBsaW5ld2lkdGggPSAiIDw8IHcgKyB0bXBXIDw8IGVuZGw7
CiAjZW5kaWYKLSAgICBpZiggdyArIHRtcFcgPD0gd2lkdGggfHwgKGxhc3QgJiYgbGFzdC0+c3R5
bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUCkpIHsKKyAgICBpZiAodyArIHRtcFcgPD0gd2lk
dGggfHwgKGxhc3QgJiYgbGFzdC0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUCkpIHsK
ICAgICAgICAgbEJyZWFrLm9iaiA9IDA7CiAgICAgICAgIGxCcmVhay5wb3MgPSAwOwogICAgIH0K
IAogIGVuZDoKIAotICAgIGlmKCBsQnJlYWsgPT0gc3RhcnQgJiYgIWxCcmVhay5vYmotPmlzQlIo
KSApIHsKKyAgICBpZiAobEJyZWFrID09IHN0YXJ0ICYmICFsQnJlYWsub2JqLT5pc0JSKCkpIHsK
ICAgICAgICAgLy8gd2UganVzdCBhZGQgYXMgbXVjaCBhcyBwb3NzaWJsZQotICAgICAgICBpZiAo
IG1fcHJlICkgewotICAgICAgICAgICAgaWYocG9zICE9IDApIHsKKyAgICAgICAgaWYgKG1fcHJl
KSB7CisgICAgICAgICAgICBpZiAocG9zICE9IDApIHsKICAgICAgICAgICAgICAgICBsQnJlYWsu
b2JqID0gbzsKICAgICAgICAgICAgICAgICBsQnJlYWsucG9zID0gcG9zIC0gMTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbEJyZWFrLm9iaiA9IGxhc3Q7CiAgICAgICAg
ICAgICAgICAgbEJyZWFrLnBvcyA9IGxhc3QtPmlzVGV4dCgpID8gbGFzdC0+bGVuZ3RoKCkgOiAw
OwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYoIGxCcmVhay5vYmogKSB7Ci0gICAg
ICAgICAgICBpZiggbGFzdCAhPSBvICYmICFsYXN0LT5pc0xpc3RNYXJrZXIoKSApIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChsQnJlYWsub2JqKSB7CisgICAgICAgICAgICBpZiAobGFzdCAhPSBvICYm
ICFsYXN0LT5pc0xpc3RNYXJrZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIGJldHRlciB0byBi
cmVhayBiZXR3ZWVuIG9iamVjdCBib3VuZGFyaWVzIHRoYW4gaW4gdGhlIG1pZGRsZSBvZiBhIHdv
cmQgKGV4Y2VwdCBmb3IgbGlzdCBtYXJrZXJzKQogICAgICAgICAgICAgICAgIGxCcmVhay5vYmog
PSBvOwogICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSAwOwpAQCAtMjQ2Nyw3ICsyNDI5LDcg
QEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcgogICAgIH0KIAogICAg
IC8vIG1ha2Ugc3VyZSB3ZSBjb25zdW1lIGF0IGxlYXN0IG9uZSBjaGFyL29iamVjdC4KLSAgICBp
ZiggbEJyZWFrID09IHN0YXJ0ICkKKyAgICBpZiAobEJyZWFrID09IHN0YXJ0KQogICAgICAgICBs
QnJlYWsuaW5jcmVtZW50KGJpZGkpOwogICAgIAogI2lmZGVmIERFQlVHX0xJTkVCUkVBS1MKQEAg
LTI0ODIsMTYgKzI0NDQsMTYgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExp
bmVCcgogICAgICAgICAvLyB0byBiZSB0aGUgYWN0dWFsIGVuZHBvaW50LiAgSW4gYm90aCBjYXNl
cyB3ZSBqdXN0IGRlY3JlYXNlIG91ciBwb3MgYnkgMSBsZXZlbCB0bwogICAgICAgICAvLyBleGNs
dWRlIHRoZSBzcGFjZSwgYWxsb3dpbmcgaXQgdG8gLSBpbiBlZmZlY3QgLSBjb2xsYXBzZSBpbnRv
IHRoZSBuZXdsaW5lLgogICAgICAgICBpZiAoc051bU1pZHBvaW50cyUyPT0xKSB7Ci0gICAgICAg
ICAgICBCaWRpSXRlcmF0b3IqIG1pZHBvaW50cyA9IHNtaWRwb2ludHMtPmRhdGEoKTsKKyAgICAg
ICAgICAgIEJpZGlJdGVyYXRvciAqbWlkcG9pbnRzID0gc21pZHBvaW50cy0+ZGF0YSgpOwogICAg
ICAgICAgICAgbWlkcG9pbnRzW3NOdW1NaWRwb2ludHMtMV0ucG9zLS07CiAgICAgICAgIH0KICAg
ICAgICAgLy9lbHNlIGlmIChsQnJlYWsucG9zID4gMCkKICAgICAgICAgLy8gICAgbEJyZWFrLnBv
cy0tOwogICAgICAgICBlbHNlIGlmIChsQnJlYWsub2JqID09IDAgJiYgdHJhaWxpbmdTcGFjZU9i
amVjdC0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBhIG5ldyBlbmQgbWlkcG9pbnQg
dGhhdCBzdG9wcyByaWdodCBhdCB0aGUgdmVyeSBlbmQuCi0gICAgICAgICAgICBSZW5kZXJUZXh0
KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPih0cmFpbGluZ1NwYWNlT2JqZWN0KTsK
KyAgICAgICAgICAgIFJlbmRlclRleHQgKnRleHQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+
KHRyYWlsaW5nU3BhY2VPYmplY3QpOwogICAgICAgICAgICAgdW5zaWduZWQgcG9zID0gdGV4dC0+
bGVuZ3RoKCkgPj0yID8gdGV4dC0+bGVuZ3RoKCkgLSAyIDogVUlOVF9NQVg7Ci0gICAgICAgICAg
ICBCaWRpSXRlcmF0b3IgZW5kTWlkICggMCwgdHJhaWxpbmdTcGFjZU9iamVjdCwgcG9zICk7Cisg
ICAgICAgICAgICBCaWRpSXRlcmF0b3IgZW5kTWlkKDAsIHRyYWlsaW5nU3BhY2VPYmplY3QsIHBv
cyk7CiAgICAgICAgICAgICBhZGRNaWRwb2ludChlbmRNaWQpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjUyMSw3ICsyNDgzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0Zvck92ZXJm
bG93KAogICAgIC8vIEZJWE1FOiBJbmxpbmUgYmxvY2tzIGNhbiBoYXZlIG92ZXJmbG93LiAgTmVl
ZCB0byB1bmRlcnN0YW5kIHdoZW4gdGhvc2Ugb2JqZWN0cyBhcmUgcHJlc2VudCBvbiBhIGxpbmUK
ICAgICAvLyBhbmQgZmFjdG9yIHRoYXQgaW4gc29tZWhvdy4KICAgICBtX292ZXJmbG93V2lkdGgg
PSBtX3dpZHRoOwotICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZpcnN0Um9vdEJveCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgeworICAgIGZvciAoUm9vdElubGlu
ZUJveCAqY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RC
b3goKSkgewogICAgICAgICBtX292ZXJmbG93TGVmdCA9IGtNaW4oY3Vyci0+bGVmdE92ZXJmbG93
KCksIG1fb3ZlcmZsb3dMZWZ0KTsKICAgICAgICAgbV9vdmVyZmxvd1RvcCA9IGtNaW4oY3Vyci0+
dG9wT3ZlcmZsb3coKSwgbV9vdmVyZmxvd1RvcCk7CiAgICAgICAgIG1fb3ZlcmZsb3dXaWR0aCA9
IGtNYXgoY3Vyci0+cmlnaHRPdmVyZmxvdygpLCBtX292ZXJmbG93V2lkdGgpOwpAQCAtMjUzMSw3
ICsyNDkzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0Zvck92ZXJmbG93KAogCiB2
b2lkIFJlbmRlckJsb2NrOjpkZWxldGVFbGxpcHNpc0xpbmVCb3hlcygpCiB7Ci0gICAgZm9yIChS
b290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0Um9vdEJveCgpKQorICAgIGZvciAoUm9vdElubGluZUJveCAqY3VyciA9IGZpcnN0Um9vdEJv
eCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgY3Vyci0+Y2xl
YXJUcnVuY2F0aW9uKCk7CiB9CiAKQEAgLTI1NTAsNyArMjUxMiw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmNoZWNrTGluZXNGb3JUZXh0T3ZlcmYKICAgICAvLyBjaGVjayB0aGUgbGVmdCBlZGdlIG9m
IHRoZSBsaW5lIGJveCB0byBzZWUgaWYgaXQgaXMgbGVzcwogICAgIC8vIEluY2x1ZGUgdGhlIHNj
cm9sbGJhciBmb3Igb3ZlcmZsb3cgYmxvY2tzLCB3aGljaCBtZWFucyB3ZSB3YW50IHRvIHVzZSAi
Y29udGVudFdpZHRoKCkiCiAgICAgYm9vbCBsdHIgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFI7Ci0gICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CisgICAgZm9yIChSb290SW5saW5lQm94ICpj
dXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7
CiAgICAgICAgIGludCBibG9ja0VkZ2UgPSBsdHIgPyByaWdodE9mZnNldChjdXJyLT55UG9zKCkp
IDogbGVmdE9mZnNldChjdXJyLT55UG9zKCkpOwogICAgICAgICBpbnQgbGluZUJveEVkZ2UgPSBs
dHIgPyBjdXJyLT54UG9zKCkgKyBjdXJyLT53aWR0aCgpIDogY3Vyci0+eFBvcygpOwogICAgICAg
ICBpZiAoKGx0ciAmJiBsaW5lQm94RWRnZSA+IGJsb2NrRWRnZSkgfHwgKCFsdHIgJiYgbGluZUJv
eEVkZ2UgPCBibG9ja0VkZ2UpKSB7Cg==
</data>
<flag name="review"
          id="792"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>