<?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>25519</bug_id>
          
          <creation_ts>2009-05-02 23:04:58 -0700</creation_ts>
          <short_desc>streamline lexer by handling BOMs differently</short_desc>
          <delta_ts>2009-05-04 11:01:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119711</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-02 23:04:58 -0700</bug_when>
    <thetext>Maciej suggested this optimization. We can streamline the lexer by handling BOMs up front instead of inside the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119712</commentid>
    <comment_count>1</comment_count>
      <attachid>29962</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-02 23:45:35 -0700</bug_when>
    <thetext>Created attachment 29962
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119722</commentid>
    <comment_count>2</comment_count>
      <attachid>29962</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-03 09:50:01 -0700</bug_when>
    <thetext>Comment on attachment 29962
patch

Maciej reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119723</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-03 09:50:21 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/43156</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29962</attachid>
            <date>2009-05-02 23:45:35 -0700</date>
            <delta_ts>2009-05-03 09:50:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>LexerBOMPatch.txt</filename>
            <type>text/plain</type>
            <size>58061</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQzMTU1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODkgQEAKKzIwMDktMDUtMDIgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAyNTUxOTogc3RyZWFtbGluZSBsZXhlciBieSBoYW5kbGluZyBC
T01zIGRpZmZlcmVudGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNTUxOQorCisgICAgICAgIFJvdWdobHkgMSUgZmFzdGVyIFN1blNwaWRlci4KKwor
ICAgICAgICAqIHBhcnNlci9HcmFtbWFyLnk6IFR3ZWFrIGZvcm1hdHRpbmcgYSBiaXQuCisKKyAg
ICAgICAgKiBwYXJzZXIvTGV4ZXIuY3BwOgorICAgICAgICAoSlNDOjpMZXhlcjo6TGV4ZXIpOiBS
ZW1vdmUgdW5ubmVjZXNzYXJ5IGluaXRpYWxpemF0aW9uIG9mIGRhdGEgbWVtYmVycworICAgICAg
ICB0aGF0IGFyZSBzZXQgdXAgYnkgc2V0Q29kZS4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OmN1cnJl
bnRPZmZzZXQpOiBBZGRlZC4gVXNlZCB3aGVyZSB0aGUgb2xkIGNvZGUgd291bGQgbG9vayBhdAor
ICAgICAgICBtX2N1cnJlbnRPZmZzZXQuCisgICAgICAgIChKU0M6OkxleGVyOjpzaGlmdDEpOiBS
ZXBsYWNlcyB0aGUgb2xkIHNoaWZ0IGZ1bmN0aW9uLiBObyBsb25nZXIgZG9lcyBhbnl0aGluZwor
ICAgICAgICB0byBoYW5kbGUgQk9NIGNoYXJhY3RlcnMuCisgICAgICAgIChKU0M6OkxleGVyOjpz
aGlmdDIpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6TGV4ZXI6OnNoaWZ0Myk6IERpdHRvLgorICAg
ICAgICAoSlNDOjpMZXhlcjo6c2hpZnQ0KTogRGl0dG8uCisgICAgICAgIChKU0M6OkxleGVyOjpz
ZXRDb2RlKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UgZnJvbSB5eWxpbmVubyB0byBtX2xpbmUu
CisgICAgICAgIFJlbW92ZWQgbm93LXVudXNlZCBtX2VhdE5leHRJZGVudGlmaWVyLCBtX3N0YWNr
VG9rZW4sIGFuZCBtX3Jlc3RyS2V5d29yZC4KKyAgICAgICAgUmVwbGFjZWQgbV9za2lwTEYgYW5k
IG1fc2tpcENSIHdpdGggbV9za2lwTGluZUVuZC4gUmVwbGFjZWQgdGhlIG9sZAorICAgICAgICBt
X2xlbmd0aCB3aXRoIG1fY29kZUVuZCBhbmQgbV9jdXJyZW50T2Zmc2V0IHdpdGggbV9jb2RlU3Rh
cnQuIEFkZGVkIGNvZGUKKyAgICAgICAgdG8gc2NhbiBmb3IgYSBCT00gY2hhcmFjdGVyIGFuZCBj
YWxsIGNvcHlDb2RlV2l0aG91dEJPTXMoKSBpZiB3ZSBmaW5kIGFueS4KKyAgICAgICAgKEpTQzo6
TGV4ZXI6OmNvcHlDb2RlV2l0aG91dEJPTXMpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TGV4ZXI6
Om5leHRMaW5lKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UgZnJvbSB5eWxpbmVubyB0byBtX2xp
bmUuCisgICAgICAgIChKU0M6OkxleGVyOjptYWtlSWRlbnRpZmllcik6IE1vdmVkIHVwIGhpZ2hl
ciBpbiB0aGUgZmlsZS4KKyAgICAgICAgKEpTQzo6TGV4ZXI6Om1hdGNoUHVuY3R1YXRvcik6IE1v
dmVkIHVwIGhpZ2hlciBpbiB0aGUgZmlsZSBhbmQgY2hhbmdlZCB0bworICAgICAgICB1c2UgYSBz
d2l0Y2ggc3RhdGVtZW50IGluc3RlYWQgb2YganVzdCBpZiBzdGF0ZW1lbnRzLgorICAgICAgICAo
SlNDOjpMZXhlcjo6aXNMaW5lVGVybWluYXRvcik6IE1vdmVkIHVwIGhpZ2hlciBpbiB0aGUgZmls
ZSBhbmQgY2hhbmdlZCB0bworICAgICAgICBoYXZlIGZld2VyIGJyYW5jaGVzLgorICAgICAgICAo
SlNDOjpMZXhlcjo6bGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkKTogQWRkZWQuIFRoaXMgcmVwbGFj
ZXMgdGhlIG9sZAorICAgICAgICBtX3Jlc3RyS2V5d29yZCBib29sZWFuLgorICAgICAgICAoSlND
OjpMZXhlcjo6aXNJZGVudFN0YXJ0KTogTW92ZWQgdXAgaGlnaGVyIGluIHRoZSBmaWxlLiBDaGFu
Z2VkIHRvIHVzZQorICAgICAgICBmZXdlciBicmFuY2hlcyBpbiB0aGUgQVNDSUkgYnV0IG5vdCBp
ZGVudGlmaWVyIGNhc2UuCisgICAgICAgIChKU0M6OkxleGVyOjppc0lkZW50UGFydCk6IERpdHRv
LgorICAgICAgICAoSlNDOjpMZXhlcjo6c2luZ2xlRXNjYXBlKTogTW92ZWQgdXAgaGlnaGVyIGlu
IHRoZSBmaWxlLgorICAgICAgICAoSlNDOjpMZXhlcjo6Y29udmVydE9jdGFsKTogTW92ZWQgdXAg
aGlnaGVyIGluIHRoZSBmaWxlLgorICAgICAgICAoSlNDOjpMZXhlcjo6Y29udmVydEhleCk6IE1v
dmVkIHVwIGhpZ2hlciBpbiB0aGUgZmlsZS4gQ2hhbmdlZCB0byB1c2UKKyAgICAgICAgdG9BU0NJ
SUhleFZhbHVlIGluc3RlYWQgb2Ygcm9sbGluZyBvdXIgb3duIGhlcmUuCisgICAgICAgIChKU0M6
OkxleGVyOjpjb252ZXJ0VW5pY29kZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpMZXhlcjo6cmVj
b3JkOCk6IE1vdmVkIHVwIGhpZ2hlciBpbiB0aGUgZmlsZS4KKyAgICAgICAgKEpTQzo6TGV4ZXI6
OnJlY29yZDE2KTogTW92ZWQgdXAgaGlnaGVyIGluIHRoZSBmaWxlLgorICAgICAgICAoSlNDOjpM
ZXhlcjo6bGV4KTogQ2hhbmdlZCB0eXBlIG9mIHN0cmluZ1R5cGUgdG8gaW50LiBSZXBsYWNlZCBt
X3NraXBMRgorICAgICAgICBhbmQgbV9za2lwQ1Igd2l0aCBtX3NraXBMaW5lRW5kLCB3aGljaCBy
ZXF1aXJlcyBmZXdlciBicmFuY2hlcyBpbiB0aGUKKyAgICAgICAgbWFpbiBsZXhlciBsb29wLiBV
c2UgY3VycmVudE9mZnNldCBpbnN0ZWFkIG9mIG1fY3VycmVudE9mZnNldC4gUmVtb3ZlZAorICAg
ICAgICB1bm5lZWRlZCBtX3N0YWNrVG9rZW4uIFVzZSBpc0FTQ0lJRGlnaXQgaW5zdGVhZCBvZiBp
c0RlY2ltYWxEaWdpdC4KKyAgICAgICAgU3BsaXQgb3V0IHRoZSB0d28gY2FzZXMgZm9yIEluSWRl
bnRpZmllck9yS2V5d29yZCBhbmQgSW5JZGVudGlmaWVyLgorICAgICAgICBBZGRlZCBzcGVjaWFs
IGNhc2UgdGlnaHQgbG9vcHMgZm9yIGlkZW50aWZpZXJzIGFuZCBvdGhlciBzaW1wbGUgc3RhdGVz
LgorICAgICAgICBSZW1vdmVkIGEgYnJhbmNoIGZyb20gdGhlIGNvZGUgdGhhdCBzZXRzIG1fYXRM
aW5lU3RhcnQgdG8gZmFsc2UgdXNpbmcgZ290by4KKyAgICAgICAgU3RyZWFtbGluZWQgdGhlIG51
bWJlci1oYW5kbGluZyBjb2RlIHNvIHdlIGRvbid0IGNoZWNrIGZvciB0aGUgc2FtZSB0eXBlcwor
ICAgICAgICB0d2ljZSBmb3Igbm9uLW51bWVyaWMgY2FzZXMgYW5kIGRvbid0IGFkZCBhIG51bGwg
dG8gbV9idWZmZXI4IHdoZW4gaXQncworICAgICAgICBub3QgYmVpbmcgdXNlZC4gUmVtb3ZlZCBt
X2VhdE5leHRJZGVudGlmaWVyLCB3aGljaCB3YXNuJ3Qgd29ya2luZyBhbnl3YXksCisgICAgICAg
IGFuZCBtX3Jlc3RyS2V5d29yZCwgd2hpY2ggaXMgcmVkdW5kYW50IHdpdGggbV9sYXN0VG9rZW4u
IFNldCB0aGUKKyAgICAgICAgbV9kZWxpbWl0ZWQgZmxhZyB3aXRob3V0IHVzaW5nIGEgYnJhbmNo
LgorICAgICAgICAoSlNDOjpMZXhlcjo6c2NhblJlZ0V4cCk6IFR3ZWFrZWQgc3R5bGUgYSBiaXQu
CisgICAgICAgIChKU0M6OkxleGVyOjpjbGVhcik6IENsZWFyIG1fY29kZVdpdGhvdXRCT01zIHNv
IHdlIGRvbid0IHVzZSBtZW1vcnkgYWZ0ZXIKKyAgICAgICAgcGFyc2luZy4gQ2xlYXIgb3V0IFVT
dHJpbmcgb2JqZWN0cyBpbiB0aGUgbW9yZSBjb252ZW50aW9uYWwgd2F5LgorICAgICAgICAoSlND
OjpMZXhlcjo6c291cmNlQ29kZSk6IE1hZGUgdGhpcyBuby1sb25nZXIgaW5saW5lIHNpbmNlIGl0
IGhhcyBtb3JlCisgICAgICAgIHdvcmsgdG8gZG8gaW4gdGhlIGNhc2Ugd2hlcmUgd2Ugc3RyaXBw
ZWQgQk9Ncy4KKworICAgICAgICAqIHBhcnNlci9MZXhlci5oOiBSZW5hbWVkIHl5bGluZW5vIHRv
IG1fbGluZU51bWJlci4gUmVtb3ZlZCBjb252ZXJ0SGV4CisgICAgICAgIGZ1bmN0aW9uLCB3aGlj
aCBpcyB0aGUgc2FtZSBhcyB0b0FTQ0lJSGV4VmFsdWUuIFJlbW92ZWQgaXNIZXhEaWdpdAorICAg
ICAgICBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgaXNBU0NJSUhlZERpZ2l0LiBSZXBs
YWNlZCBzaGlmdCB3aXRoIGZvdXIKKyAgICAgICAgc2VwYXJhdGUgc2hpZnQgZnVuY3Rpb25zLiBS
ZW1vdmVkIGlzV2hpdGVTcGFjZSBmdW5jdGlvbiB0aGF0IHBhc3NlcworICAgICAgICBtX2N1cnJl
bnQsIGluc3RlYWQganVzdCBwYXNzaW5nIG1fY3VycmVudCBleHBsaWNpdGx5LiBSZW1vdmVkIGlz
T2N0YWxEaWdpdCwKKyAgICAgICAgd2hpY2ggaXMgdGhlIHNhbWUgYXMgaXNBU0NJSU9jdGFsRGln
aXQuIEVsaW1pbmF0ZWQgdW51c2VkIGFyZ3VtZW50cyBmcm9tCisgICAgICAgIG1hdGNoUHVuY3R1
YXRvci4gQWRkZWQgY29weUNvb2RlV2l0aG91dEJPTXMgYW5kIGN1cnJlbnRPZmZzZXQuIE1vdmVk
IHRoZQorICAgICAgICBtYWtlSWRlbnRpZmllciBmdW5jdGlvbiBvdXQgb2YgdGhlIGhlYWRlci4g
QWRkZWQgbGFzdFRva2VuV2FzUmVzdHJLZXl3b3JkCisgICAgICAgIGZ1bmN0aW9uLiBBZGRlZCBu
ZXcgY29uc3RhbnRzIGZvciBtX3NraXBMaW5lRW5kLiBSZW1vdmVkIHVudXNlZCB5eWNvbHVtbiwK
KyAgICAgICAgbV9yZXN0cktleXdvcmQsIG1fc2tpcExGLCBtX3NraXBDUiwgbV9lYXROZXh0SWRl
bnRpZmllciwgbV9zdGFja1Rva2VuLAorICAgICAgICBtX3Bvc2l0aW9uLCBtX2xlbmd0aCwgbV9j
dXJyZW50T2Zmc2V0LCBtX25leHRPZmZzZXQxLCBtX25leHRPZmZzZXQyLAorICAgICAgICBtX25l
eHRPZmZzZXQzLiBBZGRlZCBtX3NraXBMaW5lRW5kLCBtX2NvZGVTdGFydCwgbV9jb2RlRW5kLCBh
bmQKKyAgICAgICAgbV9jb2RlV2l0aG91dEJPTXMuCisKKyAgICAgICAgKiBwYXJzZXIvU291cmNl
UHJvdmlkZXIuaDogQWRkZWQgaGFzQk9NcyBmdW5jdGlvbi4gSW4gdGhlIGZ1dHVyZSB0aGlzIGNh
bgorICAgICAgICBiZSB1c2VkIHRvIHRlbGwgdGhlIGxleGVyIGFib3V0IHN0cmluZ3Mga25vd24g
bm90IHRvIGhhdmUgQk9Ncy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9iYWxGdW5jVW5lc2NhcGUpOiBDaGFuZ2VkIHRv
IHVzZSBpc0FTQ0lJSGV4RGlnaXQuCisKKyAgICAgICAgKiB3dGYvQVNDSUlDVHlwZS5oOiBBZGRl
ZCB1c2luZyBzdGF0ZW1lbnRzIHRvIG1hdGNoIHRoZSBkZXNpZ24gb2YgdGhlCisgICAgICAgIG90
aGVyIFdURiBoZWFkZXJzLgorCiAyMDA5LTA1LTAyICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCB3aW5kb3dzIGJ1aWxkICh3aGVuIGRvaW5nIGEgY2xlYW4gYnVp
bGQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvR3JhbW1hci55Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3BhcnNlci9HcmFtbWFyLnkJKHJldmlzaW9uIDQzMTU1KQorKysgSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIx
OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRUb1ZhckRlY2xhcmF0aW8KICV0b2tlbiBB
TkRFUVVBTCBNT0RFUVVBTCAgICAgICAgICAgLyogJj0gYW5kICU9ICovCiAldG9rZW4gWE9SRVFV
QUwgT1JFUVVBTCAgICAgICAgICAgIC8qIF49IGFuZCB8PSAqLwogJXRva2VuIDxpbnRWYWx1ZT4g
T1BFTkJSQUNFICAgICAgICAvKiB7ICh3aXRoIGNoYXIgb2Zmc2V0KSAqLwotJXRva2VuIDxpbnRW
YWx1ZT4gQ0xPU0VCUkFDRSAgICAgICAgLyogeyAod2l0aCBjaGFyIG9mZnNldCkgKi8KKyV0b2tl
biA8aW50VmFsdWU+IENMT1NFQlJBQ0UgICAgICAgLyogfSAod2l0aCBjaGFyIG9mZnNldCkgKi8K
IAogLyogdGVybWluYWwgdHlwZXMgKi8KICV0b2tlbiA8ZG91YmxlVmFsdWU+IE5VTUJFUgpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCShyZXZpc2lvbiA0MzE1NSkKKysrIEphdmFTY3JpcHRD
b3JlL3BhcnNlci9MZXhlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTQ3LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEpTQzsKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJMZXhlci5sdXQuaCIKIAot
Ly8gYSBicmlkZ2UgZm9yIHlhY2MgZnJvbSB0aGUgQyB3b3JsZCB0byBDKysKKy8vIEEgYnJpZGdl
IGZvciB5YWNjIGZyb20gdGhlIEMgd29ybGQgdG8gQysrLgogaW50IGpzY3l5bGV4KHZvaWQqIGx2
YWxwLCB2b2lkKiBsbG9jcCwgdm9pZCogZ2xvYmFsRGF0YSkKIHsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SlNHbG9iYWxEYXRhKj4oZ2xvYmFsRGF0YSktPmxleGVyLT5sZXgobHZhbHAsIGxsb2Nw
KTsKQEAgLTU1LDI3ICs1NCwxMCBAQCBpbnQganNjeXlsZXgodm9pZCogbHZhbHAsIHZvaWQqIGxs
b2NwLCB2CiAKIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgYm9vbCBpc0RlY2ltYWxEaWdpdChp
bnQpOworc3RhdGljIGNvbnN0IFVDaGFyIGJ5dGVPcmRlck1hcmsgPSAweEZFRkY7CiAKIExleGVy
OjpMZXhlcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCi0gICAgOiB5eWxpbmVubygxKQotICAg
ICwgbV9yZXN0cktleXdvcmQoZmFsc2UpCi0gICAgLCBtX2VhdE5leHRJZGVudGlmaWVyKGZhbHNl
KQotICAgICwgbV9zdGFja1Rva2VuKC0xKQotICAgICwgbV9sYXN0VG9rZW4oLTEpCi0gICAgLCBt
X3Bvc2l0aW9uKDApCi0gICAgLCBtX2NvZGUoMCkKLSAgICAsIG1fbGVuZ3RoKDApCi0gICAgLCBt
X2lzUmVwYXJzaW5nKGZhbHNlKQotICAgICwgbV9hdExpbmVTdGFydCh0cnVlKQotICAgICwgbV9j
dXJyZW50KDApCi0gICAgLCBtX25leHQxKDApCi0gICAgLCBtX25leHQyKDApCi0gICAgLCBtX25l
eHQzKDApCi0gICAgLCBtX2N1cnJlbnRPZmZzZXQoMCkKLSAgICAsIG1fbmV4dE9mZnNldDEoMCkK
LSAgICAsIG1fbmV4dE9mZnNldDIoMCkKLSAgICAsIG1fbmV4dE9mZnNldDMoMCkKKyAgICA6IG1f
aXNSZXBhcnNpbmcoZmFsc2UpCiAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKICAgICAs
IG1fbWFpblRhYmxlKEpTQzo6bWFpblRhYmxlKQogewpAQCAtODgsNTcgKzcwLDEyNyBAQCBMZXhl
cjo6fkxleGVyKCkKICAgICBtX21haW5UYWJsZS5kZWxldGVUYWJsZSgpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgTGV4ZXI6OnNoaWZ0KHVuc2lnbmVkIHApCitpbmxpbmUgaW50IExleGVyOjpj
dXJyZW50T2Zmc2V0KCkgY29uc3QKIHsKLSAgICAvLyBFQ01BLTI2MiBjYWxscyBmb3Igc3RyaXBw
aW5nIENmIGNoYXJhY3RlcnMgaGVyZSwgYnV0IHdlIG9ubHkgZG8gdGhpcyBmb3IgQk9NLAotICAg
IC8vIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzE+Lgor
ICAgIHJldHVybiBtX2NvZGUgLSA0IC0gbV9jb2RlU3RhcnQ7Cit9CisKK0FMV0FZU19JTkxJTkUg
dm9pZCBMZXhlcjo6c2hpZnQxKCkKK3sKKyAgICBtX2N1cnJlbnQgPSBtX25leHQxOworICAgIG1f
bmV4dDEgPSBtX25leHQyOworICAgIG1fbmV4dDIgPSBtX25leHQzOworICAgIGlmIChMSUtFTFko
bV9jb2RlIDwgbV9jb2RlRW5kKSkKKyAgICAgICAgbV9uZXh0MyA9IG1fY29kZVswXTsKKyAgICBl
bHNlCisgICAgICAgIG1fbmV4dDMgPSAtMTsKKworICAgICsrbV9jb2RlOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgTGV4ZXI6OnNoaWZ0MigpCit7CisgICAgbV9jdXJyZW50ID0gbV9uZXh0MjsK
KyAgICBtX25leHQxID0gbV9uZXh0MzsKKyAgICBpZiAoTElLRUxZKG1fY29kZSArIDEgPCBtX2Nv
ZGVFbmQpKSB7CisgICAgICAgIG1fbmV4dDIgPSBtX2NvZGVbMF07CisgICAgICAgIG1fbmV4dDMg
PSBtX2NvZGVbMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9uZXh0MiA9IG1fY29kZSA8IG1f
Y29kZUVuZCA/IG1fY29kZVswXSA6IC0xOworICAgICAgICBtX25leHQzID0gLTE7CisgICAgfQor
CisgICAgbV9jb2RlICs9IDI7Cit9CiAKLSAgICB3aGlsZSAocC0tKSB7Ci0gICAgICAgIG1fY3Vy
cmVudCA9IG1fbmV4dDE7Ci0gICAgICAgIG1fbmV4dDEgPSBtX25leHQyOwotICAgICAgICBtX25l
eHQyID0gbV9uZXh0MzsKLSAgICAgICAgbV9jdXJyZW50T2Zmc2V0ID0gbV9uZXh0T2Zmc2V0MTsK
LSAgICAgICAgbV9uZXh0T2Zmc2V0MSA9IG1fbmV4dE9mZnNldDI7Ci0gICAgICAgIG1fbmV4dE9m
ZnNldDIgPSBtX25leHRPZmZzZXQzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAobV9w
b3NpdGlvbiA+PSBtX2xlbmd0aCkgewotICAgICAgICAgICAgICAgIG1fbmV4dE9mZnNldDMgPSBt
X3Bvc2l0aW9uOwotICAgICAgICAgICAgICAgIG1fcG9zaXRpb24rKzsKLSAgICAgICAgICAgICAg
ICBtX25leHQzID0gLTE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX25leHRPZmZzZXQzID0gbV9wb3NpdGlvbjsKLSAgICAgICAgICAgIG1fbmV4
dDMgPSBtX2NvZGVbbV9wb3NpdGlvbisrXTsKLSAgICAgICAgfSB3aGlsZSAoVU5MSUtFTFkobV9u
ZXh0MyA9PSAweEZFRkYpKTsKK0FMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQzKCkKK3sK
KyAgICBtX2N1cnJlbnQgPSBtX25leHQzOworICAgIGlmIChMSUtFTFkobV9jb2RlICsgMiA8IG1f
Y29kZUVuZCkpIHsKKyAgICAgICAgbV9uZXh0MSA9IG1fY29kZVswXTsKKyAgICAgICAgbV9uZXh0
MiA9IG1fY29kZVsxXTsKKyAgICAgICAgbV9uZXh0MyA9IG1fY29kZVsyXTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX25leHQxID0gbV9jb2RlIDwgbV9jb2RlRW5kID8gbV9jb2RlWzBdIDogLTE7
CisgICAgICAgIG1fbmV4dDIgPSBtX2NvZGUgKyAxIDwgbV9jb2RlRW5kID8gbV9jb2RlWzFdIDog
LTE7CisgICAgICAgIG1fbmV4dDMgPSAtMTsKICAgICB9CisKKyAgICBtX2NvZGUgKz0gMzsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIExleGVyOjpzaGlmdDQoKQoreworICAgIGlmIChMSUtFTFko
bV9jb2RlICsgMyA8IG1fY29kZUVuZCkpIHsKKyAgICAgICAgbV9jdXJyZW50ID0gbV9jb2RlWzBd
OworICAgICAgICBtX25leHQxID0gbV9jb2RlWzFdOworICAgICAgICBtX25leHQyID0gbV9jb2Rl
WzJdOworICAgICAgICBtX25leHQzID0gbV9jb2RlWzNdOworICAgIH0gZWxzZSB7CisgICAgICAg
IG1fY3VycmVudCA9IG1fY29kZSA8IG1fY29kZUVuZCA/IG1fY29kZVswXSA6IC0xOworICAgICAg
ICBtX25leHQxID0gbV9jb2RlICsgMSA8IG1fY29kZUVuZCA/IG1fY29kZVsxXSA6IC0xOworICAg
ICAgICBtX25leHQyID0gbV9jb2RlICsgMiA8IG1fY29kZUVuZCA/IG1fY29kZVsyXSA6IC0xOwor
ICAgICAgICBtX25leHQzID0gLTE7CisgICAgfQorCisgICAgbV9jb2RlICs9IDQ7CiB9CiAKIHZv
aWQgTGV4ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQogewotICAgIHl5bGlu
ZW5vID0gc291cmNlLmZpcnN0TGluZSgpOwotICAgIG1fcmVzdHJLZXl3b3JkID0gZmFsc2U7Cisg
ICAgbV9saW5lTnVtYmVyID0gc291cmNlLmZpcnN0TGluZSgpOwogICAgIG1fZGVsaW1pdGVkID0g
ZmFsc2U7Ci0gICAgbV9lYXROZXh0SWRlbnRpZmllciA9IGZhbHNlOwotICAgIG1fc3RhY2tUb2tl
biA9IC0xOwogICAgIG1fbGFzdFRva2VuID0gLTE7CiAKLSAgICBtX3Bvc2l0aW9uID0gc291cmNl
LnN0YXJ0T2Zmc2V0KCk7CisgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzb3VyY2UucHJvdmlkZXIo
KS0+ZGF0YSgpOworCiAgICAgbV9zb3VyY2UgPSAmc291cmNlOwotICAgIG1fY29kZSA9IHNvdXJj
ZS5wcm92aWRlcigpLT5kYXRhKCk7Ci0gICAgbV9sZW5ndGggPSBzb3VyY2UuZW5kT2Zmc2V0KCk7
Ci0gICAgbV9za2lwTEYgPSBmYWxzZTsKLSAgICBtX3NraXBDUiA9IGZhbHNlOworICAgIG1fY29k
ZVN0YXJ0ID0gZGF0YTsKKyAgICBtX2NvZGUgPSBkYXRhICsgc291cmNlLnN0YXJ0T2Zmc2V0KCk7
CisgICAgbV9jb2RlRW5kID0gZGF0YSArIHNvdXJjZS5lbmRPZmZzZXQoKTsKKyAgICBtX3NraXBM
aW5lRW5kID0gMDsKICAgICBtX2Vycm9yID0gZmFsc2U7CiAgICAgbV9hdExpbmVTdGFydCA9IHRy
dWU7CiAKLSAgICAvLyByZWFkIGZpcnN0IGNoYXJhY3RlcnMKLSAgICBzaGlmdCg0KTsKKyAgICAv
LyBFQ01BLTI2MiBjYWxscyBmb3Igc3RyaXBwaW5nIGFsbCBDZiBjaGFyYWN0ZXJzLCBidXQgd2Ug
b25seSBzdHJpcCBCT00gY2hhcmFjdGVycy4KKyAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTMxPiBmb3IgZGV0YWlscy4KKyAgICBpZiAoc291cmNl
LnByb3ZpZGVyKCktPmhhc0JPTXMoKSkgeworICAgICAgICBmb3IgKGNvbnN0IFVDaGFyKiBwID0g
bV9jb2RlU3RhcnQ7IHAgPCBtX2NvZGVFbmQ7ICsrcCkgeworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCpwID09IGJ5dGVPcmRlck1hcmspKSB7CisgICAgICAgICAgICAgICAgY29weUNvZGVXaXRo
b3V0Qk9NcygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gUmVhZCB0aGUgZmlyc3QgY2hhcmFjdGVycyBpbnRvIHRoZSA0
LWNoYXJhY3RlciBidWZmZXIuCisgICAgc2hpZnQ0KCk7CisgICAgQVNTRVJUKGN1cnJlbnRPZmZz
ZXQoKSA9PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSk7Cit9CisKK3ZvaWQgTGV4ZXI6OmNvcHlDb2Rl
V2l0aG91dEJPTXMoKQoreworICAgIC8vIE5vdGU6IEluIHRoaXMgY2FzZSwgdGhlIGNoYXJhY3Rl
ciBvZmZzZXQgZGF0YSBmb3IgZGVidWdnaW5nIHdpbGwgYmUgaW5jb3JyZWN0LgorICAgIC8vIElm
IGl0J3MgaW1wb3J0YW50IHRvIGNvcnJlY3RseSBkZWJ1ZyBjb2RlIHdpdGggZXh0cmFuZW91cyBC
T01zLCB0aGVuIHRoZSBjYWxsZXIKKyAgICAvLyBzaG91bGQgc3RyaXAgdGhlIEJPTXMgd2hlbiBj
cmVhdGluZyB0aGUgU291cmNlUHJvdmlkZXIgb2JqZWN0IGFuZCBkbyBpdHMgb3duCisgICAgLy8g
bWFwcGluZyBvZiBvZmZzZXRzIHdpdGhpbiB0aGUgc3RyaXBwZWQgdGV4dCB0byBvcmlnaW5hbCB0
ZXh0IG9mZnNldC4KKworICAgIG1fY29kZVdpdGhvdXRCT01zLnJlc2VydmVDYXBhY2l0eShtX2Nv
ZGVFbmQgLSBtX2NvZGUpOworICAgIGZvciAoY29uc3QgVUNoYXIqIHAgPSBtX2NvZGU7IHAgPCBt
X2NvZGVFbmQ7ICsrcCkgeworICAgICAgICBVQ2hhciBjID0gKnA7CisgICAgICAgIGlmIChjICE9
IGJ5dGVPcmRlck1hcmspCisgICAgICAgICAgICBtX2NvZGVXaXRob3V0Qk9Ncy5hcHBlbmQoYyk7
CisgICAgfQorICAgIHB0cmRpZmZfdCBzdGFydERlbHRhID0gbV9jb2RlU3RhcnQgLSBtX2NvZGU7
CisgICAgbV9jb2RlID0gbV9jb2RlV2l0aG91dEJPTXMuZGF0YSgpOworICAgIG1fY29kZVN0YXJ0
ID0gbV9jb2RlICsgc3RhcnREZWx0YTsKKyAgICBtX2NvZGVFbmQgPSBtX2NvZGVXaXRob3V0Qk9N
cy5kYXRhKCkgKyBtX2NvZGVXaXRob3V0Qk9Ncy5zaXplKCk7CiB9CiAKIC8vIGNhbGxlZCBvbiBl
YWNoIG5ldyBsaW5lCiB2b2lkIExleGVyOjpuZXh0TGluZSgpCiB7Ci0gICAgeXlsaW5lbm8rKzsK
KyAgICArK21fbGluZU51bWJlcjsKICAgICBtX2F0TGluZVN0YXJ0ID0gdHJ1ZTsKIH0KIApAQCAt
MTQ4LDY4ICsyMDAsMzM4IEBAIHZvaWQgTGV4ZXI6OnNldERvbmUoU3RhdGUgcykKICAgICBtX2Rv
bmUgPSB0cnVlOwogfQogCitBTFdBWVNfSU5MSU5FIEpTQzo6SWRlbnRpZmllciogTGV4ZXI6Om1h
a2VJZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBtX2lkZW50
aWZpZXJzLmFwcGVuZChKU0M6OklkZW50aWZpZXIobV9nbG9iYWxEYXRhLCBidWZmZXIuZGF0YSgp
LCBidWZmZXIuc2l6ZSgpKSk7CisgICAgcmV0dXJuICZtX2lkZW50aWZpZXJzLmxhc3QoKTsKK30K
KworQUxXQVlTX0lOTElORSBpbnQgTGV4ZXI6Om1hdGNoUHVuY3R1YXRvcihpbnQmIGNoYXJQb3Mp
Cit7CisgICAgc3dpdGNoIChtX2N1cnJlbnQpIHsKKyAgICAgICAgY2FzZSAnPic6CisgICAgICAg
ICAgICBpZiAobV9uZXh0MSA9PSAnPicgJiYgbV9uZXh0MiA9PSAnPicpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9uZXh0MyA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQ0KCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVUlNISUZURVFVQUw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHNoaWZ0MygpOworICAgICAgICAgICAgICAgIHJldHVybiBV
UlNISUZUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbmV4dDEgPT0gJz4nKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1fbmV4dDIgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNoaWZ0MygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlNISUZURVFVQUw7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNoaWZ0MigpOworICAgICAgICAgICAg
ICAgIHJldHVybiBSU0hJRlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9uZXh0
MSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAgICAgICAg
ICAgIHJldHVybiAnPic7CisgICAgICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgaWYgKG1fbmV4
dDEgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbmV4dDIgPT0gJz0nKSB7CisgICAg
ICAgICAgICAgICAgICAgIHNoaWZ0MygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RS
RVE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNoaWZ0MigpOworICAgICAg
ICAgICAgICAgIHJldHVybiBFUUVROworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hpZnQx
KCk7CisgICAgICAgICAgICByZXR1cm4gJz0nOworICAgICAgICBjYXNlICchJzoKKyAgICAgICAg
ICAgIGlmIChtX25leHQxID09ICc9JykgeworICAgICAgICAgICAgICAgIGlmIChtX25leHQyID09
ICc9JykgeworICAgICAgICAgICAgICAgICAgICBzaGlmdDMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNUUk5FUTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2hp
ZnQyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5FOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICByZXR1cm4gJyEnOworICAgICAgICBjYXNlICc8
JzoKKyAgICAgICAgICAgIGlmIChtX25leHQxID09ICc8JykgeworICAgICAgICAgICAgICAgIGlm
IChtX25leHQyID09ICc9JykgeworICAgICAgICAgICAgICAgICAgICBzaGlmdDMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIExTSElGVEVRVUFMOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTFNISUZUOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbmV4dDEgPT0gJz0nKSB7CisgICAgICAg
ICAgICAgICAgc2hpZnQyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIExFOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICByZXR1cm4gJzwnOworICAg
ICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIGlmIChtX25leHQxID09ICcrJykgeworICAgICAg
ICAgICAgICAgIHNoaWZ0MigpOworICAgICAgICAgICAgICAgIGlmIChtX3Rlcm1pbmF0b3IpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBVVRPUExVU1BMVVM7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFBMVVNQTFVTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbmV4dDEg
PT0gJz0nKSB7CisgICAgICAgICAgICAgICAgc2hpZnQyKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFBMVVNFUVVBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNoaWZ0MSgpOworICAg
ICAgICAgICAgcmV0dXJuICcrJzsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBpZiAo
bV9uZXh0MSA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV90ZXJtaW5hdG9yKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVVUT01J
TlVTTUlOVVM7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1JTlVTTUlOVVM7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobV9uZXh0MSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICBz
aGlmdDIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTUlOVVNFUVVBTDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHNoaWZ0MSgpOworICAgICAgICAgICAgcmV0dXJuICctJzsKKyAgICAg
ICAgY2FzZSAnKic6CisgICAgICAgICAgICBpZiAobV9uZXh0MSA9PSAnPScpIHsKKyAgICAgICAg
ICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTVVMVEVRVUFMOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICByZXR1cm4gJyon
OworICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgIGlmIChtX25leHQxID09ICc9Jykgewor
ICAgICAgICAgICAgICAgIHNoaWZ0MigpOworICAgICAgICAgICAgICAgIHJldHVybiBESVZFUVVB
TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNoaWZ0MSgpOworICAgICAgICAgICAgcmV0
dXJuICcvJzsKKyAgICAgICAgY2FzZSAnJic6CisgICAgICAgICAgICBpZiAobV9uZXh0MSA9PSAn
JicpIHsKKyAgICAgICAgICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
QU5EOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbmV4dDEgPT0gJz0nKSB7Cisg
ICAgICAgICAgICAgICAgc2hpZnQyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFOREVRVUFM
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICByZXR1
cm4gJyYnOworICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIGlmIChtX25leHQxID09ICc9
JykgeworICAgICAgICAgICAgICAgIHNoaWZ0MigpOworICAgICAgICAgICAgICAgIHJldHVybiBY
T1JFUVVBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNoaWZ0MSgpOworICAgICAgICAg
ICAgcmV0dXJuICdeJzsKKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBpZiAobV9uZXh0
MSA9PSAnPScpIHsKKyAgICAgICAgICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTU9ERVFVQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAg
ICAgICAgICAgIHJldHVybiAnJSc7CisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgaWYg
KG1fbmV4dDEgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgc2hpZnQyKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE9SRVFVQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9u
ZXh0MSA9PSAnfCcpIHsKKyAgICAgICAgICAgICAgICBzaGlmdDIoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gT1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAgICAg
ICAgICAgIHJldHVybiAnfCc7CisgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgc2hpZnQx
KCk7CisgICAgICAgICAgICByZXR1cm4gJywnOworICAgICAgICBjYXNlICd+JzoKKyAgICAgICAg
ICAgIHNoaWZ0MSgpOworICAgICAgICAgICAgcmV0dXJuICd+JzsKKyAgICAgICAgY2FzZSAnPyc6
CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAgICAgICAgICAgIHJldHVybiAnPyc7CisgICAgICAg
IGNhc2UgJzonOgorICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICByZXR1cm4gJzon
OworICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgIHNoaWZ0MSgpOworICAgICAgICAgICAg
cmV0dXJuICcuJzsKKyAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAg
ICAgICAgICAgIHJldHVybiAnKCc7CisgICAgICAgIGNhc2UgJyknOgorICAgICAgICAgICAgc2hp
ZnQxKCk7CisgICAgICAgICAgICByZXR1cm4gJyknOworICAgICAgICBjYXNlICdbJzoKKyAgICAg
ICAgICAgIHNoaWZ0MSgpOworICAgICAgICAgICAgcmV0dXJuICdbJzsKKyAgICAgICAgY2FzZSAn
XSc6CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAgICAgICAgICAgIHJldHVybiAnXSc7CisgICAg
ICAgIGNhc2UgJzsnOgorICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICByZXR1cm4g
JzsnOworICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgIGNoYXJQb3MgPSBjdXJyZW50T2Zm
c2V0KCk7CisgICAgICAgICAgICBzaGlmdDEoKTsKKyAgICAgICAgICAgIHJldHVybiBPUEVOQlJB
Q0U7CisgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAgICAgY2hhclBvcyA9IGN1cnJlbnRPZmZz
ZXQoKTsKKyAgICAgICAgICAgIHNoaWZ0MSgpOworICAgICAgICAgICAgcmV0dXJuIENMT1NFQlJB
Q0U7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgTGV4
ZXI6OmlzTGluZVRlcm1pbmF0b3IoKQoreworICAgIGJvb2wgY3IgPSBtX2N1cnJlbnQgPT0gJ1xy
JzsKKyAgICBib29sIGxmID0gbV9jdXJyZW50ID09ICdcbic7CisgICAgbV9za2lwTGluZUVuZCB8
PSAoY3IgPDwgU2tpcExGU2hpZnQpIHwgKGxmIDw8IFNraXBDUlNoaWZ0KTsKKyAgICByZXR1cm4g
Y3IgfCBsZiB8ICgobV9jdXJyZW50ICYgfjEpID09IDB4MjAyOCk7Cit9CisKK2lubGluZSBib29s
IExleGVyOjpsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xhc3RUb2tlbiA9PSBDT05USU5VRSB8fCBtX2xhc3RUb2tlbiA9PSBCUkVBSyB8fCBtX2xhc3RU
b2tlbiA9PSBSRVRVUk4gfHwgbV9sYXN0VG9rZW4gPT0gVEhST1c7Cit9CisKK2Jvb2wgTGV4ZXI6
OmlzSWRlbnRTdGFydChpbnQgYykKK3sKKyAgICByZXR1cm4gaXNBU0NJSShjKQorICAgICAgICA/
IGlzQVNDSUlBbHBoYShjKSB8fCBjID09ICckJyB8fCBjID09ICdfJworICAgICAgICA6IGNhdGVn
b3J5KGMpICYgKExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwgTGV0dGVyX1Rp
dGxlY2FzZSB8IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcik7Cit9CisKK2Jvb2wgTGV4
ZXI6OmlzSWRlbnRQYXJ0KGludCBjKQoreworICAgIHJldHVybiBpc0FTQ0lJKGMpCisgICAgICAg
ID8gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICckJyB8fCBjID09ICdfJworICAgICAg
ICA6IGNhdGVnb3J5KGMpICYgKExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwg
TGV0dGVyX1RpdGxlY2FzZSB8IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcgorICAgICAg
ICAgICAgfCBNYXJrX05vblNwYWNpbmcgfCBNYXJrX1NwYWNpbmdDb21iaW5pbmcgfCBOdW1iZXJf
RGVjaW1hbERpZ2l0IHwgUHVuY3R1YXRpb25fQ29ubmVjdG9yKTsKK30KKwordW5zaWduZWQgc2hv
cnQgTGV4ZXI6OnNpbmdsZUVzY2FwZSh1bnNpZ25lZCBzaG9ydCBjKQoreworICAgIHN3aXRjaCAo
YykgeworICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgIHJldHVybiAweDA4OworICAgICAg
ICBjYXNlICd0JzoKKyAgICAgICAgICAgIHJldHVybiAweDA5OworICAgICAgICBjYXNlICduJzoK
KyAgICAgICAgICAgIHJldHVybiAweDBBOworICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAg
IHJldHVybiAweDBCOworICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIHJldHVybiAweDBD
OworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIHJldHVybiAweDBEOworICAgICAgICBj
YXNlICciJzoKKyAgICAgICAgICAgIHJldHVybiAweDIyOworICAgICAgICBjYXNlICdcJyc6Cisg
ICAgICAgICAgICByZXR1cm4gMHgyNzsKKyAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAg
cmV0dXJuIDB4NUM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gYzsKKyAg
ICB9Cit9CisKK3Vuc2lnbmVkIHNob3J0IExleGVyOjpjb252ZXJ0T2N0YWwoaW50IGMxLCBpbnQg
YzIsIGludCBjMykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChj
MSAtICcwJykgKiA2NCArIChjMiAtICcwJykgKiA4ICsgYzMgLSAnMCcpOworfQorCitpbmxpbmUg
dW5zaWduZWQgY2hhciBMZXhlcjo6Y29udmVydEhleChpbnQgYzEsIGludCBjMikKK3sKKyAgICBy
ZXR1cm4gKHRvQVNDSUlIZXhWYWx1ZShjMSkgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoYzIpOwor
fQorCitVQ2hhciBMZXhlcjo6Y29udmVydFVuaWNvZGUoaW50IGMxLCBpbnQgYzIsIGludCBjMywg
aW50IGM0KQoreworICAgIHVuc2lnbmVkIGNoYXIgaGlnaEJ5dGUgPSAodG9BU0NJSUhleFZhbHVl
KGMxKSA8PCA0KSB8IHRvQVNDSUlIZXhWYWx1ZShjMik7CisgICAgdW5zaWduZWQgY2hhciBsb3dC
eXRlID0gKHRvQVNDSUlIZXhWYWx1ZShjMykgPDwgNCkgfCB0b0FTQ0lJSGV4VmFsdWUoYzQpOwor
ICAgIHJldHVybiAoaGlnaEJ5dGUgPDwgOCkgfCBsb3dCeXRlOworfQorCitpbmxpbmUgdm9pZCBM
ZXhlcjo6cmVjb3JkOChpbnQgYykKK3sKKyAgICBBU1NFUlQoYyA+PSAwKTsKKyAgICBBU1NFUlQo
YyA8PSAweEZGKTsKKyAgICBtX2J1ZmZlcjguYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsK
K30KKworaW5saW5lIHZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQoreworICAgIEFTU0VSVChj
ID49IDApOworICAgIEFTU0VSVChjIDw9IFVTSFJUX01BWCk7CisgICAgcmVjb3JkMTYoVUNoYXIo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGMpKSk7Cit9CisKK2lubGluZSB2b2lkIExleGVy
OjpyZWNvcmQxNihVQ2hhciBjKQoreworICAgIG1fYnVmZmVyMTYuYXBwZW5kKGMpOworfQorCiBp
bnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiB7CiAgICAgWVlTVFlQRSogbHZhbHAg
PSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4ocDEpOwogICAgIFlZTFRZUEUqIGxsb2NwID0gc3RhdGlj
X2Nhc3Q8WVlMVFlQRSo+KHAyKTsKICAgICBpbnQgdG9rZW4gPSAwOwogICAgIG1fc3RhdGUgPSBT
dGFydDsKLSAgICB1bnNpZ25lZCBzaG9ydCBzdHJpbmdUeXBlID0gMDsgLy8gZWl0aGVyIHNpbmds
ZSBvciBkb3VibGUgcXVvdGVzCisgICAgaW50IHN0cmluZ1R5cGUgPSAwOyAvLyBlaXRoZXIgc2lu
Z2xlIG9yIGRvdWJsZSBxdW90ZXMKICAgICBtX2J1ZmZlcjgucmVzaXplKDApOwogICAgIG1fYnVm
ZmVyMTYucmVzaXplKDApOwogICAgIG1fZG9uZSA9IGZhbHNlOwogICAgIG1fdGVybWluYXRvciA9
IGZhbHNlOwotICAgIG1fc2tpcExGID0gZmFsc2U7Ci0gICAgbV9za2lwQ1IgPSBmYWxzZTsKKyAg
ICBtX3NraXBMaW5lRW5kID0gMDsKKworICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRPZmZz
ZXQoKTsKIAotICAgIC8vIGRpZCB3ZSBwdXNoIGEgdG9rZW4gb24gdGhlIHN0YWNrIHByZXZpb3Vz
bHkgPwotICAgIC8vIChhZnRlciBhbiBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbikKLSAg
ICBpZiAobV9zdGFja1Rva2VuID49IDApIHsKLSAgICAgICAgc2V0RG9uZShPdGhlcik7Ci0gICAg
ICAgIHRva2VuID0gbV9zdGFja1Rva2VuOwotICAgICAgICBtX3N0YWNrVG9rZW4gPSAwOwotICAg
IH0KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgaWYgKCFtX2Rv
bmUpIHsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBpZiAobV9za2lwTEYgJiYgbV9jdXJy
ZW50ICE9ICdcbicpIC8vIGZvdW5kIFxyIGJ1dCBub3QgXG4gYWZ0ZXJ3YXJkcwotICAgICAgICAg
ICAgbV9za2lwTEYgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fc2tpcENSICYmIG1fY3VycmVudCAh
PSAnXHInKSAvLyBmb3VuZCBcbiBidXQgbm90IFxyIGFmdGVyd2FyZHMKLSAgICAgICAgICAgIG1f
c2tpcENSID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX3NraXBMRiB8fCBtX3NraXBDUikgeyAvLyBm
b3VuZCBcclxuIG9yIFxuXHIgLT4gZWF0IHRoZSBzZWNvbmQgb25lCi0gICAgICAgICAgICBtX3Nr
aXBMRiA9IGZhbHNlOwotICAgICAgICAgICAgbV9za2lwQ1IgPSBmYWxzZTsKLSAgICAgICAgICAg
IHNoaWZ0KDEpOworICAgICAgICBpZiAobV9za2lwTGluZUVuZCkgeworICAgICAgICAgICAgaWYg
KG1fY3VycmVudCAhPSAnXG4nKSAvLyBmb3VuZCBcciBidXQgbm90IFxuIGFmdGVyd2FyZHMKKyAg
ICAgICAgICAgICAgICBtX3NraXBMaW5lRW5kICY9IH5Ta2lwTEY7CisgICAgICAgICAgICBpZiAo
bV9jdXJyZW50ICE9ICdccicpIC8vIGZvdW5kIFxuIGJ1dCBub3QgXHIgYWZ0ZXJ3YXJkcworICAg
ICAgICAgICAgICAgIG1fc2tpcExpbmVFbmQgJj0gflNraXBDUjsKKyAgICAgICAgICAgIGlmICht
X3NraXBMaW5lRW5kKSB7IC8vIGZvdW5kIFxyXG4gb3IgXG5cciAtPiBlYXQgdGhlIHNlY29uZCBv
bmUKKyAgICAgICAgICAgICAgICBtX3NraXBMaW5lRW5kID0gMDsKKyAgICAgICAgICAgICAgICBz
aGlmdDEoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKICAgICAgICAgICAgIGNhc2UgU3RhcnQ6Ci0gICAgICAgICAgICAgICAgc3RhcnRPZmZz
ZXQgPSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVTcGFjZSgp
KSB7CisgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzV2hpdGVTcGFjZShtX2N1cnJlbnQpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIGRvIG5vdGhpbmcKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVu
dCA9PSAnLycgJiYgbV9uZXh0MSA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hpZnQo
MSk7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0MSgpOwogICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KG1fY3VycmVudCA9PSAnLycgJiYgbV9uZXh0MSA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2hpZnQoMSk7CisgICAgICAgICAgICAgICAgICAgIHNoaWZ0MSgpOwogICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OwogICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9jdXJyZW50ID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV90
ZXJtaW5hdG9yICYmICFtX2RlbGltaXRlZCAmJiAhbV9pc1JlcGFyc2luZykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24gaWYgcHJvZ3Jh
bSBpbmNvbXBsZXRlCiAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICc7JzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhY2tUb2tlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXREb25lKE90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXREb25lKEVvZik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChpc0xpbmVUZXJtaW5hdG9yKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUoKTsK
ICAgICAgICAgICAgICAgICAgICAgbV90ZXJtaW5hdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fcmVzdHJLZXl3b3JkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0
VG9rZW5XYXNSZXN0cktleXdvcmQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4g
PSAnOyc7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXREb25lKE90aGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICci
JyB8fCBtX2N1cnJlbnQgPT0gJ1wnJykgewogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
SW5TdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmluZ1R5cGUgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4obV9jdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nVHlw
ZSA9IG1fY3VycmVudDsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSWRlbnRTdGFydCht
X2N1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KG1fY3VycmVudCk7CiAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJbklkZW50aWZpZXJPcktleXdvcmQ7CkBAIC0y
MTgsMzEgKzU0MCwzMSBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50ID09ICcwJykgewogICAgICAgICAgICAgICAg
ICAgICByZWNvcmQ4KG1fY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJ
bk51bTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0RlY2ltYWxEaWdpdChtX2N1cnJl
bnQpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FTQ0lJRGlnaXQobV9jdXJyZW50
KSkgewogICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KG1fY3VycmVudCk7CiAgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBJbk51bTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
Y3VycmVudCA9PSAnLicgJiYgaXNEZWNpbWFsRGlnaXQobV9uZXh0MSkpIHsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnLicgJiYgaXNBU0NJSURpZ2l0KG1fbmV4dDEp
KSB7CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDgobV9jdXJyZW50KTsKICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IEluRGVjaW1hbDsKICAgICAgICAgICAgICAgICAgICAgLy8gPCEt
LSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBjb21tZW50IChmb3Igd3d3IHVzYWdlKQog
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICc8JyAmJiBtX25leHQxID09
ICchJyAmJiBtX25leHQyID09ICctJyAmJiBtX25leHQzID09ICctJykgewotICAgICAgICAgICAg
ICAgICAgICBzaGlmdCgzKTsKKyAgICAgICAgICAgICAgICAgICAgc2hpZnQzKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OwogICAgICAgICAgICAg
ICAgICAgICAvLyBzYW1lIGZvciAtLT4KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fYXRM
aW5lU3RhcnQgJiYgbV9jdXJyZW50ID09ICctJyAmJiBtX25leHQxID09ICctJyAmJiAgbV9uZXh0
MiA9PSAnPicpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hpZnQoMik7CisgICAgICAgICAgICAg
ICAgICAgIHNoaWZ0MigpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSW5TaW5nbGVM
aW5lQ29tbWVudDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICB0b2tlbiA9IG1hdGNoUHVuY3R1YXRvcihsdmFscC0+aW50VmFsdWUsIG1fY3VycmVudCwgbV9u
ZXh0MSwgbV9uZXh0MiwgbV9uZXh0Myk7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbWF0
Y2hQdW5jdHVhdG9yKGx2YWxwLT5pbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0
b2tlbiAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNldERvbmUoT3RoZXIpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXREb25lKEJh
ZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGdvdG8gc3RpbGxBdExpbmVTdGFydDsKICAgICAgICAgICAgIGNhc2UgSW5TdHJpbmc6
CiAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudCA9PSBzdHJpbmdUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAgICAgICAgICBzaGlmdDEoKTsKICAg
ICAgICAgICAgICAgICAgICAgc2V0RG9uZShTdHJpbmcpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXNMaW5lVGVybWluYXRvcigpIHx8IG1fY3VycmVudCA9PSAtMSkKICAgICAgICAgICAg
ICAgICAgICAgc2V0RG9uZShCYWQpOwpAQCAtMjUzLDE3ICs1NzUsMTcgQEAgaW50IExleGVyOjps
ZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgLy8gRXNjYXBlIFNlcXVlbmNlcyBpbnNpZGUgb2Ygc3RyaW5ncwogICAgICAgICAgICAgY2Fz
ZSBJbkVzY2FwZVNlcXVlbmNlOgotICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQobV9j
dXJyZW50KSkgeworICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJT2N0YWxEaWdpdChtX2N1cnJl
bnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPj0gJzAnICYmIG1fY3Vy
cmVudCA8PSAnMycgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChtX25l
eHQxKSAmJiBpc09jdGFsRGlnaXQobV9uZXh0MikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzQVNDSUlPY3RhbERpZ2l0KG1fbmV4dDEpICYmIGlzQVNDSUlPY3RhbERpZ2l0KG1fbmV4dDIp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihjb252ZXJ0T2N0YWwobV9jdXJy
ZW50LCBtX25leHQxLCBtX25leHQyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCgy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0MigpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEluU3RyaW5nOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGlzT2N0YWxEaWdpdChtX2N1cnJlbnQpICYmIGlzT2N0YWxEaWdpdChtX25leHQxKSkgeworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlPY3RhbERpZ2l0KG1fY3VycmVudCkg
JiYgaXNBU0NJSU9jdGFsRGlnaXQobV9uZXh0MSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY29yZDE2KGNvbnZlcnRPY3RhbCgnMCcsIG1fY3VycmVudCwgbV9uZXh0MSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc2hpZnQoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGlm
dDEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJblN0cmluZzsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc09jdGFsRGlnaXQobV9jdXJyZW50KSkgeworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQVNDSUlPY3RhbERpZ2l0KG1fY3VycmVudCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRPY3RhbCgnMCcsICcw
JywgbV9jdXJyZW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSW5TdHJp
bmc7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtMjgxLDEzICs2MDMsMTMgQEAgaW50
IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSW5IZXhFc2NhcGU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzSGV4RGlnaXQobV9jdXJyZW50KSAmJiBpc0hleERpZ2l0KG1fbmV4dDEp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlIZXhEaWdpdChtX2N1cnJlbnQpICYmIGlz
QVNDSUlIZXhEaWdpdChtX25leHQxKSkgewogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
SW5TdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KGNvbnZlcnRIZXgobV9jdXJy
ZW50LCBtX25leHQxKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAg
ICAgICAgICAgICBzaGlmdDEoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVu
dCA9PSBzdHJpbmdUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KCd4Jyk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAgICAgICAgICBzaGlmdDEo
KTsKICAgICAgICAgICAgICAgICAgICAgc2V0RG9uZShTdHJpbmcpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KCd4Jyk7CkBAIC0yOTYsMTMg
KzYxOCwxMyBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJblVuaWNv
ZGVFc2NhcGU6Ci0gICAgICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQobV9jdXJyZW50KSAmJiBp
c0hleERpZ2l0KG1fbmV4dDEpICYmIGlzSGV4RGlnaXQobV9uZXh0MikgJiYgaXNIZXhEaWdpdCht
X25leHQzKSkgeworICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJSGV4RGlnaXQobV9jdXJyZW50
KSAmJiBpc0FTQ0lJSGV4RGlnaXQobV9uZXh0MSkgJiYgaXNBU0NJSUhleERpZ2l0KG1fbmV4dDIp
ICYmIGlzQVNDSUlIZXhEaWdpdChtX25leHQzKSkgewogICAgICAgICAgICAgICAgICAgICByZWNv
cmQxNihjb252ZXJ0VW5pY29kZShtX2N1cnJlbnQsIG1fbmV4dDEsIG1fbmV4dDIsIG1fbmV4dDMp
KTsKLSAgICAgICAgICAgICAgICAgICAgc2hpZnQoMyk7CisgICAgICAgICAgICAgICAgICAgIHNo
aWZ0MygpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSW5TdHJpbmc7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gc3RyaW5nVHlwZSkgewogICAgICAgICAg
ICAgICAgICAgICByZWNvcmQxNigndScpOwotICAgICAgICAgICAgICAgICAgICBzaGlmdCgxKTsK
KyAgICAgICAgICAgICAgICAgICAgc2hpZnQxKCk7CiAgICAgICAgICAgICAgICAgICAgIHNldERv
bmUoU3RyaW5nKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
c2V0RG9uZShCYWQpOwpAQCAtMzExLDMyICs2MzMsNDYgQEAgaW50IExleGVyOjpsZXgodm9pZCog
cDEsIHZvaWQqIHAyKQogICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUoKTsKICAgICAgICAgICAgICAgICAgICAgbV90
ZXJtaW5hdG9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcmVzdHJLZXl3b3Jk
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0VG9rZW5XYXNSZXN0cktleXdvcmQoKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSAnOyc7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXREb25lKE90aGVyKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhcnQ7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChtX2N1cnJlbnQgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgIHNldERvbmUoRW9m
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIHN0aWxsQXRM
aW5lU3RhcnQ7CiAgICAgICAgICAgICBjYXNlIEluTXVsdGlMaW5lQ29tbWVudDoKLSAgICAgICAg
ICAgICAgICBpZiAobV9jdXJyZW50ID09IC0xKQotICAgICAgICAgICAgICAgICAgICBzZXREb25l
KEJhZCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcigpKQorICAg
ICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKCkpCiAgICAgICAgICAgICAgICAgICAg
IG5leHRMaW5lKCk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50ID09ICcqJyAm
JiBtX25leHQxID09ICcvJykgewogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gU3RhcnQ7
Ci0gICAgICAgICAgICAgICAgICAgIHNoaWZ0KDEpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1
cnJlbnQgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHNldERvbmUoQmFkKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSW5JZGVudGlmaWVyT3JLZXl3b3JkOgor
ICAgICAgICAgICAgICAgIGlmIChpc0lkZW50UGFydChtX2N1cnJlbnQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlY29yZDE2KG1fY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxl
IChpc0lkZW50UGFydChtX25leHQxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQx
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQxNihtX2N1cnJlbnQpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0g
J1xcJykKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEluSWRlbnRpZmllclBhcnRVbmlj
b2RlRXNjYXBlU3RhcnQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzZXREb25lKElkZW50aWZpZXJPcktleXdvcmQpOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBJbklkZW50aWZpZXI6Ci0gICAgICAgICAgICAgICAgaWYgKGlzSWRl
bnRQYXJ0KG1fY3VycmVudCkpCisgICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRQYXJ0KG1fY3Vy
cmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkMTYobV9jdXJyZW50KTsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJ1xcJykKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fbmV4dDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzaGlmdDEoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDE2KG1fY3VycmVudCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3Vy
cmVudCA9PSAnXFwnKQogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSW5JZGVudGlmaWVy
UGFydFVuaWNvZGVFc2NhcGVTdGFydDsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHNldERvbmUobV9zdGF0ZSA9PSBJbklkZW50aWZpZXJPcktleXdvcmQgPyBJZGVu
dGlmaWVyT3JLZXl3b3JkIDogSWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgICAgIHNldERv
bmUoSWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEluTnVtMDoKICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09ICd4JyB8fCBtX2N1cnJl
bnQgPT0gJ1gnKSB7CkBAIC0zNDgsMzQgKzY4NCw0NiBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBw
MSwgdm9pZCogcDIpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJ2Un
IHx8IG1fY3VycmVudCA9PSAnRScpIHsKICAgICAgICAgICAgICAgICAgICAgcmVjb3JkOChtX2N1
cnJlbnQpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gSW5FeHBvbmVudEluZGljYXRv
cjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2N0YWxEaWdpdChtX2N1cnJlbnQpKSB7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FTQ0lJT2N0YWxEaWdpdChtX2N1cnJlbnQp
KSB7CiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDgobV9jdXJyZW50KTsKICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IEluT2N0YWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
c0RlY2ltYWxEaWdpdChtX2N1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
c0FTQ0lJRGlnaXQobV9jdXJyZW50KSkgewogICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KG1f
Y3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJbkRlY2ltYWw7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldERvbmUoTnVtYmVyKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSW5IZXg6Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzSGV4RGlnaXQobV9jdXJyZW50KSkKKyAgICAgICAgICAgICAgICBpZiAo
aXNBU0NJSUhleERpZ2l0KG1fY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVjb3Jk
OChtX2N1cnJlbnQpOwotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGlzQVNDSUlIZXhEaWdpdChtX25leHQxKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2hpZnQxKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KG1fY3VycmVudCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgc2V0RG9uZShIZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBJbk9jdGFsOgotICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQobV9j
dXJyZW50KSkKKyAgICAgICAgICAgICAgICBpZiAoaXNBU0NJSU9jdGFsRGlnaXQobV9jdXJyZW50
KSkgewogICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KG1fY3VycmVudCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaXNEZWNpbWFsRGlnaXQobV9jdXJyZW50KSkgeworICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoaXNBU0NJSU9jdGFsRGlnaXQobV9uZXh0MSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNoaWZ0MSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkOCht
X2N1cnJlbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpc0FTQ0lJRGlnaXQobV9jdXJyZW50KSkgewogICAgICAgICAgICAgICAgICAgICByZWNv
cmQ4KG1fY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJbkRlY2ltYWw7
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldERvbmUoT2N0
YWwpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJbk51bToKLSAg
ICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQobV9jdXJyZW50KSkKKyAgICAgICAgICAg
ICAgICBpZiAoaXNBU0NJSURpZ2l0KG1fY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAg
cmVjb3JkOChtX2N1cnJlbnQpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fY3VycmVudCA9
PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlzQVNDSUlEaWdpdChtX25leHQx
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQxKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZWNvcmQ4KG1fY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnLicpIHsKICAgICAgICAgICAgICAg
ICAgICAgcmVjb3JkOChtX2N1cnJlbnQpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
SW5EZWNpbWFsOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICdlJyB8
fCBtX2N1cnJlbnQgPT0gJ0UnKSB7CkBAIC0zODUsOSArNzMzLDEzIEBAIGludCBMZXhlcjo6bGV4
KHZvaWQqIHAxLCB2b2lkKiBwMikKICAgICAgICAgICAgICAgICAgICAgc2V0RG9uZShOdW1iZXIp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJbkRlY2ltYWw6Ci0g
ICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KG1fY3VycmVudCkpCisgICAgICAgICAg
ICAgICAgaWYgKGlzQVNDSUlEaWdpdChtX2N1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHJlY29yZDgobV9jdXJyZW50KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnQg
PT0gJ2UnIHx8IG1fY3VycmVudCA9PSAnRScpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGlzQVNDSUlEaWdpdChtX25leHQxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQx
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KG1fY3VycmVudCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAn
ZScgfHwgbV9jdXJyZW50ID09ICdFJykgewogICAgICAgICAgICAgICAgICAgICByZWNvcmQ4KG1f
Y3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBJbkV4cG9uZW50SW5kaWNh
dG9yOwogICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtMzk2LDE0ICs3NDgsMTQgQEAgaW50IExl
eGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICAgICAgY2FzZSBJbkV4cG9uZW50
SW5kaWNhdG9yOgogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJysnIHx8IG1fY3Vy
cmVudCA9PSAnLScpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZDgobV9jdXJyZW50KTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpc0RlY2ltYWxEaWdpdChtX2N1cnJlbnQpKSB7CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaXNBU0NJSURpZ2l0KG1fY3VycmVudCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgcmVjb3JkOChtX2N1cnJlbnQpOwogICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gSW5FeHBvbmVudDsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgc2V0RG9uZShCYWQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBJbkV4cG9uZW50OgotICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChtX2N1
cnJlbnQpKQorICAgICAgICAgICAgICAgIGlmIChpc0FTQ0lJRGlnaXQobV9jdXJyZW50KSkKICAg
ICAgICAgICAgICAgICAgICAgcmVjb3JkOChtX2N1cnJlbnQpOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgc2V0RG9uZShOdW1iZXIpOwpAQCAtNDIxLDEyICs3NzMs
MTIgQEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICAgICAgICAg
ICAgICBzZXREb25lKEJhZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIEluSWRlbnRpZmllclN0YXJ0VW5pY29kZUVzY2FwZToKLSAgICAgICAgICAgICAgICBpZiAo
IWlzSGV4RGlnaXQobV9jdXJyZW50KSB8fCAhaXNIZXhEaWdpdChtX25leHQxKSB8fCAhaXNIZXhE
aWdpdChtX25leHQyKSB8fCAhaXNIZXhEaWdpdChtX25leHQzKSkgeworICAgICAgICAgICAgICAg
IGlmICghaXNBU0NJSUhleERpZ2l0KG1fY3VycmVudCkgfHwgIWlzQVNDSUlIZXhEaWdpdChtX25l
eHQxKSB8fCAhaXNBU0NJSUhleERpZ2l0KG1fbmV4dDIpIHx8ICFpc0FTQ0lJSGV4RGlnaXQobV9u
ZXh0MykpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0RG9uZShCYWQpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdG9rZW4g
PSBjb252ZXJ0VW5pY29kZShtX2N1cnJlbnQsIG1fbmV4dDEsIG1fbmV4dDIsIG1fbmV4dDMpOwot
ICAgICAgICAgICAgICAgIHNoaWZ0KDMpOworICAgICAgICAgICAgICAgIHNoaWZ0MygpOwogICAg
ICAgICAgICAgICAgIGlmICghaXNJZGVudFN0YXJ0KHRva2VuKSkgewogICAgICAgICAgICAgICAg
ICAgICBzZXREb25lKEJhZCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDM1LDEy
ICs3ODcsMTIgQEAgaW50IExleGVyOjpsZXgodm9pZCogcDEsIHZvaWQqIHAyKQogICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBJbklkZW50aWZpZXI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEluSWRlbnRpZmllclBhcnRVbmljb2RlRXNjYXBlOgotICAgICAgICAg
ICAgICAgIGlmICghaXNIZXhEaWdpdChtX2N1cnJlbnQpIHx8ICFpc0hleERpZ2l0KG1fbmV4dDEp
IHx8ICFpc0hleERpZ2l0KG1fbmV4dDIpIHx8ICFpc0hleERpZ2l0KG1fbmV4dDMpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobV9jdXJyZW50KSB8fCAhaXNBU0NJSUhl
eERpZ2l0KG1fbmV4dDEpIHx8ICFpc0FTQ0lJSGV4RGlnaXQobV9uZXh0MikgfHwgIWlzQVNDSUlI
ZXhEaWdpdChtX25leHQzKSkgewogICAgICAgICAgICAgICAgICAgICBzZXREb25lKEJhZCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB0b2tlbiA9IGNvbnZlcnRVbmljb2RlKG1fY3VycmVudCwgbV9uZXh0MSwgbV9uZXh0Miwg
bV9uZXh0Myk7Ci0gICAgICAgICAgICAgICAgc2hpZnQoMyk7CisgICAgICAgICAgICAgICAgc2hp
ZnQzKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50UGFydCh0b2tlbikpIHsKICAgICAg
ICAgICAgICAgICAgICAgc2V0RG9uZShCYWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTQ0OSwxMDQgKzgwMSw3NiBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIp
CiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEluSWRlbnRpZmllcjsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEi
VW5oYW5kbGVkIHN0YXRlIGluIHN3aXRjaCBzdGF0ZW1lbnQiKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX3N0YXRlICE9
IFN0YXJ0ICYmIG1fc3RhdGUgIT0gSW5TaW5nbGVMaW5lQ29tbWVudCkKLSAgICAgICAgICAgIG1f
YXRMaW5lU3RhcnQgPSBmYWxzZTsKKyAgICAgICAgbV9hdExpbmVTdGFydCA9IGZhbHNlOworCitz
dGlsbEF0TGluZVN0YXJ0OgogICAgICAgICBpZiAobV9kb25lKQogICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHNoaWZ0MSgpOwogICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBubyBpZGVudGlmaWVycyBhbGxvd2VkIGRpcmVjdGx5IGFmdGVyIG51bWVyaWMgbGl0
ZXJhbCwgZS5nLiAiM2luIiBpcyBiYWQKLSAgICBpZiAoKG1fc3RhdGUgPT0gTnVtYmVyIHx8IG1f
c3RhdGUgPT0gT2N0YWwgfHwgbV9zdGF0ZSA9PSBIZXgpICYmIGlzSWRlbnRTdGFydChtX2N1cnJl
bnQpKQotICAgICAgICBtX3N0YXRlID0gQmFkOwogCi0gICAgLy8gdGVybWluYXRlIHN0cmluZwot
ICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7CisgICAgaWYgKG1fc3RhdGUgPT0gTnVtYmVyIHx8
IG1fc3RhdGUgPT0gT2N0YWwgfHwgbV9zdGF0ZSA9PSBIZXgpIHsKKyAgICAgICAgLy8gTm8gaWRl
bnRpZmllcnMgYWxsb3dlZCBkaXJlY3RseSBhZnRlciBudW1lcmljIGxpdGVyYWwsIGUuZy4gIjNp
biIgaXMgYmFkLgorICAgICAgICBpZiAoaXNJZGVudFN0YXJ0KG1fY3VycmVudCkpCisgICAgICAg
ICAgICBtX3N0YXRlID0gQmFkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIHRlcm1p
bmF0ZSBzdHJpbmcKKyAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7CisKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlID09IE51bWJlcikKKyAgICAgICAgICAgICAgICBsdmFscC0+ZG91
YmxlVmFsdWUgPSBXVEY6OnN0cnRvZChtX2J1ZmZlcjguZGF0YSgpLCAwTCk7CisgICAgICAgICAg
ICBlbHNlIGlmIChtX3N0YXRlID09IEhleCkgeyAvLyBzY2FuIGhleCBudW1iZXJzCisgICAgICAg
ICAgICAgICAgZG91YmxlIGR2YWwgPSAwOworCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
cCA9IG1fYnVmZmVyOC5kYXRhKCkgKyAyOworICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyIGMg
PSAqcCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGR2YWwgKj0gMTY7CisgICAgICAgICAgICAg
ICAgICAgIGR2YWwgKz0gdG9BU0NJSUhleFZhbHVlKGMpOworICAgICAgICAgICAgICAgIH0KIAot
I2lmZGVmIEpTQ19ERUJVR19MRVgKLSAgICBmcHJpbnRmKHN0ZGVyciwgImxpbmU6ICVkICIsIGxp
bmVObygpKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgInl5dGV4dCAoJXgpOiAiLCBtX2J1ZmZlcjhb
MF0pOwotICAgIGZwcmludGYoc3RkZXJyLCAiJXMgIiwgbV9idWZmZXI4LmRhdGEoKSk7Ci0jZW5k
aWYKKyAgICAgICAgICAgICAgICBpZiAoZHZhbCA+PSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3Vu
ZCkKKyAgICAgICAgICAgICAgICAgICAgZHZhbCA9IHBhcnNlSW50T3ZlcmZsb3cobV9idWZmZXI4
LmRhdGEoKSArIDIsIHAgLSAobV9idWZmZXI4LmRhdGEoKSArIDMpLCAxNik7CiAKLSAgICBkb3Vi
bGUgZHZhbCA9IDA7Ci0gICAgaWYgKG1fc3RhdGUgPT0gTnVtYmVyKQotICAgICAgICBkdmFsID0g
V1RGOjpzdHJ0b2QobV9idWZmZXI4LmRhdGEoKSwgMEwpOwotICAgIGVsc2UgaWYgKG1fc3RhdGUg
PT0gSGV4KSB7IC8vIHNjYW4gaGV4IG51bWJlcnMKLSAgICAgICAgY29uc3QgY2hhciogcCA9IG1f
YnVmZmVyOC5kYXRhKCkgKyAyOwotICAgICAgICB3aGlsZSAoY2hhciBjID0gKnArKykgewotICAg
ICAgICAgICAgZHZhbCAqPSAxNjsKLSAgICAgICAgICAgIGR2YWwgKz0gY29udmVydEhleChjKTsK
LSAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBOdW1iZXI7CisgICAgICAgICAg
ICAgICAgbHZhbHAtPmRvdWJsZVZhbHVlID0gZHZhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAg
Ly8gc2NhbiBvY3RhbCBudW1iZXIKKyAgICAgICAgICAgICAgICBkb3VibGUgZHZhbCA9IDA7CisK
KyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwID0gbV9idWZmZXI4LmRhdGEoKSArIDE7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKGNoYXIgYyA9ICpwKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgZHZhbCAqPSA4OworICAgICAgICAgICAgICAgICAgICBkdmFsICs9IGMgLSAnMCc7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgIGlmIChkdmFsID49IG1hbnRpc3NhT3ZlcmZsb3dMb3dl
ckJvdW5kKQotICAgICAgICAgICAgZHZhbCA9IHBhcnNlSW50T3ZlcmZsb3cobV9idWZmZXI4LmRh
dGEoKSArIDIsIHAgLSAobV9idWZmZXI4LmRhdGEoKSArIDMpLCAxNik7CisgICAgICAgICAgICAg
ICAgaWYgKGR2YWwgPj0gbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQpCisgICAgICAgICAgICAg
ICAgICAgIGR2YWwgPSBwYXJzZUludE92ZXJmbG93KG1fYnVmZmVyOC5kYXRhKCkgKyAxLCBwIC0g
KG1fYnVmZmVyOC5kYXRhKCkgKyAyKSwgOCk7CiAKLSAgICAgICAgbV9zdGF0ZSA9IE51bWJlcjsK
LSAgICB9IGVsc2UgaWYgKG1fc3RhdGUgPT0gT2N0YWwpIHsgICAvLyBzY2FuIG9jdGFsIG51bWJl
cgotICAgICAgICBjb25zdCBjaGFyKiBwID0gbV9idWZmZXI4LmRhdGEoKSArIDE7Ci0gICAgICAg
IHdoaWxlIChjaGFyIGMgPSAqcCsrKSB7Ci0gICAgICAgICAgICBkdmFsICo9IDg7Ci0gICAgICAg
ICAgICBkdmFsICs9IGMgLSAnMCc7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IE51bWJlcjsK
KyAgICAgICAgICAgICAgICBsdmFscC0+ZG91YmxlVmFsdWUgPSBkdmFsOworICAgICAgICAgICAg
fQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGR2YWwgPj0gbWFudGlzc2FPdmVyZmxvd0xvd2Vy
Qm91bmQpCi0gICAgICAgICAgICBkdmFsID0gcGFyc2VJbnRPdmVyZmxvdyhtX2J1ZmZlcjguZGF0
YSgpICsgMSwgcCAtIChtX2J1ZmZlcjguZGF0YSgpICsgMiksIDgpOwotCi0gICAgICAgIG1fc3Rh
dGUgPSBOdW1iZXI7CiAgICAgfQogCi0jaWZkZWYgSlNDX0RFQlVHX0xFWAotICAgIHN3aXRjaCAo
bV9zdGF0ZSkgewotICAgICAgICBjYXNlIEVvZjoKLSAgICAgICAgICAgIHByaW50ZigiKEVPRilc
biIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAgICAg
ICBwcmludGYoIihPdGhlcilcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SWRlbnRpZmllcjoKLSAgICAgICAgICAgIHByaW50ZigiKElkZW50aWZpZXIpLyhLZXl3b3JkKVxu
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmc6Ci0gICAgICAgICAg
ICBwcmludGYoIihTdHJpbmcpXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE51bWJlcjoKLSAgICAgICAgICAgIHByaW50ZigiKE51bWJlcilcbiIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIih1bmtub3duKSIp
OwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKG1fc3RhdGUgIT0gSWRlbnRpZmllcikKLSAgICAg
ICAgbV9lYXROZXh0SWRlbnRpZmllciA9IGZhbHNlOwotCi0gICAgbV9yZXN0cktleXdvcmQgPSBm
YWxzZTsKICAgICBtX2RlbGltaXRlZCA9IGZhbHNlOwotICAgIGxsb2NwLT5maXJzdF9saW5lID0g
eXlsaW5lbm87Ci0gICAgbGxvY3AtPmxhc3RfbGluZSA9IHl5bGluZW5vOworCisgICAgaW50IGxp
bmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7CisgICAgbGxvY3AtPmZpcnN0X2xpbmUgPSBsaW5lTnVt
YmVyOworICAgIGxsb2NwLT5sYXN0X2xpbmUgPSBsaW5lTnVtYmVyOwogICAgIGxsb2NwLT5maXJz
dF9jb2x1bW4gPSBzdGFydE9mZnNldDsKLSAgICBsbG9jcC0+bGFzdF9jb2x1bW4gPSBtX2N1cnJl
bnRPZmZzZXQ7CisgICAgbGxvY3AtPmxhc3RfY29sdW1uID0gY3VycmVudE9mZnNldCgpOworCiAg
ICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgRW9mOgogICAgICAgICAgICAgdG9r
ZW4gPSAwOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgT3RoZXI6Ci0gICAgICAg
ICAgICBpZiAodG9rZW4gPT0gJ30nIHx8IHRva2VuID09ICc7JykKLSAgICAgICAgICAgICAgICBt
X2RlbGltaXRlZCA9IHRydWU7CisgICAgICAgICAgICBtX2RlbGltaXRlZCA9ICh0b2tlbiA9PSAn
fScpIHwgKHRva2VuID09ICc7Jyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJ
ZGVudGlmaWVyOgotICAgICAgICAgICAgLy8gQXBwbHkgYW5vbnltb3VzLWZ1bmN0aW9uIGhhY2sg
YmVsb3cgKGVhdCB0aGUgaWRlbnRpZmllcikuCi0gICAgICAgICAgICBpZiAobV9lYXROZXh0SWRl
bnRpZmllcikgewotICAgICAgICAgICAgICAgIG1fZWF0TmV4dElkZW50aWZpZXIgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICB0b2tlbiA9IGxleChsdmFscCwgbGxvY3ApOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgbHZhbHAtPmlkZW50ID0gbWFr
ZUlkZW50aWZpZXIobV9idWZmZXIxNik7CiAgICAgICAgICAgICB0b2tlbiA9IElERU5UOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC01NTksMTAgKzg4Myw2IEBAIGludCBMZXhlcjo6bGV4KHZvaWQq
IHAxLCB2b2lkKiBwMikKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRva2VuID0gZW50cnktPmxleGVyVmFsdWUoKTsKLSAgICAgICAgICAgIC8vIEhh
Y2sgZm9yICJmID0gZnVuY3Rpb24gc29tZW5hbWUoKSB7IC4uLiB9IjsgdG9vIGhhcmQgdG8gZ2V0
IGludG8gdGhlIGdyYW1tYXIuCi0gICAgICAgICAgICBtX2VhdE5leHRJZGVudGlmaWVyID0gdG9r
ZW4gPT0gRlVOQ1RJT04gJiYgbV9sYXN0VG9rZW4gPT0gJz0nOwotICAgICAgICAgICAgaWYgKHRv
a2VuID09IENPTlRJTlVFIHx8IHRva2VuID09IEJSRUFLIHx8IHRva2VuID09IFJFVFVSTiB8fCB0
b2tlbiA9PSBUSFJPVykKLSAgICAgICAgICAgICAgICBtX3Jlc3RyS2V5d29yZCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0cmluZzoKQEAgLTU3
MSwyNzggKzg5MSwyMCBAQCBpbnQgTGV4ZXI6OmxleCh2b2lkKiBwMSwgdm9pZCogcDIpCiAgICAg
ICAgICAgICB0b2tlbiA9IFNUUklORzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IE51bWJlcjoKLSAgICAgICAgICAgIGx2YWxwLT5kb3VibGVWYWx1ZSA9IGR2YWw7CiAgICAgICAg
ICAgICB0b2tlbiA9IE5VTUJFUjsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJh
ZDoKLSNpZmRlZiBKU0NfREVCVUdfTEVYCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInl5
bGV4OiBFUlJPUi5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VCghInVuaGFuZGxlZCBudW1lcmF0aW9uIHZhbHVlIGluIHN3aXRjaCIpOworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guCisgICAg
ICAgIGNhc2UgQmFkOgogICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CiAgICAgICAgICAgICBy
ZXR1cm4gLTE7CiAgICAgfQorCiAgICAgbV9sYXN0VG9rZW4gPSB0b2tlbjsKICAgICByZXR1cm4g
dG9rZW47CiB9CiAKLWJvb2wgTGV4ZXI6OmlzV2hpdGVTcGFjZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlzV2hpdGVTcGFjZShtX2N1cnJlbnQpOwotfQotCi1ib29sIExleGVyOjppc0xpbmVUZXJt
aW5hdG9yKCkKLXsKLSAgICBib29sIGNyID0gKG1fY3VycmVudCA9PSAnXHInKTsKLSAgICBib29s
IGxmID0gKG1fY3VycmVudCA9PSAnXG4nKTsKLSAgICBpZiAoY3IpCi0gICAgICAgIG1fc2tpcExG
ID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChsZikKLSAgICAgICAgbV9za2lwQ1IgPSB0cnVlOwotICAg
IHJldHVybiBjciB8fCBsZiB8fCBtX2N1cnJlbnQgPT0gMHgyMDI4IHx8IG1fY3VycmVudCA9PSAw
eDIwMjk7Ci19Ci0KLWJvb2wgTGV4ZXI6OmlzSWRlbnRTdGFydChpbnQgYykKLXsKLSAgICByZXR1
cm4gaXNBU0NJSUFscGhhKGMpIHx8IGMgPT0gJyQnIHx8IGMgPT0gJ18nIHx8ICghaXNBU0NJSShj
KSAmJiAoY2F0ZWdvcnkoYykgJiAoTGV0dGVyX1VwcGVyY2FzZSB8IExldHRlcl9Mb3dlcmNhc2Ug
fCBMZXR0ZXJfVGl0bGVjYXNlIHwgTGV0dGVyX01vZGlmaWVyIHwgTGV0dGVyX090aGVyKSkpOwot
fQotCi1ib29sIExleGVyOjppc0lkZW50UGFydChpbnQgYykKLXsKLSAgICByZXR1cm4gaXNBU0NJ
SUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICckJyB8fCBjID09ICdfJyB8fCAoIWlzQVNDSUkoYykg
JiYgKGNhdGVnb3J5KGMpICYgKExldHRlcl9VcHBlcmNhc2UgfCBMZXR0ZXJfTG93ZXJjYXNlIHwg
TGV0dGVyX1RpdGxlY2FzZSB8IExldHRlcl9Nb2RpZmllciB8IExldHRlcl9PdGhlcgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgTWFya19Ob25TcGFjaW5nIHwgTWFya19TcGFjaW5nQ29t
YmluaW5nIHwgTnVtYmVyX0RlY2ltYWxEaWdpdCB8IFB1bmN0dWF0aW9uX0Nvbm5lY3RvcikpKTsK
LX0KLQotc3RhdGljIGJvb2wgaXNEZWNpbWFsRGlnaXQoaW50IGMpCi17Ci0gICAgcmV0dXJuIGlz
QVNDSUlEaWdpdChjKTsKLX0KLQotYm9vbCBMZXhlcjo6aXNIZXhEaWdpdChpbnQgYykKLXsKLSAg
ICByZXR1cm4gaXNBU0NJSUhleERpZ2l0KGMpOyAKLX0KLQotYm9vbCBMZXhlcjo6aXNPY3RhbERp
Z2l0KGludCBjKQotewotICAgIHJldHVybiBpc0FTQ0lJT2N0YWxEaWdpdChjKTsKLX0KLQotaW50
IExleGVyOjptYXRjaFB1bmN0dWF0b3IoaW50JiBjaGFyUG9zLCBpbnQgYzEsIGludCBjMiwgaW50
IGMzLCBpbnQgYzQpCi17Ci0gICAgaWYgKGMxID09ICc+JyAmJiBjMiA9PSAnPicgJiYgYzMgPT0g
Jz4nICYmIGM0ID09ICc9JykgewotICAgICAgICBzaGlmdCg0KTsKLSAgICAgICAgcmV0dXJuIFVS
U0hJRlRFUVVBTDsKLSAgICB9Ci0gICAgaWYgKGMxID09ICc9JyAmJiBjMiA9PSAnPScgJiYgYzMg
PT0gJz0nKSB7Ci0gICAgICAgIHNoaWZ0KDMpOwotICAgICAgICByZXR1cm4gU1RSRVE7Ci0gICAg
fQotICAgIGlmIChjMSA9PSAnIScgJiYgYzIgPT0gJz0nICYmIGMzID09ICc9JykgewotICAgICAg
ICBzaGlmdCgzKTsKLSAgICAgICAgcmV0dXJuIFNUUk5FUTsKLSAgICB9Ci0gICAgaWYgKGMxID09
ICc+JyAmJiBjMiA9PSAnPicgJiYgYzMgPT0gJz4nKSB7Ci0gICAgICAgIHNoaWZ0KDMpOwotICAg
ICAgICByZXR1cm4gVVJTSElGVDsKLSAgICB9Ci0gICAgaWYgKGMxID09ICc8JyAmJiBjMiA9PSAn
PCcgJiYgYzMgPT0gJz0nKSB7Ci0gICAgICAgIHNoaWZ0KDMpOwotICAgICAgICByZXR1cm4gTFNI
SUZURVFVQUw7Ci0gICAgfQotICAgIGlmIChjMSA9PSAnPicgJiYgYzIgPT0gJz4nICYmIGMzID09
ICc9JykgewotICAgICAgICBzaGlmdCgzKTsKLSAgICAgICAgcmV0dXJuIFJTSElGVEVRVUFMOwot
ICAgIH0KLSAgICBpZiAoYzEgPT0gJzwnICYmIGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgy
KTsKLSAgICAgICAgcmV0dXJuIExFOwotICAgIH0KLSAgICBpZiAoYzEgPT0gJz4nICYmIGMyID09
ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJuIEdFOwotICAgIH0KLSAg
ICBpZiAoYzEgPT0gJyEnICYmIGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAg
ICAgcmV0dXJuIE5FOwotICAgIH0KLSAgICBpZiAoYzEgPT0gJysnICYmIGMyID09ICcrJykgewot
ICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgaWYgKG1fdGVybWluYXRvcikKLSAgICAgICAgICAg
IHJldHVybiBBVVRPUExVU1BMVVM7Ci0gICAgICAgIHJldHVybiBQTFVTUExVUzsKLSAgICB9Ci0g
ICAgaWYgKGMxID09ICctJyAmJiBjMiA9PSAnLScpIHsKLSAgICAgICAgc2hpZnQoMik7Ci0gICAg
ICAgIGlmIChtX3Rlcm1pbmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gQVVUT01JTlVTTUlOVVM7
Ci0gICAgICAgIHJldHVybiBNSU5VU01JTlVTOwotICAgIH0KLSAgICBpZiAoYzEgPT0gJz0nICYm
IGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJuIEVRRVE7Ci0g
ICAgfQotICAgIGlmIChjMSA9PSAnKycgJiYgYzIgPT0gJz0nKSB7Ci0gICAgICAgIHNoaWZ0KDIp
OwotICAgICAgICByZXR1cm4gUExVU0VRVUFMOwotICAgIH0KLSAgICBpZiAoYzEgPT0gJy0nICYm
IGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJuIE1JTlVTRVFV
QUw7Ci0gICAgfQotICAgIGlmIChjMSA9PSAnKicgJiYgYzIgPT0gJz0nKSB7Ci0gICAgICAgIHNo
aWZ0KDIpOwotICAgICAgICByZXR1cm4gTVVMVEVRVUFMOwotICAgIH0KLSAgICBpZiAoYzEgPT0g
Jy8nICYmIGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJuIERJ
VkVRVUFMOwotICAgIH0KLSAgICBpZiAoYzEgPT0gJyYnICYmIGMyID09ICc9JykgewotICAgICAg
ICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJuIEFOREVRVUFMOwotICAgIH0KLSAgICBpZiAoYzEg
PT0gJ14nICYmIGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJu
IFhPUkVRVUFMOwotICAgIH0KLSAgICBpZiAoYzEgPT0gJyUnICYmIGMyID09ICc9JykgewotICAg
ICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0dXJuIE1PREVRVUFMOwotICAgIH0KLSAgICBpZiAo
YzEgPT0gJ3wnICYmIGMyID09ICc9JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0
dXJuIE9SRVFVQUw7Ci0gICAgfQotICAgIGlmIChjMSA9PSAnPCcgJiYgYzIgPT0gJzwnKSB7Ci0g
ICAgICAgIHNoaWZ0KDIpOwotICAgICAgICByZXR1cm4gTFNISUZUOwotICAgIH0KLSAgICBpZiAo
YzEgPT0gJz4nICYmIGMyID09ICc+JykgewotICAgICAgICBzaGlmdCgyKTsKLSAgICAgICAgcmV0
dXJuIFJTSElGVDsKLSAgICB9Ci0gICAgaWYgKGMxID09ICcmJyAmJiBjMiA9PSAnJicpIHsKLSAg
ICAgICAgc2hpZnQoMik7Ci0gICAgICAgIHJldHVybiBBTkQ7Ci0gICAgfQotICAgIGlmIChjMSA9
PSAnfCcgJiYgYzIgPT0gJ3wnKSB7Ci0gICAgICAgIHNoaWZ0KDIpOwotICAgICAgICByZXR1cm4g
T1I7Ci0gICAgfQotCi0gICAgc3dpdGNoIChjMSkgewotICAgICAgICBjYXNlICc9JzoKLSAgICAg
ICAgY2FzZSAnPic6Ci0gICAgICAgIGNhc2UgJzwnOgotICAgICAgICBjYXNlICcsJzoKLSAgICAg
ICAgY2FzZSAnISc6Ci0gICAgICAgIGNhc2UgJ34nOgotICAgICAgICBjYXNlICc/JzoKLSAgICAg
ICAgY2FzZSAnOic6Ci0gICAgICAgIGNhc2UgJy4nOgotICAgICAgICBjYXNlICcrJzoKLSAgICAg
ICAgY2FzZSAnLSc6Ci0gICAgICAgIGNhc2UgJyonOgotICAgICAgICBjYXNlICcvJzoKLSAgICAg
ICAgY2FzZSAnJic6Ci0gICAgICAgIGNhc2UgJ3wnOgotICAgICAgICBjYXNlICdeJzoKLSAgICAg
ICAgY2FzZSAnJSc6Ci0gICAgICAgIGNhc2UgJygnOgotICAgICAgICBjYXNlICcpJzoKLSAgICAg
ICAgY2FzZSAnWyc6Ci0gICAgICAgIGNhc2UgJ10nOgotICAgICAgICBjYXNlICc7JzoKLSAgICAg
ICAgICAgIHNoaWZ0KDEpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oYzEp
OwotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIGNoYXJQb3MgPSBtX2N1cnJlbnRPZmZz
ZXQ7Ci0gICAgICAgICAgICBzaGlmdCgxKTsKLSAgICAgICAgICAgIHJldHVybiBPUEVOQlJBQ0U7
Ci0gICAgICAgIGNhc2UgJ30nOgotICAgICAgICAgICAgY2hhclBvcyA9IG1fY3VycmVudE9mZnNl
dDsKLSAgICAgICAgICAgIHNoaWZ0KDEpOwotICAgICAgICAgICAgcmV0dXJuIENMT1NFQlJBQ0U7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi11
bnNpZ25lZCBzaG9ydCBMZXhlcjo6c2luZ2xlRXNjYXBlKHVuc2lnbmVkIHNob3J0IGMpCi17Ci0g
ICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgJ2InOgotICAgICAgICAgICAgcmV0dXJuIDB4
MDg7Ci0gICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgcmV0dXJuIDB4MDk7Ci0gICAgICAg
IGNhc2UgJ24nOgotICAgICAgICAgICAgcmV0dXJuIDB4MEE7Ci0gICAgICAgIGNhc2UgJ3YnOgot
ICAgICAgICAgICAgcmV0dXJuIDB4MEI7Ci0gICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgICAg
cmV0dXJuIDB4MEM7Ci0gICAgICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgcmV0dXJuIDB4MEQ7
Ci0gICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgcmV0dXJuIDB4MjI7Ci0gICAgICAgIGNh
c2UgJ1wnJzoKLSAgICAgICAgICAgIHJldHVybiAweDI3OwotICAgICAgICBjYXNlICdcXCc6Ci0g
ICAgICAgICAgICByZXR1cm4gMHg1QzsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBjOwotICAgIH0KLX0KLQotdW5zaWduZWQgc2hvcnQgTGV4ZXI6OmNvbnZlcnRPY3RhbChp
bnQgYzEsIGludCBjMiwgaW50IGMzKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oKGMxIC0gJzAnKSAqIDY0ICsgKGMyIC0gJzAnKSAqIDggKyBjMyAtICcwJyk7Ci19
Ci0KLXVuc2lnbmVkIGNoYXIgTGV4ZXI6OmNvbnZlcnRIZXgoaW50IGMpCi17Ci0gICAgaWYgKGMg
Pj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oYyAtICcwJyk7Ci0gICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyAtICdhJyArIDEwKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYyAtICdBJyArIDEwKTsKLX0KLQotdW5zaWdu
ZWQgY2hhciBMZXhlcjo6Y29udmVydEhleChpbnQgYzEsIGludCBjMikKLXsKLSAgICByZXR1cm4g
KChjb252ZXJ0SGV4KGMxKSA8PCA0KSArIGNvbnZlcnRIZXgoYzIpKTsKLX0KLQotVUNoYXIgTGV4
ZXI6OmNvbnZlcnRVbmljb2RlKGludCBjMSwgaW50IGMyLCBpbnQgYzMsIGludCBjNCkKLXsKLSAg
ICB1bnNpZ25lZCBjaGFyIGhpZ2hCeXRlID0gKGNvbnZlcnRIZXgoYzEpIDw8IDQpICsgY29udmVy
dEhleChjMik7Ci0gICAgdW5zaWduZWQgY2hhciBsb3dCeXRlID0gKGNvbnZlcnRIZXgoYzMpIDw8
IDQpICsgY29udmVydEhleChjNCk7Ci0gICAgcmV0dXJuIChoaWdoQnl0ZSA8PCA4IHwgbG93Qnl0
ZSk7Ci19Ci0KLXZvaWQgTGV4ZXI6OnJlY29yZDgoaW50IGMpCi17Ci0gICAgQVNTRVJUKGMgPj0g
MCk7Ci0gICAgQVNTRVJUKGMgPD0gMHhmZik7Ci0gICAgbV9idWZmZXI4LmFwcGVuZChzdGF0aWNf
Y2FzdDxjaGFyPihjKSk7Ci19Ci0KLXZvaWQgTGV4ZXI6OnJlY29yZDE2KGludCBjKQotewotICAg
IEFTU0VSVChjID49IDApOwotICAgIEFTU0VSVChjIDw9IFVTSFJUX01BWCk7Ci0gICAgcmVjb3Jk
MTYoVUNoYXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KGMpKSk7Ci19Ci0KLXZvaWQgTGV4
ZXI6OnJlY29yZDE2KFVDaGFyIGMpCi17Ci0gICAgbV9idWZmZXIxNi5hcHBlbmQoYyk7Ci19Ci0K
IGJvb2wgTGV4ZXI6OnNjYW5SZWdFeHAoKQogewogICAgIG1fYnVmZmVyMTYucmVzaXplKDApOwpA
QCAtODUyLDI5ICs5MTQsMjggQEAgYm9vbCBMZXhlcjo6c2NhblJlZ0V4cCgpCiAgICAgd2hpbGUg
KDEpIHsKICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoKSB8fCBtX2N1cnJlbnQgPT0gLTEp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKG1fY3VycmVudCAh
PSAnLycgfHwgbGFzdFdhc0VzY2FwZSA9PSB0cnVlIHx8IGluQnJhY2tldHMgPT0gdHJ1ZSkgewor
ICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnQgIT0gJy8nIHx8IGxhc3RXYXNFc2NhcGUgfHwgaW5C
cmFja2V0cykgewogICAgICAgICAgICAgLy8ga2VlcCB0cmFjayBvZiAnWycgYW5kICddJwogICAg
ICAgICAgICAgaWYgKCFsYXN0V2FzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBtX2N1
cnJlbnQgPT0gJ1snICYmICFpbkJyYWNrZXRzICkKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJy
ZW50ID09ICdbJyAmJiAhaW5CcmFja2V0cykKICAgICAgICAgICAgICAgICAgICAgaW5CcmFja2V0
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCBtX2N1cnJlbnQgPT0gJ10nICYmIGluQnJh
Y2tldHMgKQorICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ10nICYmIGluQnJhY2tl
dHMpCiAgICAgICAgICAgICAgICAgICAgIGluQnJhY2tldHMgPSBmYWxzZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJlY29yZDE2KG1fY3VycmVudCk7Ci0gICAgICAgICAgICBsYXN0V2Fz
RXNjYXBlID0KLSAgICAgICAgICAgICFsYXN0V2FzRXNjYXBlICYmIChtX2N1cnJlbnQgPT0gJ1xc
Jyk7CisgICAgICAgICAgICBsYXN0V2FzRXNjYXBlID0gIWxhc3RXYXNFc2NhcGUgJiYgbV9jdXJy
ZW50ID09ICdcXCc7CiAgICAgICAgIH0gZWxzZSB7IC8vIGVuZCBvZiByZWdleHAKICAgICAgICAg
ICAgIG1fcGF0dGVybiA9IFVTdHJpbmcobV9idWZmZXIxNik7CiAgICAgICAgICAgICBtX2J1ZmZl
cjE2LnJlc2l6ZSgwKTsKLSAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAgc2hpZnQx
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzaGlmdCgxKTsKKyAg
ICAgICAgc2hpZnQxKCk7CiAgICAgfQogCiAgICAgd2hpbGUgKGlzSWRlbnRQYXJ0KG1fY3VycmVu
dCkpIHsKICAgICAgICAgcmVjb3JkMTYobV9jdXJyZW50KTsKLSAgICAgICAgc2hpZnQoMSk7Cisg
ICAgICAgIHNoaWZ0MSgpOwogICAgIH0KICAgICBtX2ZsYWdzID0gVVN0cmluZyhtX2J1ZmZlcjE2
KTsKIApAQCAtODg0LDYgKzk0NSw3IEBAIGJvb2wgTGV4ZXI6OnNjYW5SZWdFeHAoKQogdm9pZCBM
ZXhlcjo6Y2xlYXIoKQogewogICAgIG1faWRlbnRpZmllcnMuY2xlYXIoKTsKKyAgICBtX2NvZGVX
aXRob3V0Qk9Ncy5jbGVhcigpOwogCiAgICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7CiAgICAg
bmV3QnVmZmVyOC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNp
dHkpOwpAQCAtODk1LDggKzk1NywzMCBAQCB2b2lkIExleGVyOjpjbGVhcigpCiAKICAgICBtX2lz
UmVwYXJzaW5nID0gZmFsc2U7CiAKLSAgICBtX3BhdHRlcm4gPSAwOwotICAgIG1fZmxhZ3MgPSAw
OworICAgIG1fcGF0dGVybiA9IFVTdHJpbmcoKTsKKyAgICBtX2ZsYWdzID0gVVN0cmluZygpOwor
fQorCitTb3VyY2VDb2RlIExleGVyOjpzb3VyY2VDb2RlKGludCBvcGVuQnJhY2UsIGludCBjbG9z
ZUJyYWNlLCBpbnQgZmlyc3RMaW5lKQoreworICAgIGlmIChtX2NvZGVXaXRob3V0Qk9Ncy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBTb3VyY2VDb2RlKG1fc291cmNlLT5wcm92aWRlcigpLCBv
cGVuQnJhY2UsIGNsb3NlQnJhY2UgKyAxLCBmaXJzdExpbmUpOworCisgICAgY29uc3QgVUNoYXIq
IGRhdGEgPSBtX3NvdXJjZS0+cHJvdmlkZXIoKS0+ZGF0YSgpOworCisgICAgQVNTRVJUKG9wZW5C
cmFjZSA8IGNsb3NlQnJhY2UpOworCisgICAgaW50IG51bUJPTXNCZWZvcmVPcGVuQnJhY2UgPSAw
OworICAgIGludCBudW1CT01zQmV0d2VlbkJyYWNlcyA9IDA7CisKKyAgICBpbnQgaTsKKyAgICBm
b3IgKGkgPSBtX3NvdXJjZS0+c3RhcnRPZmZzZXQoKTsgaSA8IG9wZW5CcmFjZTsgKytpKQorICAg
ICAgICBudW1CT01zQmVmb3JlT3BlbkJyYWNlICs9IGRhdGFbaV0gPT0gYnl0ZU9yZGVyTWFyazsK
KyAgICBmb3IgKDsgaSA8IGNsb3NlQnJhY2U7ICsraSkKKyAgICAgICAgbnVtQk9Nc0JldHdlZW5C
cmFjZXMgKz0gZGF0YVtpXSA9PSBieXRlT3JkZXJNYXJrOworCisgICAgcmV0dXJuIFNvdXJjZUNv
ZGUobV9zb3VyY2UtPnByb3ZpZGVyKCksIG9wZW5CcmFjZSArIG51bUJPTXNCZWZvcmVPcGVuQnJh
Y2UsCisgICAgICAgIGNsb3NlQnJhY2UgKyBudW1CT01zQmVmb3JlT3BlbkJyYWNlICsgbnVtQk9N
c0JldHdlZW5CcmFjZXMgKyAxLCBmaXJzdExpbmUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCShyZXZpc2lvbiA0MzE1NSkKKysrIEphdmFTY3JpcHRD
b3JlL3BhcnNlci9MZXhlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkVmVjdG9yLmgiCiAjaW5j
bHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIApAQCAt
MzksNyArNDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRJc1JlcGFyc2lu
ZygpIHsgbV9pc1JlcGFyc2luZyA9IHRydWU7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiBsdmFs
cCwgdm9pZCogbGxvY3ApOwogCi0gICAgICAgIGludCBsaW5lTm8oKSBjb25zdCB7IHJldHVybiB5
eWxpbmVubzsgfQorICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVt
YmVyOyB9CiAKICAgICAgICAgYm9vbCBwcmV2VGVybWluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1f
dGVybWluYXRvcjsgfQogCkBAIC03OSwyMSArODAsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm47IH0K
ICAgICAgICAgY29uc3QgVVN0cmluZyYgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9
CiAKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgY29udmVydEhleChpbnQpOwogICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgY2hhciBjb252ZXJ0SGV4KGludCBjMSwgaW50IGMyKTsKICAgICAg
ICAgc3RhdGljIFVDaGFyIGNvbnZlcnRVbmljb2RlKGludCBjMSwgaW50IGMyLCBpbnQgYzMsIGlu
dCBjNCk7CiAgICAgICAgIHN0YXRpYyBib29sIGlzSWRlbnRTdGFydChpbnQpOwogICAgICAgICBz
dGF0aWMgYm9vbCBpc0lkZW50UGFydChpbnQpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc0hleERp
Z2l0KGludCk7CiAKICAgICAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJy
b3I7IH0KIAogICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIFNvdXJjZUNvZGUgc291cmNl
Q29kZShpbnQgb3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSkgeyByZXR1
cm4gU291cmNlQ29kZShtX3NvdXJjZS0+cHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9zZUJyYWNl
ICsgMSwgZmlyc3RMaW5lKTsgfQorCisgICAgICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZShpbnQg
b3BlbkJyYWNlLCBpbnQgY2xvc2VCcmFjZSwgaW50IGZpcnN0TGluZSk7CiAKICAgICAgICAgc3Rh
dGljIGlubGluZSBib29sIGlzV2hpdGVTcGFjZShpbnQgY2gpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBjaCA9PSAnXHQnIHx8IGNoID09IDB4MGIgfHwgY2ggPT0gMHgwYyB8fCBXVEY6
OlVuaWNvZGU6OmlzU2VwYXJhdG9yU3BhY2UoY2gpOworICAgICAgICAgICAgcmV0dXJuIGlzQVND
SUkoY2gpID8gKGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09IDB4QiB8fCBjaCA9PSAw
eEMpIDogV1RGOjpVbmljb2RlOjppc1NlcGFyYXRvclNwYWNlKGNoKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xpbmVUZXJtaW5hdG9yKGludCBjaCkKQEAgLTEw
MywxOSArMTAzLDIxIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKKwogICAgICAgICBMZXhlcihKU0dsb2JhbERhdGEq
KTsKICAgICAgICAgfkxleGVyKCk7CiAKICAgICAgICAgdm9pZCBzZXREb25lKFN0YXRlKTsKLSAg
ICAgICAgdm9pZCBzaGlmdCh1bnNpZ25lZCBpbnQgcCk7CisgICAgICAgIHZvaWQgc2hpZnQxKCk7
CisgICAgICAgIHZvaWQgc2hpZnQyKCk7CisgICAgICAgIHZvaWQgc2hpZnQzKCk7CisgICAgICAg
IHZvaWQgc2hpZnQ0KCk7CiAgICAgICAgIHZvaWQgbmV4dExpbmUoKTsKICAgICAgICAgaW50IGxv
b2t1cEtleXdvcmQoY29uc3QgY2hhciAqKTsKIAotICAgICAgICBib29sIGlzV2hpdGVTcGFjZSgp
IGNvbnN0OwogICAgICAgICBib29sIGlzTGluZVRlcm1pbmF0b3IoKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgaXNPY3RhbERpZ2l0KGludCk7CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgbWF0
Y2hQdW5jdHVhdG9yKGludCYgY2hhclBvcywgaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IGM0
KTsKKyAgICAgICAgaW50IG1hdGNoUHVuY3R1YXRvcihpbnQmIGNoYXJQb3MpOwogICAgICAgICBz
dGF0aWMgdW5zaWduZWQgc2hvcnQgc2luZ2xlRXNjYXBlKHVuc2lnbmVkIHNob3J0KTsKICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbnZlcnRPY3RhbChpbnQgYzEsIGludCBjMiwgaW50
IGMzKTsKIApAQCAtMTIzLDM3ICsxMjUsMzkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgcmVjb3JkMTYoaW50KTsKICAgICAgICAgdm9pZCByZWNvcmQxNihVQ2hhcik7CiAKLSAgICAg
ICAgQUxXQVlTX0lOTElORSBKU0M6OklkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVyKGNvbnN0IFZl
Y3RvcjxVQ2hhcj4mIGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbV9pZGVudGlmaWVy
cy5hcHBlbmQoSlNDOjpJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSkpOwotICAgICAgICAgICAgcmV0dXJuICZtX2lkZW50aWZpZXJzLmxhc3QoKTsK
LSAgICAgICAgfQorICAgICAgICB2b2lkIGNvcHlDb2RlV2l0aG91dEJPTXMoKTsKKworICAgICAg
ICBpbnQgY3VycmVudE9mZnNldCgpIGNvbnN0OworCisgICAgICAgIEpTQzo6SWRlbnRpZmllciog
bWFrZUlkZW50aWZpZXIoY29uc3QgVmVjdG9yPFVDaGFyPiYgYnVmZmVyKTsKKworICAgICAgICBi
b29sIGxhc3RUb2tlbldhc1Jlc3RyS2V5d29yZCgpIGNvbnN0OwogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSA9IDMyOwogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGluaXRpYWxJZGVudGlmaWVyVGFibGVDYXBhY2l0eSA9IDY0OwogCi0g
ICAgICAgIGludCB5eWxpbmVubzsKLSAgICAgICAgaW50IHl5Y29sdW1uOworICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgY2hhciBTa2lwTEZTaGlmdCA9IDA7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjaGFyIFNraXBDUlNoaWZ0ID0gMTsKKyAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNoYXIgU2tpcExGID0gMSA8PCBTa2lwTEZTaGlmdDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIgU2tpcENSID0gMSA8PCBTa2lwQ1JTaGlmdDsKKworICAgICAg
ICBpbnQgbV9saW5lTnVtYmVyOwogCiAgICAgICAgIGJvb2wgbV9kb25lOwogICAgICAgICBWZWN0
b3I8Y2hhcj4gbV9idWZmZXI4OwogICAgICAgICBWZWN0b3I8VUNoYXI+IG1fYnVmZmVyMTY7CiAg
ICAgICAgIGJvb2wgbV90ZXJtaW5hdG9yOwotICAgICAgICBib29sIG1fcmVzdHJLZXl3b3JkOwog
ICAgICAgICBib29sIG1fZGVsaW1pdGVkOyAvLyBlbmNvdW50ZXJlZCBkZWxpbWl0ZXIgbGlrZSAi
JyIgYW5kICJ9IiBvbiBsYXN0IHJ1bgotICAgICAgICBib29sIG1fc2tpcExGOwotICAgICAgICBi
b29sIG1fc2tpcENSOwotICAgICAgICBib29sIG1fZWF0TmV4dElkZW50aWZpZXI7Ci0gICAgICAg
IGludCBtX3N0YWNrVG9rZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbV9za2lwTGluZUVuZDsK
ICAgICAgICAgaW50IG1fbGFzdFRva2VuOwogCiAgICAgICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBtX3Bvc2l0aW9uOwogICAgICAgICBjb25zdCBTb3VyY2VDb2RlKiBt
X3NvdXJjZTsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fY29kZTsKLSAgICAgICAgdW5zaWduZWQg
aW50IG1fbGVuZ3RoOworICAgICAgICBjb25zdCBVQ2hhciogbV9jb2RlU3RhcnQ7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBtX2NvZGVFbmQ7CiAgICAgICAgIGJvb2wgbV9pc1JlcGFyc2luZzsKLSAg
ICAgICAgaW50IG1fYXRMaW5lU3RhcnQ7CisgICAgICAgIGJvb2wgbV9hdExpbmVTdGFydDsKICAg
ICAgICAgYm9vbCBtX2Vycm9yOwogCiAgICAgICAgIC8vIGN1cnJlbnQgYW5kIGZvbGxvd2luZyB1
bmljb2RlIGNoYXJhY3RlcnMgKGludCB0byBhbGxvdyBmb3IgLTEgZm9yIGVuZC1vZi1maWxlIG1h
cmtlcikKQEAgLTE2MiwxMSArMTY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBt
X25leHQyOwogICAgICAgICBpbnQgbV9uZXh0MzsKICAgICAgICAgCi0gICAgICAgIGludCBtX2N1
cnJlbnRPZmZzZXQ7Ci0gICAgICAgIGludCBtX25leHRPZmZzZXQxOwotICAgICAgICBpbnQgbV9u
ZXh0T2Zmc2V0MjsKLSAgICAgICAgaW50IG1fbmV4dE9mZnNldDM7Ci0gICAgICAgIAogICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8SlNDOjpJZGVudGlmaWVyLCBpbml0aWFsSWRlbnRpZmllclRhYmxl
Q2FwYWNpdHk+IG1faWRlbnRpZmllcnM7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2Jh
bERhdGE7CkBAIC0xNzUsNiArMTc0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFVTdHJp
bmcgbV9mbGFnczsKIAogICAgICAgICBjb25zdCBIYXNoVGFibGUgbV9tYWluVGFibGU7CisKKyAg
ICAgICAgVmVjdG9yPFVDaGFyPiBtX2NvZGVXaXRob3V0Qk9NczsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5oCShy
ZXZpc2lvbiA0MzE1NSkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Tb3VyY2VQcm92aWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCwxMCArMzQsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAg
ICBlbnVtIFNvdXJjZUJPTVByZXNlbmNlIHsgU291cmNlSGFzTm9CT01zLCBTb3VyY2VDb3VsZEhh
dmVCT01zIH07CisKICAgICBjbGFzcyBTb3VyY2VQcm92aWRlciA6IHB1YmxpYyBSZWZDb3VudGVk
PFNvdXJjZVByb3ZpZGVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBTb3VyY2VQcm92aWRlcihj
b25zdCBVU3RyaW5nJiB1cmwpCisgICAgICAgIFNvdXJjZVByb3ZpZGVyKGNvbnN0IFVTdHJpbmcm
IHVybCwgU291cmNlQk9NUHJlc2VuY2UgaGFzQk9NcyA9IFNvdXJjZUNvdWxkSGF2ZUJPTXMpCiAg
ICAgICAgICAgICA6IG1fdXJsKHVybCkKKyAgICAgICAgICAgICwgbV9oYXNCT01zKGhhc0JPTXMp
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5Tb3VyY2VQcm92aWRlcigp
IHsgfQpAQCAtNDksOCArNTIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IFVT
dHJpbmcmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9CiAgICAgICAgIGludHB0cl90IGFzSUQoKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90Pih0aGlzKTsgfQogCisgICAgICAgIFNv
dXJjZUJPTVByZXNlbmNlIGhhc0JPTXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0JPTXM7IH0KKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIFVTdHJpbmcgbV91cmw7CisgICAgICAgIFNvdXJjZUJPTVBy
ZXNlbmNlIG1faGFzQk9NczsKICAgICB9OwogCiAgICAgY2xhc3MgVVN0cmluZ1NvdXJjZVByb3Zp
ZGVyIDogcHVibGljIFNvdXJjZVByb3ZpZGVyIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiA0MzE1NSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDQsMTIgKzQwNCwxMiBAQCBKU1ZhbHVlIGdsb2JhbEZ1bmNVbmVz
Y2FwZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIGNvbnN0IFVDaGFyKiBjID0gc3RyLmRhdGEoKSAr
IGs7CiAgICAgICAgIFVDaGFyIHU7CiAgICAgICAgIGlmIChjWzBdID09ICclJyAmJiBrIDw9IGxl
biAtIDYgJiYgY1sxXSA9PSAndScpIHsKLSAgICAgICAgICAgIGlmIChMZXhlcjo6aXNIZXhEaWdp
dChjWzJdKSAmJiBMZXhlcjo6aXNIZXhEaWdpdChjWzNdKSAmJiBMZXhlcjo6aXNIZXhEaWdpdChj
WzRdKSAmJiBMZXhlcjo6aXNIZXhEaWdpdChjWzVdKSkgeworICAgICAgICAgICAgaWYgKGlzQVND
SUlIZXhEaWdpdChjWzJdKSAmJiBpc0FTQ0lJSGV4RGlnaXQoY1szXSkgJiYgaXNBU0NJSUhleERp
Z2l0KGNbNF0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzVdKSkgewogICAgICAgICAgICAgICAgIHUg
PSBMZXhlcjo6Y29udmVydFVuaWNvZGUoY1syXSwgY1szXSwgY1s0XSwgY1s1XSk7CiAgICAgICAg
ICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgICAgICAgIGsgKz0gNTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChjWzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDMgJiYgTGV4ZXI6
OmlzSGV4RGlnaXQoY1sxXSkgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoY1syXSkpIHsKKyAgICAgICAg
fSBlbHNlIGlmIChjWzBdID09ICclJyAmJiBrIDw9IGxlbiAtIDMgJiYgaXNBU0NJSUhleERpZ2l0
KGNbMV0pICYmIGlzQVNDSUlIZXhEaWdpdChjWzJdKSkgewogICAgICAgICAgICAgdSA9IFVDaGFy
KExleGVyOjpjb252ZXJ0SGV4KGNbMV0sIGNbMl0pKTsKICAgICAgICAgICAgIGMgPSAmdTsKICAg
ICAgICAgICAgIGsgKz0gMjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAkocmV2aXNpb24g
NDMxNTUpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNDksNCArMTQ5LDE4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIGlubGlu
ZSBib29sIGlzQVNDSUlQcmludGFibGUoaW50IGMpIHsgcmV0dXJuIGMgPj0gJyAnICYmIGMgPD0g
J34nOyB9CiB9CiAKK3VzaW5nIFdURjo6aXNBU0NJSTsKK3VzaW5nIFdURjo6aXNBU0NJSUFscGhh
OwordXNpbmcgV1RGOjppc0FTQ0lJQWxwaGFudW1lcmljOwordXNpbmcgV1RGOjppc0FTQ0lJRGln
aXQ7Cit1c2luZyBXVEY6OmlzQVNDSUlIZXhEaWdpdDsKK3VzaW5nIFdURjo6aXNBU0NJSUxvd2Vy
OwordXNpbmcgV1RGOjppc0FTQ0lJT2N0YWxEaWdpdDsKK3VzaW5nIFdURjo6aXNBU0NJSVByaW50
YWJsZTsKK3VzaW5nIFdURjo6aXNBU0NJSVNwYWNlOwordXNpbmcgV1RGOjppc0FTQ0lJVXBwZXI7
Cit1c2luZyBXVEY6OnRvQVNDSUlIZXhWYWx1ZTsKK3VzaW5nIFdURjo6dG9BU0NJSUxvd2VyOwor
dXNpbmcgV1RGOjp0b0FTQ0lJVXBwZXI7CisKICNlbmRpZgo=
</data>
<flag name="review"
          id="15018"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>