<?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>16587</bug_id>
          
          <creation_ts>2007-12-23 13:21:04 -0800</creation_ts>
          <short_desc>Implement the W3C Selectors API</short_desc>
          <delta_ts>2007-12-31 18:21:03 -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>DOM</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>http://dscoder.com/deansqueryselectortest.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16234</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Smith">catfish.man</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annevk</cc>
    
    <cc>dev+webkit</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65128</commentid>
    <comment_count>0</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-23 13:21:04 -0800</bug_when>
    <thetext>http://www.w3.org/TR/selectors-api/

Would be very handy for authors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65129</commentid>
    <comment_count>1</comment_count>
      <attachid>18074</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-23 13:24:25 -0800</bug_when>
    <thetext>Created attachment 18074
In-progress patch

There are quite a few issues with this patch, so I&apos;m not requesting review yet. It leaks memory, uses NodeList instead of StaticNodeList, and doesn&apos;t implement the functions other than querySelectorAll. Other than that it appears to work nicely, though :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65140</commentid>
    <comment_count>2</comment_count>
      <attachid>18079</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-23 15:25:57 -0800</bug_when>
    <thetext>Created attachment 18079
another in-progress patch (adds StaticNodeList)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65178</commentid>
    <comment_count>3</comment_count>
      <attachid>18088</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-12-23 22:36:31 -0800</bug_when>
    <thetext>Created attachment 18088
more fun</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65198</commentid>
    <comment_count>4</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-24 11:18:54 -0800</bug_when>
    <thetext>Adding a link to a version of Dean Edward&apos;s tests for his cssQuery function modified to tolerate exceptions and use querySelector/querySelectorAll instead of cssQuery. With the latest patch we pass for all selectors WebKit supports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65200</commentid>
    <comment_count>5</comment_count>
      <attachid>18095</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-24 13:33:14 -0800</bug_when>
    <thetext>Created attachment 18095
Stop leaking a bunch of CSS stuff every query</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65207</commentid>
    <comment_count>6</comment_count>
      <attachid>18097</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-24 17:41:40 -0800</bug_when>
    <thetext>Created attachment 18097
Much much faster

Benchmarking + Sharking + Weinig making good suggestions == Speedy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65209</commentid>
    <comment_count>7</comment_count>
      <attachid>18098</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-24 18:44:50 -0800</bug_when>
    <thetext>Created attachment 18098
Fixes selectors with commas

Previously things like a, b { } would fail, since we weren&apos;t checking all the selectors. There are now no test failures on the slickspeed test, except those due to webkit not supporting the relevant selector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65212</commentid>
    <comment_count>8</comment_count>
      <attachid>18100</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-24 19:23:01 -0800</bug_when>
    <thetext>Created attachment 18100
Updated

Fixed comma selectors for querySelector as well as querySelectorAll, made a tiny optimization, and added a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65220</commentid>
    <comment_count>9</comment_count>
      <attachid>18103</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-24 22:31:25 -0800</bug_when>
    <thetext>Created attachment 18103
Handle null and undefined according to the spec

This also makes it so that if you put in syntactically valid CSS that is not a selector, it throws a syntax error as it should (for example: &quot;@font-face&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65228</commentid>
    <comment_count>10</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-25 00:44:27 -0800</bug_when>
    <thetext>Ken Ferry points out that although the CSS spec does define an empty selector as invalid, it&apos;s possibly a reasonable interpretation to say that null/undefined are just not selectors at all, valid or invalid. I think we should probably get this clarified. I&apos;m also not convinced that throwing is the best behavior for the spec to dictate in this situation, but that&apos;s another matter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65263</commentid>
    <comment_count>11</comment_count>
      <attachid>18113</attachid>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-25 13:34:25 -0800</bug_when>
    <thetext>Created attachment 18113
Now with tests :)

I think this is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65266</commentid>
    <comment_count>12</comment_count>
      <attachid>18113</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-12-25 16:40:03 -0800</bug_when>
    <thetext>Comment on attachment 18113
Now with tests :)

With the various formatting fixes i mentioned in irc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65267</commentid>
    <comment_count>13</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-12-25 16:55:05 -0800</bug_when>
    <thetext>Landed in r28981</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18074</attachid>
            <date>2007-12-23 13:24:25 -0800</date>
            <delta_ts>2007-12-24 19:23:01 -0800</delta_ts>
            <desc>In-progress patch</desc>
            <filename>prelimqueryall.diff</filename>
            <type>text/plain</type>
            <size>13191</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODk1MykKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDggQEAKIAkJNUQ4NzRGMTMwRDE2MUQzMjAwNzk2
QzNCIC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTIyN0REMEFGNTg5QUQwMEQ0ODMyNCAvKiBO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5jcHAgKi87IH07CiAJCTVERkU4RjU2MEQxNjQ3N0Iw
MDc2RTkzNyAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxl
ZEFjdGlvbi5jcHAgKi87IH07CiAJCTVERkU4RjU3MEQxNjQ3N0MwMDc2RTkzNyAvKiBTY2hlZHVs
ZWRBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDQTM3OEJCMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uaCAqLzsgfTsKKwkJ
NjM0Rjg1QkQwRDFFRTY5ODAwNDgwNEY1IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjM0Rjg1QkIwRDFFRTY5ODAw
NDgwNEY1IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwICovOyB9OworCQk2MzRGODVCRTBEMUVFNjk4
MDA0ODA0RjUgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjM0Rjg1QkMwRDFFRTY5ODAwNDgwNEY1IC8qIFNlbGVjdG9y
Tm9kZUxpc3QuaCAqLzsgfTsKIAkJNjUwRjUzREMwOUQxNUREQTAwQzlCMEM4IC8qIENTU0dyYW1t
YXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MEY1
M0RCMDlEMTVEREEwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmggKi87IH07CiAJCTY1MEY1M0REMDlE
MTVEREYwMEM5QjBDOCAvKiBDU1NHcmFtbWFyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFt
bWFyLmNwcCAqLzsgfTsKIAkJNjUxQjREODUwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRT
dHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1MUI0RDgzMDlBQzgzMzcwMDI5RjFFRiAvKiBEZXByZWNhdGVkU3RyaW5nTGlzdC5jcHAg
Ki87IH07CkBAIC00Nzg2LDYgKzQ3ODgsOCBAQAogCQk1NTk5OEE1QjA1MkI1OUNDMDAxN0E2QzEg
LyogV2ViQ29yZUFYT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUFYT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU5OThBNUMwNTJC
NTlDQzAwMTdBNkMxIC8qIEFYT2JqZWN0Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVhPYmplY3RDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU5OThBNUQwNTJC
NTlDQzAwMTdBNkMxIC8qIEFYT2JqZWN0Q2FjaGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBWE9iamVjdENhY2hlTWFjLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
KwkJNjM0Rjg1QkIwRDFFRTY5ODAwNDgwNEY1IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYzNEY4NUJDMEQxRUU2OTgwMDQ4MDRGNSAvKiBT
ZWxlY3Rvck5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVj
dG9yTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUwRjUzREIwOUQx
NUREQTAwQzlCMEM4IC8qIENTU0dyYW1tYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU0dyYW1tYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxQjRE
ODMwOUFDODMzNzAwMjlGMUVGIC8qIERlcHJlY2F0ZWRTdHJpbmdMaXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZXByZWNhdGVkU3RyaW5nTGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MUI0RDg0MDlBQzgzMzcwMDI5RjFFRiAvKiBE
ZXByZWNhdGVkU3RyaW5nTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVwcmVjYXRlZFN0cmluZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEy
MTQwLDYgKzEyMTQ0LDggQEAKIAkJCQlCQzRCRjlFMzBEMTFFMTMzMDA3RDI0N0YgLyogQ2xhc3NO
YW1lcy5oICovLAogCQkJCUJDOTA0QjcyMEQxMDk5OEYwMDY4MEQzMiAvKiBDbGFzc05vZGVMaXN0
LmNwcCAqLywKIAkJCQlCQzkwNEI3MzBEMTA5OThGMDA2ODBEMzIgLyogQ2xhc3NOb2RlTGlzdC5o
ICovLAorCQkJCTYzNEY4NUJCMEQxRUU2OTgwMDQ4MDRGNSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNw
cCAqLywKKwkJCQk2MzRGODVCQzBEMUVFNjk4MDA0ODA0RjUgLyogU2VsZWN0b3JOb2RlTGlzdC5o
ICovLAogCQkJCUE3ODQ5NDFBMEI1RkU1MDcwMDFFMjM3QSAvKiBDbGlwYm9hcmQuY3BwICovLAog
CQkJCTg1MDMxQjI4MEE0NEVGQzcwMEY5OTJFMCAvKiBDbGlwYm9hcmQuaCAqLywKIAkJCQk0QjhB
RjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggKi8sCkBAIC0x
NDExOCw2ICsxNDEyNCw3IEBACiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2li
bGVfdW5pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTM3OTE1MEQxNjNFNTUwMEI3OTNENiAv
KiBKU0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkzRjBEMTY0N0UwMDBCNzkz
RDYgLyogSlNMb2NhdGlvbi5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTYzNEY4NUJFMEQxRUU2
OTgwMDQ4MDRGNSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1ODMy
LDYgKzE1ODM5LDcgQEAKIAkJCQk5MzMwOURGNzA5OUU2NDkyMDA1NkU1ODEgLyogbWFya3VwLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTFEMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxl
X3VuaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTM3OTE0MEQxNjNFNTUwMEI3OTNENiAv
KiBKU0xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYzNEY4NUJEMEQxRUU2OTgwMDQ4
MDRGNSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMjg5NTMpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMiArMTI4LDEyIEBAIGNsYXNzIFN0eWxl
ZEVsZW1lbnQ7CiAgICAgICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgQXRv
bWljU3RyaW5nICZhdHRybmFtZSk7CiAgCiAgICAgICAgIENTU0ZvbnRTZWxlY3RvciogZm9udFNl
bGVjdG9yKCkgeyByZXR1cm4gbV9mb250U2VsZWN0b3IuZ2V0KCk7IH0KLQotICAgIHByb3RlY3Rl
ZDoKLQorICAgICAgICAKICAgICAgICAgLyogY2hlY2tzIGlmIGEgY29tcG91bmQgc2VsZWN0b3Ig
KHdoaWNoIGNhbiBjb25zaXN0IG9mIG11bHRpcGxlIHNpbXBsZSBzZWxlY3RvcnMpCi0gICAgICAg
ICAgIG1hdGNoZXMgdGhlIGdpdmVuIEVsZW1lbnQgKi8KKyAgICAgICAgIG1hdGNoZXMgdGhlIGdp
dmVuIEVsZW1lbnQgKi8KICAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBz
ZWxlY3Rvcik7CisKKyAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGVudW0gU2VsZWN0b3JNYXRjaCB7
IFNlbGVjdG9yTWF0Y2hlcz0wLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHl9OwogICAgICAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBFbGVtZW50ICplLCBib29sIGlzQW5jZXN0b3IsIGJvb2wgaXNTdWJTZWxl
Y3Rvcik7CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDI4OTUzKQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDEwIEBAIG1vZHVsZSBj
b3JlIHsKIAogICAgICAgICAvLyBIVE1MIDUKICAgICAgICAgTm9kZUxpc3QgICAgICAgICAgICBn
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGluIERPTVN0cmluZyB0YWduYW1lKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFNlbGVjdG9yIEFQSQorICAgICAgICAvL1RPRE86IHNob3VsZCBiZSBTdGF0aWNO
b2RlTGlzdAorICAgICAgICBOb2RlTGlzdCAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4g
RE9NU3RyaW5nIHNlbGVjdG9yKTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FbGVt
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkocmV2aXNpb24g
Mjg5NTMpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTA0
LDYgKzEwNCwxMCBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAg
IE5vZGVMaXN0IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoaW4gRE9NU3RyaW5nIG5hbWUpOworICAg
ICAgICAKKyAgICAgICAgLy8gU2VsZWN0b3IgQVBJCisgICAgICAgIC8vVE9ETzogc2hvdWxkIGJl
IFN0YXRpY05vZGVMaXN0CisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICAgcXVlcnlTZWxlY3Rv
ckFsbChpbiBET01TdHJpbmcgc2VsZWN0b3IpOwogCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9PQkpF
Q1RJVkVfQykKICAgICAgICAgLy8gT2JqZWN0aXZlLUMgZXh0ZW5zaW9ucwpJbmRleDogV2ViQ29y
ZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlz
aW9uIDI4OTUzKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5n
LmgiCiAjaW5jbHVkZSAia2pzX2JpbmRpbmcuaCIKKyNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTIyNSw2ICsxMjI2LDE0IEBAIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKIAogICAgIHJldHVybiBuZXcgQ2xh
c3NOb2RlTGlzdCh0aGlzLCBjbGFzc05hbWVzLCAmbV9ub2RlTGlzdHMtPm1fY2xhc3NOb2RlTGlz
dENhY2hlcy5hZGQoY2xhc3NOYW1lcywgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25k
KTsKIH0KKyAgICAKK1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwo
Y29uc3QgU3RyaW5nJiBzZWxlY3RvcikKK3sKKyAgICBpZighbV9ub2RlTGlzdHMpCisgICAgICAg
IG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOworICAgIAorICAgIHJldHVy
biBuZXcgU2VsZWN0b3JOb2RlTGlzdCh0aGlzLCBzZWxlY3RvciwgJm1fbm9kZUxpc3RzLT5tX2Ns
YXNzTm9kZUxpc3RDYWNoZXMuYWRkKHNlbGVjdG9yLCBOb2RlTGlzdDo6Q2FjaGVzKCkpLmZpcnN0
LT5zZWNvbmQpOworfQogCiBEb2N1bWVudCAqTm9kZTo6b3duZXJEb2N1bWVudCgpIGNvbnN0CiB7
CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9k
ZS5oCShyZXZpc2lvbiAyODk1MykKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDU0LDYgKzQ1NCw3IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IGdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpOwogICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFz
c05hbWVzKTsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBxdWVyeVNlbGVjdG9yQWxsKGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IpOwogCiBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgRG9jUHRyPERv
Y3VtZW50PiBtX2RvY3VtZW50OwpJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRGF2aWQgU21pdGggKGNh
dGZpc2gubWFuQGdtYWlsLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0
b3JOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUg
IkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU2VsZWN0b3JOb2RlTGlzdDo6U2VsZWN0b3JOb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNzc1NlbGVjdG9yVGV4dCwgTm9kZUxpc3Q6
OkNhY2hlcyogY2FjaGVzKQorICAgIDogTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywgdHJ1ZSkK
K3sKKyAgICAvL0xFQUsgT01HCisJQ1NTU3R5bGVTaGVldCAqdGVtcFN0eWxlU2hlZXQgPSBuZXcg
Q1NTU3R5bGVTaGVldChtX3Jvb3ROb2RlLT5kb2N1bWVudCgpKTsKKwlFeGNlcHRpb25Db2RlIGNv
ZGUgPSAwOworCXRlbXBTdHlsZVNoZWV0LT5pbnNlcnRSdWxlKGNzc1NlbGVjdG9yVGV4dCArICJ7
fSIsIDAsIGNvZGUpOworCUNTU1J1bGUgKnJ1bGUgPSB0ZW1wU3R5bGVTaGVldC0+Y3NzUnVsZXMo
dHJ1ZSktPml0ZW0oMCk7CisJaWYocnVsZS0+aXNTdHlsZVJ1bGUoKSkKKwl7CisgICAgICAgIG1f
c2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKS0+c2VsZWN0b3IoKTsK
KyAgICB9CQorfQorCit1bnNpZ25lZCBTZWxlY3Rvck5vZGVMaXN0OjpsZW5ndGgoKSBjb25zdAor
eworICAgIHJldHVybiByZWN1cnNpdmVMZW5ndGgoKTsKK30KKworTm9kZSogU2VsZWN0b3JOb2Rl
TGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVjdXJzaXZl
SXRlbShpbmRleCk7Cit9CisKK2Jvb2wgU2VsZWN0b3JOb2RlTGlzdDo6bm9kZU1hdGNoZXMoTm9k
ZSogdGVzdE5vZGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHRlc3ROb2RlLT5pc0VsZW1lbnROb2Rl
KCkpOworCisgICAgQ1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3RvciA9IG1fcm9vdE5vZGUt
PmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBzdHlsZVNlbGVjdG9yLT5pbml0RWxl
bWVudEFuZFBzZXVkb1N0YXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPih0ZXN0Tm9kZSkpOworICAg
IHJldHVybiBzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9yKG1fc2VsZWN0b3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTbWl0aCAoY2F0Zmlz
aC5tYW5AZ21haWwuY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2VsZWN0b3JOb2RlTGlzdF9oCisjZGVmaW5lIFNlbGVj
dG9yTm9kZUxpc3RfaAorCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTZWxl
Y3Rvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAg
ICBjbGFzcyBTZWxlY3Rvck5vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29u
c3QgU3RyaW5nJiBjc3NTZWxlY3RvclRleHQsIE5vZGVMaXN0OjpDYWNoZXMqKTsKKworICAgICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGUq
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmly
dHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGUqKSBjb25zdDsKKworICAgICAgICBDU1NTZWxlY3Rv
ciAqbV9zZWxlY3RvcjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBTZWxlY3Rvck5vZGVMaXN0X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18079</attachid>
            <date>2007-12-23 15:25:57 -0800</date>
            <delta_ts>2007-12-23 15:25:57 -0800</delta_ts>
            <desc>another in-progress patch (adds StaticNodeList)</desc>
            <filename>selector2.diff</filename>
            <type>text/plain</type>
            <size>54827</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODk1MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTc4LDcgKzE5NzgsNiBAQAogCQlBODE4NzIxRTA5NzdEM0MwMDA1
ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0Lmgg
Ki87IH07CiAJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE0MDk3
N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLzsgfTsKIAkJQTgxODcyMjAwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5v
ZGVMaXN0LmggKi87IH07Ci0JCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIx
NjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyMzA5NzdE
M0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2Rl
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3Bw
ICovOyB9OwpAQCAtMzYxNCw2ICszNjEzLDEyIEBACiAJCUJDNzcyQzRGMEM0RUIzMDQwMDgzMjg1
RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
NzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRFQjM0NDAw
ODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi87IH07CiAJCUJDN0Y0NEE4MEI5RTMy
NEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGNDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUJDN0ZBNjIwMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MUUwRDFGMENCRDAw
REIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjIxMEQxRjBDQkQw
MERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9k
ZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdG
QTYyQjBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2
MkUwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAv
KiBTdGF0aWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAv
KiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5o
ICovOyB9OworCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY4
MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDODBD
OTg3MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg1MENEMjk0RUUw
MEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCAqLzsgfTsKIAkJQkM4MEM5ODgw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg2MENEMjk0RUUwMEEwQjdC
MyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggKi87IH07CiAJCUJDODBDOThCMENEMjk1MDUw
MEEwQjdCMyAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg5MENEMjk1MDUwMEEwQjdCMyAvKiBBbmlt
YXRpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTYxMDgsNyArNjExMyw2IEBACiAJCUE4MTg3
MjEzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hbWVOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODE4NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWlu
ZXJOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTUwOTc3RDND
MDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoaWxkTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgx
ODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2
RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
NjI1LDYgKzc2MjksMTIgQEAKIAkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbEJh
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxCYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJh
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlE
MDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUUw
RDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNOb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyog
U3RhdGljTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlj
Tm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MkMwRDFGMEVG
RjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0YXRpY05vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0
b3JOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxl
Y3Rvck5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODUw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzgwQzk4OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE2Niw2ICsxMjE3Niw4IEBACiAJ
CQkJQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywK
IAkJCQlBODE4NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywK
IAkJCQk5M0VFQzFFOTA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICov
LAorCQkJCUJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLywK
IAkJCQk2NTUwQjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJ
CTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRB
N0Y2MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEyMjI0LDcgKzEyMjM2
LDYgQEAKIAkJCQk4NTRGRTcyQTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCAq
LywKIAkJCQk4NTRGRTcyQjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi8sCiAJ
CQkJMUE3NTBEODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVyYXRvci5pZGwgKi8sCi0JCQkJ
QTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1
RiAvKiBOb3RhdGlvbi5jcHAgKi8sCkBAIC0xMjI1Miw2ICsxMjI2Myw4IEBACiAJCQkJRDIzQ0E1
NDgwQUIwRTk4MzAwNTEwOEE1IC8qIFJhbmdlRXhjZXB0aW9uLmlkbCAqLywKIAkJCQk4NTAzMUIz
NTBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwICovLAogCQkJ
CTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oICov
LAorCQkJCUJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgKi8s
CisJCQkJQkM3RkE2MkIwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmggKi8sCiAJ
CQkJQThDNEE3RUMwOUQ1NjMyNzAwMDNBQzhEIC8qIFN0eWxlZEVsZW1lbnQuY3BwICovLAogCQkJ
CUE4QzRBN0VCMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmggKi8sCiAJCQkJQUE0
QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgKi8sCkBAIC0xMjI3OCw2
ICsxMjI5MSw4IEBACiAJCQkJOTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdoZWVsRXZlbnQu
aWRsICovLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIuY3Bw
ICovLAogCQkJCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxUb2tlbml6ZXIuaCAqLywK
KwkJCQlCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oICovLAor
CQkJCUJDN0ZBNjgwMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmNwcCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gZG9tOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE0
MTE4LDYgKzE0MTMzLDkgQEAKIAkJCQk5MzMwOUUxRTA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJs
ZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5MTUwRDE2M0U1NTAwQjc5M0Q2IC8q
IEpTTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTM3OTNGMEQxNjQ3RTAwMEI3OTNE
NiAvKiBKU0xvY2F0aW9uLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM3RkE2MjEwRDFGMENC
RDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM3RkE2
MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xNTM3Nyw3ICsxNTM5NSw2IEBACiAJCQkJODU0RkU3MzAwQTIyOTdCRTAwNThE
N0FEIC8qIE5vZGVGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzIwQTIyOTdC
RTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODU0RkU3MzQwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBODE4NzIyMTA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThFQTdFQkYwQTE5NDVEMDAwQThFRjVGIC8qIE5vdGF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBMEQ1NzM2MEE1Qzc3RkUwMDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTY0MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZE
b2N1bWVudEltYWdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTU4MzIsNiArMTU4NDksOSBAQAog
CQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNBMzc5MTQwRDE2M0U1NTAwQjc5M0Q2IC8qIEpTTG9jYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQkM3RkE2MjAwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNO
b2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzdGQTYyRTBEMUYwRUZGMDBEQjIyQTkg
LyogU3RhdGljTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM3RkE2ODIwRDFGMTY3
OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBX
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAyODk1MCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDYgKzI0Miw3IEBAIGNsYXNzIFN0
eWxlZEVsZW1lbnQ7CiAjZW5kaWYKIAogICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZVNldDsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yTm9kZUxpc3Q7CiAgICAgfTsKIAogICAgIGNs
YXNzIENTU1J1bGVEYXRhIHsKSW5kZXg6IFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk1
MCkKKysrIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QoTm9kZSogbiwgTm9kZUxpc3Q6OkNh
Y2hlcyogaW5mbykKLSAgICA6IE5vZGVMaXN0KG4sIGluZm8sIGZhbHNlKQorQ2hpbGROb2RlTGlz
dDo6Q2hpbGROb2RlTGlzdChOb2RlKiBuLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykK
KyAgICA6IER5bmFtaWNOb2RlTGlzdChuLCBpbmZvLCBmYWxzZSkKIHsKIH0KIApJbmRleDogV2Vi
Q29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxk
Tm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NTApCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTYgKzIw
LDE3IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRl
ZiBDaGlsZE5vZGVMaXN0X2gKICNkZWZpbmUgQ2hpbGROb2RlTGlzdF9oCiAKLSNpbmNsdWRlICJO
b2RlTGlzdC5oIgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIENoaWxkTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3Mg
Q2hpbGROb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3QgewogcHVibGljOgotICAgIENo
aWxkTm9kZUxpc3QoTm9kZSosIE5vZGVMaXN0OjpDYWNoZXMqKTsKKyAgICBDaGlsZE5vZGVMaXN0
KE5vZGUqLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDI4OTUwKQorKysgV2Vi
Q29yZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DbGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcywgTm9k
ZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQotICAgIDogTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywg
dHJ1ZSkKK0NsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyog
Y2FjaGVzKQorICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCBjYWNoZXMsIHRydWUpCiB7
CiAgICAgbV9jbGFzc05hbWVzLnBhcnNlQ2xhc3NBdHRyaWJ1dGUoY2xhc3NOYW1lcywgbV9yb290
Tm9kZS0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwogfQpJbmRleDogV2ViQ29yZS9kb20v
Q2xhc3NOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3Qu
aAkocmV2aXNpb24gMjg5NTApCisrKyBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDE1ICszMSwxNSBAQAogI2RlZmluZSBDbGFzc05vZGVMaXN0X2gKIAog
I2luY2x1ZGUgIkNsYXNzTmFtZXMuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUg
IkR5bmFtaWNOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBT
dHJpbmc7CiAKLSAgICBjbGFzcyBDbGFzc05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKKyAg
ICBjbGFzcyBDbGFzc05vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiAgICAgcHVi
bGljOgotICAgICAgICBDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNv
bnN0IFN0cmluZyYgY2xhc3NOYW1lcywgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgICAgICBDbGFz
c05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NO
YW1lcywgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQg
aW5kZXgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24gMjg5NTApCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTAgQEAgbW9k
dWxlIGNvcmUgewogCiAgICAgICAgIC8vIEhUTUwgNQogICAgICAgICBOb2RlTGlzdCAgICAgICAg
ICAgIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoaW4gRE9NU3RyaW5nIHRhZ25hbWUpOworCisgICAg
ICAgIC8vIERvY3VtZW50U2VsZWN0b3IgLSBTZWxlY3RvciBBUEkKKyAgICAgICAgLy9UT0RPOiBz
aG91bGQgYmUgU3RhdGljTm9kZUxpc3QKKyAgICAgICAgTm9kZUxpc3QgICAgICAgICAgICBxdWVy
eVNlbGVjdG9yQWxsKGluIERPTVN0cmluZyBzZWxlY3Rvcik7CiAgICAgfTsKIAogfQpJbmRleDog
V2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk1MCkJKGZyb20gV2ViQ29yZS9kb20v
Tm9kZUxpc3QuY3BwOjI4OTUwKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBAQAorLyoqCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChD
KSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOb2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCisgICAgOiBtX3Jvb3ROb2Rl
KHJvb3ROb2RlKQorICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKKyAgICAsIG1fb3duc0NhY2hl
cyh0cnVlKQorICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQor
eworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Cit9ICAgIAorCitOb2Rl
TGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hl
cyogaW5mbywgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCisgICAgOiBtX3Jvb3ROb2RlKHJvb3RO
b2RlKQorICAgICwgbV9jYWNoZXMoaW5mbykKKyAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKKyAg
ICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKK3sKKyAgICBtX3Jv
b3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6On5Ob2Rl
TGlzdCgpCit7CisgICAgbV9yb290Tm9kZS0+dW5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAg
IGlmIChtX293bnNDYWNoZXMpCisgICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKK30KKwordW5zaWdu
ZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QKK3sKKyAgICBp
ZiAoIXN0YXJ0KQorICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUuZ2V0KCk7CisKKyAgICBpZiAo
bV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBzdGFydCA9PSBtX3Jvb3ROb2RlKQorICAg
ICAgICByZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aDsKKworICAgIHVuc2lnbmVkIGxlbiA9
IDA7CisKKyAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAg
ICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgIGxlbisrOworICAgICAg
ICAgICAgbGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChuKTsKKyAgICAgICAgfQorCisgICAgaWYgKHN0
YXJ0ID09IG1fcm9vdE5vZGUpIHsKKyAgICAgICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxl
bjsKKyAgICAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGxlbjsKK30KKworTm9kZSogTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21D
dXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA+PSAwKTsKKworICAgIGZvciAo
Tm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShtX3Jvb3ROb2RlLmdl
dCgpKSkgeworICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBp
ZiAobm9kZU1hdGNoZXMobikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNl
dCkgeworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOworICAgICAg
ICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJlbWFpbmluZ09mZnNldC0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCit9CisKK05v
ZGUqIE5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2ln
bmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVt
YWluaW5nT2Zmc2V0IDwgMCk7CisgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50
cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgeworICAgICAgICBpZiAobi0+
aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5p
c0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCsrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNo
aW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCit9CisKK05vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJ
dGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQpIGNvbnN0Cit7CisgICAgaW50IHJlbWFp
bmluZ09mZnNldCA9IG9mZnNldDsKKyAgICBpZiAoIXN0YXJ0KSB7CisgICAgICAgIHN0YXJ0ID0g
bV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNh
Y2hlVmFsaWQpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbV9jYWNoZXMtPmxhc3RJdGVt
T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5sYXN0SXRlbTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IHx8
IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCAtIG9mZnNldCA8IG9mZnNldCkgeworICAgICAgICAg
ICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOworICAgICAgICAgICAgICAgIHJlbWFp
bmluZ09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVtYWluaW5nT2Zmc2V0IDwgMCkKKyAgICAgICAg
cmV0dXJuIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdP
ZmZzZXQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50
KHN0YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7Cit9CisKK05vZGUqIE5vZGVMaXN0Ojpp
dGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0Cit7CisgICAg
aWYgKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVu
dCgpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRF
bGVtZW50QnlJZChlbGVtZW50SWQpOworCisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZU1hdGNo
ZXMobm9kZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBmb3IgKE5vZGUqIHAg
PSBub2RlLT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5wYXJlbnROb2RlKCkpCisgICAgICAgICAg
ICBpZiAocCA9PSBtX3Jvb3ROb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworCisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHVuc2lnbmVkIGwgPSBsZW5ndGgoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIE5vZGUqIG5vZGUg
PSBpdGVtKGkpOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBO
b2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQoreworICAgIG1fY2FjaGVzLT5yZXNl
dCgpOworfQorCisKK05vZGVMaXN0OjpDYWNoZXM6OkNhY2hlcygpCisgICAgOiBsYXN0SXRlbSgw
KQorICAgICwgaXNMZW5ndGhDYWNoZVZhbGlkKGZhbHNlKQorICAgICwgaXNJdGVtQ2FjaGVWYWxp
ZChmYWxzZSkKK3sKK30KKwordm9pZCBOb2RlTGlzdDo6Q2FjaGVzOjpyZXNldCgpCit7CisgICAg
bGFzdEl0ZW0gPSAwOworICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgIGlzSXRl
bUNhY2hlVmFsaWQgPSBmYWxzZTsgICAgIAorfQorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9EeW5h
bWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlz
dC5jcHAJKHJldmlzaW9uIDI4OTUwKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKioKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjMsMzkgKzIxLDM5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVk
c05vdGlmaWNhdGlvbnMpCitEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKICAgICA6IG1fcm9v
dE5vZGUocm9vdE5vZGUpCiAgICAgLCBtX2NhY2hlcyhuZXcgQ2FjaGVzKQogICAgICwgbV9vd25z
Q2FjaGVzKHRydWUpCiAgICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlv
bnMpCiB7Ci0gICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBtX3Jv
b3ROb2RlLT5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCh0aGlzKTsKIH0gICAgCiAKLU5vZGVMaXN0
OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBOb2RlTGlzdDo6Q2FjaGVzKiBp
bmZvLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKK0R5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KiBpbmZvLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKICAgICA6IG1fcm9vdE5vZGUocm9vdE5v
ZGUpCiAgICAgLCBtX2NhY2hlcyhpbmZvKQogICAgICwgbV9vd25zQ2FjaGVzKGZhbHNlKQogICAg
ICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQogewotICAgIG1fcm9v
dE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJE
eW5hbWljTm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCi1Ob2RlTGlzdDo6fk5vZGVMaXN0KCkKK0R5
bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2RlTGlzdCgpCiB7Ci0gICAgbV9yb290Tm9kZS0+dW5y
ZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJEeW5hbWlj
Tm9kZUxpc3QodGhpcyk7CiAgICAgaWYgKG1fb3duc0NhY2hlcykKICAgICAgICAgZGVsZXRlIG1f
Y2FjaGVzOwogfQogCi11bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0
YXJ0KSBjb25zdAordW5zaWduZWQgRHluYW1pY05vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9k
ZSogc3RhcnQpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBtX3Jv
b3ROb2RlLmdldCgpOwpAQCAtODAsNyArNzgsNyBAQCB1bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJz
aXZlTGVuZ3RoKE5vZGUqCiAgICAgcmV0dXJuIGxlbjsKIH0KIAotTm9kZSogTm9kZUxpc3Q6Oml0
ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCBy
ZW1haW5pbmdPZmZzZXQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJk
c0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdP
ZmZzZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA+PSAwKTsKIApAQCAt
MTAxLDcgKzk5LDcgQEAgTm9kZSogTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KAog
ICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQogfQogCi1O
b2RlKiBOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNp
Z25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9k
ZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zm
c2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAogewogICAgIEFTU0VSVChyZW1haW5pbmdP
ZmZzZXQgPCAwKTsKICAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNl
UHJldmlvdXNOb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7CkBAIC0xMjEsNyArMTE5LDcgQEAgTm9k
ZSogTm9kZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudAogICAgIHJldHVybiAwOyAvLyBu
byBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQogfQogCi1Ob2RlKiBOb2RlTGlzdDo6cmVj
dXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAorTm9kZSogRHlu
YW1pY05vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQp
IGNvbnN0CiB7CiAgICAgaW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKICAgICBpZiAoIXN0
YXJ0KSB7CkBAIC0xNDIsNyArMTQwLDcgQEAgTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0o
dW5zaWduZWQgbwogICAgICAgICByZXR1cm4gaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoc3RhcnQs
IG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKIH0KIAotTm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRo
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKK05vZGUqIER5bmFtaWNO
b2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25z
dAogewogICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUt
PmluRG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1l
bnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKQEAgLTE2NywyMCArMTY1LDIwIEBAIE5v
ZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWkKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQordm9pZCBEeW5hbWlj
Tm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKIHsKICAgICBtX2NhY2hlcy0+cmVz
ZXQoKTsKIH0KIAogCi1Ob2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQorRHluYW1pY05vZGVMaXN0
OjpDYWNoZXM6OkNhY2hlcygpCiAgICAgOiBsYXN0SXRlbSgwKQogICAgICwgaXNMZW5ndGhDYWNo
ZVZhbGlkKGZhbHNlKQogICAgICwgaXNJdGVtQ2FjaGVWYWxpZChmYWxzZSkKIHsKIH0KIAotdm9p
ZCBOb2RlTGlzdDo6Q2FjaGVzOjpyZXNldCgpCit2b2lkIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
OjpyZXNldCgpCiB7CiAgICAgbGFzdEl0ZW0gPSAwOwogICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9
IGZhbHNlOwpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDI4OTUwKQkoZnJvbSBX
ZWJDb3JlL2RvbS9Ob2RlTGlzdC5oOjI4OTUwKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVM
aXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBOb2RlTGlzdF9oCisjZGVm
aW5lIE5vZGVMaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQXRvbWljU3RyaW5nOworY2xhc3MgTm9kZTsKKworY2xhc3MgTm9kZUxp
c3QgOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4geworcHVibGljOgorCisgICAgc3RydWN0
IENhY2hlcyB7CisgICAgICAgIENhY2hlcygpOworICAgICAgICB2b2lkIHJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBjYWNoZWRMZW5ndGg7CisgICAgICAgIE5vZGUqIGxhc3RJ
dGVtOworICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsKKyAgICAgICAgYm9vbCBpc0xl
bmd0aENhY2hlVmFsaWQgOiAxOworICAgICAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQgOiAxOwor
ICAgIH07CisKKyAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5l
ZWRzTm90aWZpY2F0aW9ucyk7CisgICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgQ2FjaGVzKiwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAgIHZpcnR1YWwgfk5vZGVM
aXN0KCk7CisKKyAgICBib29sIG5lZWRzTm90aWZpY2F0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNOb3RpZmljYXRpb25zOyB9CisKKyAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMg
Zm9yIE5vZGVMaXN0CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CisgICAgTm9k
ZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworCisgICAgLy8gT3Ro
ZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNo
aWxkcmVuQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5n
ZWQoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgLy8gaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNo
aW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCisgICAgdW5zaWduZWQgcmVjdXJzaXZlTGVu
Z3RoKE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7CisgICAgTm9kZSogcmVjdXJzaXZlSXRlbSAodW5z
aWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBu
b2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3QgPSAwOworCisgICAgUmVmUHRyPE5vZGU+
IG1fcm9vdE5vZGU7CisgICAgbXV0YWJsZSBDYWNoZXMqIG1fY2FjaGVzOworICAgIGJvb2wgbV9v
d25zQ2FjaGVzOworICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7CisKKyBwcml2YXRlOgor
ICAgIE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBv
ZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OworICAgIE5vZGUqIGl0ZW1CYWNrd2Fy
ZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5n
T2Zmc2V0KSBjb25zdDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5h
bWljTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NTApCisrKyBXZWJDb3JlL2RvbS9EeW5hbWljTm9k
ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yMyw5ICsyMSwxMCBAQAogICoKICAqLwogCi0jaWZuZGVmIE5vZGVMaXN0X2gKLSNk
ZWZpbmUgTm9kZUxpc3RfaAorI2lmbmRlZiBEeW5hbWljTm9kZUxpc3RfaAorI2RlZmluZSBEeW5h
bWljTm9kZUxpc3RfaAogCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtMzUsMTMgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0b21p
Y1N0cmluZzsKIGNsYXNzIE5vZGU7CiAKLWNsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50
ZWQ8Tm9kZUxpc3Q+IHsKK2NsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7
CiBwdWJsaWM6Ci0KICAgICBzdHJ1Y3QgQ2FjaGVzIHsKICAgICAgICAgQ2FjaGVzKCk7CiAgICAg
ICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgCisKICAgICAgICAgdW5zaWduZWQgY2FjaGVkTGVu
Z3RoOwogICAgICAgICBOb2RlKiBsYXN0SXRlbTsKICAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1P
ZmZzZXQ7CkBAIC00OSw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0l0ZW1DYWNo
ZVZhbGlkIDogMTsKICAgICB9OwogCi0gICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICB2
aXJ0dWFsIH5Ob2RlTGlzdCgpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAgRHluYW1pY05vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRp
b25zKTsKKyAgICB2aXJ0dWFsIH5EeW5hbWljTm9kZUxpc3QoKTsKIAogICAgIGJvb2wgbmVlZHNO
b3RpZmljYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7IH0KIApA
QCAtNjIsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFy
dCBvZiBET00pCiAgICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9CisgICAgdmlydHVh
bCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHsgfQogCiBwcm90ZWN0ZWQ6CiAgICAg
Ly8gaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0
cmVlCkBAIC03NSwxMSArNzMsMTEgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9vd25zQ2FjaGVz
OwogICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7CiAKLSBwcml2YXRlOgorcHJpdmF0ZToK
ICAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQg
b2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmFja3dh
cmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmlu
Z09mZnNldCkgY29uc3Q7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIER5bmFtaWNOb2RlTGlzdF9oCkluZGV4OiBXZWJDb3Jl
L2RvbS9FbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAko
cmV2aXNpb24gMjg5NTApCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDYgKzEwNSwxMCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIEhUTUwgNQog
ICAgICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGluIERPTVN0cmluZyBuYW1l
KTsKIAorICAgICAgICAvLyBFbGVtZW50U2VsZWN0b3IgLSBTZWxlY3RvciBBUEkKKyAgICAgICAg
Ly9UT0RPOiBzaG91bGQgYmUgU3RhdGljTm9kZUxpc3QKKyAgICAgICAgTm9kZUxpc3QgICAgICAg
ICAgICBxdWVyeVNlbGVjdG9yQWxsKGluIERPTVN0cmluZyBzZWxlY3Rvcik7CisKICNpZiBkZWZp
bmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAgICAgICAvLyBPYmplY3RpdmUtQyBleHRlbnNp
b25zCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaW5uZXJUZXh0OwpJbmRl
eDogV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk1MCkKKysrIFdlYkNvcmUvZG9tL05hbWVO
b2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1OYW1lTm9kZUxpc3Q6Ok5h
bWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNo
ZXMqIGNhY2hlcykKLSAgICA6IE5vZGVMaXN0KHJvb3QsIGNhY2hlcywgdHJ1ZSkKK05hbWVOb2Rl
TGlzdDo6TmFtZU5vZGVMaXN0KE5vZGUqIHJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAgICA6IER5bmFtaWNOb2RlTGlzdChyb290LCBj
YWNoZXMsIHRydWUpCiAgICAgLCBtX25vZGVOYW1lKG5hbWUpCiB7CiB9CkluZGV4OiBXZWJDb3Jl
L2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxp
c3QuaAkocmV2aXNpb24gMjg5NTApCisrKyBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDExIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBOYW1lTm9kZUxpc3RfaAogI2RlZmluZSBOYW1lTm9k
ZUxpc3RfaAogCi0jaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxp
c3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zMSw5ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8qKgogICogTm9kZUxpc3Qg
d2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxlbWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWU9IiB0
YWcKICAqLwotY2xhc3MgTmFtZU5vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKK2NsYXNzIE5h
bWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3QgewogcHVibGljOgotICAgIE5hbWVO
b2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMq
KTsKKyAgICBOYW1lTm9kZUxpc3QoTm9kZSogcm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5h
bWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBm
cm9tICBwYXJlbnQgY2xhc3NlcwogCkBAIC00Miw3ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
cm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNo
YW5nZWQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7
IER5bmFtaWNOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKTsgfQogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdDsK
SW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05v
ZGUuY3BwCShyZXZpc2lvbiAyODk1MCkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOSw2ICs0MCw3IEBACiAj
aW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiWE1MTmFt
ZXMuaCIKQEAgLTQ5LDE2ICs1MSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLXR5cGVkZWYgSGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0
U2V0OwordHlwZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owogc3Ry
dWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKICAgICBOb2RlTGlzdFNldCBtX2xpc3RzVG9Ob3RpZnk7
Ci0gICAgTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIE5vZGVMaXN0OjpDYWNoZXM+IG1fY2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBI
YXNoTWFwPFN0cmluZywgTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7Cisg
ICAgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIEhh
c2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2Fj
aGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1l
Tm9kZUxpc3RDYWNoZXM7CiB9OwogCiAvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRp
Y3VsYXIgdGFnLgotY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3Mg
VGFnTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKICAgICBUYWdO
b2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCkBAIC03Myw3ICs3
NSw3IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJ
LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IE5vZGVMaXN0KHJvb3ROb2Rl
LCB0cnVlKQorICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQogICAgICwgbV9u
YW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQog
ewpAQCAtNDQxLDcgKzQ0Myw3IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAg
ICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxp
c3QqIGxpc3QpCit2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2Rl
TGlzdCogbGlzdCkKIHsKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0
cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKQEAgLTQ1NCw3ICs0NTYsNyBAQCB2b2lkIE5v
ZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpCiAgICAgbV9kb2N1bWVudC0+YWRkTm9k
ZUxpc3QoKTsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxp
c3QpCit2b2lkIE5vZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0
KiBsaXN0KQogewogICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CiAgICAgbV9kb2N1bWVudC0+cmVt
b3ZlTm9kZUxpc3QoKTsKQEAgLTEyMTUsNyArMTIxNyw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25v
ZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKIAotICAgIHJldHVybiBuZXcgTmFt
ZU5vZGVMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCAmbV9ub2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0
Q2FjaGVzLmFkZChlbGVtZW50TmFtZSwgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25k
KTsKKyAgICByZXR1cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgJm1fbm9k
ZUxpc3RzLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIER5bmFtaWNOb2Rl
TGlzdDo6Q2FjaGVzKCkpLmZpcnN0LT5zZWNvbmQpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykK
QEAgLTEyMjMsNyArMTIyNSwxMiBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVt
ZW50c0J5CiAgICAgaWYgKCFtX25vZGVMaXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5l
dyBOb2RlTGlzdHNOb2RlRGF0YSk7CiAKLSAgICByZXR1cm4gbmV3IENsYXNzTm9kZUxpc3QodGhp
cywgY2xhc3NOYW1lcywgJm1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNs
YXNzTmFtZXMsIE5vZGVMaXN0OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJu
IG5ldyBDbGFzc05vZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsICZtX25vZGVMaXN0cy0+bV9jbGFz
c05vZGVMaXN0Q2FjaGVzLmFkZChjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygp
KS5maXJzdC0+c2Vjb25kKTsKK30KKworUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6cXVlcnlT
ZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQoreworICAgIHJldHVybiBuZXcgU2Vs
ZWN0b3JOb2RlTGlzdCh0aGlzLCBzZWxlY3Rvcik7CiB9CiAKIERvY3VtZW50ICpOb2RlOjpvd25l
ckRvY3VtZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDI4OTUwKQorKysgV2ViQ29yZS9kb20vTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEF0b21pY1N0cmluZzsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBEb2N1bWVu
dDsKK2NsYXNzIER5bmFtaWNOb2RlTGlzdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsK
IGNsYXNzIEV2ZW50TGlzdGVuZXI7CkBAIC00NDIsOCArNDQzLDggQEAgcHVibGljOgogICAgIHZv
aWQgc2hvd1RyZWVBbmRNYXJrKGNvbnN0IE5vZGUqIG1hcmtlZE5vZGUxLCBjb25zdCBjaGFyKiBt
YXJrZWRMYWJlbDEsIGNvbnN0IE5vZGUqIG1hcmtlZE5vZGUyID0gMCwgY29uc3QgY2hhciogbWFy
a2VkTGFiZWwyID0gMCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgcmVnaXN0ZXJOb2RlTGlz
dChOb2RlTGlzdCopOwotICAgIHZvaWQgdW5yZWdpc3Rlck5vZGVMaXN0KE5vZGVMaXN0Kik7Cisg
ICAgdm9pZCByZWdpc3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7CiAgICAgdm9p
ZCBub3RpZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeUxvY2Fs
Tm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlOb2RlTGlzdHNBdHRy
aWJ1dGVDaGFuZ2VkKCk7CkBAIC00NTEsOSArNDUyLDkgQEAgcHVibGljOgogICAgIAogICAgIFBh
c3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgU3Ry
aW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKLQogICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5h
bWUpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29u
c3QgU3RyaW5nJiBjbGFzc05hbWVzKTsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBxdWVyeVNl
bGVjdG9yQWxsKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOwogCiBwcml2YXRlOiAvLyBtZW1iZXJz
CiAgICAgRG9jUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwpJbmRleDogV2ViQ29yZS9kb20vTm9k
ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcAkocmV2aXNp
b24gMjg5NTApCisrKyBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTkwICswLDAgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgotCi0jaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJv
b2wgbmVlZHNOb3RpZmljYXRpb25zKQotICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKLSAgICAs
IG1fY2FjaGVzKG5ldyBDYWNoZXMpCi0gICAgLCBtX293bnNDYWNoZXModHJ1ZSkKLSAgICAsIG1f
bmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKLXsKLSAgICBtX3Jvb3ROb2Rl
LT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwotfSAgICAKLQotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJvb2wgbmVl
ZHNOb3RpZmljYXRpb25zKQotICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fY2Fj
aGVzKGluZm8pCi0gICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCi0gICAgLCBtX25lZWRzTm90aWZp
Y2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCi17Ci0gICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJO
b2RlTGlzdCh0aGlzKTsKLX0gICAgCi0KLU5vZGVMaXN0Ojp+Tm9kZUxpc3QoKQotewotICAgIG1f
cm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKLSAgICBpZiAobV9vd25zQ2FjaGVz
KQotICAgICAgICBkZWxldGUgbV9jYWNoZXM7Ci19Ci0KLXVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1
cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdGFydCkKLSAgICAg
ICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgpOwotCi0gICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0
aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgcmV0dXJuIG1fY2Fj
aGVzLT5jYWNoZWRMZW5ndGg7Ci0KLSAgICB1bnNpZ25lZCBsZW4gPSAwOwotCi0gICAgZm9yIChO
b2RlKiBuID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlTWF0
Y2hlcyhuKSkKLSAgICAgICAgICAgICAgICBsZW4rKzsKLSAgICAgICAgICAgIGxlbiArPSByZWN1
cnNpdmVMZW5ndGgobik7Ci0gICAgICAgIH0KLQotICAgIGlmIChzdGFydCA9PSBtX3Jvb3ROb2Rl
KSB7Ci0gICAgICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggPSBsZW47Ci0gICAgICAgIG1fY2Fj
aGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBsZW47
Ci19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFy
dCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAotewotICAgIEFT
U0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7Ci0KLSAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsg
bjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAg
aWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4p
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAgICAgICAgICAgbV9j
YWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBtX2Nh
Y2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQt
LTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOyAvLyBu
byBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQotfQotCi1Ob2RlKiBOb2RlTGlzdDo6aXRl
bUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCBy
ZW1haW5pbmdPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA8IDAp
OwotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05v
ZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkg
ewotICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyZW1haW5pbmdPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJ
dGVtID0gbjsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0g
b2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQrKzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMg
c3VidHJlZQotfQotCi1Ob2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZz
ZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAotewotICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgaWYgKCFzdGFydCkgewotICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUtPmZpcnN0
Q2hpbGQoKTsKLSAgICAgICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAg
ICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IG1f
Y2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9j
YWNoZXMtPmxhc3RJdGVtT2Zmc2V0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHJlbWFpbmluZ09mZnNldCA8IDApCi0gICAgICAgIHJldHVybiBpdGVtQmFja3dh
cmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKLSAgICBlbHNl
Ci0gICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCBy
ZW1haW5pbmdPZmZzZXQpOwotfQotCi1Ob2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAotewotICAgIGlmIChtX3Jvb3ROb2RlLT5p
c0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgewotICAgICAgICBO
b2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVu
dElkKTsKLQotICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgaWYgKHAgPT0gbV9yb290
Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsID0gbGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQotICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgTm9kZUxpc3Q6OnJvb3ROb2Rl
Q2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICBtX2NhY2hlcy0+cmVzZXQoKTsKLX0KLQotCi1Ob2Rl
TGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQotICAgIDogbGFzdEl0ZW0oMCkKLSAgICAsIGlzTGVuZ3Ro
Q2FjaGVWYWxpZChmYWxzZSkKLSAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCi17Ci19Ci0K
LXZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQotewotICAgIGxhc3RJdGVtID0gMDsKLSAg
ICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKLSAgICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFs
c2U7ICAgICAKLX0KLQotfQpJbmRleDogV2ViQ29yZS9kb20vTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCShyZXZpc2lvbiAyODk1MCkKKysrIFdlYkNvcmUv
ZG9tL05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDU4ICsyOCwyMyBAQAogCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdG9taWNT
dHJpbmc7Ci1jbGFzcyBOb2RlOworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBO
b2RlOwogCi1jbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7Ci1w
dWJsaWM6Ci0KLSAgICBzdHJ1Y3QgQ2FjaGVzIHsKLSAgICAgICAgQ2FjaGVzKCk7Ci0gICAgICAg
IHZvaWQgcmVzZXQoKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsK
LSAgICAgICAgTm9kZSogbGFzdEl0ZW07Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0
OwotICAgICAgICBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7Ci0gICAgICAgIGJvb2wgaXNJ
dGVtQ2FjaGVWYWxpZCA6IDE7CisgICAgY2xhc3MgTm9kZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRl
ZDxOb2RlTGlzdD4geworICAgIHB1YmxpYzoKKyAgICAgICAgTm9kZUxpc3QoKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB+Tm9kZUxpc3QoKSB7IH0KKworICAgICAgICAvLyBET00gbWV0aG9kcyAmIGF0
dHJpYnV0ZXMgZm9yIE5vZGVMaXN0CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBOb2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3QgPSAwOwogICAgIH07CiAKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgTm9kZUxpc3QoUGFz
c1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKiwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMp
OwotICAgIHZpcnR1YWwgfk5vZGVMaXN0KCk7Ci0KLSAgICBib29sIG5lZWRzTm90aWZpY2F0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNOb3RpZmljYXRpb25zOyB9Ci0KLSAgICAvLyBET00g
bWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdCA9IDA7Ci0gICAgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYp
IGNvbnN0OwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotICAgIHZp
cnR1YWwgdm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBy
b290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gaGVscGVy
IGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCi0gICAg
dW5zaWduZWQgcmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7Ci0gICAgTm9k
ZSogcmVjdXJzaXZlSXRlbSAodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCA9IDApIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3QgPSAw
OwotCi0gICAgUmVmUHRyPE5vZGU+IG1fcm9vdE5vZGU7Ci0gICAgbXV0YWJsZSBDYWNoZXMqIG1f
Y2FjaGVzOwotICAgIGJvb2wgbV9vd25zQ2FjaGVzOwotICAgIGJvb2wgbV9uZWVkc05vdGlmaWNh
dGlvbnM7Ci0KLSBwcml2YXRlOgotICAgIE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5v
ZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Owot
ICAgIE5vZGUqIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQg
b2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKLX07Ci0KLX0gLy9uYW1lc3BhY2UK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgTm9kZUxpc3RfaApJbmRl
eDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9T
ZWxlY3Rvck5vZGVMaXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdG9yTm9kZUxpc3QuaCIKKworI2luY2x1ZGUg
IkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxl
UnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlbGVjdG9yTm9kZUxp
c3Q6OlNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3Ry
aW5nJiBjc3NTZWxlY3RvclRleHQpCit7CisgICAgQ1NTU3R5bGVTaGVldCB0ZW1wU3R5bGVTaGVl
dChyb290Tm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
dGVtcFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShjc3NTZWxlY3RvclRleHQgKyAie30iLCAwLCBlYyk7
CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm47CisgICAgQ1NTUnVsZSogcnVsZSA9IHRlbXBT
dHlsZVNoZWV0LmNzc1J1bGVzKHRydWUpLT5pdGVtKDApOworICAgIGlmICghcnVsZS0+aXNTdHls
ZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjdXJzaXZlQWRkTm9kZXNUb1ZlY3Rv
cihyb290Tm9kZS5nZXQoKSwgcm9vdE5vZGUtPmRvY3VtZW50KCksIHN0YXRpY19jYXN0PENTU1N0
eWxlUnVsZSo+KHJ1bGUpLT5zZWxlY3RvcigpKTsKK30KKwordm9pZCBTZWxlY3Rvck5vZGVMaXN0
OjpyZWN1cnNpdmVBZGROb2Rlc1RvVmVjdG9yKE5vZGUqIHN0YXJ0LCBEb2N1bWVudCogZG9jdW1l
bnQsIENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK3sKKyAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+
Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAobi0+
aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNl
bGVjdG9yID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4p
KTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9yKHNlbGVjdG9y
KSkKKyAgICAgICAgICAgICAgICBtX25vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgIHJlY3Vy
c2l2ZUFkZE5vZGVzVG9WZWN0b3IobiwgZG9jdW1lbnQsIHNlbGVjdG9yKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vU2Vs
ZWN0b3JOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxp
c3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWxlY3Rvck5vZGVMaXN0X2gKKyNk
ZWZpbmUgU2VsZWN0b3JOb2RlTGlzdF9oCisKKyNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNs
YXNzIENTU1NlbGVjdG9yOworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIE5vZGU7Cisg
ICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgU2VsZWN0b3JOb2RlTGlzdCA6IHB1YmxpYyBT
dGF0aWNOb2RlTGlzdCB7CisgICAgcHVibGljOgorICAgICAgICBTZWxlY3Rvck5vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdm9pZCByZWN1cnNpdmVBZGROb2Rlc1RvVmVjdG9yKE5vZGUqLCBE
b2N1bWVudCosIENTU1NlbGVjdG9yKik7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gU2VsZWN0b3JOb2RlTGlzdF9oCkluZGV4OiBXZWJDb3JlL2RvbS9TdGF0
aWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3Qu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U3RhdGljTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dW5zaWduZWQgU3RhdGljTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bm9kZXMuc2l6ZSgpOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBtX25vZGVzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIG1fbm9kZXNbaW5kZXhdOworICAgIHJldHVybiAwOworfQorCitOb2RlKiBTdGF0aWNO
b2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25z
dAoreworICAgIHNpemVfdCBsZW5ndGggPSBtX25vZGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGVz
W2ldOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAgICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9kb20vU3RhdGljTm9kZUxpc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTdGF0aWNOb2RlTGlzdF9oCisjZGVmaW5lIFN0YXRpY05vZGVMaXN0X2gKKworI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBOb2RlOworCisgICAgY2xhc3MgU3RhdGljTm9kZUxpc3QgOiBw
dWJsaWMgTm9kZUxpc3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gRGVyaXZlZCBjbGFzc2Vz
IHNob3VsZCBidWlsZCB1cCB0aGUgVmVjdG9yIGluIHRoZWlyIGNvbnN0cnVjdG9yLgorICAgICAg
ICBTdGF0aWNOb2RlTGlzdCgpIHsgfQorICAgICAgICB2aXJ0dWFsIH5TdGF0aWNOb2RlTGlzdCgp
IHsgfQorCisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBWZWN0b3I8Tm9kZSo+IG1fbm9kZXM7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RhdGljTm9kZUxpc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18088</attachid>
            <date>2007-12-23 22:36:31 -0800</date>
            <delta_ts>2007-12-23 22:36:31 -0800</delta_ts>
            <desc>more fun</desc>
            <filename>selector3.diff</filename>
            <type>text/plain</type>
            <size>55940</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI4OTUwKQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTc4LDcg
KzE5NzgsNiBAQAogCQlBODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxMzA5
NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggKi87IH07CiAJCUE4MTg3MjFGMDk3N0Qz
QzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE0MDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWlu
ZXJOb2RlLmNwcCAqLzsgfTsKIAkJQTgxODcyMjAwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9k
ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmggKi87IH07Ci0JCUE4MTg3
MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxNjA5NzdEM0MwMDA1ODI2RDkgLyogTm9k
ZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2Rl
TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4
NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5
IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAq
LzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMUEwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovOyB9OwpAQCAtMzYxNCw2ICszNjEz
LDEyIEBACiAJCUJDNzcyQzRGMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0RDBD
NEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAv
KiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRFQjM0NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0
cnlNYWMubW0gKi87IH07CiAJCUJDN0Y0NEE4MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2Vy
dmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdG
NDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDN0ZBNjIwMEQxRjBDQkQwMERCMjJB
OSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM3RkE2MUUwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlz
dC5jcHAgKi87IH07CisJCUJDN0ZBNjIxMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZB
NjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2
MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyog
U3RhdGljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2MkUwRDFGMEVGRjAwREIyMkE5IC8qIFN0
YXRpY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgKi87
IH07CisJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY3RjBEMUYx
Njc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oICovOyB9OworCQlCQzdGQTY4MjBEMUYx
Njc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2Vs
ZWN0b3JOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDODBDOTg3MENEMjk0RUUwMEEwQjdCMyAvKiBD
U1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDODBDOTg1MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5j
dGlvblZhbHVlLmNwcCAqLzsgfTsKIAkJQkM4MEM5ODgwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDODBDOTg2MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZh
bHVlLmggKi87IH07CiAJCUJDODBDOThCMENEMjk1MDUwMEEwQjdCMyAvKiBBbmltYXRpb25Db250
cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDODBDOTg5MENEMjk1MDUwMEEwQjdCMyAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLzsg
fTsKQEAgLTYxMDgsNyArNjExMyw2IEBACiAJCUE4MTg3MjEzMDk3N0QzQzAwMDU4MjZEOSAvKiBO
YW1lTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVOb2Rl
TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxNDA5NzdEM0MwMDA1
ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWluZXJOb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTUwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoaWxkTm9kZUxpc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8q
IE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2Rl
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MTg3MjE4MDk3N0QzQzAw
MDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIx
OTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjI1LDYgKzc2MjksMTIgQEAKIAkJQkM3
QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbEJhci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxCYXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1
MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xs
QmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlT2JzZXJ2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUUwRDFGMENCRDAwREIyMkE5IC8qIER5bmFt
aWNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEeW5h
bWljTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTYxRjBE
MUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IER5bmFtaWNOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MkMwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0YXRpY05vZGVM
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2N0YwRDFGMTY3OTAw
REIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2VsZWN0b3JOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
QzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rvck5vZGVMaXN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODUwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVGltaW5nRnVuY3Rpb25WYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4OTBDRDI5NTA1MDBBMEI3
QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjE2Niw2ICsxMjE3Niw4IEBACiAJCQkJQTgxODVGMzYwOTc2NTc2NTAwNTgy
NkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODE4NUYzMzA5NzY1NzY1MDA1
ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywKIAkJCQk5M0VFQzFFOTA5QzI4Nzc3MDBD
NTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICovLAorCQkJCUJDN0ZBNjFFMEQxRjBDQkQw
MERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICovLAorCQkJCUJDN0ZBNjFGMEQxRjBDQkQw
MERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLywKIAkJCQk2NTUwQjY5OTA5OURGMDI3MDA5
MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJCTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4
MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRBN0Y2MDlENTYzMjcwMDAzQUM4RCAvKiBF
bGVtZW50LmNwcCAqLywKQEAgLTEyMjI0LDcgKzEyMjM2LDYgQEAKIAkJCQk4NTRGRTcyQTBBMjI5
N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCAqLywKIAkJCQk4NTRGRTcyQjBBMjI5N0JF
MDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi8sCiAJCQkJMUE3NTBEODcwQTkwRTM5NDAwMEZG
MjE1IC8qIE5vZGVJdGVyYXRvci5pZGwgKi8sCi0JCQkJQTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5
IC8qIE5vZGVMaXN0LmNwcCAqLywKIAkJCQlBODE4NzIxMDA5NzdEM0MwMDA1ODI2RDkgLyogTm9k
ZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAgLyogTm9kZUxpc3QuaWRs
ICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1RiAvKiBOb3RhdGlvbi5jcHAgKi8sCkBA
IC0xMjI1Miw2ICsxMjI2MywxMCBAQAogCQkJCUQyM0NBNTQ4MEFCMEU5ODMwMDUxMDhBNSAvKiBS
YW5nZUV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJODUwMzFCMzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk4NTAzMUIzNjBBNDRFRkM3MDBGOTky
RTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAqLywKKwkJCQlCQzdGQTY4MDBEMUYxNjc5
MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi8sCisJCQkJQkM3RkE2N0YwRDFGMTY3
OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLywKKwkJCQlCQzdGQTYyQzBEMUYwRUZG
MDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICovLAorCQkJCUJDN0ZBNjJCMEQxRjBFRkYw
MERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oICovLAogCQkJCUE4QzRBN0VDMDlENTYzMjcwMDAz
QUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywKIAkJCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FD
OEQgLyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJCUFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAv
KiBTdHlsZUVsZW1lbnQuY3BwICovLApAQCAtMTQxMTgsNiArMTQxMzMsOSBAQAogCQkJCTkzMzA5
RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8qIEpTTG9jYXRpb24ubHV0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlCQzdGQTYyMTBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyRDBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGlj
Tm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAv
KiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1Mzc3LDcgKzE1Mzk1LDYg
QEAKIAkJCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRp
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3QUQgLyog
Tm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4MTg3MjIxMDk3N0QzQzAwMDU4
MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBN0VCRjBBMTk0NUQw
MDBBOEVGNUYgLyogTm90YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEwRDU3MzYwQTVD
NzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3
NTM1NjQwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC0xNTgzMiw2ICsxNTg0OSw5IEBACiAJCQkJOTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgx
IC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1
ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0EzNzkxNDBEMTYz
RTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzdGQTYy
MDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMjg5NTApCisrKyBjc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTEgKzEyOSwxMSBAQCBj
bGFzcyBTdHlsZWRFbGVtZW50OwogIAogICAgICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxl
Y3RvcigpIHsgcmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CiAKLSAgICBwcm90ZWN0ZWQ6
Ci0KICAgICAgICAgLyogY2hlY2tzIGlmIGEgY29tcG91bmQgc2VsZWN0b3IgKHdoaWNoIGNhbiBj
b25zaXN0IG9mIG11bHRpcGxlIHNpbXBsZSBzZWxlY3RvcnMpCiAgICAgICAgICAgIG1hdGNoZXMg
dGhlIGdpdmVuIEVsZW1lbnQgKi8KLSAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVj
dG9yKiBzZWxlY3Rvcik7CisgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciop
OworCisgICAgcHJvdGVjdGVkOgogICAgICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rv
ck1hdGNoZXM9MCwgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
fTsKICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxl
Y3RvciwgRWxlbWVudCAqZSwgYm9vbCBpc0FuY2VzdG9yLCBib29sIGlzU3ViU2VsZWN0b3IpOwog
CkBAIC0yNDIsNiArMjQyLDcgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICNlbmRpZgogCiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBDU1NSdWxlU2V0OworICAgICAgICBmcmllbmQgY2xhc3MgTm9kZTsK
ICAgICB9OwogCiAgICAgY2xhc3MgQ1NTUnVsZURhdGEgewpJbmRleDogZG9tL0NoaWxkTm9kZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9DaGlsZE5vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5
NTApCisrKyBkb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMw
LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2RlKiBuLCBOb2RlTGlzdDo6Q2FjaGVzKiBp
bmZvKQotICAgIDogTm9kZUxpc3QobiwgaW5mbywgZmFsc2UpCitDaGlsZE5vZGVMaXN0OjpDaGls
ZE5vZGVMaXN0KE5vZGUqIG4sIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKiBpbmZvKQorICAgIDog
RHluYW1pY05vZGVMaXN0KG4sIGluZm8sIGZhbHNlKQogewogfQogCkluZGV4OiBkb20vQ2hpbGRO
b2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9DaGlsZE5vZGVMaXN0LmgJKHJldmlzaW9uIDI4
OTUwKQorKysgZG9tL0NoaWxkTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4
IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBm
b3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiwxNiArMjAsMTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIENoaWxkTm9kZUxpc3RfaAogI2RlZmluZSBDaGls
ZE5vZGVMaXN0X2gKIAotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05v
ZGVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2hpbGROb2RlTGlzdCA6
IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVibGljIER5bmFtaWNO
b2RlTGlzdCB7CiBwdWJsaWM6Ci0gICAgQ2hpbGROb2RlTGlzdChOb2RlKiwgTm9kZUxpc3Q6OkNh
Y2hlcyopOworICAgIENoaWxkTm9kZUxpc3QoTm9kZSosIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
Kik7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Tm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBkb20vQ2xhc3NOb2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZG9tL0NsYXNzTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk1
MCkKKysrIGRvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxp
c3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBO
b2RlTGlzdDo6Q2FjaGVzKiBjYWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290Tm9kZSwgY2FjaGVz
LCB0cnVlKQorQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KiBjYWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywgdHJ1ZSkK
IHsKICAgICBtX2NsYXNzTmFtZXMucGFyc2VDbGFzc0F0dHJpYnV0ZShjbGFzc05hbWVzLCBtX3Jv
b3ROb2RlLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiB9CkluZGV4OiBkb20vQ2xhc3NO
b2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9DbGFzc05vZGVMaXN0LmgJKHJldmlzaW9uIDI4
OTUwKQorKysgZG9tL0NsYXNzTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMx
LDE1IEBACiAjZGVmaW5lIENsYXNzTm9kZUxpc3RfaAogCiAjaW5jbHVkZSAiQ2xhc3NOYW1lcy5o
IgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFN0cmluZzsKIAotICAgIGNsYXNzIENs
YXNzTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworICAgIGNsYXNzIENsYXNzTm9kZUxpc3Qg
OiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENsYXNzTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVz
LCBOb2RlTGlzdDo6Q2FjaGVzKik7CisgICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6
OkNhY2hlcyopOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBk
b20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9u
IDI4OTUwKQorKysgZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIy
MiwxMiBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAgIE5vZGVM
aXN0ICAgICAgICAgICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgdGFnbmFt
ZSk7CisKKyAgICAgICAgLy8gRG9jdW1lbnRTZWxlY3RvciAtIFNlbGVjdG9yIEFQSQorICAgICAg
ICBFbGVtZW50ICAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3IoaW4gRE9NU3RyaW5nIHNlbGVjdG9y
cykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBOb2RlTGlzdCAg
ICAgICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykKKyAgICAg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KSW5kZXg6IGRvbS9EeW5h
bWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAyODk1MCkJKGZyb20gZG9tL05vZGVMaXN0LmNwcDoyODk1MCkKKysrIGRvbS9EeW5h
bWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKioKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05vZGVMaXN0OjpOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykK
KyAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCisgICAgLCBtX2NhY2hlcyhuZXcgQ2FjaGVzKQor
ICAgICwgbV9vd25zQ2FjaGVzKHRydWUpCisgICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVk
c05vdGlmaWNhdGlvbnMpCit7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlz
KTsKK30gICAgCisKK05vZGVMaXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCBOb2RlTGlzdDo6Q2FjaGVzKiBpbmZvLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKKyAgICA6
IG1fcm9vdE5vZGUocm9vdE5vZGUpCisgICAgLCBtX2NhY2hlcyhpbmZvKQorICAgICwgbV9vd25z
Q2FjaGVzKGZhbHNlKQorICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRp
b25zKQoreworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Cit9ICAgIAor
CitOb2RlTGlzdDo6fk5vZGVMaXN0KCkKK3sKKyAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyTm9k
ZUxpc3QodGhpcyk7CisgICAgaWYgKG1fb3duc0NhY2hlcykKKyAgICAgICAgZGVsZXRlIG1fY2Fj
aGVzOworfQorCit1bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0
KSBjb25zdAoreworICAgIGlmICghc3RhcnQpCisgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5n
ZXQoKTsKKworICAgIGlmIChtX2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlkICYmIHN0YXJ0ID09
IG1fcm9vdE5vZGUpCisgICAgICAgIHJldHVybiBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOworCisg
ICAgdW5zaWduZWQgbGVuID0gMDsKKworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0LT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQorICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAg
ICAgbGVuKys7CisgICAgICAgICAgICBsZW4gKz0gcmVjdXJzaXZlTGVuZ3RoKG4pOworICAgICAg
ICB9CisKKyAgICBpZiAoc3RhcnQgPT0gbV9yb290Tm9kZSkgeworICAgICAgICBtX2NhY2hlcy0+
Y2FjaGVkTGVuZ3RoID0gbGVuOworICAgICAgICBtX2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlk
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuOworfQorCitOb2RlKiBOb2RlTGlzdDo6
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0ID49
IDApOworCisgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkgeworICAgICAgICAgICAgICAgIGlm
ICghcmVtYWluaW5nT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0
SXRlbSA9IG47CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0LS07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlz
IHN1YnRyZWUKK30KKworTm9kZSogTm9kZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChO
b2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAor
eworICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPCAwKTsKKyAgICBmb3IgKE5vZGUgKm4gPSBz
dGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7
CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
TWF0Y2hlcyhuKSkgeworICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47CisgICAgICAgICAgICAg
ICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVtYWlu
aW5nT2Zmc2V0Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKK30KKworTm9kZSogTm9k
ZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QK
K3sKKyAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmICghc3RhcnQpIHsK
KyAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIGlmICht
X2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgeworICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBt
X2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWNo
ZXMtPmxhc3RJdGVtOworICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPiBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgfHwgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IC0gb2Zmc2V0IDwgb2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBtX2NhY2hlcy0+bGFzdEl0ZW07CisgICAg
ICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0IC09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZW1haW5pbmdPZmZz
ZXQgPCAwKQorICAgICAgICByZXR1cm4gaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBv
ZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gaXRlbUZv
cndhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKK30KKwor
Tm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJ
ZCkgY29uc3QKK3sKKyAgICBpZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jv
b3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUt
PmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICAgICAgaWYgKCFu
b2RlIHx8ICFub2RlTWF0Y2hlcyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAg
ICAgIGZvciAoTm9kZSogcCA9IG5vZGUtPnBhcmVudE5vZGUoKTsgcDsgcCA9IHAtPnBhcmVudE5v
ZGUoKSkKKyAgICAgICAgICAgIGlmIChwID09IG1fcm9vdE5vZGUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdW5zaWduZWQg
bCA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGl0ZW0oaSk7CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnRO
b2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRJREF0dHJpYnV0ZSgpID09
IGVsZW1lbnRJZCkKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCit2b2lkIE5vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCit7Cisg
ICAgbV9jYWNoZXMtPnJlc2V0KCk7Cit9CisKKworTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkK
KyAgICA6IGxhc3RJdGVtKDApCisgICAgLCBpc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpCisgICAg
LCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQoreworfQorCit2b2lkIE5vZGVMaXN0OjpDYWNoZXM6
OnJlc2V0KCkKK3sKKyAgICBsYXN0SXRlbSA9IDA7CisgICAgaXNMZW5ndGhDYWNoZVZhbGlkID0g
ZmFsc2U7CisgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOyAgICAgCit9CisKK30KSW5kZXg6
IGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9EeW5hbWljTm9kZUxp
c3QuY3BwCShyZXZpc2lvbiAyODk1MCkKKysrIGRvbS9EeW5hbWljTm9kZUxpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywz
OSArMjEsMzkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU5vZGVM
aXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZp
Y2F0aW9ucykKK0R5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQogICAgIDogbV9yb290Tm9kZShy
b290Tm9kZSkKICAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCiAgICAgLCBtX293bnNDYWNoZXMo
dHJ1ZSkKICAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKIHsK
LSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUt
PnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRoaXMpOwogfSAgICAKIAotTm9kZUxpc3Q6Ok5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJv
b2wgbmVlZHNOb3RpZmljYXRpb25zKQorRHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGluZm8s
IGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQogICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKICAg
ICAsIG1fY2FjaGVzKGluZm8pCiAgICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCiAgICAgLCBtX25l
ZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCiB7Ci0gICAgbV9yb290Tm9kZS0+
cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBtX3Jvb3ROb2RlLT5yZWdpc3RlckR5bmFtaWNO
b2RlTGlzdCh0aGlzKTsKIH0gICAgCiAKLU5vZGVMaXN0Ojp+Tm9kZUxpc3QoKQorRHluYW1pY05v
ZGVMaXN0Ojp+RHluYW1pY05vZGVMaXN0KCkKIHsKLSAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVy
Tm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlz
dCh0aGlzKTsKICAgICBpZiAobV9vd25zQ2FjaGVzKQogICAgICAgICBkZWxldGUgbV9jYWNoZXM7
CiB9CiAKLXVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNv
bnN0Cit1bnNpZ25lZCBEeW5hbWljTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFy
dCkgY29uc3QKIHsKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUu
Z2V0KCk7CkBAIC04MCw3ICs3OCw3IEBAIHVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNpdmVMZW5n
dGgoTm9kZSoKICAgICByZXR1cm4gbGVuOwogfQogCi1Ob2RlKiBOb2RlTGlzdDo6aXRlbUZvcndh
cmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmlu
Z09mZnNldCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1
cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkg
Y29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0ID49IDApOwogCkBAIC0xMDEsNyAr
OTksNyBAQCBOb2RlKiBOb2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoCiAgICAgcmV0
dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCiB9CiAKLU5vZGUqIE5v
ZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9m
ZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2RlTGlzdDo6
aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGlu
dCByZW1haW5pbmdPZmZzZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA8
IDApOwogICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91
c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKQEAgLTEyMSw3ICsxMTksNyBAQCBOb2RlKiBOb2Rl
TGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50CiAgICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNo
aW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCiB9CiAKLU5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJ
dGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9k
ZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QK
IHsKICAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zmc2V0OwogICAgIGlmICghc3RhcnQpIHsK
QEAgLTE0Miw3ICsxNDAsNyBAQCBOb2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25l
ZCBvCiAgICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0
LCByZW1haW5pbmdPZmZzZXQpOwogfQogCi1Ob2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0
OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1
bWVudCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5n
ZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwpAQCAtMTY3LDIwICsxNjUsMjAgQEAgTm9kZSogTm9k
ZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zdCBBdG9taQogICAgIHJldHVybiAwOwogfQogCi12b2lk
IE5vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCit2b2lkIER5bmFtaWNOb2RlTGlz
dDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQogewogICAgIG1fY2FjaGVzLT5yZXNldCgpOwog
fQogCiAKLU5vZGVMaXN0OjpDYWNoZXM6OkNhY2hlcygpCitEeW5hbWljTm9kZUxpc3Q6OkNhY2hl
czo6Q2FjaGVzKCkKICAgICA6IGxhc3RJdGVtKDApCiAgICAgLCBpc0xlbmd0aENhY2hlVmFsaWQo
ZmFsc2UpCiAgICAgLCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQogewogfQogCi12b2lkIE5vZGVM
aXN0OjpDYWNoZXM6OnJlc2V0KCkKK3ZvaWQgRHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OnJlc2V0
KCkKIHsKICAgICBsYXN0SXRlbSA9IDA7CiAgICAgaXNMZW5ndGhDYWNoZVZhbGlkID0gZmFsc2U7
CkluZGV4OiBkb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0R5bmFtaWNO
b2RlTGlzdC5oCShyZXZpc2lvbiAyODk1MCkJKGZyb20gZG9tL05vZGVMaXN0Lmg6Mjg5NTApCisr
KyBkb20vRHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
KyAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBOb2RlTGlzdF9oCisjZGVmaW5lIE5vZGVMaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXRvbWljU3RyaW5nOworY2xhc3MgTm9k
ZTsKKworY2xhc3MgTm9kZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4geworcHVi
bGljOgorCisgICAgc3RydWN0IENhY2hlcyB7CisgICAgICAgIENhY2hlcygpOworICAgICAgICB2
b2lkIHJlc2V0KCk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjYWNoZWRMZW5ndGg7Cisg
ICAgICAgIE5vZGUqIGxhc3RJdGVtOworICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsK
KyAgICAgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAxOworICAgICAgICBib29sIGlzSXRl
bUNhY2hlVmFsaWQgOiAxOworICAgIH07CisKKyAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAgTm9kZUxpc3QoUGFzc1Jl
ZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKiwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwor
ICAgIHZpcnR1YWwgfk5vZGVMaXN0KCk7CisKKyAgICBib29sIG5lZWRzTm90aWZpY2F0aW9ucygp
IGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNOb3RpZmljYXRpb25zOyB9CisKKyAgICAvLyBET00gbWV0
aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdCA9IDA7CisgICAgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OworCisgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorICAgIHZpcnR1
YWwgdm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCByb290
Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgLy8gaGVscGVyIGZ1
bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCisgICAgdW5z
aWduZWQgcmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7CisgICAgTm9kZSog
cmVjdXJzaXZlSXRlbSAodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCA9IDApIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3QgPSAwOwor
CisgICAgUmVmUHRyPE5vZGU+IG1fcm9vdE5vZGU7CisgICAgbXV0YWJsZSBDYWNoZXMqIG1fY2Fj
aGVzOworICAgIGJvb2wgbV9vd25zQ2FjaGVzOworICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlv
bnM7CisKKyBwcml2YXRlOgorICAgIE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUq
IHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OworICAg
IE5vZGUqIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zm
c2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKK307CisKK30gLy9uYW1lc3BhY2UKKwor
I2VuZGlmCkluZGV4OiBkb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0R5
bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAyODk1MCkKKysrIGRvbS9EeW5hbWljTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0yMyw5ICsyMSwxMCBAQAogICoKICAqLwogCi0jaWZuZGVmIE5vZGVMaXN0X2gKLSNkZWZpbmUg
Tm9kZUxpc3RfaAorI2lmbmRlZiBEeW5hbWljTm9kZUxpc3RfaAorI2RlZmluZSBEeW5hbWljTm9k
ZUxpc3RfaAogCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpA
QCAtMzUsMTMgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0b21pY1N0cmlu
ZzsKIGNsYXNzIE5vZGU7CiAKLWNsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8Tm9k
ZUxpc3Q+IHsKK2NsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CiBwdWJs
aWM6Ci0KICAgICBzdHJ1Y3QgQ2FjaGVzIHsKICAgICAgICAgQ2FjaGVzKCk7CiAgICAgICAgIHZv
aWQgcmVzZXQoKTsKLSAgICAgICAgCisKICAgICAgICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOwog
ICAgICAgICBOb2RlKiBsYXN0SXRlbTsKICAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7
CkBAIC00OSw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlk
IDogMTsKICAgICB9OwogCi0gICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Ym9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
cm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICB2aXJ0dWFs
IH5Ob2RlTGlzdCgpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAgRHluYW1pY05vZGVMaXN0KFBhc3NS
ZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsK
KyAgICB2aXJ0dWFsIH5EeW5hbWljTm9kZUxpc3QoKTsKIAogICAgIGJvb2wgbmVlZHNOb3RpZmlj
YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7IH0KIApAQCAtNjIs
NyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBE
T00pCiAgICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9CisgICAgdmlydHVhbCB2b2lk
IHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gaGVs
cGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCkBA
IC03NSwxMSArNzMsMTEgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9vd25zQ2FjaGVzOwogICAg
IGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7CiAKLSBwcml2YXRlOgorcHJpdmF0ZToKICAgICBO
b2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJv
bUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNl
dCkgY29uc3Q7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgorI2VuZGlmIC8vIER5bmFtaWNOb2RlTGlzdF9oCkluZGV4OiBkb20vRWxlbWVudC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL0VsZW1lbnQuaWRsCShyZXZpc2lvbiAyODk1MCkKKysrIGRv
bS9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMiBAQCBtb2R1bGUg
Y29yZSB7CiAgICAgICAgIC8vIEhUTUwgNQogICAgICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKGluIERPTVN0cmluZyBuYW1lKTsKIAorICAgICAgICAvLyBFbGVtZW50U2VsZWN0
b3IgLSBTZWxlY3RvciBBUEkKKyAgICAgICAgRWxlbWVudCAgICAgICAgICAgICBxdWVyeVNlbGVj
dG9yKGluIERPTVN0cmluZyBzZWxlY3RvcnMpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKyAgICAgICAgTm9kZUxpc3QgICAgICAgICAgICBxdWVyeVNlbGVjdG9yQWxsKGluIERP
TVN0cmluZyBzZWxlY3RvcnMpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwog
I2lmIGRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpCiAgICAgICAgIC8vIE9iamVjdGl2ZS1D
IGV4dGVuc2lvbnMKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBpbm5lclRl
eHQ7CkluZGV4OiBkb20vTmFtZU5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vTmFtZU5v
ZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NTApCisrKyBkb20vTmFtZU5vZGVMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLU5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KE5vZGUq
IHJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQotICAg
IDogTm9kZUxpc3Qocm9vdCwgY2FjaGVzLCB0cnVlKQorTmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxp
c3QoTm9kZSogcm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hl
cyogY2FjaGVzKQorICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3QsIGNhY2hlcywgdHJ1ZSkKICAg
ICAsIG1fbm9kZU5hbWUobmFtZSkKIHsKIH0KSW5kZXg6IGRvbS9OYW1lTm9kZUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBkb20vTmFtZU5vZGVMaXN0LmgJKHJldmlzaW9uIDI4OTUwKQorKysgZG9tL05h
bWVOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsMTEgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIE5hbWVOb2RlTGlzdF9o
CiAjZGVmaW5lIE5hbWVOb2RlTGlzdF9oCiAKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1
ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxLDkgKzMyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
LyoqCiAgKiBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50IHdpdGgg
YSBnaXZlbiAibmFtZT0iIHRhZwogICovCi1jbGFzcyBOYW1lTm9kZUxpc3QgOiBwdWJsaWMgTm9k
ZUxpc3QgeworY2xhc3MgTmFtZU5vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiBw
dWJsaWM6Ci0gICAgTmFtZU5vZGVMaXN0KE5vZGUqIHJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Tm9kZUxpc3Q6OkNhY2hlcyopOworICAgIE5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBT
dHJpbmcmIG5hbWUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICAvLyBET00gbWV0
aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCiAKQEAgLTQyLDcgKzQzLDcgQEAg
cHVibGljOgogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIAot
ICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IE5vZGVMaXN0Ojpy
b290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQXR0
cmlidXRlQ2hhbmdlZCgpIHsgRHluYW1pY05vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdl
ZCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSog
dGVzdE5vZGUpIGNvbnN0OwpJbmRleDogZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9O
b2RlLmNwcAkocmV2aXNpb24gMjg5NTApCisrKyBkb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDExICsyNCwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGUu
aCIKIAorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUg
IkNoaWxkTm9kZUxpc3QuaCIKICNpbmNsdWRlICJDbGFzc05vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
RE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkR5
bmFtaWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTM5LDYgKzQ1LDcgQEAKICNpbmNsdWRl
ICJOYW1lTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0LmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgpA
QCAtNDksMTYgKzU2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotdHlwZWRlZiBIYXNoU2V0PE5vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7Cit0
eXBlZGVmIEhhc2hTZXQ8RHluYW1pY05vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7CiBzdHJ1Y3QgTm9k
ZUxpc3RzTm9kZURhdGEgewogICAgIE5vZGVMaXN0U2V0IG1fbGlzdHNUb05vdGlmeTsKLSAgICBO
b2RlTGlzdDo6Q2FjaGVzIG1fY2hpbGROb2RlTGlzdENhY2hlczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgTm9kZUxpc3Q6OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2FjaGVzOwotICAgIEhhc2hNYXA8
U3RyaW5nLCBOb2RlTGlzdDo6Q2FjaGVzPiBtX25hbWVOb2RlTGlzdENhY2hlczsKKyAgICBEeW5h
bWljTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7CisgICAgSGFzaE1hcDxT
dHJpbmcsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzPiBtX2NsYXNzTm9kZUxpc3RDYWNoZXM7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzPiBtX25hbWVOb2RlTGlz
dENhY2hlczsKIH07CiAKIC8vIE5vZGVMaXN0IHRoYXQgbGltaXRzIHRvIGEgcGFydGljdWxhciB0
YWcuCi1jbGFzcyBUYWdOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBUYWdOb2Rl
TGlzdCA6IHB1YmxpYyBEeW5hbWljTm9kZUxpc3QgewogcHVibGljOgogICAgIFRhZ05vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKQEAgLTczLDcgKzgwLDcgQEAg
cHJpdmF0ZToKIH07CiAKIGlubGluZSBUYWdOb2RlTGlzdDo6VGFnTm9kZUxpc3QoUGFzc1JlZlB0
cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQotICAgIDogTm9kZUxpc3Qocm9vdE5vZGUsIHRydWUp
CisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIHRydWUpCiAgICAgLCBtX25hbWVzcGFj
ZVVSSShuYW1lc3BhY2VVUkkpCiAgICAgLCBtX2xvY2FsTmFtZShsb2NhbE5hbWUpCiB7CkBAIC00
NDEsNyArNDQ4LDcgQEAgdW5zaWduZWQgTm9kZTo6bm9kZUluZGV4KCkgY29uc3QKICAgICByZXR1
cm4gY291bnQ7CiB9CiAKLXZvaWQgTm9kZTo6cmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCogbGlz
dCkKK3ZvaWQgTm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBs
aXN0KQogewogICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAgIG1fbm9kZUxpc3RzLnNldChu
ZXcgTm9kZUxpc3RzTm9kZURhdGEpOwpAQCAtNDU0LDcgKzQ2MSw3IEBAIHZvaWQgTm9kZTo6cmVn
aXN0ZXJOb2RlTGlzdChOb2RlTGlzdCogbGkKICAgICBtX2RvY3VtZW50LT5hZGROb2RlTGlzdCgp
OwogfQogCi12b2lkIE5vZGU6OnVucmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCogbGlzdCkKK3Zv
aWQgTm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqIGxpc3Qp
CiB7CiAgICAgQVNTRVJUKG1fbm9kZUxpc3RzKTsKICAgICBtX2RvY3VtZW50LT5yZW1vdmVOb2Rl
TGlzdCgpOwpAQCAtMTIxNSw3ICsxMjIyLDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6
Z2V0RWxlbWVudHNCeQogICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAgIG1fbm9kZUxpc3Rz
LnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOwogCi0gICAgcmV0dXJuIG5ldyBOYW1lTm9kZUxp
c3QodGhpcywgZWxlbWVudE5hbWUsICZtX25vZGVMaXN0cy0+bV9uYW1lTm9kZUxpc3RDYWNoZXMu
YWRkKGVsZW1lbnROYW1lLCBOb2RlTGlzdDo6Q2FjaGVzKCkpLmZpcnN0LT5zZWNvbmQpOworICAg
IHJldHVybiBuZXcgTmFtZU5vZGVMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCAmbV9ub2RlTGlzdHMt
Pm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFkZChlbGVtZW50TmFtZSwgRHluYW1pY05vZGVMaXN0OjpD
YWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6
OmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKQpAQCAtMTIy
Myw3ICsxMjMwLDQ2IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkK
ICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVM
aXN0c05vZGVEYXRhKTsKIAotICAgIHJldHVybiBuZXcgQ2xhc3NOb2RlTGlzdCh0aGlzLCBjbGFz
c05hbWVzLCAmbV9ub2RlTGlzdHMtPm1fY2xhc3NOb2RlTGlzdENhY2hlcy5hZGQoY2xhc3NOYW1l
cywgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gbmV3IENs
YXNzTm9kZUxpc3QodGhpcywgY2xhc3NOYW1lcywgJm1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxp
c3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKCkpLmZpcnN0
LT5zZWNvbmQpOworfQorCitQYXNzUmVmUHRyPEVsZW1lbnQ+IE5vZGU6OnF1ZXJ5U2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIENTU1N0
eWxlU2hlZXQgdGVtcFN0eWxlU2hlZXQoZG9jdW1lbnQoKSk7CisgICAgdGVtcFN0eWxlU2hlZXQu
aW5zZXJ0UnVsZShzZWxlY3RvcnMgKyAie30iLCAwLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBDU1NSdWxlKiBydWxlID0gdGVtcFN0eWxlU2hlZXQuY3NzUnVsZXMo
dHJ1ZSktPml0ZW0oMCk7CisgICAgaWYgKCFydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHN0YXRpY19jYXN0PENTU1N0
eWxlUnVsZSo+KHJ1bGUpLT5zZWxlY3RvcigpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBjYW4g
c3BlZWQgdGhpcyB1cCBieSBpbXBsZW1lbnRpbmcgY2FjaGluZyBzaW1pbGFyIHRvIHRoZSBvbmUg
dXNlIGJ5IGdldEVsZW1lbnRCeUlkCisgICAgZm9yIChOb2RlKiBuID0gdHJhdmVyc2VOZXh0Tm9k
ZSgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChuLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVj
dG9yID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICAgICAgc3R5bGVTZWxl
Y3Rvci0+aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpxdWVyeVNlbGVjdG9yQWxsKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBDU1NTdHlsZVNoZWV0IHRl
bXBTdHlsZVNoZWV0KGRvY3VtZW50KCkpOworICAgIHRlbXBTdHlsZVNoZWV0Lmluc2VydFJ1bGUo
c2VsZWN0b3JzICsgInt9IiwgMCwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgQ1NTUnVsZSogcnVsZSA9IHRlbXBTdHlsZVNoZWV0LmNzc1J1bGVzKHRydWUpLT5pdGVt
KDApOworICAgIGlmICghcnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gbmV3IFNlbGVjdG9yTm9kZUxpc3QodGhpcywgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVSdWxlKj4ocnVsZSktPnNlbGVjdG9yKCkpOwogfQogCiBEb2N1bWVudCAqTm9kZTo6b3duZXJE
b2N1bWVudCgpIGNvbnN0CkluZGV4OiBkb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Ob2Rl
LmgJKHJldmlzaW9uIDI4OTUwKQorKysgZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFz
cyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBEeW5hbWljTm9kZUxpc3Q7
CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwpAQCAt
NDQyLDggKzQ0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dUcmVlQW5kTWFyayhjb25zdCBO
b2RlKiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBOb2RlKiBt
YXJrZWROb2RlMiA9IDAsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMiA9IDApIGNvbnN0OwogI2Vu
ZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqKTsKLSAgICB2b2lkIHVu
cmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljTm9k
ZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRHluYW1pY05vZGVM
aXN0KER5bmFtaWNOb2RlTGlzdCopOwogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQ2hpbGRyZW5D
aGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgp
OwogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpOwpAQCAtNDUxLDEw
ICs0NTIsMTQgQEAgcHVibGljOgogICAgIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVs
ZW1lbnRzQnlUYWdOYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+
IGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0
IFN0cmluZyYgbG9jYWxOYW1lKTsKLQogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1l
bnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpOwogICAgIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKTsK
IAorICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gcXVlcnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNl
bGVjdG9ycywgRXhjZXB0aW9uQ29kZSYpOworLy8gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBxdWVy
eVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBOU1Jlc29sdmVyLCBFeGNlcHRpb25D
b2RlJik7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlTZWxlY3RvckFsbChjb25zdCBT
dHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYpOworLy8gICAgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gcXVlcnlTZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgTlNSZXNvbHZl
ciwgRXhjZXB0aW9uQ29kZSYpOworCiBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgRG9jUHRyPERv
Y3VtZW50PiBtX2RvY3VtZW50OwogICAgIE5vZGUqIG1fcHJldmlvdXM7CkluZGV4OiBkb20vTm9k
ZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Ob2RlTGlzdC5jcHAJKHJldmlzaW9uIDI4OTUw
KQorKysgZG9tL05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTAgKzAsMCBAQAot
LyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
Ci0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
Ci0gKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Ob2RlTGlz
dDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNh
dGlvbnMpCi0gICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQotICAgICwgbV9jYWNoZXMobmV3IENh
Y2hlcykKLSAgICAsIG1fb3duc0NhY2hlcyh0cnVlKQotICAgICwgbV9uZWVkc05vdGlmaWNhdGlv
bnMobmVlZHNOb3RpZmljYXRpb25zKQotewotICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxp
c3QodGhpcyk7Ci19ICAgIAotCi1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMp
Ci0gICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQotICAgICwgbV9jYWNoZXMoaW5mbykKLSAgICAs
IG1fb3duc0NhY2hlcyhmYWxzZSkKLSAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90
aWZpY2F0aW9ucykKLXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwot
fSAgICAKLQotTm9kZUxpc3Q6On5Ob2RlTGlzdCgpCi17Ci0gICAgbV9yb290Tm9kZS0+dW5yZWdp
c3Rlck5vZGVMaXN0KHRoaXMpOwotICAgIGlmIChtX293bnNDYWNoZXMpCi0gICAgICAgIGRlbGV0
ZSBtX2NhY2hlczsKLX0KLQotdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2Rl
KiBzdGFydCkgY29uc3QKLXsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IG1fcm9v
dE5vZGUuZ2V0KCk7Ci0KLSAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBz
dGFydCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExlbmd0
aDsKLQotICAgIHVuc2lnbmVkIGxlbiA9IDA7Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+
Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQotICAgICAg
ICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgbGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChuKTsK
LSAgICAgICAgfQotCi0gICAgaWYgKHN0YXJ0ID09IG1fcm9vdE5vZGUpIHsKLSAgICAgICAgbV9j
YWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbjsKLSAgICAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2Fj
aGVWYWxpZCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotTm9kZSogTm9k
ZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZz
ZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbWFpbmluZ09m
ZnNldCA+PSAwKTsKLQotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtX2NhY2hl
cy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1P
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNo
ZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldC0tOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUg
aW4gdGhpcyBzdWJ0cmVlCi19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1
cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7Ci0gICAgZm9yIChOb2Rl
ICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2RlLmdl
dCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBp
ZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNl
dCkgewotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAg
ICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJlbWFpbmluZ09mZnNldCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCi19Ci0KLU5v
ZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQp
IGNvbnN0Ci17Ci0gICAgaW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKLSAgICBpZiAoIXN0
YXJ0KSB7Ci0gICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAg
ICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQpIHsKLSAgICAgICAgICAgIGlmIChvZmZz
ZXQgPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbV9j
YWNoZXMtPmxhc3RJdGVtT2Zmc2V0IHx8IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCAtIG9mZnNl
dCA8IG9mZnNldCkgewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVt
OwotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0ZW1P
ZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVtYWlu
aW5nT2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJuIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChz
dGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZzZXQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7
Ci19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBl
bGVtZW50SWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkg
fHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX3Jv
b3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotCi0gICAgICAg
IGlmICghbm9kZSB8fCAhbm9kZU1hdGNoZXMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsK
LQotICAgICAgICBmb3IgKE5vZGUqIHAgPSBub2RlLT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5w
YXJlbnROb2RlKCkpCi0gICAgICAgICAgICBpZiAocCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIGwgPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1
dGUoKSA9PSBlbGVtZW50SWQpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQo
KQotewotICAgIG1fY2FjaGVzLT5yZXNldCgpOwotfQotCi0KLU5vZGVMaXN0OjpDYWNoZXM6OkNh
Y2hlcygpCi0gICAgOiBsYXN0SXRlbSgwKQotICAgICwgaXNMZW5ndGhDYWNoZVZhbGlkKGZhbHNl
KQotICAgICwgaXNJdGVtQ2FjaGVWYWxpZChmYWxzZSkKLXsKLX0KLQotdm9pZCBOb2RlTGlzdDo6
Q2FjaGVzOjpyZXNldCgpCi17Ci0gICAgbGFzdEl0ZW0gPSAwOwotICAgIGlzTGVuZ3RoQ2FjaGVW
YWxpZCA9IGZhbHNlOwotICAgIGlzSXRlbUNhY2hlVmFsaWQgPSBmYWxzZTsgICAgIAotfQotCi19
CkluZGV4OiBkb20vTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vTm9kZUxpc3QuaAkocmV2
aXNpb24gMjg5NTApCisrKyBkb20vTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNTgg
KzI4LDIzIEBACiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEF0b21pY1N0cmluZzsKLWNsYXNzIE5vZGU7CisgICAgY2xhc3MgQXRvbWljU3Ry
aW5nOworICAgIGNsYXNzIE5vZGU7CiAKLWNsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50
ZWQ8Tm9kZUxpc3Q+IHsKLXB1YmxpYzoKLQotICAgIHN0cnVjdCBDYWNoZXMgewotICAgICAgICBD
YWNoZXMoKTsKLSAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgY2FjaGVkTGVuZ3RoOwotICAgICAgICBOb2RlKiBsYXN0SXRlbTsKLSAgICAgICAgdW5zaWdu
ZWQgbGFzdEl0ZW1PZmZzZXQ7Ci0gICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsK
LSAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICBjbGFzcyBOb2RlTGlzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7CisgICAgcHVibGljOgorICAgICAgICBOb2Rl
TGlzdCgpIHsgfQorICAgICAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpIHsgfQorCisgICAgICAgIC8v
IERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKKyAgICAgICAgdmlydHVhbCB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRo
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdCA9IDA7CiAgICAgfTsKIAotICAgIE5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsK
LSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5l
ZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9kZUxpc3QoKTsKLQotICAgIGJvb2wg
bmVlZHNOb3RpZmljYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7
IH0KLQotICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKLSAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIE5vZGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKLSAgICBOb2RlKiBpdGVtV2l0aE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFy
dCBvZiBET00pCi0gICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9Ci0KLXByb3RlY3Rl
ZDoKLSAgICAvLyBoZWxwZXIgZnVuY3Rpb25zIGZvciBzZWFyY2hpbmcgYWxsIEVsZW1lbnRJbXBs
cyBpbiBhIHRyZWUKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQgPSAw
KSBjb25zdDsKLSAgICBOb2RlKiByZWN1cnNpdmVJdGVtICh1bnNpZ25lZCBvZmZzZXQsIE5vZGUq
IHN0YXJ0ID0gMCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGUqIHRl
c3ROb2RlKSBjb25zdCA9IDA7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9yb290Tm9kZTsKLSAgICBt
dXRhYmxlIENhY2hlcyogbV9jYWNoZXM7Ci0gICAgYm9vbCBtX293bnNDYWNoZXM7Ci0gICAgYm9v
bCBtX25lZWRzTm90aWZpY2F0aW9uczsKLQotIHByaXZhdGU6Ci0gICAgTm9kZSogaXRlbUZvcndh
cmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmlu
Z09mZnNldCkgY29uc3Q7Ci0gICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUq
IHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwotfTsK
LQotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRp
ZiBOb2RlTGlzdF9oCkluZGV4OiBkb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgZG9tL1NlbGVjdG9y
Tm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiQ1NTU2Vs
ZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1NlbGVjdG9yTm9kZUxpc3Q6OlNlbGVjdG9yTm9kZUxpc3QoUGFzc1Jl
ZlB0cjxOb2RlPiByb290Tm9kZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHJvb3ROb2RlLT5kb2N1bWVudCgpOworICAgIGZvciAoTm9kZSogbiA9
IHJvb3ROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgQ1NT
U3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yKCk7
CisgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5pbml0RWxlbWVudEFuZFBzZXVkb1N0YXRlKHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CisgICAgICAgICAgICBpZiAoc3R5bGVTZWxlY3Rvci0+
Y2hlY2tTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICAgICAgbV9ub2Rlcy5hcHBlbmQo
bik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IGRvbS9TZWxlY3Rvck5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1NlbGVjdG9yTm9kZUxp
c3QuaAkocmV2aXNpb24gMCkKKysrIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VsZWN0b3JOb2RlTGlzdF9oCisjZGVmaW5lIFNl
bGVjdG9yTm9kZUxpc3RfaAorCisjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOb2Rl
OworICAgIGNsYXNzIENTU1NlbGVjdG9yOworCisgICAgY2xhc3MgU2VsZWN0b3JOb2RlTGlzdCA6
IHB1YmxpYyBTdGF0aWNOb2RlTGlzdCB7CisgICAgcHVibGljOgorICAgICAgICBTZWxlY3Rvck5v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENTU1NlbGVjdG9yKiBzZWxlY3Rvcik7
CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2VsZWN0b3JO
b2RlTGlzdF9oCkluZGV4OiBkb20vU3RhdGljTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRv
bS9TdGF0aWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDApCisrKyBkb20vU3RhdGljTm9kZUxpc3Qu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgor
I2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordW5zaWduZWQgU3RhdGljTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbm9kZXMuc2l6ZSgpOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBtX25vZGVzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIG1fbm9kZXNbaW5kZXhdLmdldCgpOworICAgIHJldHVybiAwOworfQor
CitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
ZWxlbWVudElkKSBjb25zdAoreworICAgIHNpemVfdCBsZW5ndGggPSBtX25vZGVzLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBtX25vZGVzW2ldLmdldCgpOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9k
ZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBl
bGVtZW50SWQpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogZG9tL1N0YXRpY05vZGVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZG9tL1N0YXRpY05vZGVMaXN0LmgJKHJldmlzaW9uIDApCisrKyBk
b20vU3RhdGljTm9kZUxpc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTdGF0aWNOb2RlTGlzdF9oCisjZGVmaW5lIFN0YXRpY05vZGVMaXN0X2gKKworI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgTm9kZTsKKworICAgIGNs
YXNzIFN0YXRpY05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIC8vIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgYnVpbGQgdXAgdGhlIFZlY3RvciBpbiB0aGVp
ciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgU3RhdGljTm9kZUxpc3QoKSB7IH0KKyAgICAgICAgdmly
dHVhbCB+U3RhdGljTm9kZUxpc3QoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNT
dHJpbmcmKSBjb25zdDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+IG1fbm9kZXM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gU3RhdGljTm9kZUxpc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18095</attachid>
            <date>2007-12-24 13:33:14 -0800</date>
            <delta_ts>2007-12-24 19:23:01 -0800</delta_ts>
            <desc>Stop leaking a bunch of CSS stuff every query</desc>
            <filename>qsaleakfix.diff</filename>
            <type>text/plain</type>
            <size>56690</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODk3MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTc4LDcgKzE5NzgsNiBAQAogCQlBODE4NzIxRTA5NzdEM0MwMDA1
ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0Lmgg
Ki87IH07CiAJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE0MDk3
N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLzsgfTsKIAkJQTgxODcyMjAwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5v
ZGVMaXN0LmggKi87IH07Ci0JCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIx
NjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyMzA5NzdE
M0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2Rl
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3Bw
ICovOyB9OwpAQCAtMzYxNCw2ICszNjEzLDEyIEBACiAJCUJDNzcyQzRGMEM0RUIzMDQwMDgzMjg1
RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
NzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRFQjM0NDAw
ODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi87IH07CiAJCUJDN0Y0NEE4MEI5RTMy
NEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGNDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUJDN0ZBNjIwMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MUUwRDFGMENCRDAw
REIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjIxMEQxRjBDQkQw
MERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9k
ZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdG
QTYyQjBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2
MkUwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAv
KiBTdGF0aWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAv
KiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5o
ICovOyB9OworCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY4
MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDODBD
OTg3MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg1MENEMjk0RUUw
MEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCAqLzsgfTsKIAkJQkM4MEM5ODgw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg2MENEMjk0RUUwMEEwQjdC
MyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggKi87IH07CiAJCUJDODBDOThCMENEMjk1MDUw
MEEwQjdCMyAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg5MENEMjk1MDUwMEEwQjdCMyAvKiBBbmlt
YXRpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTYxMDgsNyArNjExMyw2IEBACiAJCUE4MTg3
MjEzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hbWVOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODE4NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWlu
ZXJOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTUwOTc3RDND
MDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoaWxkTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgx
ODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2
RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
NjI1LDYgKzc2MjksMTIgQEAKIAkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbEJh
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxCYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJh
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlE
MDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUUw
RDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNOb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyog
U3RhdGljTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlj
Tm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MkMwRDFGMEVG
RjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0YXRpY05vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0
b3JOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxl
Y3Rvck5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODUw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzgwQzk4OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE2Niw2ICsxMjE3Niw4IEBACiAJ
CQkJQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywK
IAkJCQlBODE4NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywK
IAkJCQk5M0VFQzFFOTA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICov
LAorCQkJCUJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLywK
IAkJCQk2NTUwQjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJ
CTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRB
N0Y2MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEyMjI0LDcgKzEyMjM2
LDYgQEAKIAkJCQk4NTRGRTcyQTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCAq
LywKIAkJCQk4NTRGRTcyQjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi8sCiAJ
CQkJMUE3NTBEODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVyYXRvci5pZGwgKi8sCi0JCQkJ
QTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1
RiAvKiBOb3RhdGlvbi5jcHAgKi8sCkBAIC0xMjI1Miw2ICsxMjI2MywxMCBAQAogCQkJCUQyM0NB
NTQ4MEFCMEU5ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJODUwMzFC
MzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJ
CQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAq
LywKKwkJCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAg
Ki8sCisJCQkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAq
LywKKwkJCQlCQzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjJCMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oICovLAog
CQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywKIAkJ
CQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJCUFB
NEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovLApAQCAtMTQxMTgs
NiArMTQxMzMsOSBAQAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3Vu
aXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8q
IEpTTG9jYXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyMTBEMUYwQ0JEMDBE
QjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyRDBE
MUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
N0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE1Mzc3LDcgKzE1Mzk1LDYgQEAKIAkJCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQg
LyogTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRG
RTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEVBN0VCRjBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjQwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3Vt
ZW50SW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTgzMiw2ICsxNTg0OSw5IEBACiAJCQkJ
OTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0EzNzkxNDBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVM
aXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBT
dGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzdGQTY4MjBEMUYxNjc5MDBE
QjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTEgKzEyOSwxMSBAQCBjbGFzcyBTdHls
ZWRFbGVtZW50OwogIAogICAgICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsg
cmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0KICAgICAg
ICAgLyogY2hlY2tzIGlmIGEgY29tcG91bmQgc2VsZWN0b3IgKHdoaWNoIGNhbiBjb25zaXN0IG9m
IG11bHRpcGxlIHNpbXBsZSBzZWxlY3RvcnMpCiAgICAgICAgICAgIG1hdGNoZXMgdGhlIGdpdmVu
IEVsZW1lbnQgKi8KLSAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxl
Y3Rvcik7CisgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciopOworCisgICAg
cHJvdGVjdGVkOgogICAgICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXM9
MCwgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5fTsKICAgICAg
ICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxl
bWVudCAqZSwgYm9vbCBpc0FuY2VzdG9yLCBib29sIGlzU3ViU2VsZWN0b3IpOwogCkBAIC0yNDIs
NiArMjQyLDcgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICNlbmRpZgogCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBDU1NSdWxlU2V0OworICAgICAgICBmcmllbmQgY2xhc3MgTm9kZTsKICAgICB9Owog
CiAgICAgY2xhc3MgQ1NTUnVsZURhdGEgewpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2RlKiBuLCBOb2Rl
TGlzdDo6Q2FjaGVzKiBpbmZvKQotICAgIDogTm9kZUxpc3QobiwgaW5mbywgZmFsc2UpCitDaGls
ZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KE5vZGUqIG4sIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KiBpbmZvKQorICAgIDogRHluYW1pY05vZGVMaXN0KG4sIGluZm8sIGZhbHNlKQogewogfQogCklu
ZGV4OiBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0NoaWxk
Tm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MiwxNiArMjAsMTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLwor
CiAjaWZuZGVmIENoaWxkTm9kZUxpc3RfaAogI2RlZmluZSBDaGlsZE5vZGVMaXN0X2gKIAotI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7
CitjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiBwdWJsaWM6
Ci0gICAgQ2hpbGROb2RlTGlzdChOb2RlKiwgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgIENoaWxk
Tm9kZUxpc3QoTm9kZSosIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIp
CisrKyBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
OCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNsYXNzTm9kZUxpc3Q6OkNsYXNz
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05h
bWVzLCBOb2RlTGlzdDo6Q2FjaGVzKiBjYWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290Tm9kZSwg
Y2FjaGVzLCB0cnVlKQorQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIER5bmFtaWNOb2RlTGlzdDo6
Q2FjaGVzKiBjYWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywg
dHJ1ZSkKIHsKICAgICBtX2NsYXNzTmFtZXMucGFyc2VDbGFzc0F0dHJpYnV0ZShjbGFzc05hbWVz
LCBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiB9CkluZGV4OiBXZWJD
b3JlL2RvbS9DbGFzc05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1IEBACiAjZGVmaW5lIENsYXNzTm9kZUxp
c3RfaAogCiAjaW5jbHVkZSAiQ2xhc3NOYW1lcy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisj
aW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFN0cmluZzsKIAotICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxp
c3QgeworICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBOb2RlTGlzdDo6Q2FjaGVzKik7CisgICAg
ICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5n
JiBjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAgICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAyODk3MikKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiwx
MiBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAgIE5vZGVMaXN0
ICAgICAgICAgICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgdGFnbmFtZSk7
CisKKyAgICAgICAgLy8gRG9jdW1lbnRTZWxlY3RvciAtIFNlbGVjdG9yIEFQSQorICAgICAgICBF
bGVtZW50ICAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3IoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykK
KyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBOb2RlTGlzdCAgICAg
ICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9t
L0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05v
ZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIpCShmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNw
cDoyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkK
KyAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCisgICAgLCBtX293bnNDYWNoZXModHJ1ZSkKKyAg
ICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKK3sKKyAgICBtX3Jv
b3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6Ok5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJv
b2wgbmVlZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAs
IG1fY2FjaGVzKGluZm8pCisgICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCisgICAgLCBtX25lZWRz
Tm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCit7CisgICAgbV9yb290Tm9kZS0+cmVn
aXN0ZXJOb2RlTGlzdCh0aGlzKTsKK30gICAgCisKK05vZGVMaXN0Ojp+Tm9kZUxpc3QoKQorewor
ICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBpZiAobV9vd25z
Q2FjaGVzKQorICAgICAgICBkZWxldGUgbV9jYWNoZXM7Cit9CisKK3Vuc2lnbmVkIE5vZGVMaXN0
OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKCFzdGFydCkK
KyAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgpOworCisgICAgaWYgKG1fY2FjaGVzLT5p
c0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gbV9yb290Tm9kZSkKKyAgICAgICAgcmV0dXJu
IG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7CisKKyAgICB1bnNpZ25lZCBsZW4gPSAwOworCisgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5n
KCkpCisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlTWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgIGxlbiAr
PSByZWN1cnNpdmVMZW5ndGgobik7CisgICAgICAgIH0KKworICAgIGlmIChzdGFydCA9PSBtX3Jv
b3ROb2RlKSB7CisgICAgICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggPSBsZW47CisgICAgICAg
IG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBsZW47Cit9CisKK05vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2Rl
KiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorewor
ICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CisKKyAgICBmb3IgKE5vZGUgKm4gPSBz
dGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdP
ZmZzZXQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw
OyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlz
dDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQs
IGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNl
dCA8IDApOworICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2
aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMt
Pmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVW
YWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGlu
IHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25l
ZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAoreworICAgIGludCByZW1haW5pbmdPZmZzZXQg
PSBvZmZzZXQ7CisgICAgaWYgKCFzdGFydCkgeworICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7
CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGFy
dCA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQg
LT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHJlbWFpbmluZ09mZnNldCA8IDApCisgICAgICAgIHJldHVybiBpdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zm
c2V0LCByZW1haW5pbmdPZmZzZXQpOworfQorCitOb2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1l
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX3Jvb3RO
b2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgeworICAg
ICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
ZWxlbWVudElkKTsKKworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgaWYgKHAgPT0g
bV9yb290Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsK
KyAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OnJv
b3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3sKKyAgICBtX2NhY2hlcy0+cmVzZXQoKTsKK30KKwor
CitOb2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQorICAgIDogbGFzdEl0ZW0oMCkKKyAgICAsIGlz
TGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKKyAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCit7
Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQoreworICAgIGxhc3RJdGVtID0g
MDsKKyAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKKyAgICBpc0l0ZW1DYWNoZVZhbGlk
ID0gZmFsc2U7ICAgICAKK30KKworfQpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM5ICsy
MSwzOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZUxpc3Q6
Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRp
b25zKQorRHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3RO
b2RlKQogICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKICAgICAsIG1fb3duc0NhY2hlcyh0cnVl
KQogICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQogewotICAg
IG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+cmVn
aXN0ZXJEeW5hbWljTm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCi1Ob2RlTGlzdDo6Tm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBu
ZWVkc05vdGlmaWNhdGlvbnMpCitEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9v
bCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwg
bV9jYWNoZXMoaW5mbykKICAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKICAgICAsIG1fbmVlZHNO
b3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKIHsKLSAgICBtX3Jvb3ROb2RlLT5yZWdp
c3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVM
aXN0KHRoaXMpOwogfSAgICAKIAotTm9kZUxpc3Q6On5Ob2RlTGlzdCgpCitEeW5hbWljTm9kZUxp
c3Q6On5EeW5hbWljTm9kZUxpc3QoKQogewotICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2Rl
TGlzdCh0aGlzKTsKKyAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRo
aXMpOwogICAgIGlmIChtX293bnNDYWNoZXMpCiAgICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKIH0K
IAotdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QK
K3Vuc2lnbmVkIER5bmFtaWNOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0KSBj
b25zdAogewogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5nZXQo
KTsKQEAgLTgwLDcgKzc4LDcgQEAgdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChO
b2RlKgogICAgIHJldHVybiBsZW47CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNG
cm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zm
c2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dAogewogICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CiAKQEAgLTEwMSw3ICs5OSw3
IEBAIE5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCgKICAgICByZXR1cm4g
MDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxp
c3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJl
bWFpbmluZ09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7
CiAgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZShtX3Jvb3ROb2RlLmdldCgpKSkgewpAQCAtMTIxLDcgKzExOSw3IEBAIE5vZGUqIE5vZGVMaXN0
OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQKICAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcg
bm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0o
dW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2RlTGlz
dDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAogewog
ICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKCFzdGFydCkgewpAQCAt
MTQyLDcgKzE0MCw3IEBAIE5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG8K
ICAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJl
bWFpbmluZ09mZnNldCk7CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0
ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBp
ZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50
KCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVs
ZW1lbnRCeUlkKGVsZW1lbnRJZCk7CkBAIC0xNjcsMjAgKzE2NSwyMCBAQCBOb2RlKiBOb2RlTGlz
dDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9k
ZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQgRHluYW1pY05vZGVMaXN0Ojpy
b290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCiB7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7CiB9CiAK
IAotTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKK0R5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpD
YWNoZXMoKQogICAgIDogbGFzdEl0ZW0oMCkKICAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxz
ZSkKICAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCiB7CiB9CiAKLXZvaWQgTm9kZUxpc3Q6
OkNhY2hlczo6cmVzZXQoKQordm9pZCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQog
ewogICAgIGxhc3RJdGVtID0gMDsKICAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikJKGZyb20gV2ViQ29yZS9kb20v
Tm9kZUxpc3QuaDoyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgTm9kZUxpc3RfaAorI2RlZmluZSBOb2RlTGlz
dF9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEF0b21pY1N0cmluZzsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIE5vZGVMaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKK3B1YmxpYzoKKworICAgIHN0cnVjdCBDYWNoZXMgewor
ICAgICAgICBDYWNoZXMoKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOworICAgICAgICBOb2RlKiBsYXN0SXRlbTsKKyAgICAg
ICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZh
bGlkIDogMTsKKyAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICB9OworCisg
ICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNh
dGlvbnMpOworICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyos
IGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKKyAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOworCisg
ICAgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTm90aWZp
Y2F0aW9uczsgfQorCisgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlz
dAorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Tm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgIE5vZGUqIGl0ZW1XaXRo
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIC8vIE90aGVyIG1ldGhvZHMg
KG5vdCBwYXJ0IG9mIERPTSkKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGlsZHJlbkNoYW5n
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkge30KKwor
cHJvdGVjdGVkOgorICAgIC8vIGhlbHBlciBmdW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxl
bWVudEltcGxzIGluIGEgdHJlZQorICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBz
dGFydCA9IDApIGNvbnN0OworICAgIE5vZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNl
dCwgTm9kZSogc3RhcnQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMo
Tm9kZSogdGVzdE5vZGUpIGNvbnN0ID0gMDsKKworICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3ROb2Rl
OworICAgIG11dGFibGUgQ2FjaGVzKiBtX2NhY2hlczsKKyAgICBib29sIG1fb3duc0NhY2hlczsK
KyAgICBib29sIG1fbmVlZHNOb3RpZmljYXRpb25zOworCisgcHJpdmF0ZToKKyAgICBOb2RlKiBp
dGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQg
cmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKKyAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJvbUN1cnJl
bnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29u
c3Q7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRHlu
YW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
OSArMjEsMTAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBOb2RlTGlzdF9oCi0jZGVmaW5lIE5vZGVM
aXN0X2gKKyNpZm5kZWYgRHluYW1pY05vZGVMaXN0X2gKKyNkZWZpbmUgRHluYW1pY05vZGVMaXN0
X2gKIAorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM1
LDEzICszNCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBj
bGFzcyBOb2RlOwogCi1jbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0
PiB7CitjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgewogcHVibGljOgot
CiAgICAgc3RydWN0IENhY2hlcyB7CiAgICAgICAgIENhY2hlcygpOwogICAgICAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKICAgICAg
ICAgTm9kZSogbGFzdEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwpAQCAt
NDksOSArNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7
CiAgICAgfTsKIAotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wg
bmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9k
ZUxpc3QoKTsKKyAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Ym9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAg
dmlydHVhbCB+RHluYW1pY05vZGVMaXN0KCk7CiAKICAgICBib29sIG5lZWRzTm90aWZpY2F0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNOb3RpZmljYXRpb25zOyB9CiAKQEAgLTYyLDcgKzYw
LDcgQEAgcHVibGljOgogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQog
ICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwg
dm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCByb290
Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IH0KIAogcHJvdGVjdGVkOgogICAgIC8vIGhlbHBlciBm
dW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxlbWVudEltcGxzIGluIGEgdHJlZQpAQCAtNzUs
MTEgKzczLDExIEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fb3duc0NhY2hlczsKICAgICBib29s
IG1fbmVlZHNOb3RpZmljYXRpb25zOwogCi0gcHJpdmF0ZToKK3ByaXZhdGU6CiAgICAgTm9kZSog
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJy
ZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNv
bnN0OwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBEeW5hbWljTm9kZUxpc3RfaApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHJldmlzaW9uIDI4
OTcyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2
ICsxMDUsMTIgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAvLyBIVE1MIDUKICAgICAgICAgTm9k
ZUxpc3QgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgbmFtZSk7CiAKKyAgICAg
ICAgLy8gRWxlbWVudFNlbGVjdG9yIC0gU2VsZWN0b3IgQVBJCisgICAgICAgIEVsZW1lbnQgICAg
ICAgICAgICAgcXVlcnlTZWxlY3RvcihpbiBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICAgcXVl
cnlTZWxlY3RvckFsbChpbiBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisKICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAg
ICAgICAvLyBPYmplY3RpdmUtQyBleHRlbnNpb25zCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgaW5uZXJUZXh0OwpJbmRleDogV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAy
ODk3MikKKysrIFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1OYW1lTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBT
dHJpbmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKLSAgICA6IE5vZGVMaXN0KHJv
b3QsIGNhY2hlcywgdHJ1ZSkKK05hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KE5vZGUqIHJvb3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAg
ICA6IER5bmFtaWNOb2RlTGlzdChyb290LCBjYWNoZXMsIHRydWUpCiAgICAgLCBtX25vZGVOYW1l
KG5hbWUpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzIpCisrKyBXZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDExIEBA
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBOYW1l
Tm9kZUxpc3RfaAogI2RlZmluZSBOYW1lTm9kZUxpc3RfaAogCi0jaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMSw5ICszMiw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8qKgogICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxl
bWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWU9IiB0YWcKICAqLwotY2xhc3MgTmFtZU5vZGVMaXN0IDog
cHVibGljIE5vZGVMaXN0IHsKK2NsYXNzIE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9k
ZUxpc3QgewogcHVibGljOgotICAgIE5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJp
bmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMqKTsKKyAgICBOYW1lTm9kZUxpc3QoTm9kZSogcm9v
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAg
Ly8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogCkBAIC00Miw3
ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERP
TSkKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBO
b2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBy
b290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IER5bmFtaWNOb2RlTGlzdDo6cm9vdE5vZGVDaGls
ZHJlbkNoYW5nZWQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyODk3MikKKysrIFdl
YkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKKyNpbmNsdWRlICJDU1NSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaGlsZE5vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCkBAIC0zOSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTQ5LDE2ICs1NiwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXR5cGVkZWYg
SGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OwordHlwZWRlZiBIYXNoU2V0PER5bmFtaWNO
b2RlTGlzdCo+IE5vZGVMaXN0U2V0Owogc3RydWN0IE5vZGVMaXN0c05vZGVEYXRhIHsKICAgICBO
b2RlTGlzdFNldCBtX2xpc3RzVG9Ob3RpZnk7Ci0gICAgTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxk
Tm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIE5vZGVMaXN0OjpDYWNoZXM+IG1f
Y2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBIYXNoTWFwPFN0cmluZywgTm9kZUxpc3Q6OkNhY2hl
cz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7CisgICAgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMgbV9j
aGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6
OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2FjaGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBEeW5h
bWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7CiB9OwogCiAvLyBOb2Rl
TGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIgdGFnLgotY2xhc3MgVGFnTm9kZUxpc3Qg
OiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05v
ZGVMaXN0IHsKIHB1YmxpYzoKICAgICBUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpOwogCkBAIC03Myw3ICs4MCw3IEBAIHByaXZhdGU6CiB9OwogCiBpbmxpbmUg
VGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSkKLSAgICA6IE5vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQorICAgIDogRHluYW1pY05vZGVMaXN0
KHJvb3ROb2RlLCB0cnVlKQogICAgICwgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKQogICAg
ICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQogewpAQCAtNDQxLDcgKzQ0OCw3IEBAIHVuc2lnbmVk
IE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIE5v
ZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2b2lkIE5vZGU6OnJlZ2lzdGVy
RHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKICAgICBpZiAoIW1fbm9k
ZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsK
QEAgLTQ1NCw3ICs0NjEsNyBAQCB2b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3Qq
IGxpCiAgICAgbV9kb2N1bWVudC0+YWRkTm9kZUxpc3QoKTsKIH0KIAotdm9pZCBOb2RlOjp1bnJl
Z2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2b2lkIE5vZGU6OnVucmVnaXN0ZXJEeW5h
bWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQogewogICAgIEFTU0VSVChtX25vZGVM
aXN0cyk7CiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlTm9kZUxpc3QoKTsKQEAgLTEyMTUsNyArMTIy
Miw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICBpZiAo
IW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5vZGVMaXN0c05vZGVE
YXRhKTsKIAotICAgIHJldHVybiBuZXcgTmFtZU5vZGVMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCAm
bV9ub2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFkZChlbGVtZW50TmFtZSwgTm9kZUxp
c3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gbmV3IE5hbWVOb2RlTGlz
dCh0aGlzLCBlbGVtZW50TmFtZSwgJm1fbm9kZUxpc3RzLT5tX25hbWVOb2RlTGlzdENhY2hlcy5h
ZGQoZWxlbWVudE5hbWUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKCkpLmZpcnN0LT5zZWNvbmQp
OwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKQEAgLTEyMjMsNyArMTIzMCw1MyBAQCBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAgICAgaWYgKCFtX25vZGVMaXN0cykK
ICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CiAKLSAgICBy
ZXR1cm4gbmV3IENsYXNzTm9kZUxpc3QodGhpcywgY2xhc3NOYW1lcywgJm1fbm9kZUxpc3RzLT5t
X2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMsIE5vZGVMaXN0OjpDYWNoZXMoKSku
Zmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJuIG5ldyBDbGFzc05vZGVMaXN0KHRoaXMsIGNsYXNz
TmFtZXMsICZtX25vZGVMaXN0cy0+bV9jbGFzc05vZGVMaXN0Q2FjaGVzLmFkZChjbGFzc05hbWVz
LCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKK30KKworUGFzc1Jl
ZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBDU1NTdHlsZVNoZWV0IHRlbXBTdHlsZVNoZWV0
KGRvY3VtZW50KCkpOworICAgIHRlbXBTdHlsZVNoZWV0Lmluc2VydFJ1bGUoc2VsZWN0b3JzICsg
Int9IiwgMCwgZWMpOworICAgIGlmIChlYykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ1NTUnVs
ZUxpc3QqIHJ1bGVMaXN0ID0gdGVtcFN0eWxlU2hlZXQuY3NzUnVsZXModHJ1ZSk7CisgICAgQ1NT
UnVsZSogcnVsZSA9IHJ1bGVMaXN0LT5pdGVtKDApOworICAgIGlmICghcnVsZS0+aXNTdHlsZVJ1
bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKS0+c2VsZWN0b3IoKTsKKyAgICAKKyAgICBO
b2RlKiBuID0gMDsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY2FuIHNwZWVkIHRoaXMgdXAgYnkg
aW1wbGVtZW50aW5nIGNhY2hpbmcgc2ltaWxhciB0byB0aGUgb25lIHVzZSBieSBnZXRFbGVtZW50
QnlJZAorICAgIGZvciAobiA9IHRyYXZlcnNlTmV4dE5vZGUoKTsgbjsgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAg
ICAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IGRvY3VtZW50KCktPnN0eWxl
U2VsZWN0b3IoKTsKKyAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmluaXRFbGVtZW50QW5kUHNl
dWRvU3RhdGUoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoc3R5bGVTZWxlY3Rvci0+Y2hlY2tT
ZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBkZWxldGUgcnVsZUxpc3Q7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuKTsKK30KKworUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6cXVlcnlTZWxl
Y3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgQ1NTU3R5bGVTaGVldCB0ZW1wU3R5bGVTaGVldChkb2N1bWVudCgpKTsKKyAgICB0ZW1wU3R5
bGVTaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9ycyArICJ7fSIsIDAsIGVjKTsKKyAgICBpZiAoZWMp
CisgICAgICAgIHJldHVybiAwOworICAgIENTU1J1bGVMaXN0KiBydWxlTGlzdCA9IHRlbXBTdHls
ZVNoZWV0LmNzc1J1bGVzKHRydWUpOworICAgIENTU1J1bGUqIHJ1bGUgPSBydWxlTGlzdC0+aXRl
bSgwKTsKKyAgICBpZiAoIXJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIFNlbGVjdG9yTm9kZUxpc3QqIHJlc3VsdExpc3QgPSBuZXcgU2VsZWN0b3JOb2RlTGlzdCh0
aGlzLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKS0+c2VsZWN0b3IoKSk7CisgICAg
ZGVsZXRlIHJ1bGVMaXN0OworICAgIHJldHVybiByZXN1bHRMaXN0OwogfQogCiBEb2N1bWVudCAq
Tm9kZTo6b3duZXJEb2N1bWVudCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNv
cmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xh
c3MgRG9jdW1lbnQ7CitjbGFzcyBEeW5hbWljTm9kZUxpc3Q7CiBjbGFzcyBFbGVtZW50OwogY2xh
c3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwpAQCAtNDQyLDggKzQ0Myw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNob3dUcmVlQW5kTWFyayhjb25zdCBOb2RlKiBtYXJrZWROb2RlMSwgY29u
c3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBOb2RlKiBtYXJrZWROb2RlMiA9IDAsIGNvbnN0
IGNoYXIqIG1hcmtlZExhYmVsMiA9IDApIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lz
dGVyTm9kZUxpc3QoTm9kZUxpc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJOb2RlTGlzdChOb2Rl
TGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0
Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCop
OwogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdm9pZCBu
b3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5Tm9k
ZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpOwpAQCAtNDUxLDEwICs0NTIsMTQgQEAgcHVibGljOgog
ICAgIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0
IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1l
TlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsK
LQogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmlu
ZyYgZWxlbWVudE5hbWUpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlD
bGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzKTsKIAorICAgIFBhc3NSZWZQdHI8RWxl
bWVudD4gcXVlcnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29k
ZSYpOworLy8gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBOU1Jlc29sdmVyLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gcXVlcnlTZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhj
ZXB0aW9uQ29kZSYpOworLy8gICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlTZWxlY3RvckFs
bChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgTlNSZXNvbHZlciwgRXhjZXB0aW9uQ29kZSYpOwor
CiBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgRG9jUHRyPERvY3VtZW50PiBtX2RvY3VtZW50Owog
ICAgIE5vZGUqIG1fcHJldmlvdXM7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk3MikKKysr
IFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTAgKzAsMCBA
QAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZv
ciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Ob2Rl
TGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlm
aWNhdGlvbnMpCi0gICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQotICAgICwgbV9jYWNoZXMobmV3
IENhY2hlcykKLSAgICAsIG1fb3duc0NhY2hlcyh0cnVlKQotICAgICwgbV9uZWVkc05vdGlmaWNh
dGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQotewotICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9k
ZUxpc3QodGhpcyk7Ci19ICAgIAotCi1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2Rl
PiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBuZWVkc05vdGlmaWNhdGlv
bnMpCi0gICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQotICAgICwgbV9jYWNoZXMoaW5mbykKLSAg
ICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKLSAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRz
Tm90aWZpY2F0aW9ucykKLXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMp
OwotfSAgICAKLQotTm9kZUxpc3Q6On5Ob2RlTGlzdCgpCi17Ci0gICAgbV9yb290Tm9kZS0+dW5y
ZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwotICAgIGlmIChtX293bnNDYWNoZXMpCi0gICAgICAgIGRl
bGV0ZSBtX2NhY2hlczsKLX0KLQotdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChO
b2RlKiBzdGFydCkgY29uc3QKLXsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IG1f
cm9vdE5vZGUuZ2V0KCk7Ci0KLSAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAm
JiBzdGFydCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExl
bmd0aDsKLQotICAgIHVuc2lnbmVkIGxlbiA9IDA7Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFy
dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQotICAg
ICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgbGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChu
KTsKLSAgICAgICAgfQotCi0gICAgaWYgKHN0YXJ0ID09IG1fcm9vdE5vZGUpIHsKLSAgICAgICAg
bV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbjsKLSAgICAgICAgbV9jYWNoZXMtPmlzTGVuZ3Ro
Q2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotTm9kZSog
Tm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBv
ZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbWFpbmlu
Z09mZnNldCA+PSAwKTsKLQotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtX2Nh
Y2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1D
YWNoZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldC0tOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5v
ZGUgaW4gdGhpcyBzdWJ0cmVlCi19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJv
bUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNl
dCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7Ci0gICAgZm9yIChO
b2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2Rl
LmdldCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAg
ICBpZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09m
ZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOwotICAg
ICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJlbWFpbmluZ09mZnNldCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCi19Ci0K
LU5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3Rh
cnQpIGNvbnN0Ci17Ci0gICAgaW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKLSAgICBpZiAo
IXN0YXJ0KSB7Ci0gICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOwotICAg
ICAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQpIHsKLSAgICAgICAgICAgIGlmIChv
ZmZzZXQgPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IHx8IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCAtIG9m
ZnNldCA8IG9mZnNldCkgewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJ
dGVtOwotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVt
YWluaW5nT2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJuIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVu
dChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZzZXQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNl
dCk7Ci19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBlbGVtZW50SWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2Rl
KCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBt
X3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotCi0gICAg
ICAgIGlmICghbm9kZSB8fCAhbm9kZU1hdGNoZXMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
MDsKLQotICAgICAgICBmb3IgKE5vZGUqIHAgPSBub2RlLT5wYXJlbnROb2RlKCk7IHA7IHAgPSBw
LT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICBpZiAocCA9PSBtX3Jvb3ROb2RlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHVuc2lnbmVkIGwgPSBsZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsg
aSsrKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRy
aWJ1dGUoKSA9PSBlbGVtZW50SWQpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5n
ZWQoKQotewotICAgIG1fY2FjaGVzLT5yZXNldCgpOwotfQotCi0KLU5vZGVMaXN0OjpDYWNoZXM6
OkNhY2hlcygpCi0gICAgOiBsYXN0SXRlbSgwKQotICAgICwgaXNMZW5ndGhDYWNoZVZhbGlkKGZh
bHNlKQotICAgICwgaXNJdGVtQ2FjaGVWYWxpZChmYWxzZSkKLXsKLX0KLQotdm9pZCBOb2RlTGlz
dDo6Q2FjaGVzOjpyZXNldCgpCi17Ci0gICAgbGFzdEl0ZW0gPSAwOwotICAgIGlzTGVuZ3RoQ2Fj
aGVWYWxpZCA9IGZhbHNlOwotICAgIGlzSXRlbUNhY2hlVmFsaWQgPSBmYWxzZTsgICAgIAotfQot
Ci19CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGVMaXN0LmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNTggKzI4LDIzIEBACiAKICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF0b21pY1N0cmluZzsKLWNsYXNz
IE5vZGU7CisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIE5vZGU7CiAKLWNsYXNz
IE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKLXB1YmxpYzoKLQotICAg
IHN0cnVjdCBDYWNoZXMgewotICAgICAgICBDYWNoZXMoKTsKLSAgICAgICAgdm9pZCByZXNldCgp
OwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOwotICAgICAgICBOb2Rl
KiBsYXN0SXRlbTsKLSAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7Ci0gICAgICAgIGJv
b2wgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKLSAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlk
IDogMTsKKyAgICBjbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7
CisgICAgcHVibGljOgorICAgICAgICBOb2RlTGlzdCgpIHsgfQorICAgICAgICB2aXJ0dWFsIH5O
b2RlTGlzdCgpIHsgfQorCisgICAgICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3Ig
Tm9kZUxpc3QKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAg
ICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25z
dCA9IDA7CiAgICAgfTsKIAotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVh
bCB+Tm9kZUxpc3QoKTsKLQotICAgIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7IH0KLQotICAgIC8vIERPTSBtZXRob2RzICYgYXR0
cmlidXRlcyBmb3IgTm9kZUxpc3QKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsK
LSAgICBOb2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KLSAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCi0gICAgdmlydHVhbCB2b2lkIHJv
b3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQXR0cmli
dXRlQ2hhbmdlZCgpIHt9Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBoZWxwZXIgZnVuY3Rpb25zIGZv
ciBzZWFyY2hpbmcgYWxsIEVsZW1lbnRJbXBscyBpbiBhIHRyZWUKLSAgICB1bnNpZ25lZCByZWN1
cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQgPSAwKSBjb25zdDsKLSAgICBOb2RlKiByZWN1cnNpdmVJ
dGVtICh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIG5vZGVNYXRjaGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdCA9IDA7Ci0KLSAgICBSZWZQ
dHI8Tm9kZT4gbV9yb290Tm9kZTsKLSAgICBtdXRhYmxlIENhY2hlcyogbV9jYWNoZXM7Ci0gICAg
Ym9vbCBtX293bnNDYWNoZXM7Ci0gICAgYm9vbCBtX25lZWRzTm90aWZpY2F0aW9uczsKLQotIHBy
aXZhdGU6Ci0gICAgTm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVu
c2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7Ci0gICAgTm9kZSogaXRl
bUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCBy
ZW1haW5pbmdPZmZzZXQpIGNvbnN0OwotfTsKLQotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiBOb2RlTGlzdF9oCkluZGV4OiBXZWJDb3JlL2Rv
bS9TZWxlY3Rvck5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rv
ck5vZGVMaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxp
c3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NlbGVjdG9yTm9kZUxpc3Q6OlNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQoreworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHJvb3ROb2RlLT5kb2N1bWVudCgpOworICAgIGZvciAoTm9kZSogbiA9IHJvb3RO
b2RlLT50cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgQ1NTU3R5bGVT
ZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IGRvY3VtZW50LT5zdHlsZVNlbGVjdG9yKCk7CisgICAg
ICAgICAgICBzdHlsZVNlbGVjdG9yLT5pbml0RWxlbWVudEFuZFBzZXVkb1N0YXRlKHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKSk7CisgICAgICAgICAgICBpZiAoc3R5bGVTZWxlY3Rvci0+Y2hlY2tT
ZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICAgICAgbV9ub2Rlcy5hcHBlbmQobik7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxl
Y3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVM
aXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2VsZWN0b3JOb2Rl
TGlzdF9oCisjZGVmaW5lIFNlbGVjdG9yTm9kZUxpc3RfaAorCisjaW5jbHVkZSAiU3RhdGljTm9k
ZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIENTU1NlbGVjdG9yOworCisgICAgY2xhc3Mg
U2VsZWN0b3JOb2RlTGlzdCA6IHB1YmxpYyBTdGF0aWNOb2RlTGlzdCB7CisgICAgcHVibGljOgor
ICAgICAgICBTZWxlY3Rvck5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENTU1Nl
bGVjdG9yKiBzZWxlY3Rvcik7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gU2VsZWN0b3JOb2RlTGlzdF9oCkluZGV4OiBXZWJDb3JlL2RvbS9TdGF0aWNOb2Rl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RhdGlj
Tm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vZGUu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordW5zaWdu
ZWQgU3RhdGljTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZXMu
c2l6ZSgpOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBtX25vZGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IG1fbm9kZXNbaW5kZXhdLmdldCgpOworICAgIHJldHVybiAwOworfQorCitOb2RlKiBTdGF0aWNO
b2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25z
dAoreworICAgIHNpemVfdCBsZW5ndGggPSBtX25vZGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGVz
W2ldLmdldCgpOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAg
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBTdGF0aWNOb2RlTGlzdF9oCisjZGVmaW5lIFN0YXRpY05vZGVMaXN0X2gKKwor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgTm9kZTsK
KworICAgIGNsYXNzIFN0YXRpY05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgYnVpbGQgdXAgdGhlIFZlY3Rv
ciBpbiB0aGVpciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgU3RhdGljTm9kZUxpc3QoKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB+U3RhdGljTm9kZUxpc3QoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25z
dCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+IG1fbm9kZXM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gU3RhdGljTm9kZUxpc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18097</attachid>
            <date>2007-12-24 17:41:40 -0800</date>
            <delta_ts>2007-12-24 19:23:01 -0800</delta_ts>
            <desc>Much much faster</desc>
            <filename>speedyqsa.diff</filename>
            <type>text/plain</type>
            <size>56486</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODk3MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTc4LDcgKzE5NzgsNiBAQAogCQlBODE4NzIxRTA5NzdEM0MwMDA1
ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0Lmgg
Ki87IH07CiAJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE0MDk3
N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLzsgfTsKIAkJQTgxODcyMjAwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5v
ZGVMaXN0LmggKi87IH07Ci0JCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIx
NjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyMzA5NzdE
M0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2Rl
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3Bw
ICovOyB9OwpAQCAtMzYxNCw2ICszNjEzLDEyIEBACiAJCUJDNzcyQzRGMEM0RUIzMDQwMDgzMjg1
RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
NzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRFQjM0NDAw
ODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi87IH07CiAJCUJDN0Y0NEE4MEI5RTMy
NEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGNDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUJDN0ZBNjIwMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MUUwRDFGMENCRDAw
REIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjIxMEQxRjBDQkQw
MERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9k
ZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdG
QTYyQjBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2
MkUwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAv
KiBTdGF0aWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAv
KiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5o
ICovOyB9OworCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY4
MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDODBD
OTg3MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg1MENEMjk0RUUw
MEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCAqLzsgfTsKIAkJQkM4MEM5ODgw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg2MENEMjk0RUUwMEEwQjdC
MyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggKi87IH07CiAJCUJDODBDOThCMENEMjk1MDUw
MEEwQjdCMyAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg5MENEMjk1MDUwMEEwQjdCMyAvKiBBbmlt
YXRpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTYxMDgsNyArNjExMyw2IEBACiAJCUE4MTg3
MjEzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hbWVOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODE4NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWlu
ZXJOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTUwOTc3RDND
MDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoaWxkTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgx
ODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2
RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
NjI1LDYgKzc2MjksMTIgQEAKIAkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbEJh
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxCYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJh
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlE
MDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUUw
RDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNOb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyog
U3RhdGljTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlj
Tm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MkMwRDFGMEVG
RjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0YXRpY05vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0
b3JOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxl
Y3Rvck5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODUw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzgwQzk4OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE2Niw2ICsxMjE3Niw4IEBACiAJ
CQkJQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywK
IAkJCQlBODE4NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywK
IAkJCQk5M0VFQzFFOTA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICov
LAorCQkJCUJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLywK
IAkJCQk2NTUwQjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJ
CTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRB
N0Y2MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEyMjI0LDcgKzEyMjM2
LDYgQEAKIAkJCQk4NTRGRTcyQTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCAq
LywKIAkJCQk4NTRGRTcyQjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi8sCiAJ
CQkJMUE3NTBEODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVyYXRvci5pZGwgKi8sCi0JCQkJ
QTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1
RiAvKiBOb3RhdGlvbi5jcHAgKi8sCkBAIC0xMjI1Miw2ICsxMjI2MywxMCBAQAogCQkJCUQyM0NB
NTQ4MEFCMEU5ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJODUwMzFC
MzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJ
CQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAq
LywKKwkJCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAg
Ki8sCisJCQkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAq
LywKKwkJCQlCQzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjJCMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oICovLAog
CQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywKIAkJ
CQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJCUFB
NEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovLApAQCAtMTQxMTgs
NiArMTQxMzMsOSBAQAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3Vu
aXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8q
IEpTTG9jYXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyMTBEMUYwQ0JEMDBE
QjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyRDBE
MUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
N0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE1Mzc3LDcgKzE1Mzk1LDYgQEAKIAkJCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQg
LyogTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRG
RTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEVBN0VCRjBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjQwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3Vt
ZW50SW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTgzMiw2ICsxNTg0OSw5IEBACiAJCQkJ
OTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0EzNzkxNDBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVM
aXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBT
dGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzdGQTY4MjBEMUYxNjc5MDBE
QjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTEgKzEyOSwxMSBAQCBjbGFzcyBTdHls
ZWRFbGVtZW50OwogIAogICAgICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsg
cmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0KICAgICAg
ICAgLyogY2hlY2tzIGlmIGEgY29tcG91bmQgc2VsZWN0b3IgKHdoaWNoIGNhbiBjb25zaXN0IG9m
IG11bHRpcGxlIHNpbXBsZSBzZWxlY3RvcnMpCiAgICAgICAgICAgIG1hdGNoZXMgdGhlIGdpdmVu
IEVsZW1lbnQgKi8KLSAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxl
Y3Rvcik7CisgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciopOworCisgICAg
cHJvdGVjdGVkOgogICAgICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXM9
MCwgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5fTsKICAgICAg
ICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxl
bWVudCAqZSwgYm9vbCBpc0FuY2VzdG9yLCBib29sIGlzU3ViU2VsZWN0b3IpOwogCkBAIC0yNDIs
NiArMjQyLDcgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICNlbmRpZgogCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBDU1NSdWxlU2V0OworICAgICAgICBmcmllbmQgY2xhc3MgTm9kZTsKICAgICB9Owog
CiAgICAgY2xhc3MgQ1NTUnVsZURhdGEgewpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2RlKiBuLCBOb2Rl
TGlzdDo6Q2FjaGVzKiBpbmZvKQotICAgIDogTm9kZUxpc3QobiwgaW5mbywgZmFsc2UpCitDaGls
ZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KE5vZGUqIG4sIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KiBpbmZvKQorICAgIDogRHluYW1pY05vZGVMaXN0KG4sIGluZm8sIGZhbHNlKQogewogfQogCklu
ZGV4OiBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0NoaWxk
Tm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MiwxNiArMjAsMTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLwor
CiAjaWZuZGVmIENoaWxkTm9kZUxpc3RfaAogI2RlZmluZSBDaGlsZE5vZGVMaXN0X2gKIAotI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7
CitjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiBwdWJsaWM6
Ci0gICAgQ2hpbGROb2RlTGlzdChOb2RlKiwgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgIENoaWxk
Tm9kZUxpc3QoTm9kZSosIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIp
CisrKyBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
OCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNsYXNzTm9kZUxpc3Q6OkNsYXNz
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05h
bWVzLCBOb2RlTGlzdDo6Q2FjaGVzKiBjYWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290Tm9kZSwg
Y2FjaGVzLCB0cnVlKQorQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIER5bmFtaWNOb2RlTGlzdDo6
Q2FjaGVzKiBjYWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywg
dHJ1ZSkKIHsKICAgICBtX2NsYXNzTmFtZXMucGFyc2VDbGFzc0F0dHJpYnV0ZShjbGFzc05hbWVz
LCBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiB9CkluZGV4OiBXZWJD
b3JlL2RvbS9DbGFzc05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1IEBACiAjZGVmaW5lIENsYXNzTm9kZUxp
c3RfaAogCiAjaW5jbHVkZSAiQ2xhc3NOYW1lcy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisj
aW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFN0cmluZzsKIAotICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxp
c3QgeworICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBOb2RlTGlzdDo6Q2FjaGVzKik7CisgICAg
ICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5n
JiBjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAgICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAyODk3MikKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiwx
MiBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAgIE5vZGVMaXN0
ICAgICAgICAgICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgdGFnbmFtZSk7
CisKKyAgICAgICAgLy8gRG9jdW1lbnRTZWxlY3RvciAtIFNlbGVjdG9yIEFQSQorICAgICAgICBF
bGVtZW50ICAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3IoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykK
KyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBOb2RlTGlzdCAgICAg
ICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9t
L0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05v
ZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIpCShmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNw
cDoyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkK
KyAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCisgICAgLCBtX293bnNDYWNoZXModHJ1ZSkKKyAg
ICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKK3sKKyAgICBtX3Jv
b3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6Ok5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJv
b2wgbmVlZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAs
IG1fY2FjaGVzKGluZm8pCisgICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCisgICAgLCBtX25lZWRz
Tm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCit7CisgICAgbV9yb290Tm9kZS0+cmVn
aXN0ZXJOb2RlTGlzdCh0aGlzKTsKK30gICAgCisKK05vZGVMaXN0Ojp+Tm9kZUxpc3QoKQorewor
ICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBpZiAobV9vd25z
Q2FjaGVzKQorICAgICAgICBkZWxldGUgbV9jYWNoZXM7Cit9CisKK3Vuc2lnbmVkIE5vZGVMaXN0
OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKCFzdGFydCkK
KyAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgpOworCisgICAgaWYgKG1fY2FjaGVzLT5p
c0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gbV9yb290Tm9kZSkKKyAgICAgICAgcmV0dXJu
IG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7CisKKyAgICB1bnNpZ25lZCBsZW4gPSAwOworCisgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5n
KCkpCisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlTWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgIGxlbiAr
PSByZWN1cnNpdmVMZW5ndGgobik7CisgICAgICAgIH0KKworICAgIGlmIChzdGFydCA9PSBtX3Jv
b3ROb2RlKSB7CisgICAgICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggPSBsZW47CisgICAgICAg
IG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBsZW47Cit9CisKK05vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2Rl
KiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorewor
ICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CisKKyAgICBmb3IgKE5vZGUgKm4gPSBz
dGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdP
ZmZzZXQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw
OyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlz
dDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQs
IGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNl
dCA8IDApOworICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2
aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMt
Pmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVW
YWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGlu
IHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25l
ZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAoreworICAgIGludCByZW1haW5pbmdPZmZzZXQg
PSBvZmZzZXQ7CisgICAgaWYgKCFzdGFydCkgeworICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7
CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGFy
dCA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQg
LT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHJlbWFpbmluZ09mZnNldCA8IDApCisgICAgICAgIHJldHVybiBpdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zm
c2V0LCByZW1haW5pbmdPZmZzZXQpOworfQorCitOb2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1l
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX3Jvb3RO
b2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgeworICAg
ICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
ZWxlbWVudElkKTsKKworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgaWYgKHAgPT0g
bV9yb290Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsK
KyAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OnJv
b3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3sKKyAgICBtX2NhY2hlcy0+cmVzZXQoKTsKK30KKwor
CitOb2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQorICAgIDogbGFzdEl0ZW0oMCkKKyAgICAsIGlz
TGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKKyAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCit7
Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQoreworICAgIGxhc3RJdGVtID0g
MDsKKyAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKKyAgICBpc0l0ZW1DYWNoZVZhbGlk
ID0gZmFsc2U7ICAgICAKK30KKworfQpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM5ICsy
MSwzOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZUxpc3Q6
Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRp
b25zKQorRHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3RO
b2RlKQogICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKICAgICAsIG1fb3duc0NhY2hlcyh0cnVl
KQogICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQogewotICAg
IG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+cmVn
aXN0ZXJEeW5hbWljTm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCi1Ob2RlTGlzdDo6Tm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBu
ZWVkc05vdGlmaWNhdGlvbnMpCitEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9v
bCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwg
bV9jYWNoZXMoaW5mbykKICAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKICAgICAsIG1fbmVlZHNO
b3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKIHsKLSAgICBtX3Jvb3ROb2RlLT5yZWdp
c3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVM
aXN0KHRoaXMpOwogfSAgICAKIAotTm9kZUxpc3Q6On5Ob2RlTGlzdCgpCitEeW5hbWljTm9kZUxp
c3Q6On5EeW5hbWljTm9kZUxpc3QoKQogewotICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2Rl
TGlzdCh0aGlzKTsKKyAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRo
aXMpOwogICAgIGlmIChtX293bnNDYWNoZXMpCiAgICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKIH0K
IAotdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QK
K3Vuc2lnbmVkIER5bmFtaWNOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0KSBj
b25zdAogewogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5nZXQo
KTsKQEAgLTgwLDcgKzc4LDcgQEAgdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChO
b2RlKgogICAgIHJldHVybiBsZW47CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNG
cm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zm
c2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dAogewogICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CiAKQEAgLTEwMSw3ICs5OSw3
IEBAIE5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCgKICAgICByZXR1cm4g
MDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxp
c3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJl
bWFpbmluZ09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7
CiAgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZShtX3Jvb3ROb2RlLmdldCgpKSkgewpAQCAtMTIxLDcgKzExOSw3IEBAIE5vZGUqIE5vZGVMaXN0
OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQKICAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcg
bm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0o
dW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2RlTGlz
dDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAogewog
ICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKCFzdGFydCkgewpAQCAt
MTQyLDcgKzE0MCw3IEBAIE5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG8K
ICAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJl
bWFpbmluZ09mZnNldCk7CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0
ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBp
ZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50
KCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVs
ZW1lbnRCeUlkKGVsZW1lbnRJZCk7CkBAIC0xNjcsMjAgKzE2NSwyMCBAQCBOb2RlKiBOb2RlTGlz
dDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9k
ZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQgRHluYW1pY05vZGVMaXN0Ojpy
b290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCiB7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7CiB9CiAK
IAotTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKK0R5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpD
YWNoZXMoKQogICAgIDogbGFzdEl0ZW0oMCkKICAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxz
ZSkKICAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCiB7CiB9CiAKLXZvaWQgTm9kZUxpc3Q6
OkNhY2hlczo6cmVzZXQoKQordm9pZCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQog
ewogICAgIGxhc3RJdGVtID0gMDsKICAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikJKGZyb20gV2ViQ29yZS9kb20v
Tm9kZUxpc3QuaDoyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgTm9kZUxpc3RfaAorI2RlZmluZSBOb2RlTGlz
dF9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEF0b21pY1N0cmluZzsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIE5vZGVMaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKK3B1YmxpYzoKKworICAgIHN0cnVjdCBDYWNoZXMgewor
ICAgICAgICBDYWNoZXMoKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOworICAgICAgICBOb2RlKiBsYXN0SXRlbTsKKyAgICAg
ICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZh
bGlkIDogMTsKKyAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICB9OworCisg
ICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNh
dGlvbnMpOworICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyos
IGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKKyAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOworCisg
ICAgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTm90aWZp
Y2F0aW9uczsgfQorCisgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlz
dAorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Tm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgIE5vZGUqIGl0ZW1XaXRo
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIC8vIE90aGVyIG1ldGhvZHMg
KG5vdCBwYXJ0IG9mIERPTSkKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGlsZHJlbkNoYW5n
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkge30KKwor
cHJvdGVjdGVkOgorICAgIC8vIGhlbHBlciBmdW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxl
bWVudEltcGxzIGluIGEgdHJlZQorICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBz
dGFydCA9IDApIGNvbnN0OworICAgIE5vZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNl
dCwgTm9kZSogc3RhcnQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMo
Tm9kZSogdGVzdE5vZGUpIGNvbnN0ID0gMDsKKworICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3ROb2Rl
OworICAgIG11dGFibGUgQ2FjaGVzKiBtX2NhY2hlczsKKyAgICBib29sIG1fb3duc0NhY2hlczsK
KyAgICBib29sIG1fbmVlZHNOb3RpZmljYXRpb25zOworCisgcHJpdmF0ZToKKyAgICBOb2RlKiBp
dGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQg
cmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKKyAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJvbUN1cnJl
bnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29u
c3Q7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRHlu
YW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
OSArMjEsMTAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBOb2RlTGlzdF9oCi0jZGVmaW5lIE5vZGVM
aXN0X2gKKyNpZm5kZWYgRHluYW1pY05vZGVMaXN0X2gKKyNkZWZpbmUgRHluYW1pY05vZGVMaXN0
X2gKIAorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM1
LDEzICszNCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBj
bGFzcyBOb2RlOwogCi1jbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0
PiB7CitjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgewogcHVibGljOgot
CiAgICAgc3RydWN0IENhY2hlcyB7CiAgICAgICAgIENhY2hlcygpOwogICAgICAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKICAgICAg
ICAgTm9kZSogbGFzdEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwpAQCAt
NDksOSArNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7
CiAgICAgfTsKIAotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wg
bmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9k
ZUxpc3QoKTsKKyAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Ym9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAg
dmlydHVhbCB+RHluYW1pY05vZGVMaXN0KCk7CiAKICAgICBib29sIG5lZWRzTm90aWZpY2F0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNOb3RpZmljYXRpb25zOyB9CiAKQEAgLTYyLDcgKzYw
LDcgQEAgcHVibGljOgogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQog
ICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwg
dm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCByb290
Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IH0KIAogcHJvdGVjdGVkOgogICAgIC8vIGhlbHBlciBm
dW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxlbWVudEltcGxzIGluIGEgdHJlZQpAQCAtNzUs
MTEgKzczLDExIEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fb3duc0NhY2hlczsKICAgICBib29s
IG1fbmVlZHNOb3RpZmljYXRpb25zOwogCi0gcHJpdmF0ZToKK3ByaXZhdGU6CiAgICAgTm9kZSog
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJy
ZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNv
bnN0OwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBEeW5hbWljTm9kZUxpc3RfaApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHJldmlzaW9uIDI4
OTcyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2
ICsxMDUsMTIgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAvLyBIVE1MIDUKICAgICAgICAgTm9k
ZUxpc3QgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgbmFtZSk7CiAKKyAgICAg
ICAgLy8gRWxlbWVudFNlbGVjdG9yIC0gU2VsZWN0b3IgQVBJCisgICAgICAgIEVsZW1lbnQgICAg
ICAgICAgICAgcXVlcnlTZWxlY3RvcihpbiBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICAgcXVl
cnlTZWxlY3RvckFsbChpbiBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisKICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAg
ICAgICAvLyBPYmplY3RpdmUtQyBleHRlbnNpb25zCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgaW5uZXJUZXh0OwpJbmRleDogV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAy
ODk3MikKKysrIFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1OYW1lTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBT
dHJpbmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKLSAgICA6IE5vZGVMaXN0KHJv
b3QsIGNhY2hlcywgdHJ1ZSkKK05hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KE5vZGUqIHJvb3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAg
ICA6IER5bmFtaWNOb2RlTGlzdChyb290LCBjYWNoZXMsIHRydWUpCiAgICAgLCBtX25vZGVOYW1l
KG5hbWUpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzIpCisrKyBXZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDExIEBA
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBOYW1l
Tm9kZUxpc3RfaAogI2RlZmluZSBOYW1lTm9kZUxpc3RfaAogCi0jaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMSw5ICszMiw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8qKgogICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxl
bWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWU9IiB0YWcKICAqLwotY2xhc3MgTmFtZU5vZGVMaXN0IDog
cHVibGljIE5vZGVMaXN0IHsKK2NsYXNzIE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9k
ZUxpc3QgewogcHVibGljOgotICAgIE5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJp
bmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMqKTsKKyAgICBOYW1lTm9kZUxpc3QoTm9kZSogcm9v
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAg
Ly8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogCkBAIC00Miw3
ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERP
TSkKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBO
b2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBy
b290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IER5bmFtaWNOb2RlTGlzdDo6cm9vdE5vZGVDaGls
ZHJlbkNoYW5nZWQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyODk3MikKKysrIFdl
YkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKKyNpbmNsdWRlICJDU1NSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRl
ICJDaGlsZE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJE
eW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOSw2ICs0Niw3IEBACiAjaW5jbHVk
ZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIK
QEAgLTQ5LDE2ICs1NywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLXR5cGVkZWYgSGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owor
dHlwZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owogc3RydWN0IE5v
ZGVMaXN0c05vZGVEYXRhIHsKICAgICBOb2RlTGlzdFNldCBtX2xpc3RzVG9Ob3RpZnk7Ci0gICAg
Tm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIE5vZGVMaXN0OjpDYWNoZXM+IG1fY2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBIYXNoTWFw
PFN0cmluZywgTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7CisgICAgRHlu
YW1pY05vZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIEhhc2hNYXA8
U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2FjaGVzOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxp
c3RDYWNoZXM7CiB9OwogCiAvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIg
dGFnLgotY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgVGFnTm9k
ZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKICAgICBUYWdOb2RlTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCkBAIC03Myw3ICs4MSw3IEBA
IHByaXZhdGU6CiB9OwogCiBpbmxpbmUgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQ
dHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IE5vZGVMaXN0KHJvb3ROb2RlLCB0cnVl
KQorICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQogICAgICwgbV9uYW1lc3Bh
Y2VVUkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQogewpAQCAt
NDQxLDcgKzQ0OSw3IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAgICAgcmV0
dXJuIGNvdW50OwogfQogCi12b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxp
c3QpCit2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCog
bGlzdCkKIHsKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQo
bmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKQEAgLTQ1NCw3ICs0NjIsNyBAQCB2b2lkIE5vZGU6OnJl
Z2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpCiAgICAgbV9kb2N1bWVudC0+YWRkTm9kZUxpc3Qo
KTsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2
b2lkIE5vZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0
KQogewogICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlTm9k
ZUxpc3QoKTsKQEAgLTEyMTUsNyArMTIyMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6
OmdldEVsZW1lbnRzQnkKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0
cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKIAotICAgIHJldHVybiBuZXcgTmFtZU5vZGVM
aXN0KHRoaXMsIGVsZW1lbnROYW1lLCAmbV9ub2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0Q2FjaGVz
LmFkZChlbGVtZW50TmFtZSwgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKKyAg
ICByZXR1cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgJm1fbm9kZUxpc3Rz
LT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIER5bmFtaWNOb2RlTGlzdDo6
Q2FjaGVzKCkpLmZpcnN0LT5zZWNvbmQpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2Rl
OjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKQEAgLTEy
MjMsNyArMTIzMSw0NCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5
CiAgICAgaWYgKCFtX25vZGVMaXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2Rl
TGlzdHNOb2RlRGF0YSk7CiAKLSAgICByZXR1cm4gbmV3IENsYXNzTm9kZUxpc3QodGhpcywgY2xh
c3NOYW1lcywgJm1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFt
ZXMsIE5vZGVMaXN0OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJuIG5ldyBD
bGFzc05vZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsICZtX25vZGVMaXN0cy0+bV9jbGFzc05vZGVM
aXN0Q2FjaGVzLmFkZChjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJz
dC0+c2Vjb25kKTsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBDU1NT
dHlsZVNoZWV0IHRlbXBTdHlsZVNoZWV0KGRvY3VtZW50KCkpOworICAgIENTU1BhcnNlciBwKHRy
dWUpOworICAgIFJlZlB0cjxDU1NSdWxlPiBydWxlID0gcC5wYXJzZVJ1bGUoJnRlbXBTdHlsZVNo
ZWV0LCBzZWxlY3RvcnMgKyAie30iKTsgICAgCisgICAgaWYgKCFydWxlLT5pc1N0eWxlUnVsZSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHN0YXRp
Y19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUuZ2V0KCkpLT5zZWxlY3RvcigpOworICAgIAorICAg
IC8vIEZJWE1FOiBXZSBjYW4gc3BlZWQgdGhpcyB1cCBieSBpbXBsZW1lbnRpbmcgY2FjaGluZyBz
aW1pbGFyIHRvIHRoZSBvbmUgdXNlIGJ5IGdldEVsZW1lbnRCeUlkCisgICAgZm9yIChOb2RlICpu
ID0gdHJhdmVyc2VOZXh0Tm9kZSgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBDU1NTdHlsZVNl
bGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShlbGVtZW50
KTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9yKHNlbGVjdG9y
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6cXVlcnlT
ZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgQ1NTU3R5bGVTaGVldCB0ZW1wU3R5bGVTaGVldChkb2N1bWVudCgpKTsKKyAgICBDU1NQ
YXJzZXIgcCh0cnVlKTsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gcnVsZSA9IHAucGFyc2VSdWxlKCZ0
ZW1wU3R5bGVTaGVldCwgc2VsZWN0b3JzICsgInt9Iik7ICAgIAorICAgIGlmICghcnVsZS0+aXNT
dHlsZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgU2VsZWN0b3JOb2RlTGlz
dCogcmVzdWx0TGlzdCA9IG5ldyBTZWxlY3Rvck5vZGVMaXN0KHRoaXMsIHN0YXRpY19jYXN0PENT
U1N0eWxlUnVsZSo+KHJ1bGUuZ2V0KCkpLT5zZWxlY3RvcigpKTsKKworICAgIHJldHVybiByZXN1
bHRMaXN0OwogfQogCiBEb2N1bWVudCAqTm9kZTo6b3duZXJEb2N1bWVudCgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShy
ZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBj
bGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBEeW5hbWljTm9kZUxp
c3Q7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwpA
QCAtNDQyLDggKzQ0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dUcmVlQW5kTWFyayhjb25z
dCBOb2RlKiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBOb2Rl
KiBtYXJrZWROb2RlMiA9IDAsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMiA9IDApIGNvbnN0Owog
I2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCopOworICAgIHZvaWQgcmVnaXN0ZXJEeW5hbWlj
Tm9kZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRHluYW1pY05v
ZGVMaXN0KER5bmFtaWNOb2RlTGlzdCopOwogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQ2hpbGRy
ZW5DaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdl
ZCgpOwogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpOwpAQCAtNDUx
LDEwICs0NTIsMTQgQEAgcHVibGljOgogICAgIAogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdl
dEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNv
bnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKLQogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVs
ZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUpOwogICAgIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3QgU3RyaW5nJiBjbGFzc05hbWVz
KTsKIAorICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gcXVlcnlTZWxlY3Rvcihjb25zdCBTdHJpbmcm
IHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYpOworLy8gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBx
dWVyeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBOU1Jlc29sdmVyLCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlTZWxlY3RvckFsbChjb25z
dCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYpOworLy8gICAgUGFzc1JlZlB0cjxO
b2RlTGlzdD4gcXVlcnlTZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgTlNSZXNv
bHZlciwgRXhjZXB0aW9uQ29kZSYpOworCiBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgRG9jUHRy
PERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE5vZGUqIG1fcHJldmlvdXM7CkluZGV4OiBXZWJD
b3JlL2RvbS9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUxpc3Qu
Y3BwCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxOTAgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0
LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCi0gICAgOiBtX3Jvb3ROb2RlKHJvb3RO
b2RlKQotICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKLSAgICAsIG1fb3duc0NhY2hlcyh0cnVl
KQotICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQotewotICAg
IG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Ci19ICAgIAotCi1Ob2RlTGlzdDo6
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5m
bywgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCi0gICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQot
ICAgICwgbV9jYWNoZXMoaW5mbykKLSAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKLSAgICAsIG1f
bmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKLXsKLSAgICBtX3Jvb3ROb2Rl
LT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwotfSAgICAKLQotTm9kZUxpc3Q6On5Ob2RlTGlzdCgp
Ci17Ci0gICAgbV9yb290Tm9kZS0+dW5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwotICAgIGlmICht
X293bnNDYWNoZXMpCi0gICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKLX0KLQotdW5zaWduZWQgTm9k
ZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QKLXsKLSAgICBpZiAoIXN0
YXJ0KQotICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUuZ2V0KCk7Ci0KLSAgICBpZiAobV9jYWNo
ZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBzdGFydCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICBy
ZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aDsKLQotICAgIHVuc2lnbmVkIGxlbiA9IDA7Ci0K
LSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAg
aWYgKG5vZGVNYXRjaGVzKG4pKQotICAgICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAg
bGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChuKTsKLSAgICAgICAgfQotCi0gICAgaWYgKHN0YXJ0ID09
IG1fcm9vdE5vZGUpIHsKLSAgICAgICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbjsKLSAg
ICAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGxlbjsKLX0KLQotTm9kZSogTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50
KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA+PSAwKTsKLQotICAgIGZvciAoTm9kZSAq
biA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShtX3Jvb3ROb2RlLmdldCgpKSkg
ewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMobikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewot
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAg
ICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlbWFp
bmluZ09mZnNldC0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCi19Ci0KLU5vZGUqIE5v
ZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9m
ZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVtYWluaW5n
T2Zmc2V0IDwgMCk7Ci0gICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJz
ZVByZXZpb3VzTm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVt
ZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtX2Nh
Y2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0
ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1D
YWNoZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCsrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5v
ZGUgaW4gdGhpcyBzdWJ0cmVlCi19Ci0KLU5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVu
c2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQpIGNvbnN0Ci17Ci0gICAgaW50IHJlbWFpbmluZ09m
ZnNldCA9IG9mZnNldDsKLSAgICBpZiAoIXN0YXJ0KSB7Ci0gICAgICAgIHN0YXJ0ID0gbV9yb290
Tm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFs
aWQpIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IHx8IG1fY2Fj
aGVzLT5sYXN0SXRlbU9mZnNldCAtIG9mZnNldCA8IG9mZnNldCkgewotICAgICAgICAgICAgICAg
IHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOwotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09m
ZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAocmVtYWluaW5nT2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJu
IGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZzZXQp
OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0
LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7Ci19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0
aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
cm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVudCgpKSB7
Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50
QnlJZChlbGVtZW50SWQpOwotCi0gICAgICAgIGlmICghbm9kZSB8fCAhbm9kZU1hdGNoZXMobm9k
ZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBmb3IgKE5vZGUqIHAgPSBub2Rl
LT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICBpZiAo
cCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwotCi0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGwgPSBsZW5ndGgoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpdGVt
KGkpOwotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCi0gICAgICAgICAg
ICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBOb2RlTGlz
dDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQotewotICAgIG1fY2FjaGVzLT5yZXNldCgpOwot
fQotCi0KLU5vZGVMaXN0OjpDYWNoZXM6OkNhY2hlcygpCi0gICAgOiBsYXN0SXRlbSgwKQotICAg
ICwgaXNMZW5ndGhDYWNoZVZhbGlkKGZhbHNlKQotICAgICwgaXNJdGVtQ2FjaGVWYWxpZChmYWxz
ZSkKLXsKLX0KLQotdm9pZCBOb2RlTGlzdDo6Q2FjaGVzOjpyZXNldCgpCi17Ci0gICAgbGFzdEl0
ZW0gPSAwOwotICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZhbHNlOwotICAgIGlzSXRlbUNhY2hl
VmFsaWQgPSBmYWxzZTsgICAgIAotfQotCi19CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHJldmlzaW9uIDI4OTcyKQor
KysgV2ViQ29yZS9kb20vTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNTggKzI4LDIz
IEBACiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEF0b21pY1N0cmluZzsKLWNsYXNzIE5vZGU7CisgICAgY2xhc3MgQXRvbWljU3RyaW5nOwor
ICAgIGNsYXNzIE5vZGU7CiAKLWNsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8Tm9k
ZUxpc3Q+IHsKLXB1YmxpYzoKLQotICAgIHN0cnVjdCBDYWNoZXMgewotICAgICAgICBDYWNoZXMo
KTsKLSAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY2Fj
aGVkTGVuZ3RoOwotICAgICAgICBOb2RlKiBsYXN0SXRlbTsKLSAgICAgICAgdW5zaWduZWQgbGFz
dEl0ZW1PZmZzZXQ7Ci0gICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKLSAgICAg
ICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICBjbGFzcyBOb2RlTGlzdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7CisgICAgcHVibGljOgorICAgICAgICBOb2RlTGlzdCgp
IHsgfQorICAgICAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpIHsgfQorCisgICAgICAgIC8vIERPTSBt
ZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKKyAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmKSBjb25zdCA9IDA7CiAgICAgfTsKIAotICAgIE5vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICBO
b2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90
aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9kZUxpc3QoKTsKLQotICAgIGJvb2wgbmVlZHNO
b3RpZmljYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7IH0KLQot
ICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKLSAgICBOb2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBE
T00pCi0gICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9Ci0KLXByb3RlY3RlZDoKLSAg
ICAvLyBoZWxwZXIgZnVuY3Rpb25zIGZvciBzZWFyY2hpbmcgYWxsIEVsZW1lbnRJbXBscyBpbiBh
IHRyZWUKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQgPSAwKSBjb25z
dDsKLSAgICBOb2RlKiByZWN1cnNpdmVJdGVtICh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0
ID0gMCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGUqIHRlc3ROb2Rl
KSBjb25zdCA9IDA7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9yb290Tm9kZTsKLSAgICBtdXRhYmxl
IENhY2hlcyogbV9jYWNoZXM7Ci0gICAgYm9vbCBtX293bnNDYWNoZXM7Ci0gICAgYm9vbCBtX25l
ZWRzTm90aWZpY2F0aW9uczsKLQotIHByaXZhdGU6Ci0gICAgTm9kZSogaXRlbUZvcndhcmRzRnJv
bUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNl
dCkgY29uc3Q7Ci0gICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0
LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwotfTsKLQotfSAv
L25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiBOb2Rl
TGlzdF9oCkluZGV4OiBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgor
CisjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlbGVjdG9yTm9kZUxpc3Q6OlNlbGVj
dG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJvb3ROb2RlLT5kb2N1bWVudCgpOwor
ICAgIGZvciAoTm9kZSogbiA9IHJvb3ROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkg
eworICAgICAgICAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IGRvY3VtZW50
LT5zdHlsZVNlbGVjdG9yKCk7CisgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5pbml0RWxlbWVu
dEFuZFBzZXVkb1N0YXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKSk7CisgICAgICAgICAgICBp
ZiAoc3R5bGVTZWxlY3Rvci0+Y2hlY2tTZWxlY3RvcihzZWxlY3RvcikpCisgICAgICAgICAgICAg
ICAgbV9ub2Rlcy5hcHBlbmQobik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgU2VsZWN0b3JOb2RlTGlzdF9oCisjZGVmaW5lIFNlbGVjdG9yTm9kZUxpc3Rf
aAorCisjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIENT
U1NlbGVjdG9yOworCisgICAgY2xhc3MgU2VsZWN0b3JOb2RlTGlzdCA6IHB1YmxpYyBTdGF0aWNO
b2RlTGlzdCB7CisgICAgcHVibGljOgorICAgICAgICBTZWxlY3Rvck5vZGVMaXN0KFBhc3NSZWZQ
dHI8Tm9kZT4gcm9vdE5vZGUsIENTU1NlbGVjdG9yKiBzZWxlY3Rvcik7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2VsZWN0b3JOb2RlTGlzdF9oCkluZGV4
OiBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vU3RhdGljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGlj
Tm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordW5zaWduZWQgU3RhdGljTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlz
dDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBtX25vZGVz
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbaW5kZXhdLmdldCgpOworICAgIHJldHVy
biAwOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIHNpemVfdCBsZW5ndGggPSBtX25vZGVz
LnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX25vZGVzW2ldLmdldCgpOworICAgICAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1
dGUoKSA9PSBlbGVtZW50SWQpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9k
b20vU3RhdGljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdGF0aWNOb2Rl
TGlzdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdGF0aWNOb2RlTGlzdF9oCisjZGVm
aW5lIFN0YXRpY05vZGVMaXN0X2gKKworI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgTm9kZTsKKworICAgIGNsYXNzIFN0YXRpY05vZGVMaXN0IDogcHVi
bGljIE5vZGVMaXN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIERlcml2ZWQgY2xhc3NlcyBz
aG91bGQgYnVpbGQgdXAgdGhlIFZlY3RvciBpbiB0aGVpciBjb25zdHJ1Y3Rvci4KKyAgICAgICAg
U3RhdGljTm9kZUxpc3QoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+U3RhdGljTm9kZUxpc3QoKSB7
IH0KKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fbm9kZXM7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RhdGljTm9kZUxpc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18098</attachid>
            <date>2007-12-24 18:44:50 -0800</date>
            <delta_ts>2007-12-24 19:23:01 -0800</delta_ts>
            <desc>Fixes selectors with commas</desc>
            <filename>qsacommafix.diff</filename>
            <type>text/plain</type>
            <size>56822</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyODk3MikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTc4LDcgKzE5NzgsNiBAQAogCQlBODE4NzIxRTA5NzdEM0MwMDA1
ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0Lmgg
Ki87IH07CiAJCUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE0MDk3
N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLzsgfTsKIAkJQTgxODcyMjAwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5v
ZGVMaXN0LmggKi87IH07Ci0JCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIx
NjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyMzA5NzdE
M0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2Rl
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3Bw
ICovOyB9OwpAQCAtMzYxNCw2ICszNjEzLDEyIEBACiAJCUJDNzcyQzRGMEM0RUIzMDQwMDgzMjg1
RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
NzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRFQjM0NDAw
ODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi87IH07CiAJCUJDN0Y0NEE4MEI5RTMy
NEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGNDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUJDN0ZBNjIwMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MUUwRDFGMENCRDAw
REIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjIxMEQxRjBDQkQw
MERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9k
ZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdG
QTYyQjBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2
MkUwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAv
KiBTdGF0aWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAv
KiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5o
ICovOyB9OworCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY4
MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDODBD
OTg3MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg1MENEMjk0RUUw
MEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCAqLzsgfTsKIAkJQkM4MEM5ODgw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg2MENEMjk0RUUwMEEwQjdC
MyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggKi87IH07CiAJCUJDODBDOThCMENEMjk1MDUw
MEEwQjdCMyAvKiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg5MENEMjk1MDUwMEEwQjdCMyAvKiBBbmlt
YXRpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTYxMDgsNyArNjExMyw2IEBACiAJCUE4MTg3
MjEzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hbWVOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODE4NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWlu
ZXJOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTUwOTc3RDND
MDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENoaWxkTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgx
ODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2
RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
NjI1LDYgKzc2MjksMTIgQEAKIAkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbEJh
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxCYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJh
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlE
MDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUUw
RDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNOb2RlTGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyog
U3RhdGljTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlj
Tm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MkMwRDFGMEVG
RjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0YXRpY05vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0
b3JOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxl
Y3Rvck5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODUw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyog
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzgwQzk4OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE2Niw2ICsxMjE3Niw4IEBACiAJ
CQkJQTgxODVGMzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywK
IAkJCQlBODE4NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywK
IAkJCQk5M0VFQzFFOTA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICov
LAorCQkJCUJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLywK
IAkJCQk2NTUwQjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJ
CTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRB
N0Y2MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEyMjI0LDcgKzEyMjM2
LDYgQEAKIAkJCQk4NTRGRTcyQTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCAq
LywKIAkJCQk4NTRGRTcyQjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi8sCiAJ
CQkJMUE3NTBEODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVyYXRvci5pZGwgKi8sCi0JCQkJ
QTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLywKIAkJCQlBODE4NzIx
MDA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEw
MDA2NzFFOTAgLyogTm9kZUxpc3QuaWRsICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1
RiAvKiBOb3RhdGlvbi5jcHAgKi8sCkBAIC0xMjI1Miw2ICsxMjI2MywxMCBAQAogCQkJCUQyM0NB
NTQ4MEFCMEU5ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJODUwMzFC
MzUwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJ
CQk4NTAzMUIzNjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAq
LywKKwkJCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAg
Ki8sCisJCQkJQkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAq
LywKKwkJCQlCQzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICov
LAorCQkJCUJDN0ZBNjJCMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oICovLAog
CQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywKIAkJ
CQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJCUFB
NEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovLApAQCAtMTQxMTgs
NiArMTQxMzMsOSBAQAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3Vu
aXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8q
IEpTTG9jYXRpb24ubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyMTBEMUYwQ0JEMDBE
QjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyRDBE
MUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
N0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE1Mzc3LDcgKzE1Mzk1LDYgQEAKIAkJCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQg
LyogTm9kZUZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1
OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRG
RTczNDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEVBN0VCRjBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NjQwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3Vt
ZW50SW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTgzMiw2ICsxNTg0OSw5IEBACiAJCQkJ
OTMzMDlERjcwOTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0EzNzkxNDBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVM
aXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBT
dGF0aWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzdGQTY4MjBEMUYxNjc5MDBE
QjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTEgKzEyOSwxMSBAQCBjbGFzcyBTdHls
ZWRFbGVtZW50OwogIAogICAgICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsg
cmV0dXJuIG1fZm9udFNlbGVjdG9yLmdldCgpOyB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0KICAgICAg
ICAgLyogY2hlY2tzIGlmIGEgY29tcG91bmQgc2VsZWN0b3IgKHdoaWNoIGNhbiBjb25zaXN0IG9m
IG11bHRpcGxlIHNpbXBsZSBzZWxlY3RvcnMpCiAgICAgICAgICAgIG1hdGNoZXMgdGhlIGdpdmVu
IEVsZW1lbnQgKi8KLSAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxl
Y3Rvcik7CisgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciopOworCisgICAg
cHJvdGVjdGVkOgogICAgICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXM9
MCwgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5fTsKICAgICAg
ICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxl
bWVudCAqZSwgYm9vbCBpc0FuY2VzdG9yLCBib29sIGlzU3ViU2VsZWN0b3IpOwogCkBAIC0yNDIs
NiArMjQyLDcgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICNlbmRpZgogCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBDU1NSdWxlU2V0OworICAgICAgICBmcmllbmQgY2xhc3MgTm9kZTsKICAgICB9Owog
CiAgICAgY2xhc3MgQ1NTUnVsZURhdGEgewpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2RlKiBuLCBOb2Rl
TGlzdDo6Q2FjaGVzKiBpbmZvKQotICAgIDogTm9kZUxpc3QobiwgaW5mbywgZmFsc2UpCitDaGls
ZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KE5vZGUqIG4sIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KiBpbmZvKQorICAgIDogRHluYW1pY05vZGVMaXN0KG4sIGluZm8sIGZhbHNlKQogewogfQogCklu
ZGV4OiBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0NoaWxk
Tm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MiwxNiArMjAsMTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLwor
CiAjaWZuZGVmIENoaWxkTm9kZUxpc3RfaAogI2RlZmluZSBDaGlsZE5vZGVMaXN0X2gKIAotI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7
CitjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiBwdWJsaWM6
Ci0gICAgQ2hpbGROb2RlTGlzdChOb2RlKiwgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgIENoaWxk
Tm9kZUxpc3QoTm9kZSosIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIp
CisrKyBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
OCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNsYXNzTm9kZUxpc3Q6OkNsYXNz
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05h
bWVzLCBOb2RlTGlzdDo6Q2FjaGVzKiBjYWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290Tm9kZSwg
Y2FjaGVzLCB0cnVlKQorQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIER5bmFtaWNOb2RlTGlzdDo6
Q2FjaGVzKiBjYWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywg
dHJ1ZSkKIHsKICAgICBtX2NsYXNzTmFtZXMucGFyc2VDbGFzc0F0dHJpYnV0ZShjbGFzc05hbWVz
LCBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiB9CkluZGV4OiBXZWJD
b3JlL2RvbS9DbGFzc05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1IEBACiAjZGVmaW5lIENsYXNzTm9kZUxp
c3RfaAogCiAjaW5jbHVkZSAiQ2xhc3NOYW1lcy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisj
aW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFN0cmluZzsKIAotICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxp
c3QgeworICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290
Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBOb2RlTGlzdDo6Q2FjaGVzKik7CisgICAg
ICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5n
JiBjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAgICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAyODk3MikKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiwx
MiBAQCBtb2R1bGUgY29yZSB7CiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAgIE5vZGVMaXN0
ICAgICAgICAgICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgdGFnbmFtZSk7
CisKKyAgICAgICAgLy8gRG9jdW1lbnRTZWxlY3RvciAtIFNlbGVjdG9yIEFQSQorICAgICAgICBF
bGVtZW50ICAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3IoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykK
KyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBOb2RlTGlzdCAgICAg
ICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gRE9NU3RyaW5nIHNlbGVjdG9ycykKKyAgICAgICAg
ICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9t
L0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05v
ZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIpCShmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNw
cDoyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5v
ZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkK
KyAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCisgICAgLCBtX293bnNDYWNoZXModHJ1ZSkKKyAg
ICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKK3sKKyAgICBtX3Jv
b3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6Ok5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJv
b2wgbmVlZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAs
IG1fY2FjaGVzKGluZm8pCisgICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCisgICAgLCBtX25lZWRz
Tm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCit7CisgICAgbV9yb290Tm9kZS0+cmVn
aXN0ZXJOb2RlTGlzdCh0aGlzKTsKK30gICAgCisKK05vZGVMaXN0Ojp+Tm9kZUxpc3QoKQorewor
ICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBpZiAobV9vd25z
Q2FjaGVzKQorICAgICAgICBkZWxldGUgbV9jYWNoZXM7Cit9CisKK3Vuc2lnbmVkIE5vZGVMaXN0
OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKCFzdGFydCkK
KyAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgpOworCisgICAgaWYgKG1fY2FjaGVzLT5p
c0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gbV9yb290Tm9kZSkKKyAgICAgICAgcmV0dXJu
IG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7CisKKyAgICB1bnNpZ25lZCBsZW4gPSAwOworCisgICAg
Zm9yIChOb2RlKiBuID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5n
KCkpCisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlTWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgIGxlbiAr
PSByZWN1cnNpdmVMZW5ndGgobik7CisgICAgICAgIH0KKworICAgIGlmIChzdGFydCA9PSBtX3Jv
b3ROb2RlKSB7CisgICAgICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggPSBsZW47CisgICAgICAg
IG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBsZW47Cit9CisKK05vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2Rl
KiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorewor
ICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CisKKyAgICBmb3IgKE5vZGUgKm4gPSBz
dGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdP
ZmZzZXQtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAw
OyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlz
dDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQs
IGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNl
dCA8IDApOworICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2
aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMt
Pmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVW
YWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGlu
IHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25l
ZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAoreworICAgIGludCByZW1haW5pbmdPZmZzZXQg
PSBvZmZzZXQ7CisgICAgaWYgKCFzdGFydCkgeworICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUt
PmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7
CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGFy
dCA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQg
LT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKHJlbWFpbmluZ09mZnNldCA8IDApCisgICAgICAgIHJldHVybiBpdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zm
c2V0LCByZW1haW5pbmdPZmZzZXQpOworfQorCitOb2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1l
KGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX3Jvb3RO
b2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgeworICAg
ICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQo
ZWxlbWVudElkKTsKKworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgaWYgKHAgPT0g
bV9yb290Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsK
KyAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OnJv
b3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3sKKyAgICBtX2NhY2hlcy0+cmVzZXQoKTsKK30KKwor
CitOb2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQorICAgIDogbGFzdEl0ZW0oMCkKKyAgICAsIGlz
TGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKKyAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCit7
Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQoreworICAgIGxhc3RJdGVtID0g
MDsKKyAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKKyAgICBpc0l0ZW1DYWNoZVZhbGlk
ID0gZmFsc2U7ICAgICAKK30KKworfQpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZp
c2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM5ICsy
MSwzOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZUxpc3Q6
Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRp
b25zKQorRHluYW1pY05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3RO
b2RlKQogICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKICAgICAsIG1fb3duc0NhY2hlcyh0cnVl
KQogICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQogewotICAg
IG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+cmVn
aXN0ZXJEeW5hbWljTm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCi1Ob2RlTGlzdDo6Tm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBu
ZWVkc05vdGlmaWNhdGlvbnMpCitEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9v
bCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwg
bV9jYWNoZXMoaW5mbykKICAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKICAgICAsIG1fbmVlZHNO
b3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKIHsKLSAgICBtX3Jvb3ROb2RlLT5yZWdp
c3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVM
aXN0KHRoaXMpOwogfSAgICAKIAotTm9kZUxpc3Q6On5Ob2RlTGlzdCgpCitEeW5hbWljTm9kZUxp
c3Q6On5EeW5hbWljTm9kZUxpc3QoKQogewotICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2Rl
TGlzdCh0aGlzKTsKKyAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRo
aXMpOwogICAgIGlmIChtX293bnNDYWNoZXMpCiAgICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKIH0K
IAotdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QK
K3Vuc2lnbmVkIER5bmFtaWNOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0KSBj
b25zdAogewogICAgIGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5nZXQo
KTsKQEAgLTgwLDcgKzc4LDcgQEAgdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChO
b2RlKgogICAgIHJldHVybiBsZW47CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNG
cm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zm
c2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dAogewogICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CiAKQEAgLTEwMSw3ICs5OSw3
IEBAIE5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCgKICAgICByZXR1cm4g
MDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxp
c3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVt
QmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJl
bWFpbmluZ09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7
CiAgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZShtX3Jvb3ROb2RlLmdldCgpKSkgewpAQCAtMTIxLDcgKzExOSw3IEBAIE5vZGUqIE5vZGVMaXN0
OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQKICAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcg
bm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0o
dW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2RlTGlz
dDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAogewog
ICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKCFzdGFydCkgewpAQCAt
MTQyLDcgKzE0MCw3IEBAIE5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG8K
ICAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJl
bWFpbmluZ09mZnNldCk7CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0
ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBp
ZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50
KCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVs
ZW1lbnRCeUlkKGVsZW1lbnRJZCk7CkBAIC0xNjcsMjAgKzE2NSwyMCBAQCBOb2RlKiBOb2RlTGlz
dDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9k
ZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQgRHluYW1pY05vZGVMaXN0Ojpy
b290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCiB7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7CiB9CiAK
IAotTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKK0R5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpD
YWNoZXMoKQogICAgIDogbGFzdEl0ZW0oMCkKICAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxz
ZSkKICAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCiB7CiB9CiAKLXZvaWQgTm9kZUxpc3Q6
OkNhY2hlczo6cmVzZXQoKQordm9pZCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQog
ewogICAgIGxhc3RJdGVtID0gMDsKICAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikJKGZyb20gV2ViQ29yZS9kb20v
Tm9kZUxpc3QuaDoyODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgTm9kZUxpc3RfaAorI2RlZmluZSBOb2RlTGlz
dF9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEF0b21pY1N0cmluZzsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIE5vZGVMaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKK3B1YmxpYzoKKworICAgIHN0cnVjdCBDYWNoZXMgewor
ICAgICAgICBDYWNoZXMoKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOworICAgICAgICBOb2RlKiBsYXN0SXRlbTsKKyAgICAg
ICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZh
bGlkIDogMTsKKyAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICB9OworCisg
ICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNh
dGlvbnMpOworICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyos
IGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKKyAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOworCisg
ICAgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTm90aWZp
Y2F0aW9uczsgfQorCisgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlz
dAorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Tm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgIE5vZGUqIGl0ZW1XaXRo
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIC8vIE90aGVyIG1ldGhvZHMg
KG5vdCBwYXJ0IG9mIERPTSkKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGlsZHJlbkNoYW5n
ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkge30KKwor
cHJvdGVjdGVkOgorICAgIC8vIGhlbHBlciBmdW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxl
bWVudEltcGxzIGluIGEgdHJlZQorICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBz
dGFydCA9IDApIGNvbnN0OworICAgIE5vZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNl
dCwgTm9kZSogc3RhcnQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMo
Tm9kZSogdGVzdE5vZGUpIGNvbnN0ID0gMDsKKworICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3ROb2Rl
OworICAgIG11dGFibGUgQ2FjaGVzKiBtX2NhY2hlczsKKyAgICBib29sIG1fb3duc0NhY2hlczsK
KyAgICBib29sIG1fbmVlZHNOb3RpZmljYXRpb25zOworCisgcHJpdmF0ZToKKyAgICBOb2RlKiBp
dGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQg
cmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKKyAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJvbUN1cnJl
bnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29u
c3Q7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRHlu
YW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
OSArMjEsMTAgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBOb2RlTGlzdF9oCi0jZGVmaW5lIE5vZGVM
aXN0X2gKKyNpZm5kZWYgRHluYW1pY05vZGVMaXN0X2gKKyNkZWZpbmUgRHluYW1pY05vZGVMaXN0
X2gKIAorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM1
LDEzICszNCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBj
bGFzcyBOb2RlOwogCi1jbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0
PiB7CitjbGFzcyBEeW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgewogcHVibGljOgot
CiAgICAgc3RydWN0IENhY2hlcyB7CiAgICAgICAgIENhY2hlcygpOwogICAgICAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgICAgIAorCiAgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKICAgICAg
ICAgTm9kZSogbGFzdEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwpAQCAt
NDksOSArNDcsOSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7
CiAgICAgfTsKIAotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wg
bmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9k
ZUxpc3QoKTsKKyAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Ym9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAg
dmlydHVhbCB+RHluYW1pY05vZGVMaXN0KCk7CiAKICAgICBib29sIG5lZWRzTm90aWZpY2F0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNOb3RpZmljYXRpb25zOyB9CiAKQEAgLTYyLDcgKzYw
LDcgQEAgcHVibGljOgogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQog
ICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwg
dm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCByb290
Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IH0KIAogcHJvdGVjdGVkOgogICAgIC8vIGhlbHBlciBm
dW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxlbWVudEltcGxzIGluIGEgdHJlZQpAQCAtNzUs
MTEgKzczLDExIEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fb3duc0NhY2hlczsKICAgICBib29s
IG1fbmVlZHNOb3RpZmljYXRpb25zOwogCi0gcHJpdmF0ZToKK3ByaXZhdGU6CiAgICAgTm9kZSog
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJy
ZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNv
bnN0OwogfTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBEeW5hbWljTm9kZUxpc3RfaApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHJldmlzaW9uIDI4
OTcyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2
ICsxMDUsMTIgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICAvLyBIVE1MIDUKICAgICAgICAgTm9k
ZUxpc3QgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgbmFtZSk7CiAKKyAgICAg
ICAgLy8gRWxlbWVudFNlbGVjdG9yIC0gU2VsZWN0b3IgQVBJCisgICAgICAgIEVsZW1lbnQgICAg
ICAgICAgICAgcXVlcnlTZWxlY3RvcihpbiBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAg
ICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICAgcXVl
cnlTZWxlY3RvckFsbChpbiBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisKICNpZiBkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQogICAg
ICAgICAvLyBPYmplY3RpdmUtQyBleHRlbnNpb25zCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgaW5uZXJUZXh0OwpJbmRleDogV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAy
ODk3MikKKysrIFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOwogCi1OYW1lTm9kZUxpc3Q6Ok5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBT
dHJpbmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKLSAgICA6IE5vZGVMaXN0KHJv
b3QsIGNhY2hlcywgdHJ1ZSkKK05hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KE5vZGUqIHJvb3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMqIGNhY2hlcykKKyAg
ICA6IER5bmFtaWNOb2RlTGlzdChyb290LCBjYWNoZXMsIHRydWUpCiAgICAgLCBtX25vZGVOYW1l
KG5hbWUpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzIpCisrKyBXZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIwLDExIEBA
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBOYW1l
Tm9kZUxpc3RfaAogI2RlZmluZSBOYW1lTm9kZUxpc3RfaAogCi0jaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMSw5ICszMiw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIC8qKgogICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxl
bWVudCB3aXRoIGEgZ2l2ZW4gIm5hbWU9IiB0YWcKICAqLwotY2xhc3MgTmFtZU5vZGVMaXN0IDog
cHVibGljIE5vZGVMaXN0IHsKK2NsYXNzIE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBEeW5hbWljTm9k
ZUxpc3QgewogcHVibGljOgotICAgIE5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJp
bmcmIG5hbWUsIE5vZGVMaXN0OjpDYWNoZXMqKTsKKyAgICBOYW1lTm9kZUxpc3QoTm9kZSogcm9v
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAg
Ly8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwogCkBAIC00Miw3
ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERP
TSkKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBO
b2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBy
b290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7IER5bmFtaWNOb2RlTGlzdDo6cm9vdE5vZGVDaGls
ZHJlbkNoYW5nZWQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAyODk3MikKKysrIFdl
YkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsMTggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAKKyNpbmNsdWRlICJDU1NSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRl
ICJDaGlsZE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2luY2x1ZGUg
IkRPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJE
eW5hbWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOSw2ICs0Niw3IEBACiAjaW5jbHVk
ZSAiTmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIK
QEAgLTQ5LDE2ICs1NywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLXR5cGVkZWYgSGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owor
dHlwZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owogc3RydWN0IE5v
ZGVMaXN0c05vZGVEYXRhIHsKICAgICBOb2RlTGlzdFNldCBtX2xpc3RzVG9Ob3RpZnk7Ci0gICAg
Tm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIE5vZGVMaXN0OjpDYWNoZXM+IG1fY2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBIYXNoTWFw
PFN0cmluZywgTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7CisgICAgRHlu
YW1pY05vZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIEhhc2hNYXA8
U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2FjaGVzOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxp
c3RDYWNoZXM7CiB9OwogCiAvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIg
dGFnLgotY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgVGFnTm9k
ZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKICAgICBUYWdOb2RlTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCkBAIC03Myw3ICs4MSw3IEBA
IHByaXZhdGU6CiB9OwogCiBpbmxpbmUgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQ
dHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IE5vZGVMaXN0KHJvb3ROb2RlLCB0cnVl
KQorICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQogICAgICwgbV9uYW1lc3Bh
Y2VVUkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQogewpAQCAt
NDQxLDcgKzQ0OSw3IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAgICAgcmV0
dXJuIGNvdW50OwogfQogCi12b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxp
c3QpCit2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCog
bGlzdCkKIHsKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQo
bmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKQEAgLTQ1NCw3ICs0NjIsNyBAQCB2b2lkIE5vZGU6OnJl
Z2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpCiAgICAgbV9kb2N1bWVudC0+YWRkTm9kZUxpc3Qo
KTsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2
b2lkIE5vZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0
KQogewogICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlTm9k
ZUxpc3QoKTsKQEAgLTEyMTUsNyArMTIyMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6
OmdldEVsZW1lbnRzQnkKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0
cy5zZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKIAotICAgIHJldHVybiBuZXcgTmFtZU5vZGVM
aXN0KHRoaXMsIGVsZW1lbnROYW1lLCAmbV9ub2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0Q2FjaGVz
LmFkZChlbGVtZW50TmFtZSwgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKKyAg
ICByZXR1cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgJm1fbm9kZUxpc3Rz
LT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIER5bmFtaWNOb2RlTGlzdDo6
Q2FjaGVzKCkpLmZpcnN0LT5zZWNvbmQpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2Rl
OjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKQEAgLTEy
MjMsNyArMTIzMSw1MiBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5
CiAgICAgaWYgKCFtX25vZGVMaXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2Rl
TGlzdHNOb2RlRGF0YSk7CiAKLSAgICByZXR1cm4gbmV3IENsYXNzTm9kZUxpc3QodGhpcywgY2xh
c3NOYW1lcywgJm1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFt
ZXMsIE5vZGVMaXN0OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJuIG5ldyBD
bGFzc05vZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsICZtX25vZGVMaXN0cy0+bV9jbGFzc05vZGVM
aXN0Q2FjaGVzLmFkZChjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJz
dC0+c2Vjb25kKTsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBDU1NT
dHlsZVNoZWV0IHRlbXBTdHlsZVNoZWV0KGRvY3VtZW50KCkpOworICAgIENTU1BhcnNlciBwKHRy
dWUpOworICAgIFJlZlB0cjxDU1NSdWxlPiBydWxlID0gcC5wYXJzZVJ1bGUoJnRlbXBTdHlsZVNo
ZWV0LCBzZWxlY3RvcnMgKyAie30iKTsKKyAgICBpZiAoIXJ1bGUpIHsKKyAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFydWxlLT5pc1N0
eWxlUnVsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUuZ2V0KCkpLT5zZWxlY3RvcigpOwor
ICAgIAorICAgIC8vIEZJWE1FOiBXZSBjYW4gc3BlZWQgdGhpcyB1cCBieSBpbXBsZW1lbnRpbmcg
Y2FjaGluZyBzaW1pbGFyIHRvIHRoZSBvbmUgdXNlIGJ5IGdldEVsZW1lbnRCeUlkCisgICAgZm9y
IChOb2RlICpuID0gdHJhdmVyc2VOZXh0Tm9kZSgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICBD
U1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0
ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9y
KHNlbGVjdG9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9k
ZTo6cXVlcnlTZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgQ1NTU3R5bGVTaGVldCB0ZW1wU3R5bGVTaGVldChkb2N1bWVudCgpKTsK
KyAgICBDU1NQYXJzZXIgcCh0cnVlKTsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gcnVsZSA9IHAucGFy
c2VSdWxlKCZ0ZW1wU3R5bGVTaGVldCwgc2VsZWN0b3JzICsgInt9Iik7CisgICAgaWYgKCFydWxl
KSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIGlmICghcnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgU2VsZWN0b3JOb2RlTGlzdCogcmVzdWx0TGlzdCA9IG5ldyBTZWxlY3Rvck5vZGVMaXN0KHRo
aXMsIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUuZ2V0KCkpLT5zZWxlY3RvcigpKTsK
KworICAgIHJldHVybiByZXN1bHRMaXN0OwogfQogCiBEb2N1bWVudCAqTm9kZTo6b3duZXJEb2N1
bWVudCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBBdG9taWNTdHJpbmc7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7Citj
bGFzcyBEeW5hbWljTm9kZUxpc3Q7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFz
cyBFdmVudExpc3RlbmVyOwpAQCAtNDQyLDggKzQ0Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNo
b3dUcmVlQW5kTWFyayhjb25zdCBOb2RlKiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciogbWFya2Vk
TGFiZWwxLCBjb25zdCBOb2RlKiBtYXJrZWROb2RlMiA9IDAsIGNvbnN0IGNoYXIqIG1hcmtlZExh
YmVsMiA9IDApIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIHJlZ2lzdGVyTm9kZUxpc3QoTm9k
ZUxpc3QqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCopOworICAgIHZv
aWQgcmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0Kik7CisgICAgdm9pZCB1
bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCopOwogICAgIHZvaWQgbm90
aWZ5Tm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlMb2NhbE5vZGVM
aXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzQXR0cmlidXRl
Q2hhbmdlZCgpOwpAQCAtNDUxLDEwICs0NTIsMTQgQEAgcHVibGljOgogICAgIAogICAgIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IFN0cmluZyYpOwogICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgU3RyaW5n
JiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKTsKLQogICAgIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudE5hbWUp
OwogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGdldEVsZW1lbnRzQnlDbGFzc05hbWUoY29uc3Qg
U3RyaW5nJiBjbGFzc05hbWVzKTsKIAorICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gcXVlcnlTZWxl
Y3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYpOworLy8gICAgUGFz
c1JlZlB0cjxFbGVtZW50PiBxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBO
U1Jlc29sdmVyLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVl
cnlTZWxlY3RvckFsbChjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgRXhjZXB0aW9uQ29kZSYpOwor
Ly8gICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gcXVlcnlTZWxlY3RvckFsbChjb25zdCBTdHJpbmcm
IHNlbGVjdG9ycywgTlNSZXNvbHZlciwgRXhjZXB0aW9uQ29kZSYpOworCiBwcml2YXRlOiAvLyBt
ZW1iZXJzCiAgICAgRG9jUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIE5vZGUqIG1fcHJl
dmlvdXM7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNvcmUvZG9tL05v
ZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTAgKzAsMCBAQAotLyoqCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Ob2RlTGlzdDo6Tm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCi0gICAg
OiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQotICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKLSAgICAs
IG1fb3duc0NhY2hlcyh0cnVlKQotICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3Rp
ZmljYXRpb25zKQotewotICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Ci19
ICAgIAotCi1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9k
ZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCi0gICAgOiBtX3Jv
b3ROb2RlKHJvb3ROb2RlKQotICAgICwgbV9jYWNoZXMoaW5mbykKLSAgICAsIG1fb3duc0NhY2hl
cyhmYWxzZSkKLSAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykK
LXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwotfSAgICAKLQotTm9k
ZUxpc3Q6On5Ob2RlTGlzdCgpCi17Ci0gICAgbV9yb290Tm9kZS0+dW5yZWdpc3Rlck5vZGVMaXN0
KHRoaXMpOwotICAgIGlmIChtX293bnNDYWNoZXMpCi0gICAgICAgIGRlbGV0ZSBtX2NhY2hlczsK
LX0KLQotdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29u
c3QKLXsKLSAgICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUuZ2V0KCk7
Ci0KLSAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBzdGFydCA9PSBtX3Jv
b3ROb2RlKQotICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aDsKLQotICAgIHVu
c2lnbmVkIGxlbiA9IDA7Ci0KLSAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+Zmlyc3RDaGlsZCgp
OyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQotICAgICAgICAgICAgICAgIGxl
bisrOwotICAgICAgICAgICAgbGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChuKTsKLSAgICAgICAgfQot
Ci0gICAgaWYgKHN0YXJ0ID09IG1fcm9vdE5vZGUpIHsKLSAgICAgICAgbV9jYWNoZXMtPmNhY2hl
ZExlbmd0aCA9IGxlbjsKLSAgICAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotTm9kZSogTm9kZUxpc3Q6Oml0ZW1G
b3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1h
aW5pbmdPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA+PSAwKTsK
LQotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSht
X3Jvb3ROb2RlLmdldCgpKSkgewotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
bWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0g
PSBuOwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldC0tOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0
cmVlCi19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSog
c3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7Ci0gICAgZm9yIChOb2RlICpuID0gc3RhcnQ7
IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgewotICAg
ICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZU1hdGNo
ZXMobikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAg
ICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJlbWFpbmluZ09m
ZnNldCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7
IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCi19Ci0KLU5vZGUqIE5vZGVMaXN0
OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQpIGNvbnN0Ci17Ci0g
ICAgaW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKLSAgICBpZiAoIXN0YXJ0KSB7Ci0gICAg
ICAgIHN0YXJ0ID0gbV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICBpZiAobV9jYWNo
ZXMtPmlzSXRlbUNhY2hlVmFsaWQpIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbV9jYWNo
ZXMtPmxhc3RJdGVtT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5s
YXN0SXRlbTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbV9jYWNoZXMtPmxhc3RJ
dGVtT2Zmc2V0IHx8IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCAtIG9mZnNldCA8IG9mZnNldCkg
ewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOwotICAgICAgICAg
ICAgICAgIHJlbWFpbmluZ09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVtYWluaW5nT2Zmc2V0IDwg
MCkKLSAgICAgICAgcmV0dXJuIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0
LCByZW1haW5pbmdPZmZzZXQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJk
c0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7Ci19Ci0KLU5vZGUq
IE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbV9yb290Tm9k
ZS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3ROb2RlLT5kb2N1
bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwotCi0gICAgICAgIGlmICghbm9kZSB8
fCAhbm9kZU1hdGNoZXMobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBm
b3IgKE5vZGUqIHAgPSBub2RlLT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5wYXJlbnROb2RlKCkp
Ci0gICAgICAgICAgICBpZiAocCA9PSBtX3Jvb3ROb2RlKQotICAgICAgICAgICAgICAgIHJldHVy
biBub2RlOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGwgPSBs
ZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAg
IE5vZGUqIG5vZGUgPSBpdGVtKGkpOwotICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVt
ZW50SWQpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQotewotICAgIG1f
Y2FjaGVzLT5yZXNldCgpOwotfQotCi0KLU5vZGVMaXN0OjpDYWNoZXM6OkNhY2hlcygpCi0gICAg
OiBsYXN0SXRlbSgwKQotICAgICwgaXNMZW5ndGhDYWNoZVZhbGlkKGZhbHNlKQotICAgICwgaXNJ
dGVtQ2FjaGVWYWxpZChmYWxzZSkKLXsKLX0KLQotdm9pZCBOb2RlTGlzdDo6Q2FjaGVzOjpyZXNl
dCgpCi17Ci0gICAgbGFzdEl0ZW0gPSAwOwotICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZhbHNl
OwotICAgIGlzSXRlbUNhY2hlVmFsaWQgPSBmYWxzZTsgICAgIAotfQotCi19CkluZGV4OiBXZWJD
b3JlL2RvbS9Ob2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJ
KHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vTm9kZUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNTggKzI4LDIzIEBACiAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF0b21pY1N0cmluZzsKLWNsYXNzIE5vZGU7CisgICAgY2xh
c3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIE5vZGU7CiAKLWNsYXNzIE5vZGVMaXN0IDogcHVi
bGljIFJlZkNvdW50ZWQ8Tm9kZUxpc3Q+IHsKLXB1YmxpYzoKLQotICAgIHN0cnVjdCBDYWNoZXMg
ewotICAgICAgICBDYWNoZXMoKTsKLSAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgY2FjaGVkTGVuZ3RoOwotICAgICAgICBOb2RlKiBsYXN0SXRlbTsKLSAg
ICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZzZXQ7Ci0gICAgICAgIGJvb2wgaXNMZW5ndGhDYWNo
ZVZhbGlkIDogMTsKLSAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICBjbGFz
cyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7CisgICAgcHVibGljOgor
ICAgICAgICBOb2RlTGlzdCgpIHsgfQorICAgICAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpIHsgfQor
CisgICAgICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKKyAgICAg
ICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
Tm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIE5v
ZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdCA9IDA7CiAgICAgfTsK
IAotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3Rp
ZmljYXRpb25zKTsKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNo
ZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9kZUxpc3QoKTsK
LQotICAgIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc05v
dGlmaWNhdGlvbnM7IH0KLQotICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9k
ZUxpc3QKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKLSAgICBOb2RlKiBpdGVt
V2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAvLyBPdGhlciBtZXRo
b2RzIChub3QgcGFydCBvZiBET00pCi0gICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5D
aGFuZ2VkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9
Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBoZWxwZXIgZnVuY3Rpb25zIGZvciBzZWFyY2hpbmcgYWxs
IEVsZW1lbnRJbXBscyBpbiBhIHRyZWUKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVMZW5ndGgoTm9k
ZSogc3RhcnQgPSAwKSBjb25zdDsKLSAgICBOb2RlKiByZWN1cnNpdmVJdGVtICh1bnNpZ25lZCBv
ZmZzZXQsIE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdCA9IDA7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9yb290
Tm9kZTsKLSAgICBtdXRhYmxlIENhY2hlcyogbV9jYWNoZXM7Ci0gICAgYm9vbCBtX293bnNDYWNo
ZXM7Ci0gICAgYm9vbCBtX25lZWRzTm90aWZpY2F0aW9uczsKLQotIHByaXZhdGU6Ci0gICAgTm9k
ZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwg
aW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7Ci0gICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21D
dXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQp
IGNvbnN0OwotfTsKLQotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYKKyNlbmRpZiBOb2RlTGlzdF9oCkluZGV4OiBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Vs
ZWN0b3JOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJD
U1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVt
ZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NlbGVj
dG9yTm9kZUxpc3Q6OlNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Q1NTU2VsZWN0b3IqIHF1ZXJ5U2VsZWN0b3IpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
cm9vdE5vZGUtPmRvY3VtZW50KCk7CisgICAgZm9yIChOb2RlKiBuID0gcm9vdE5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBz
dHlsZVNlbGVjdG9yID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG4pKTsKKyAgICAgICAgICAgIGZvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBxdWVyeVNl
bGVjdG9yOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+bmV4dCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9yKHNl
bGVjdG9yKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbm9kZXMu
YXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgU2VsZWN0b3JOb2RlTGlzdF9oCisjZGVmaW5lIFNlbGVjdG9yTm9kZUxpc3RfaAorCisj
aW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIENTU1NlbGVj
dG9yOworCisgICAgY2xhc3MgU2VsZWN0b3JOb2RlTGlzdCA6IHB1YmxpYyBTdGF0aWNOb2RlTGlz
dCB7CisgICAgcHVibGljOgorICAgICAgICBTZWxlY3Rvck5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIENTU1NlbGVjdG9yKiBzZWxlY3Rvcik7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2VsZWN0b3JOb2RlTGlzdF9oCkluZGV4OiBXZWJD
b3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3Rh
dGljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGljTm9kZUxp
c3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordW5zaWduZWQgU3RhdGljTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBtX25vZGVzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbaW5kZXhdLmdldCgpOworICAgIHJldHVybiAwOwor
fQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIHNpemVfdCBsZW5ndGggPSBtX25vZGVzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX25vZGVzW2ldLmdldCgpOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9
PSBlbGVtZW50SWQpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICByZXR1
cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vU3Rh
dGljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdGF0aWNOb2RlTGlzdF9oCisjZGVmaW5lIFN0
YXRpY05vZGVMaXN0X2gKKworI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgTm9kZTsKKworICAgIGNsYXNzIFN0YXRpY05vZGVMaXN0IDogcHVibGljIE5v
ZGVMaXN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIERlcml2ZWQgY2xhc3NlcyBzaG91bGQg
YnVpbGQgdXAgdGhlIFZlY3RvciBpbiB0aGVpciBjb25zdHJ1Y3Rvci4KKyAgICAgICAgU3RhdGlj
Tm9kZUxpc3QoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+U3RhdGljTm9kZUxpc3QoKSB7IH0KKwor
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIE5vZGUq
IGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fbm9kZXM7CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RhdGljTm9kZUxpc3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18100</attachid>
            <date>2007-12-24 19:23:01 -0800</date>
            <delta_ts>2007-12-24 22:31:25 -0800</delta_ts>
            <desc>Updated</desc>
            <filename>qsa.diff</filename>
            <type>text/plain</type>
            <size>60337</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODk3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMDctMTItMjQgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPiBhbmQgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMg
QURERUQgT1IgQ0hBTkdFRAorICAgICAgICAKKyAgICAgICAgLSBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4NworICAgICAgICBJbXBsZW1lbnQgdGhlIG1vc3QgdXNl
ZnVsIHBhcnQgb2YgdGhlIFczQyBTZWxlY3RvcnMgQVBJLgorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
Lmg6IE1ha2UgTm9kZSBhIGZyaWVuZCBvZiBDU1NTdHlsZVNlbGVjdG9yIHNvIGl0IGNhbiB1c2Ug
Y2hlY2tTZWxlY3RvcigpCisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCk6IENoYW5nZSB0byBiZWlu
ZyBhIER5bmFtaWNOb2RlTGlzdAorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6CisgICAg
ICAgICogZG9tL0NsYXNzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2Rl
TGlzdDo6Q2xhc3NOb2RlTGlzdCk6IENoYW5nZSB0byBiZWluZyBhIER5bmFtaWNOb2RlTGlzdAor
ICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmlk
bDogQWRkIHRoZSBuZXcgZnVuY3Rpb25zCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KTogUmVuYW1lIE5vZGVMaXN0IHRv
IER5bmFtaWNOb2RlTGlzdCwgdG8gZGlmZmVyZW50aWF0ZSBpdCBmcm9tIHRoZSBuZXcgU3RhdGlj
Tm9kZUxpc3QKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2Rl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21D
dXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbUJhY2t3YXJk
c0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6cmVjdXJz
aXZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5D
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpDYWNo
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OnJlc2V0KToK
KyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvZG9t
L05vZGVMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJvb3ROb2Rl
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOiBBZGQgdGhlIG5l
dyBmdW5jdGlvbnMKKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDogQ2hhbmdlIHRvIGJl
aW5nIGEgRHluYW1pY05vZGVMaXN0CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9kZUxpc3Q6Ok5h
bWVOb2RlTGlzdCk6CisgICAgICAgICogZG9tL05hbWVOb2RlTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZU5vZGVMaXN0Ojpyb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdOb2RlTGlz
dCk6IENoYW5nZSB0byBiZWluZyBhIER5bmFtaWNOb2RlTGlzdAorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRF
bGVtZW50c0J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3IpOiBuZXcKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwpOiBuZXcKKyAgICAgICAgKiBk
b20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlTGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogZG9tL05vZGVMaXN0Lmg6IFRoaXMgaXMgbm93IGFuIGFic3RyYWN0IHN1cGVyY2xhc3Mgb2Yg
RHluYW1pY05vZGVMaXN0IGFuZCBTdGF0aWNOb2RlTGlzdAorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZUxpc3Q6Ok5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0Ojp+Tm9kZUxpc3Qp
OgorICAgICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rvck5vZGVMaXN0OjpTZWxlY3Rvck5vZGVMaXN0KTogTmV3IFN0YXRpY05v
ZGVMaXN0IHN1YmNsYXNzIHRoYXQgZmlsdGVycyBlbGVtZW50cyBieSBDU1Mgc2VsZWN0b3IKKyAg
ICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vU3Rh
dGljTm9kZUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY05vZGVMaXN0
OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZSk6CisgICAgICAgICog
ZG9tL1N0YXRpY05vZGVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9k
ZUxpc3Q6OlN0YXRpY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY05vZGVMaXN0
Ojp+U3RhdGljTm9kZUxpc3QpOgorCiAyMDA3LTEyLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDogUmVt
b3ZlZCBub3ctaW5jb3JyZWN0IGNvbW1lbnQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk3OCw3ICsxOTc4
LDYgQEAKIAkJQTgxODcyMUUwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTMwOTc3RDND
MDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5oICovOyB9OwogCQlBODE4NzIxRjA5NzdEM0MwMDA1
ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9k
ZS5jcHAgKi87IH07CiAJCUE4MTg3MjIwMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIx
NTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5oICovOyB9OwotCQlBODE4NzIyMTA5
NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0
LmNwcCAqLzsgfTsKIAkJQTgxODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTgw
OTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4MTg3MjI0MDk3N0QzQzAwMDU4MjZEOSAvKiBO
YW1lTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTgxODcyMTkwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgKi87IH07
CiAJCUE4MTg3MjI1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjFBMDk3N0QzQzAw
MDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAqLzsgfTsKQEAgLTM2MTQsNiArMzYxMywxMiBA
QAogCQlCQzc3MkM0RjBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEQwQzRFQjMw
NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlN
RVR5cGVSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFj
Lm1tICovOyB9OwogCQlCQzdGNDRBODBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyog
RHluYW1pY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3Bw
ICovOyB9OworCQlCQzdGQTYyMTBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTYxRjBE
MUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggKi87IH07CisJCUJDN0ZBNjJEMEQx
RjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MkIwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRp
Y05vZGVMaXN0LmggKi87IH07CisJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNO
b2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICovOyB9Owor
CQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2N0YwRDFGMTY3OTAw
REIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2ODIwRDFGMTY3OTAw
REIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2ODAwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9y
Tm9kZUxpc3QuY3BwICovOyB9OwogCQlCQzgwQzk4NzBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGlt
aW5nRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzgwQzk4NTBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25W
YWx1ZS5jcHAgKi87IH07CiAJCUJDODBDOTg4MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
ICovOyB9OwogCQlCQzgwQzk4QjBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgw
Qzk4OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CkBA
IC02MTA4LDcgKzYxMTMsNiBAQAogCQlBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5v
ZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYW1lTm9kZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTQwOTc3RDNDMDAwNTgyNkQ5
IC8qIENvbnRhaW5lck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGFpbmVyTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZE5vZGVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MTg3MjE2MDk3N0QzQzAwMDU4MjZEOSAvKiBOb2Rl
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxODA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZWROb2RlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YW1lZE5vZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTkwOTc3
RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmFtZU5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkTm9kZUxpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYyNSw2ICs3NjI5LDEyIEBACiAJCUJDN0IyQUY4
MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzdCMkFGOTA0NTA4MjQx
MDBBODAwMEYgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVNjcm9sbEJhck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUJDN0Y0NEE3MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9k
ZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHluYW1pY05v
ZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUYwRDFGMENC
RDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM3RkE2MkIwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY05vZGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNOb2RlTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDN0ZBNjdGMEQxRjE2NzkwMERCMjJB
OSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlbGVjdG9yTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2
ODAwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDODBDOTg1MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM4MEM5ODYwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODkwQ0QyOTUwNTAwQTBCN0IzIC8q
IEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTIxNjYsNiArMTIxNzYsOCBAQAogCQkJCUE4MTg1RjM2MDk3NjU3NjUwMDU4MjZEOSAv
KiBET01JbXBsZW1lbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTgxODVGMzMwOTc2NTc2NTAwNTgyNkQ5
IC8qIERPTUltcGxlbWVudGF0aW9uLmggKi8sCiAJCQkJOTNFRUMxRTkwOUMyODc3NzAwQzUxNUQx
IC8qIERPTUltcGxlbWVudGF0aW9uLmlkbCAqLywKKwkJCQlCQzdGQTYxRTBEMUYwQ0JEMDBEQjIy
QTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCAqLywKKwkJCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIy
QTkgLyogRHluYW1pY05vZGVMaXN0LmggKi8sCiAJCQkJNjU1MEI2OTkwOTlERjAyNzAwOTBENzgx
IC8qIEVkaXRpbmdUZXh0LmNwcCAqLywKIAkJCQk2NTUwQjY5QTA5OURGMDI3MDA5MEQ3ODEgLyog
RWRpdGluZ1RleHQuaCAqLywKIAkJCQlBOEM0QTdGNjA5RDU2MzI3MDAwM0FDOEQgLyogRWxlbWVu
dC5jcHAgKi8sCkBAIC0xMjIyNCw3ICsxMjIzNiw2IEBACiAJCQkJODU0RkU3MkEwQTIyOTdCRTAw
NThEN0FEIC8qIE5vZGVJdGVyYXRvci5jcHAgKi8sCiAJCQkJODU0RkU3MkIwQTIyOTdCRTAwNThE
N0FEIC8qIE5vZGVJdGVyYXRvci5oICovLAogCQkJCTFBNzUwRDg3MEE5MEUzOTQwMDBGRjIxNSAv
KiBOb2RlSXRlcmF0b3IuaWRsICovLAotCQkJCUE4MTg3MjE2MDk3N0QzQzAwMDU4MjZEOSAvKiBO
b2RlTGlzdC5jcHAgKi8sCiAJCQkJQTgxODcyMTAwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0
LmggKi8sCiAJCQkJODVBQ0E5RkEwQTlCNjMxMDAwNjcxRTkwIC8qIE5vZGVMaXN0LmlkbCAqLywK
IAkJCQlBOEVBN0VCNzBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwICovLApAQCAtMTIy
NTIsNiArMTIyNjMsMTAgQEAKIAkJCQlEMjNDQTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VF
eGNlcHRpb24uaWRsICovLAogCQkJCTg1MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8q
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggKi8sCisJCQkJQkM3RkE2ODAwRDFGMTY3OTAwREIy
MkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwICovLAorCQkJCUJDN0ZBNjdGMEQxRjE2NzkwMERC
MjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggKi8sCisJCQkJQkM3RkE2MkMwRDFGMEVGRjAwREIy
MkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLywKKwkJCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIy
QTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLywKIAkJCQlBOEM0QTdFQzA5RDU2MzI3MDAwM0FDOEQg
LyogU3R5bGVkRWxlbWVudC5jcHAgKi8sCiAJCQkJQThDNEE3RUIwOUQ1NjMyNzAwMDNBQzhEIC8q
IFN0eWxlZEVsZW1lbnQuaCAqLywKIAkJCQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5
bGVFbGVtZW50LmNwcCAqLywKQEAgLTE0MTE4LDYgKzE0MTMzLDkgQEAKIAkJCQk5MzMwOUUxRTA5
OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNB
Mzc5MTUwRDE2M0U1NTAwQjc5M0Q2IC8qIEpTTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQTM3OTNGMEQxNjQ3RTAwMEI3OTNENiAvKiBKU0xvY2F0aW9uLmx1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkM3RkE2MjEwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIyQTkgLyogU2Vs
ZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNTM3Nyw3ICsxNTM5NSw2IEBACiAJ
CQkJODU0RkU3MzAwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODU0RkU3MzIwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzQwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJ
dGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODE4NzIyMTA5NzdEM0MwMDA1ODI2RDkg
LyogTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTdFQkYwQTE5NDVEMDAwQThF
RjVGIC8qIE5vdGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMEQ1NzM2MEE1Qzc3RkUw
MDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTY0
MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMTU4MzIsNiArMTU4NDksOSBAQAogCQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBt
YXJrdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8q
IHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMzc5MTQwRDE2M0U1NTAw
Qjc5M0Q2IC8qIEpTTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM3RkE2MjAwRDFG
MENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
QzdGQTYyRTBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAyODk3
NykKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI5LDExICsxMjksMTEgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICAKICAgICAgICAgQ1NTRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsg
fQogCi0gICAgcHJvdGVjdGVkOgotCiAgICAgICAgIC8qIGNoZWNrcyBpZiBhIGNvbXBvdW5kIHNl
bGVjdG9yICh3aGljaCBjYW4gY29uc2lzdCBvZiBtdWx0aXBsZSBzaW1wbGUgc2VsZWN0b3JzKQog
ICAgICAgICAgICBtYXRjaGVzIHRoZSBnaXZlbiBFbGVtZW50ICovCi0gICAgICAgIGJvb2wgY2hl
Y2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpOworICAgICAgICBib29sIGNoZWNrU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqKTsKKworICAgIHByb3RlY3RlZDoKICAgICAgICAgZW51bSBTZWxl
Y3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzPTAsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseX07CiAgICAgICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQgKmUsIGJvb2wgaXNBbmNlc3RvciwgYm9v
bCBpc1N1YlNlbGVjdG9yKTsKIApAQCAtMjQyLDYgKzI0Miw3IEBAIGNsYXNzIFN0eWxlZEVsZW1l
bnQ7CiAjZW5kaWYKIAogICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZVNldDsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIE5vZGU7CiAgICAgfTsKIAogICAgIGNsYXNzIENTU1J1bGVEYXRhIHsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk3NykKKysrIFdlYkNvcmUvZG9tL0No
aWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNoaWxkTm9kZUxpc3Q6
OkNoaWxkTm9kZUxpc3QoTm9kZSogbiwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykKLSAgICA6IE5v
ZGVMaXN0KG4sIGluZm8sIGZhbHNlKQorQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2Rl
KiBuLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykKKyAgICA6IER5bmFtaWNOb2RlTGlz
dChuLCBpbmZvLCBmYWxzZSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24g
Mjg5NzcpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTYgKzIwLDE3IEBACiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBDaGlsZE5vZGVMaXN0X2gKICNk
ZWZpbmUgQ2hpbGROb2RlTGlzdF9oCiAKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUg
IkR5bmFtaWNOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENoaWxk
Tm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1Ymxp
YyBEeW5hbWljTm9kZUxpc3QgewogcHVibGljOgotICAgIENoaWxkTm9kZUxpc3QoTm9kZSosIE5v
ZGVMaXN0OjpDYWNoZXMqKTsKKyAgICBDaGlsZE5vZGVMaXN0KE5vZGUqLCBEeW5hbWljTm9kZUxp
c3Q6OkNhY2hlcyopOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5jcHAJKHJldmlzaW9uIDI4OTc3KQorKysgV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DbGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9v
dE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcywgTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVz
KQotICAgIDogTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywgdHJ1ZSkKK0NsYXNzTm9kZUxpc3Q6
OkNsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBj
bGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQorICAgIDogRHluYW1p
Y05vZGVMaXN0KHJvb3ROb2RlLCBjYWNoZXMsIHRydWUpCiB7CiAgICAgbV9jbGFzc05hbWVzLnBh
cnNlQ2xhc3NBdHRyaWJ1dGUoY2xhc3NOYW1lcywgbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+aW5D
b21wYXRNb2RlKCkpOwogfQpJbmRleDogV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzcpCisr
KyBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICsz
MSwxNSBAQAogI2RlZmluZSBDbGFzc05vZGVMaXN0X2gKIAogI2luY2x1ZGUgIkNsYXNzTmFtZXMu
aCIKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTdHJpbmc7CiAKLSAgICBjbGFzcyBD
bGFzc05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKKyAgICBjbGFzcyBDbGFzc05vZGVMaXN0
IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiAgICAgcHVibGljOgotICAgICAgICBDbGFzc05v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1l
cywgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgICAgICBDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcywgRHluYW1pY05vZGVMaXN0
OjpDYWNoZXMqKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmlkbAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTIgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAg
IC8vIEhUTUwgNQogICAgICAgICBOb2RlTGlzdCAgICAgICAgICAgIGdldEVsZW1lbnRzQnlDbGFz
c05hbWUoaW4gRE9NU3RyaW5nIHRhZ25hbWUpOworCisgICAgICAgIC8vIERvY3VtZW50U2VsZWN0
b3IgLSBTZWxlY3RvciBBUEkKKyAgICAgICAgRWxlbWVudCAgICAgICAgICAgICBxdWVyeVNlbGVj
dG9yKGluIERPTVN0cmluZyBzZWxlY3RvcnMpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKyAgICAgICAgTm9kZUxpc3QgICAgICAgICAgICBxdWVyeVNlbGVjdG9yQWxsKGluIERP
TVN0cmluZyBzZWxlY3RvcnMpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAg
ICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDI4OTcyKQko
ZnJvbSBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5jcHA6Mjg5NzIpCisrKyBXZWJDb3JlL2RvbS9EeW5h
bWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKioKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05vZGVMaXN0OjpOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykK
KyAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCisgICAgLCBtX2NhY2hlcyhuZXcgQ2FjaGVzKQor
ICAgICwgbV9vd25zQ2FjaGVzKHRydWUpCisgICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVk
c05vdGlmaWNhdGlvbnMpCit7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlz
KTsKK30gICAgCisKK05vZGVMaXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCBOb2RlTGlzdDo6Q2FjaGVzKiBpbmZvLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKKyAgICA6
IG1fcm9vdE5vZGUocm9vdE5vZGUpCisgICAgLCBtX2NhY2hlcyhpbmZvKQorICAgICwgbV9vd25z
Q2FjaGVzKGZhbHNlKQorICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRp
b25zKQoreworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Cit9ICAgIAor
CitOb2RlTGlzdDo6fk5vZGVMaXN0KCkKK3sKKyAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyTm9k
ZUxpc3QodGhpcyk7CisgICAgaWYgKG1fb3duc0NhY2hlcykKKyAgICAgICAgZGVsZXRlIG1fY2Fj
aGVzOworfQorCit1bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0
KSBjb25zdAoreworICAgIGlmICghc3RhcnQpCisgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5n
ZXQoKTsKKworICAgIGlmIChtX2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlkICYmIHN0YXJ0ID09
IG1fcm9vdE5vZGUpCisgICAgICAgIHJldHVybiBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOworCisg
ICAgdW5zaWduZWQgbGVuID0gMDsKKworICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0LT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQorICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAg
ICAgbGVuKys7CisgICAgICAgICAgICBsZW4gKz0gcmVjdXJzaXZlTGVuZ3RoKG4pOworICAgICAg
ICB9CisKKyAgICBpZiAoc3RhcnQgPT0gbV9yb290Tm9kZSkgeworICAgICAgICBtX2NhY2hlcy0+
Y2FjaGVkTGVuZ3RoID0gbGVuOworICAgICAgICBtX2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlk
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuOworfQorCitOb2RlKiBOb2RlTGlzdDo6
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0ID49
IDApOworCisgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkgeworICAgICAgICAgICAgICAgIGlm
ICghcmVtYWluaW5nT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0
SXRlbSA9IG47CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0LS07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlz
IHN1YnRyZWUKK30KKworTm9kZSogTm9kZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChO
b2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAor
eworICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPCAwKTsKKyAgICBmb3IgKE5vZGUgKm4gPSBz
dGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7
CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
TWF0Y2hlcyhuKSkgeworICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47CisgICAgICAgICAgICAg
ICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVtYWlu
aW5nT2Zmc2V0Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKK30KKworTm9kZSogTm9k
ZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QK
K3sKKyAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmICghc3RhcnQpIHsK
KyAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIGlmICht
X2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgeworICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBt
X2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWNo
ZXMtPmxhc3RJdGVtOworICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPiBtX2NhY2hlcy0+
bGFzdEl0ZW1PZmZzZXQgfHwgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IC0gb2Zmc2V0IDwgb2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBtX2NhY2hlcy0+bGFzdEl0ZW07CisgICAg
ICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0IC09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZW1haW5pbmdPZmZz
ZXQgPCAwKQorICAgICAgICByZXR1cm4gaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBv
ZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gaXRlbUZv
cndhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKK30KKwor
Tm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJ
ZCkgY29uc3QKK3sKKyAgICBpZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jv
b3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUt
PmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICAgICAgaWYgKCFu
b2RlIHx8ICFub2RlTWF0Y2hlcyhub2RlKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAg
ICAgIGZvciAoTm9kZSogcCA9IG5vZGUtPnBhcmVudE5vZGUoKTsgcDsgcCA9IHAtPnBhcmVudE5v
ZGUoKSkKKyAgICAgICAgICAgIGlmIChwID09IG1fcm9vdE5vZGUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGU7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdW5zaWduZWQg
bCA9IGxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsOyBpKyspIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGl0ZW0oaSk7CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnRO
b2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRJREF0dHJpYnV0ZSgpID09
IGVsZW1lbnRJZCkKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCit2b2lkIE5vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCit7Cisg
ICAgbV9jYWNoZXMtPnJlc2V0KCk7Cit9CisKKworTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkK
KyAgICA6IGxhc3RJdGVtKDApCisgICAgLCBpc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpCisgICAg
LCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQoreworfQorCit2b2lkIE5vZGVMaXN0OjpDYWNoZXM6
OnJlc2V0KCkKK3sKKyAgICBsYXN0SXRlbSA9IDA7CisgICAgaXNMZW5ndGhDYWNoZVZhbGlkID0g
ZmFsc2U7CisgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOyAgICAgCit9CisKK30KSW5kZXg6
IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRHluYW1pY05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzIpCisrKyBXZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKIC8qKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgot
ICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yMywzOSArMjEsMzkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJEeW5hbWljTm9kZUxpc3Qu
aCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLU5vZGVMaXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKK0R5bmFtaWNOb2RlTGlzdDo6RHluYW1p
Y05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRp
b25zKQogICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKICAgICAsIG1fY2FjaGVzKG5ldyBDYWNo
ZXMpCiAgICAgLCBtX293bnNDYWNoZXModHJ1ZSkKICAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25z
KG5lZWRzTm90aWZpY2F0aW9ucykKIHsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0
KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRoaXMpOwog
fSAgICAKIAotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5v
ZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQorRHluYW1pY05v
ZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQogICAgIDog
bV9yb290Tm9kZShyb290Tm9kZSkKICAgICAsIG1fY2FjaGVzKGluZm8pCiAgICAgLCBtX293bnND
YWNoZXMoZmFsc2UpCiAgICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlv
bnMpCiB7Ci0gICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBtX3Jv
b3ROb2RlLT5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCh0aGlzKTsKIH0gICAgCiAKLU5vZGVMaXN0
Ojp+Tm9kZUxpc3QoKQorRHluYW1pY05vZGVMaXN0Ojp+RHluYW1pY05vZGVMaXN0KCkKIHsKLSAg
ICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+
dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCh0aGlzKTsKICAgICBpZiAobV9vd25zQ2FjaGVzKQog
ICAgICAgICBkZWxldGUgbV9jYWNoZXM7CiB9CiAKLXVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNp
dmVMZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Cit1bnNpZ25lZCBEeW5hbWljTm9kZUxpc3Q6OnJl
Y3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QKIHsKICAgICBpZiAoIXN0YXJ0KQogICAg
ICAgICBzdGFydCA9IG1fcm9vdE5vZGUuZ2V0KCk7CkBAIC04MCw3ICs3OCw3IEBAIHVuc2lnbmVk
IE5vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSoKICAgICByZXR1cm4gbGVuOwogfQogCi1O
b2RlKiBOb2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2ln
bmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2Rl
TGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNl
dCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zm
c2V0ID49IDApOwogCkBAIC0xMDEsNyArOTksNyBAQCBOb2RlKiBOb2RlTGlzdDo6aXRlbUZvcndh
cmRzRnJvbUN1cnJlbnQoCiAgICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhp
cyBzdWJ0cmVlCiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQo
Tm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QK
K05vZGUqIER5bmFtaWNOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0
YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKHJlbWFpbmluZ09mZnNldCA8IDApOwogICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBu
OyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKQEAgLTEy
MSw3ICsxMTksNyBAQCBOb2RlKiBOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50CiAg
ICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCiB9CiAKLU5v
ZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQp
IGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQgb2Zm
c2V0LCBOb2RlKiBzdGFydCkgY29uc3QKIHsKICAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zm
c2V0OwogICAgIGlmICghc3RhcnQpIHsKQEAgLTE0Miw3ICsxNDAsNyBAQCBOb2RlKiBOb2RlTGlz
dDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvCiAgICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNG
cm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZzZXQpOwogfQogCi1Ob2RlKiBO
b2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25z
dAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBlbGVtZW50SWQpIGNvbnN0CiB7CiAgICAgaWYgKG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2Rl
KCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwpAQCAtMTY3
LDIwICsxNjUsMjAgQEAgTm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShjb25zdCBBdG9taQog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIE5vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdl
ZCgpCit2b2lkIER5bmFtaWNOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQogewog
ICAgIG1fY2FjaGVzLT5yZXNldCgpOwogfQogCiAKLU5vZGVMaXN0OjpDYWNoZXM6OkNhY2hlcygp
CitEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKICAgICA6IGxhc3RJdGVtKDApCiAg
ICAgLCBpc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpCiAgICAgLCBpc0l0ZW1DYWNoZVZhbGlkKGZh
bHNlKQogewogfQogCi12b2lkIE5vZGVMaXN0OjpDYWNoZXM6OnJlc2V0KCkKK3ZvaWQgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXM6OnJlc2V0KCkKIHsKICAgICBsYXN0SXRlbSA9IDA7CiAgICAgaXNM
ZW5ndGhDYWNoZVZhbGlkID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNp
b24gMjg5NzIpCShmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0Lmg6Mjg5NzIpCisrKyBXZWJDb3Jl
L2RvbS9EeW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IE5vZGVMaXN0X2gKKyNkZWZpbmUgTm9kZUxpc3RfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdG9taWNTdHJpbmc7CitjbGFzcyBOb2Rl
OworCitjbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7CitwdWJs
aWM6CisKKyAgICBzdHJ1Y3QgQ2FjaGVzIHsKKyAgICAgICAgQ2FjaGVzKCk7CisgICAgICAgIHZv
aWQgcmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKKyAg
ICAgICAgTm9kZSogbGFzdEl0ZW07CisgICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0Owor
ICAgICAgICBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7CisgICAgICAgIGJvb2wgaXNJdGVt
Q2FjaGVWYWxpZCA6IDE7CisgICAgfTsKKworICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
cm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKKyAgICBOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Cisg
ICAgdmlydHVhbCB+Tm9kZUxpc3QoKTsKKworICAgIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7IH0KKworICAgIC8vIERPTSBtZXRo
b2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZUxpc3QKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNv
bnN0ID0gMDsKKyAgICBOb2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3Q7CisKKyAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCisgICAgdmlydHVh
bCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7CisgICAgdmlydHVhbCB2b2lkIHJvb3RO
b2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBoZWxwZXIgZnVu
Y3Rpb25zIGZvciBzZWFyY2hpbmcgYWxsIEVsZW1lbnRJbXBscyBpbiBhIHRyZWUKKyAgICB1bnNp
Z25lZCByZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQgPSAwKSBjb25zdDsKKyAgICBOb2RlKiBy
ZWN1cnNpdmVJdGVtICh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGUqIHRlc3ROb2RlKSBjb25zdCA9IDA7CisK
KyAgICBSZWZQdHI8Tm9kZT4gbV9yb290Tm9kZTsKKyAgICBtdXRhYmxlIENhY2hlcyogbV9jYWNo
ZXM7CisgICAgYm9vbCBtX293bnNDYWNoZXM7CisgICAgYm9vbCBtX25lZWRzTm90aWZpY2F0aW9u
czsKKworIHByaXZhdGU6CisgICAgTm9kZSogaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSog
c3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7CisgICAg
Tm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZz
ZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OworfTsKKworfSAvL25hbWVzcGFjZQorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikKKysrIFdlYkNv
cmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAK
IC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDkgKzIxLDEwIEBACiAgKgogICovCiAKLSNpZm5k
ZWYgTm9kZUxpc3RfaAotI2RlZmluZSBOb2RlTGlzdF9oCisjaWZuZGVmIER5bmFtaWNOb2RlTGlz
dF9oCisjZGVmaW5lIER5bmFtaWNOb2RlTGlzdF9oCiAKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0zNSwxMyArMzQsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQXRvbWljU3RyaW5nOwogY2xhc3MgTm9kZTsKIAotY2xhc3MgTm9kZUxpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4geworY2xhc3MgRHluYW1pY05vZGVMaXN0IDog
cHVibGljIE5vZGVMaXN0IHsKIHB1YmxpYzoKLQogICAgIHN0cnVjdCBDYWNoZXMgewogICAgICAg
ICBDYWNoZXMoKTsKICAgICAgICAgdm9pZCByZXNldCgpOwotICAgICAgICAKKwogICAgICAgICB1
bnNpZ25lZCBjYWNoZWRMZW5ndGg7CiAgICAgICAgIE5vZGUqIGxhc3RJdGVtOwogICAgICAgICB1
bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsKQEAgLTQ5LDkgKzQ3LDkgQEAgcHVibGljOgogICAgICAg
ICBib29sIGlzSXRlbUNhY2hlVmFsaWQgOiAxOwogICAgIH07CiAKLSAgICBOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKiwgYm9vbCBuZWVkc05vdGlm
aWNhdGlvbnMpOwotICAgIHZpcnR1YWwgfk5vZGVMaXN0KCk7CisgICAgRHluYW1pY05vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKKyAg
ICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKiwgYm9v
bCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAgIHZpcnR1YWwgfkR5bmFtaWNOb2RlTGlzdCgpOwog
CiAgICAgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTm90
aWZpY2F0aW9uczsgfQogCkBAIC02Miw3ICs2MCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIE90aGVy
IG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGls
ZHJlbkNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2Vk
KCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyB9CiAK
IHByb3RlY3RlZDoKICAgICAvLyBoZWxwZXIgZnVuY3Rpb25zIGZvciBzZWFyY2hpbmcgYWxsIEVs
ZW1lbnRJbXBscyBpbiBhIHRyZWUKQEAgLTc1LDExICs3MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ym9vbCBtX293bnNDYWNoZXM7CiAgICAgYm9vbCBtX25lZWRzTm90aWZpY2F0aW9uczsKIAotIHBy
aXZhdGU6Citwcml2YXRlOgogICAgIE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUq
IHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwogICAg
IE5vZGUqIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zm
c2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKIH07CiAKLX0gLy9uYW1lc3BhY2UKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gRHluYW1pY05vZGVMaXN0
X2gKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0VsZW1lbnQuaWRsCShyZXZpc2lvbiAyODk3NykKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDEyIEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgLy8gSFRNTCA1CiAgICAgICAgIE5vZGVMaXN0IGdldEVsZW1lbnRzQnlDbGFzc05hbWUo
aW4gRE9NU3RyaW5nIG5hbWUpOwogCisgICAgICAgIC8vIEVsZW1lbnRTZWxlY3RvciAtIFNlbGVj
dG9yIEFQSQorICAgICAgICBFbGVtZW50ICAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3IoaW4gRE9N
U3RyaW5nIHNlbGVjdG9ycykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAg
ICAgICBOb2RlTGlzdCAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gRE9NU3RyaW5nIHNl
bGVjdG9ycykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCiAjaWYgZGVmaW5l
ZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykKICAgICAgICAgLy8gT2JqZWN0aXZlLUMgZXh0ZW5zaW9u
cwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlubmVyVGV4dDsKSW5kZXg6
IFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
TmFtZU5vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL2RvbS9OYW1lTm9k
ZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotTmFtZU5vZGVMaXN0OjpOYW1l
Tm9kZUxpc3QoTm9kZSogcm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOb2RlTGlzdDo6Q2FjaGVz
KiBjYWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290LCBjYWNoZXMsIHRydWUpCitOYW1lTm9kZUxp
c3Q6Ok5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIER5bmFtaWNO
b2RlTGlzdDo6Q2FjaGVzKiBjYWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdCwgY2Fj
aGVzLCB0cnVlKQogICAgICwgbV9ub2RlTmFtZShuYW1lKQogewogfQpJbmRleDogV2ViQ29yZS9k
b20vTmFtZU5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0
LmgJKHJldmlzaW9uIDI4OTc3KQorKysgV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDEwICsyMCwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCiAgKgogICovCisKICNpZm5kZWYgTmFtZU5vZGVMaXN0X2gKICNkZWZpbmUgTmFtZU5vZGVM
aXN0X2gKIAotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzEsOSArMzIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvKioKICAqIE5vZGVMaXN0IHdo
aWNoIGxpc3RzIGFsbCBOb2RlcyBpbiBhIEVsZW1lbnQgd2l0aCBhIGdpdmVuICJuYW1lPSIgdGFn
CiAgKi8KLWNsYXNzIE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBOYW1l
Tm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBOYW1lTm9k
ZUxpc3QoTm9kZSogcm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOb2RlTGlzdDo6Q2FjaGVzKik7
CisgICAgTmFtZU5vZGVMaXN0KE5vZGUqIHJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXMqKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJv
bSAgcGFyZW50IGNsYXNzZXMKIApAQCAtNDIsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBP
dGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHJv
b3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHsgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFu
Z2VkKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBE
eW5hbWljTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7IH0KIAogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
LmNwcAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQsMTEgKzI0LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgogCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0Lmgi
CisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNp
bmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJD
aGlsZE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkRP
TUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEeW5h
bWljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOSw2ICs0Nyw3IEBACiAjaW5jbHVkZSAi
TmFtZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAg
LTQ5LDE2ICs1OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLXR5cGVkZWYgSGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OwordHlw
ZWRlZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owogc3RydWN0IE5vZGVM
aXN0c05vZGVEYXRhIHsKICAgICBOb2RlTGlzdFNldCBtX2xpc3RzVG9Ob3RpZnk7Ci0gICAgTm9k
ZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IE5vZGVMaXN0OjpDYWNoZXM+IG1fY2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBIYXNoTWFwPFN0
cmluZywgTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7CisgICAgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIEhhc2hNYXA8U3Ry
aW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2FjaGVzOworICAg
IEhhc2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RD
YWNoZXM7CiB9OwogCiAvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIgdGFn
LgotY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgVGFnTm9kZUxp
c3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKICAgICBUYWdOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCkBAIC03Myw3ICs4Miw3IEBAIHBy
aXZhdGU6CiB9OwogCiBpbmxpbmUgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IE5vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQor
ICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQogICAgICwgbV9uYW1lc3BhY2VV
UkkobmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQogewpAQCAtNDQx
LDcgKzQ1MCw3IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAgICAgcmV0dXJu
IGNvdW50OwogfQogCi12b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3Qp
Cit2b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlz
dCkKIHsKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3
IE5vZGVMaXN0c05vZGVEYXRhKTsKQEAgLTQ1NCw3ICs0NjMsNyBAQCB2b2lkIE5vZGU6OnJlZ2lz
dGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpCiAgICAgbV9kb2N1bWVudC0+YWRkTm9kZUxpc3QoKTsK
IH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2b2lk
IE5vZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQog
ewogICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlTm9kZUxp
c3QoKTsKQEAgLTEyMTUsNyArMTIyNCw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6Omdl
dEVsZW1lbnRzQnkKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5z
ZXQobmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKIAotICAgIHJldHVybiBuZXcgTmFtZU5vZGVMaXN0
KHRoaXMsIGVsZW1lbnROYW1lLCAmbV9ub2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFk
ZChlbGVtZW50TmFtZSwgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKKyAgICBy
ZXR1cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgJm1fbm9kZUxpc3RzLT5t
X25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIER5bmFtaWNOb2RlTGlzdDo6Q2Fj
aGVzKCkpLmZpcnN0LT5zZWNvbmQpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpn
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKQEAgLTEyMjMs
NyArMTIzMiw1NCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAg
ICAgaWYgKCFtX25vZGVMaXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlz
dHNOb2RlRGF0YSk7CiAKLSAgICByZXR1cm4gbmV3IENsYXNzTm9kZUxpc3QodGhpcywgY2xhc3NO
YW1lcywgJm1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMs
IE5vZGVMaXN0OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJuIG5ldyBDbGFz
c05vZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsICZtX25vZGVMaXN0cy0+bV9jbGFzc05vZGVMaXN0
Q2FjaGVzLmFkZChjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+
c2Vjb25kKTsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBDU1NTdHls
ZVNoZWV0IHRlbXBTdHlsZVNoZWV0KGRvY3VtZW50KCkpOworICAgIENTU1BhcnNlciBwKHRydWUp
OworICAgIFJlZlB0cjxDU1NSdWxlPiBydWxlID0gcC5wYXJzZVJ1bGUoJnRlbXBTdHlsZVNoZWV0
LCBzZWxlY3RvcnMgKyAie30iKTsKKyAgICBpZiAoIXJ1bGUpIHsKKyAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFydWxlLT5pc1N0eWxl
UnVsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxl
U2VsZWN0b3IgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgQ1NTU2VsZWN0b3Iq
IHF1ZXJ5U2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlLmdldCgpKS0+
c2VsZWN0b3IoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY2FuIHNwZWVkIHRoaXMgdXAgYnkg
aW1wbGVtZW50aW5nIGNhY2hpbmcgc2ltaWxhciB0byB0aGUgb25lIHVzZSBieSBnZXRFbGVtZW50
QnlJZAorICAgIGZvciAoTm9kZSAqbiA9IHRyYXZlcnNlTmV4dE5vZGUoKTsgbjsgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwor
ICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShlbGVt
ZW50KTsKKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcXVlcnlTZWxl
Y3Rvcjsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPm5leHQoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVja1NlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5v
ZGU6OnF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIENTU1N0eWxlU2hlZXQgdGVtcFN0eWxlU2hlZXQoZG9jdW1lbnQoKSk7
CisgICAgQ1NTUGFyc2VyIHAodHJ1ZSk7CisgICAgUmVmUHRyPENTU1J1bGU+IHJ1bGUgPSBwLnBh
cnNlUnVsZSgmdGVtcFN0eWxlU2hlZXQsIHNlbGVjdG9ycyArICJ7fSIpOworICAgIGlmICghcnVs
ZSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAoIXJ1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIFNlbGVjdG9yTm9kZUxpc3QqIHJlc3VsdExpc3QgPSBuZXcgU2VsZWN0b3JOb2RlTGlzdCh0
aGlzLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlLmdldCgpKS0+c2VsZWN0b3IoKSk7
CisKKyAgICByZXR1cm4gcmVzdWx0TGlzdDsKIH0KIAogRG9jdW1lbnQgKk5vZGU6Om93bmVyRG9j
dW1lbnQoKSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQXRvbWljU3RyaW5nOwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERvY3VtZW50Owor
Y2xhc3MgRHluYW1pY05vZGVMaXN0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xh
c3MgRXZlbnRMaXN0ZW5lcjsKQEAgLTQ0Miw4ICs0NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
aG93VHJlZUFuZE1hcmsoY29uc3QgTm9kZSogbWFya2VkTm9kZTEsIGNvbnN0IGNoYXIqIG1hcmtl
ZExhYmVsMSwgY29uc3QgTm9kZSogbWFya2VkTm9kZTIgPSAwLCBjb25zdCBjaGFyKiBtYXJrZWRM
YWJlbDIgPSAwKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3Rlck5vZGVMaXN0KE5v
ZGVMaXN0Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqKTsKKyAgICB2
b2lkIHJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCopOworICAgIHZvaWQg
dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqKTsKICAgICB2b2lkIG5v
dGlmeU5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5TG9jYWxOb2Rl
TGlzdHNDaGlsZHJlbkNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeU5vZGVMaXN0c0F0dHJpYnV0
ZUNoYW5nZWQoKTsKQEAgLTQ1MSwxMCArNDUyLDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBTdHJpbmcmKTsKICAg
ICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IFN0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSk7Ci0KICAgICBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1l
KTsKICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0
IFN0cmluZyYgY2xhc3NOYW1lcyk7CiAKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5U2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKKy8vICAgIFBh
c3NSZWZQdHI8RWxlbWVudD4gcXVlcnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywg
TlNSZXNvbHZlciwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1
ZXJ5U2VsZWN0b3JBbGwoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmKTsK
Ky8vICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcnMsIE5TUmVzb2x2ZXIsIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJpdmF0ZTogLy8g
bWVtYmVycwogICAgIERvY1B0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBOb2RlKiBtX3By
ZXZpb3VzOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL2RvbS9O
b2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTkwICswLDAgQEAKLS8qKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJOb2RlTGlzdC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTm9kZUxpc3Q6Ok5vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQotICAg
IDogbV9yb290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCi0gICAg
LCBtX293bnNDYWNoZXModHJ1ZSkKLSAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90
aWZpY2F0aW9ucykKLXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwot
fSAgICAKLQotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5v
ZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQotICAgIDogbV9y
b290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fY2FjaGVzKGluZm8pCi0gICAgLCBtX293bnNDYWNo
ZXMoZmFsc2UpCi0gICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMp
Ci17Ci0gICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKLX0gICAgCi0KLU5v
ZGVMaXN0Ojp+Tm9kZUxpc3QoKQotewotICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlz
dCh0aGlzKTsKLSAgICBpZiAobV9vd25zQ2FjaGVzKQotICAgICAgICBkZWxldGUgbV9jYWNoZXM7
Ci19Ci0KLXVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNv
bnN0Ci17Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgp
OwotCi0gICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gbV9y
b290Tm9kZSkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7Ci0KLSAgICB1
bnNpZ25lZCBsZW4gPSAwOwotCi0gICAgZm9yIChOb2RlKiBuID0gc3RhcnQtPmZpcnN0Q2hpbGQo
KTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKLSAgICAgICAgICAgICAgICBs
ZW4rKzsKLSAgICAgICAgICAgIGxlbiArPSByZWN1cnNpdmVMZW5ndGgobik7Ci0gICAgICAgIH0K
LQotICAgIGlmIChzdGFydCA9PSBtX3Jvb3ROb2RlKSB7Ci0gICAgICAgIG1fY2FjaGVzLT5jYWNo
ZWRMZW5ndGggPSBsZW47Ci0gICAgICAgIG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBsZW47Ci19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVt
Rm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVt
YWluaW5nT2Zmc2V0KSBjb25zdAotewotICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7
Ci0KLSAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
bV9yb290Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewot
ICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFy
ZW1haW5pbmdPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVt
ID0gbjsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zm
c2V0OwotICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3Vi
dHJlZQotfQotCi1Ob2RlKiBOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUq
IHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA8IDApOwotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0
OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKLSAg
ICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAgICAgICAg
ICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZW1haW5pbmdP
ZmZzZXQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAw
OyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQotfQotCi1Ob2RlKiBOb2RlTGlz
dDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAotewot
ICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgaWYgKCFzdGFydCkgewotICAg
ICAgICBzdGFydCA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKG1fY2Fj
aGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2Fj
aGVzLT5sYXN0SXRlbU9mZnNldCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+
bGFzdEl0ZW07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0
SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQp
IHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAg
ICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlbWFpbmluZ09mZnNldCA8
IDApCi0gICAgICAgIHJldHVybiBpdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNl
dCwgcmVtYWluaW5nT2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBpdGVtRm9yd2Fy
ZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZzZXQpOwotfQotCi1Ob2Rl
KiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBj
b25zdAotewotICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5v
ZGUtPmluRG9jdW1lbnQoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9j
dW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLQotICAgICAgICBpZiAoIW5vZGUg
fHwgIW5vZGVNYXRjaGVzKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAg
Zm9yIChOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgp
KQotICAgICAgICAgICAgaWYgKHAgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsID0g
bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAg
ICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUo
KSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxl
bWVudElkKQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLXZvaWQgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICBt
X2NhY2hlcy0+cmVzZXQoKTsKLX0KLQotCi1Ob2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQotICAg
IDogbGFzdEl0ZW0oMCkKLSAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKLSAgICAsIGlz
SXRlbUNhY2hlVmFsaWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVz
ZXQoKQotewotICAgIGxhc3RJdGVtID0gMDsKLSAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxz
ZTsKLSAgICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7ICAgICAKLX0KLQotfQpJbmRleDogV2Vi
Q29yZS9kb20vTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5o
CShyZXZpc2lvbiAyODk3NykKKysrIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDU4ICsyOCwyMyBAQAogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBBdG9taWNTdHJpbmc7Ci1jbGFzcyBOb2RlOworICAgIGNs
YXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBOb2RlOwogCi1jbGFzcyBOb2RlTGlzdCA6IHB1
YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7Ci1wdWJsaWM6Ci0KLSAgICBzdHJ1Y3QgQ2FjaGVz
IHsKLSAgICAgICAgQ2FjaGVzKCk7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKLSAgICAgICAgTm9kZSogbGFzdEl0ZW07Ci0g
ICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwotICAgICAgICBib29sIGlzTGVuZ3RoQ2Fj
aGVWYWxpZCA6IDE7Ci0gICAgICAgIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7CisgICAgY2xh
c3MgTm9kZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4geworICAgIHB1YmxpYzoK
KyAgICAgICAgTm9kZUxpc3QoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+Tm9kZUxpc3QoKSB7IH0K
KworICAgICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0CisgICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFs
IE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBO
b2RlKiBpdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QgPSAwOwogICAgIH07
CiAKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90
aWZpY2F0aW9ucyk7Ci0gICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2Fj
aGVzKiwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwotICAgIHZpcnR1YWwgfk5vZGVMaXN0KCk7
Ci0KLSAgICBib29sIG5lZWRzTm90aWZpY2F0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNO
b3RpZmljYXRpb25zOyB9Ci0KLSAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5v
ZGVMaXN0Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0gICAgTm9kZSogaXRl
bVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgLy8gT3RoZXIgbWV0
aG9kcyAobm90IHBhcnQgb2YgRE9NKQotICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNoaWxkcmVu
Q2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFs
bCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCi0gICAgdW5zaWduZWQgcmVjdXJzaXZlTGVuZ3RoKE5v
ZGUqIHN0YXJ0ID0gMCkgY29uc3Q7Ci0gICAgTm9kZSogcmVjdXJzaXZlSXRlbSAodW5zaWduZWQg
b2Zmc2V0LCBOb2RlKiBzdGFydCA9IDApIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0
Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3QgPSAwOwotCi0gICAgUmVmUHRyPE5vZGU+IG1fcm9v
dE5vZGU7Ci0gICAgbXV0YWJsZSBDYWNoZXMqIG1fY2FjaGVzOwotICAgIGJvb2wgbV9vd25zQ2Fj
aGVzOwotICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7Ci0KLSBwcml2YXRlOgotICAgIE5v
ZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQs
IGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwotICAgIE5vZGUqIGl0ZW1CYWNrd2FyZHNGcm9t
Q3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0
KSBjb25zdDsKLX07Ci0KLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmCisjZW5kaWYgTm9kZUxpc3RfaApJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2Rl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNl
bGVjdG9yTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTZWxl
Y3Rvck5vZGVMaXN0OjpTZWxlY3Rvck5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUs
IENTU1NlbGVjdG9yKiBxdWVyeVNlbGVjdG9yKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHJvb3ROb2RlLT5kb2N1bWVudCgpOworICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0
b3IgPSBkb2N1bWVudC0+c3R5bGVTZWxlY3RvcigpOworICAgIGZvciAoTm9kZSogbiA9IHJvb3RO
b2RlLT50cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgc3R5bGVTZWxl
Y3Rvci0+aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikp
OworICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBxdWVyeVNlbGVjdG9y
OyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+bmV4dCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0eWxlU2VsZWN0b3ItPmNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2Rlcy5hcHBlbmQobik7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NlbGVj
dG9yTm9kZUxpc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxp
c3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWxlY3Rvck5vZGVM
aXN0X2gKKyNkZWZpbmUgU2VsZWN0b3JOb2RlTGlzdF9oCisKKyNpbmNsdWRlICJTdGF0aWNOb2Rl
TGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgQ1NTU2VsZWN0b3I7CisKKyAgICBjbGFzcyBT
ZWxlY3Rvck5vZGVMaXN0IDogcHVibGljIFN0YXRpY05vZGVMaXN0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBTZWxlY3Rvck5vZGVMaXN0X2gKSW5kZXg6IFdlYkNvcmUvZG9tL1N0YXRpY05vZGVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGF0aWNO
b2RlTGlzdC5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiTm9kZS5o
IgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1bnNpZ25l
ZCBTdGF0aWNOb2RlTGlzdDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2Rlcy5z
aXplKCk7Cit9CisKK05vZGUqIFN0YXRpY05vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdAoreworICAgIGlmIChpbmRleCA8IG1fbm9kZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
bV9ub2Rlc1tpbmRleF0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK05vZGUqIFN0YXRpY05v
ZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0
Cit7CisgICAgc2l6ZV90IGxlbmd0aCA9IG1fbm9kZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZXNb
aV0uZ2V0KCk7CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRJREF0dHJpYnV0ZSgpID09IGVsZW1lbnRJZCkKKyAgICAg
ICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFN0YXRpY05vZGVMaXN0X2gKKyNkZWZpbmUgU3RhdGljTm9kZUxpc3RfaAorCisj
aW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOb2RlOwor
CisgICAgY2xhc3MgU3RhdGljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBidWlsZCB1cCB0aGUgVmVjdG9y
IGluIHRoZWlyIGNvbnN0cnVjdG9yLgorICAgICAgICBTdGF0aWNOb2RlTGlzdCgpIHsgfQorICAg
ICAgICB2aXJ0dWFsIH5TdGF0aWNOb2RlTGlzdCgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYpIGNvbnN0OworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gbV9ub2RlczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBTdGF0aWNOb2RlTGlzdF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18103</attachid>
            <date>2007-12-24 22:31:25 -0800</date>
            <delta_ts>2007-12-25 13:34:25 -0800</delta_ts>
            <desc>Handle null and undefined according to the spec</desc>
            <filename>nullandundefinedqsa.diff</filename>
            <type>text/plain</type>
            <size>60653</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODk3NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMDctMTItMjQgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPiBhbmQgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMg
QURERUQgT1IgQ0hBTkdFRAorICAgICAgICAKKyAgICAgICAgLSBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4NworICAgICAgICBJbXBsZW1lbnQgdGhlIG1vc3QgdXNl
ZnVsIHBhcnQgb2YgdGhlIFczQyBTZWxlY3RvcnMgQVBJLgorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
Lmg6IE1ha2UgTm9kZSBhIGZyaWVuZCBvZiBDU1NTdHlsZVNlbGVjdG9yIHNvIGl0IGNhbiB1c2Ug
Y2hlY2tTZWxlY3RvcigpCisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCk6IENoYW5nZSB0byBiZWlu
ZyBhIER5bmFtaWNOb2RlTGlzdAorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6CisgICAg
ICAgICogZG9tL0NsYXNzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xhc3NOb2Rl
TGlzdDo6Q2xhc3NOb2RlTGlzdCk6IENoYW5nZSB0byBiZWluZyBhIER5bmFtaWNOb2RlTGlzdAor
ICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0Lmg6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmlk
bDogQWRkIHRoZSBuZXcgZnVuY3Rpb25zCisgICAgICAgICogZG9tL0R5bmFtaWNOb2RlTGlzdC5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KTogUmVuYW1lIE5vZGVMaXN0IHRv
IER5bmFtaWNOb2RlTGlzdCwgdG8gZGlmZmVyZW50aWF0ZSBpdCBmcm9tIHRoZSBuZXcgU3RhdGlj
Tm9kZUxpc3QKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6fkR5bmFtaWNOb2Rl
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0
aCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21D
dXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbUJhY2t3YXJk
c0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6cmVjdXJz
aXZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5D
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpDYWNo
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OnJlc2V0KToK
KyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvZG9t
L05vZGVMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJvb3ROb2Rl
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOiBBZGQgdGhlIG5l
dyBmdW5jdGlvbnMKKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDogQ2hhbmdlIHRvIGJl
aW5nIGEgRHluYW1pY05vZGVMaXN0CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9kZUxpc3Q6Ok5h
bWVOb2RlTGlzdCk6CisgICAgICAgICogZG9tL05hbWVOb2RlTGlzdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZU5vZGVMaXN0Ojpyb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAq
IGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdOb2RlTGlz
dCk6IENoYW5nZSB0byBiZWluZyBhIER5bmFtaWNOb2RlTGlzdAorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRF
bGVtZW50c0J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3IpOiBuZXcKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwpOiBuZXcKKyAgICAgICAgKiBk
b20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlTGlzdC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogZG9tL05vZGVMaXN0Lmg6IFRoaXMgaXMgbm93IGFuIGFic3RyYWN0IHN1cGVyY2xhc3Mgb2Yg
RHluYW1pY05vZGVMaXN0IGFuZCBTdGF0aWNOb2RlTGlzdAorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZUxpc3Q6Ok5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0Ojp+Tm9kZUxpc3Qp
OgorICAgICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rvck5vZGVMaXN0OjpTZWxlY3Rvck5vZGVMaXN0KTogTmV3IFN0YXRpY05v
ZGVMaXN0IHN1YmNsYXNzIHRoYXQgZmlsdGVycyBlbGVtZW50cyBieSBDU1Mgc2VsZWN0b3IKKyAg
ICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vU3Rh
dGljTm9kZUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY05vZGVMaXN0
OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZSk6CisgICAgICAgICog
ZG9tL1N0YXRpY05vZGVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9k
ZUxpc3Q6OlN0YXRpY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY05vZGVMaXN0
Ojp+U3RhdGljTm9kZUxpc3QpOgorCiAyMDA3LTEyLTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDogUmVt
b3ZlZCBub3ctaW5jb3JyZWN0IGNvbW1lbnQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk3OCw3ICsxOTc4
LDYgQEAKIAkJQTgxODcyMUUwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTMwOTc3RDND
MDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5oICovOyB9OwogCQlBODE4NzIxRjA5NzdEM0MwMDA1
ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9k
ZS5jcHAgKi87IH07CiAJCUE4MTg3MjIwMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIx
NTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5oICovOyB9OwotCQlBODE4NzIyMTA5
NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTYwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0
LmNwcCAqLzsgfTsKIAkJQTgxODcyMjMwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTgw
OTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4MTg3MjI0MDk3N0QzQzAwMDU4MjZEOSAvKiBO
YW1lTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTgxODcyMTkwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgKi87IH07
CiAJCUE4MTg3MjI1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjFBMDk3N0QzQzAw
MDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAqLzsgfTsKQEAgLTM2MTQsNiArMzYxMywxMiBA
QAogCQlCQzc3MkM0RjBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEQwQzRFQjMw
NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlN
RVR5cGVSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFj
Lm1tICovOyB9OwogCQlCQzdGNDRBODBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyog
RHluYW1pY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3Bw
ICovOyB9OworCQlCQzdGQTYyMTBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTYxRjBE
MUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggKi87IH07CisJCUJDN0ZBNjJEMEQx
RjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MkIwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRp
Y05vZGVMaXN0LmggKi87IH07CisJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNO
b2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICovOyB9Owor
CQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2N0YwRDFGMTY3OTAw
REIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2ODIwRDFGMTY3OTAw
REIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2ODAwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9y
Tm9kZUxpc3QuY3BwICovOyB9OwogCQlCQzgwQzk4NzBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGlt
aW5nRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzgwQzk4NTBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25W
YWx1ZS5jcHAgKi87IH07CiAJCUJDODBDOTg4MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
ICovOyB9OwogCQlCQzgwQzk4QjBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgw
Qzk4OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi87IH07CkBA
IC02MTA4LDcgKzYxMTMsNiBAQAogCQlBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5v
ZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYW1lTm9kZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTQwOTc3RDNDMDAwNTgyNkQ5
IC8qIENvbnRhaW5lck5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGFpbmVyTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZE5vZGVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MTg3MjE2MDk3N0QzQzAwMDU4MjZEOSAvKiBOb2Rl
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTm9kZUxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxODA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZWROb2RlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YW1lZE5vZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTkwOTc3
RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTmFtZU5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkTm9kZUxpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYyNSw2ICs3NjI5LDEyIEBACiAJCUJDN0IyQUY4
MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsQmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlCQzdCMkFGOTA0NTA4MjQx
MDBBODAwMEYgLyogUGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybVNjcm9sbEJhck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCUJDN0Y0NEE3MEI5RTMyNEUwMEE5RDA4MSAvKiBJbWFnZU9ic2VydmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDN0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9k
ZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHluYW1pY05v
ZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUYwRDFGMENC
RDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM3RkE2MkIwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YXRpY05vZGVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGF0aWNOb2RlTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDN0ZBNjdGMEQxRjE2NzkwMERCMjJB
OSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlbGVjdG9yTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2
ODAwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDODBDOTg1MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM4MEM5ODYwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODkwQ0QyOTUwNTAwQTBCN0IzIC8q
IEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTIxNjYsNiArMTIxNzYsOCBAQAogCQkJCUE4MTg1RjM2MDk3NjU3NjUwMDU4MjZEOSAv
KiBET01JbXBsZW1lbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTgxODVGMzMwOTc2NTc2NTAwNTgyNkQ5
IC8qIERPTUltcGxlbWVudGF0aW9uLmggKi8sCiAJCQkJOTNFRUMxRTkwOUMyODc3NzAwQzUxNUQx
IC8qIERPTUltcGxlbWVudGF0aW9uLmlkbCAqLywKKwkJCQlCQzdGQTYxRTBEMUYwQ0JEMDBEQjIy
QTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCAqLywKKwkJCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIy
QTkgLyogRHluYW1pY05vZGVMaXN0LmggKi8sCiAJCQkJNjU1MEI2OTkwOTlERjAyNzAwOTBENzgx
IC8qIEVkaXRpbmdUZXh0LmNwcCAqLywKIAkJCQk2NTUwQjY5QTA5OURGMDI3MDA5MEQ3ODEgLyog
RWRpdGluZ1RleHQuaCAqLywKIAkJCQlBOEM0QTdGNjA5RDU2MzI3MDAwM0FDOEQgLyogRWxlbWVu
dC5jcHAgKi8sCkBAIC0xMjIyNCw3ICsxMjIzNiw2IEBACiAJCQkJODU0RkU3MkEwQTIyOTdCRTAw
NThEN0FEIC8qIE5vZGVJdGVyYXRvci5jcHAgKi8sCiAJCQkJODU0RkU3MkIwQTIyOTdCRTAwNThE
N0FEIC8qIE5vZGVJdGVyYXRvci5oICovLAogCQkJCTFBNzUwRDg3MEE5MEUzOTQwMDBGRjIxNSAv
KiBOb2RlSXRlcmF0b3IuaWRsICovLAotCQkJCUE4MTg3MjE2MDk3N0QzQzAwMDU4MjZEOSAvKiBO
b2RlTGlzdC5jcHAgKi8sCiAJCQkJQTgxODcyMTAwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0
LmggKi8sCiAJCQkJODVBQ0E5RkEwQTlCNjMxMDAwNjcxRTkwIC8qIE5vZGVMaXN0LmlkbCAqLywK
IAkJCQlBOEVBN0VCNzBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwICovLApAQCAtMTIy
NTIsNiArMTIyNjMsMTAgQEAKIAkJCQlEMjNDQTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VF
eGNlcHRpb24uaWRsICovLAogCQkJCTg1MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8q
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggKi8sCisJCQkJQkM3RkE2ODAwRDFGMTY3OTAwREIy
MkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3BwICovLAorCQkJCUJDN0ZBNjdGMEQxRjE2NzkwMERC
MjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggKi8sCisJCQkJQkM3RkE2MkMwRDFGMEVGRjAwREIy
MkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLywKKwkJCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIy
QTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLywKIAkJCQlBOEM0QTdFQzA5RDU2MzI3MDAwM0FDOEQg
LyogU3R5bGVkRWxlbWVudC5jcHAgKi8sCiAJCQkJQThDNEE3RUIwOUQ1NjMyNzAwMDNBQzhEIC8q
IFN0eWxlZEVsZW1lbnQuaCAqLywKIAkJCQlBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5
bGVFbGVtZW50LmNwcCAqLywKQEAgLTE0MTE4LDYgKzE0MTMzLDkgQEAKIAkJCQk5MzMwOUUxRTA5
OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNB
Mzc5MTUwRDE2M0U1NTAwQjc5M0Q2IC8qIEpTTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQTM3OTNGMEQxNjQ3RTAwMEI3OTNENiAvKiBKU0xvY2F0aW9uLmx1dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkM3RkE2MjEwRDFGMENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTY4MTBEMUYxNjc5MDBEQjIyQTkgLyogU2Vs
ZWN0b3JOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNTM3Nyw3ICsxNTM5NSw2IEBACiAJ
CQkJODU0RkU3MzAwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODU0RkU3MzIwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVGaWx0ZXJDb25kaXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODU0RkU3MzQwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJ
dGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODE4NzIyMTA5NzdEM0MwMDA1ODI2RDkg
LyogTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTdFQkYwQTE5NDVEMDAwQThF
RjVGIC8qIE5vdGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMEQ1NzM2MEE1Qzc3RkUw
MDdFREQ0QyAvKiBPdmVyZmxvd0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTY0
MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMTU4MzIsNiArMTU4NDksOSBAQAogCQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBt
YXJrdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5MjAwNTZFNTgxIC8q
IHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNBMzc5MTQwRDE2M0U1NTAw
Qjc5M0Q2IC8qIEpTTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM3RkE2MjAwRDFG
MENCRDAwREIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlC
QzdGQTYyRTBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQkM3RkE2ODIwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAyODk3
NykKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI5LDExICsxMjksMTEgQEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICAKICAgICAgICAgQ1NTRm9u
dFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSB7IHJldHVybiBtX2ZvbnRTZWxlY3Rvci5nZXQoKTsg
fQogCi0gICAgcHJvdGVjdGVkOgotCiAgICAgICAgIC8qIGNoZWNrcyBpZiBhIGNvbXBvdW5kIHNl
bGVjdG9yICh3aGljaCBjYW4gY29uc2lzdCBvZiBtdWx0aXBsZSBzaW1wbGUgc2VsZWN0b3JzKQog
ICAgICAgICAgICBtYXRjaGVzIHRoZSBnaXZlbiBFbGVtZW50ICovCi0gICAgICAgIGJvb2wgY2hl
Y2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpOworICAgICAgICBib29sIGNoZWNrU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqKTsKKworICAgIHByb3RlY3RlZDoKICAgICAgICAgZW51bSBTZWxl
Y3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzPTAsIFNlbGVjdG9yRmFpbHNMb2NhbGx5LCBTZWxl
Y3RvckZhaWxzQ29tcGxldGVseX07CiAgICAgICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQgKmUsIGJvb2wgaXNBbmNlc3RvciwgYm9v
bCBpc1N1YlNlbGVjdG9yKTsKIApAQCAtMjQyLDYgKzI0Miw3IEBAIGNsYXNzIFN0eWxlZEVsZW1l
bnQ7CiAjZW5kaWYKIAogICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZVNldDsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIE5vZGU7CiAgICAgfTsKIAogICAgIGNsYXNzIENTU1J1bGVEYXRhIHsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0NoaWxkTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk3NykKKysrIFdlYkNvcmUvZG9tL0No
aWxkTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNoaWxkTm9kZUxpc3Q6
OkNoaWxkTm9kZUxpc3QoTm9kZSogbiwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykKLSAgICA6IE5v
ZGVMaXN0KG4sIGluZm8sIGZhbHNlKQorQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2Rl
KiBuLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykKKyAgICA6IER5bmFtaWNOb2RlTGlz
dChuLCBpbmZvLCBmYWxzZSkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24g
Mjg5NzcpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTYgKzIwLDE3IEBACiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBDaGlsZE5vZGVMaXN0X2gKICNk
ZWZpbmUgQ2hpbGROb2RlTGlzdF9oCiAKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUg
IkR5bmFtaWNOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENoaWxk
Tm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1Ymxp
YyBEeW5hbWljTm9kZUxpc3QgewogcHVibGljOgotICAgIENoaWxkTm9kZUxpc3QoTm9kZSosIE5v
ZGVMaXN0OjpDYWNoZXMqKTsKKyAgICBDaGlsZE5vZGVMaXN0KE5vZGUqLCBEeW5hbWljTm9kZUxp
c3Q6OkNhY2hlcyopOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9kb20vQ2xhc3NOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xhc3NO
b2RlTGlzdC5jcHAJKHJldmlzaW9uIDI4OTc3KQorKysgV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DbGFzc05vZGVMaXN0OjpDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9v
dE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcywgTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVz
KQotICAgIDogTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywgdHJ1ZSkKK0NsYXNzTm9kZUxpc3Q6
OkNsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBj
bGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQorICAgIDogRHluYW1p
Y05vZGVMaXN0KHJvb3ROb2RlLCBjYWNoZXMsIHRydWUpCiB7CiAgICAgbV9jbGFzc05hbWVzLnBh
cnNlQ2xhc3NBdHRyaWJ1dGUoY2xhc3NOYW1lcywgbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+aW5D
b21wYXRNb2RlKCkpOwogfQpJbmRleDogV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzcpCisr
KyBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE1ICsz
MSwxNSBAQAogI2RlZmluZSBDbGFzc05vZGVMaXN0X2gKIAogI2luY2x1ZGUgIkNsYXNzTmFtZXMu
aCIKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTdHJpbmc7CiAKLSAgICBjbGFzcyBD
bGFzc05vZGVMaXN0IDogcHVibGljIE5vZGVMaXN0IHsKKyAgICBjbGFzcyBDbGFzc05vZGVMaXN0
IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiAgICAgcHVibGljOgotICAgICAgICBDbGFzc05v
ZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1l
cywgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgICAgICBDbGFzc05vZGVMaXN0KFBhc3NSZWZQdHI8
Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcywgRHluYW1pY05vZGVMaXN0
OjpDYWNoZXMqKTsKIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDog
V2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmlkbAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTIgQEAgbW9kdWxlIGNvcmUgewogCiAgICAgICAg
IC8vIEhUTUwgNQogICAgICAgICBOb2RlTGlzdCAgICAgICAgICAgIGdldEVsZW1lbnRzQnlDbGFz
c05hbWUoaW4gRE9NU3RyaW5nIHRhZ25hbWUpOworCisgICAgICAgIC8vIERvY3VtZW50U2VsZWN0
b3IgLSBTZWxlY3RvciBBUEkKKyAgICAgICAgRWxlbWVudCAgICAgICAgICAgICBxdWVyeVNlbGVj
dG9yKGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc2Vs
ZWN0b3JzKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGVM
aXN0ICAgICAgICAgICAgcXVlcnlTZWxlY3RvckFsbChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHNlbGVjdG9ycykKKyAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2Rl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAko
cmV2aXNpb24gMjg5NzIpCShmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcDoyODk3MikKKysr
IFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTAgQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVl
ZHNOb3RpZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAsIG1fY2Fj
aGVzKG5ldyBDYWNoZXMpCisgICAgLCBtX293bnNDYWNoZXModHJ1ZSkKKyAgICAsIG1fbmVlZHNO
b3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKK3sKKyAgICBtX3Jvb3ROb2RlLT5yZWdp
c3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQ
dHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpDYWNoZXMqIGluZm8sIGJvb2wgbmVlZHNOb3Rp
ZmljYXRpb25zKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAsIG1fY2FjaGVzKGlu
Zm8pCisgICAgLCBtX293bnNDYWNoZXMoZmFsc2UpCisgICAgLCBtX25lZWRzTm90aWZpY2F0aW9u
cyhuZWVkc05vdGlmaWNhdGlvbnMpCit7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlz
dCh0aGlzKTsKK30gICAgCisKK05vZGVMaXN0Ojp+Tm9kZUxpc3QoKQoreworICAgIG1fcm9vdE5v
ZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBpZiAobV9vd25zQ2FjaGVzKQorICAg
ICAgICBkZWxldGUgbV9jYWNoZXM7Cit9CisKK3Vuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNpdmVM
ZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKCFzdGFydCkKKyAgICAgICAgc3Rh
cnQgPSBtX3Jvb3ROb2RlLmdldCgpOworCisgICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0aENhY2hl
VmFsaWQgJiYgc3RhcnQgPT0gbV9yb290Tm9kZSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5j
YWNoZWRMZW5ndGg7CisKKyAgICB1bnNpZ25lZCBsZW4gPSAwOworCisgICAgZm9yIChOb2RlKiBu
ID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCisgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhu
KSkKKyAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgIGxlbiArPSByZWN1cnNpdmVM
ZW5ndGgobik7CisgICAgICAgIH0KKworICAgIGlmIChzdGFydCA9PSBtX3Jvb3ROb2RlKSB7Cisg
ICAgICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGggPSBsZW47CisgICAgICAgIG1fY2FjaGVzLT5p
c0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBsZW47Cit9CisK
K05vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5z
aWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAoreworICAgIEFTU0VSVChy
ZW1haW5pbmdPZmZzZXQgPj0gMCk7CisKKyAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMt
Pmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+
aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQtLTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOyAvLyBubyBtYXRj
aGluZyBub2RlIGluIHRoaXMgc3VidHJlZQorfQorCitOb2RlKiBOb2RlTGlzdDo6aXRlbUJhY2t3
YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5p
bmdPZmZzZXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA8IDApOworICAg
IGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUobV9y
b290Tm9kZS5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAg
ICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZW1h
aW5pbmdPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0g
bjsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZW1haW5pbmdPZmZzZXQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJl
ZQorfQorCitOb2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5v
ZGUqIHN0YXJ0KSBjb25zdAoreworICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgaWYgKCFzdGFydCkgeworICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgaWYgKG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7CisgICAgICAgICAg
ICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0ZW07CisgICAgICAgICAgICB9IGVsc2UgaWYgKG9m
ZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZz
ZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGFydCA9IG1fY2FjaGVz
LT5sYXN0SXRlbTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMt
Pmxhc3RJdGVtT2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHJlbWFpbmluZ09mZnNldCA8IDApCisgICAgICAgIHJldHVybiBpdGVtQmFja3dhcmRzRnJv
bUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5p
bmdPZmZzZXQpOworfQorCitOb2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3Vt
ZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBOb2RlKiBu
b2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsK
KworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBw
OyBwID0gcC0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAgaWYgKHAgPT0gbV9yb290Tm9kZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBsID0gbGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGw7IGkrKykgeworICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKKyAgICAgICAgaWYg
KG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdl
dElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElkKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRy
ZW5DaGFuZ2VkKCkKK3sKKyAgICBtX2NhY2hlcy0+cmVzZXQoKTsKK30KKworCitOb2RlTGlzdDo6
Q2FjaGVzOjpDYWNoZXMoKQorICAgIDogbGFzdEl0ZW0oMCkKKyAgICAsIGlzTGVuZ3RoQ2FjaGVW
YWxpZChmYWxzZSkKKyAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCit7Cit9CisKK3ZvaWQg
Tm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQoreworICAgIGxhc3RJdGVtID0gMDsKKyAgICBpc0xl
bmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKKyAgICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7ICAg
ICAKK30KKworfQpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk3MikK
KysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTAgKzEsOCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVu
dGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDM5ICsyMSwzOSBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUg
IkR5bmFtaWNOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJF
bGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQorRHluYW1p
Y05vZGVMaXN0OjpEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9v
bCBuZWVkc05vdGlmaWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwg
bV9jYWNoZXMobmV3IENhY2hlcykKICAgICAsIG1fb3duc0NhY2hlcyh0cnVlKQogICAgICwgbV9u
ZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQogewotICAgIG1fcm9vdE5vZGUt
PnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJEeW5hbWlj
Tm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCi1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBuZWVkc05vdGlmaWNh
dGlvbnMpCitEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogaW5mbywgYm9vbCBuZWVkc05vdGlm
aWNhdGlvbnMpCiAgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQogICAgICwgbV9jYWNoZXMoaW5m
bykKICAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKICAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25z
KG5lZWRzTm90aWZpY2F0aW9ucykKIHsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0
KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRoaXMpOwog
fSAgICAKIAotTm9kZUxpc3Q6On5Ob2RlTGlzdCgpCitEeW5hbWljTm9kZUxpc3Q6On5EeW5hbWlj
Tm9kZUxpc3QoKQogewotICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsK
KyAgICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KHRoaXMpOwogICAgIGlm
IChtX293bnNDYWNoZXMpCiAgICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKIH0KIAotdW5zaWduZWQg
Tm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QKK3Vuc2lnbmVkIER5
bmFtaWNOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0KSBjb25zdAogewogICAg
IGlmICghc3RhcnQpCiAgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5nZXQoKTsKQEAgLTgwLDcg
Kzc4LDcgQEAgdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKgogICAgIHJl
dHVybiBsZW47CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChO
b2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAor
Tm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFy
dCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAogewogICAgIEFT
U0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CiAKQEAgLTEwMSw3ICs5OSw3IEBAIE5vZGUqIE5v
ZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCgKICAgICByZXR1cm4gMDsgLy8gbm8gbWF0
Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxpc3Q6Oml0ZW1CYWNr
d2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWlu
aW5nT2Zmc2V0KSBjb25zdAorTm9kZSogRHluYW1pY05vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJv
bUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNl
dCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7CiAgICAgZm9yIChO
b2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2Rl
LmdldCgpKSkgewpAQCAtMTIxLDcgKzExOSw3IEBAIE5vZGUqIE5vZGVMaXN0OjppdGVtQmFja3dh
cmRzRnJvbUN1cnJlbnQKICAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlz
IHN1YnRyZWUKIH0KIAotTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQgb2Zm
c2V0LCBOb2RlKiBzdGFydCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2RlTGlzdDo6cmVjdXJzaXZl
SXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAogewogICAgIGludCByZW1h
aW5pbmdPZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYgKCFzdGFydCkgewpAQCAtMTQyLDcgKzE0MCw3
IEBAIE5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG8KICAgICAgICAgcmV0
dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNl
dCk7CiB9CiAKLU5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBlbGVtZW50SWQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBpZiAobV9yb290Tm9k
ZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVs
ZW1lbnRJZCk7CkBAIC0xNjcsMjAgKzE2NSwyMCBAQCBOb2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhO
YW1lKGNvbnN0IEF0b21pCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9kZUxpc3Q6OnJvb3RO
b2RlQ2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQgRHluYW1pY05vZGVMaXN0Ojpyb290Tm9kZUNoaWxk
cmVuQ2hhbmdlZCgpCiB7CiAgICAgbV9jYWNoZXMtPnJlc2V0KCk7CiB9CiAKIAotTm9kZUxpc3Q6
OkNhY2hlczo6Q2FjaGVzKCkKK0R5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQogICAg
IDogbGFzdEl0ZW0oMCkKICAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKICAgICAsIGlz
SXRlbUNhY2hlVmFsaWQoZmFsc2UpCiB7CiB9CiAKLXZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVz
ZXQoKQordm9pZCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQogewogICAgIGxhc3RJ
dGVtID0gMDsKICAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0R5bmFtaWNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0R5bmFtaWNO
b2RlTGlzdC5oCShyZXZpc2lvbiAyODk3MikJKGZyb20gV2ViQ29yZS9kb20vTm9kZUxpc3QuaDoy
ODk3MikKKysrIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgTm9kZUxpc3RfaAorI2RlZmluZSBOb2RlTGlzdF9oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF0b21pY1N0
cmluZzsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8
Tm9kZUxpc3Q+IHsKK3B1YmxpYzoKKworICAgIHN0cnVjdCBDYWNoZXMgeworICAgICAgICBDYWNo
ZXMoKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
Y2FjaGVkTGVuZ3RoOworICAgICAgICBOb2RlKiBsYXN0SXRlbTsKKyAgICAgICAgdW5zaWduZWQg
bGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgIGJvb2wgaXNMZW5ndGhDYWNoZVZhbGlkIDogMTsKKyAg
ICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICB9OworCisgICAgTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAg
IE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNO
b3RpZmljYXRpb25zKTsKKyAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOworCisgICAgYm9vbCBuZWVk
c05vdGlmaWNhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTm90aWZpY2F0aW9uczsgfQor
CisgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdAorICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOworICAgIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBB
dG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9m
IERPTSkKKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkge30KKworcHJvdGVjdGVkOgor
ICAgIC8vIGhlbHBlciBmdW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxlbWVudEltcGxzIGlu
IGEgdHJlZQorICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCA9IDApIGNv
bnN0OworICAgIE5vZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3Rh
cnQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSogdGVzdE5v
ZGUpIGNvbnN0ID0gMDsKKworICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3ROb2RlOworICAgIG11dGFi
bGUgQ2FjaGVzKiBtX2NhY2hlczsKKyAgICBib29sIG1fb3duc0NhY2hlczsKKyAgICBib29sIG1f
bmVlZHNOb3RpZmljYXRpb25zOworCisgcHJpdmF0ZToKKyAgICBOb2RlKiBpdGVtRm9yd2FyZHNG
cm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zm
c2V0KSBjb25zdDsKKyAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3Rh
cnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7Cit9OworCit9
IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9u
IDI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsOSArMjEsMTAgQEAK
ICAqCiAgKi8KIAotI2lmbmRlZiBOb2RlTGlzdF9oCi0jZGVmaW5lIE5vZGVMaXN0X2gKKyNpZm5k
ZWYgRHluYW1pY05vZGVMaXN0X2gKKyNkZWZpbmUgRHluYW1pY05vZGVMaXN0X2gKIAorI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM1LDEzICszNCwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBOb2RlOwog
Ci1jbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVMaXN0PiB7CitjbGFzcyBE
eW5hbWljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgewogcHVibGljOgotCiAgICAgc3RydWN0
IENhY2hlcyB7CiAgICAgICAgIENhY2hlcygpOwogICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAg
ICAgIAorCiAgICAgICAgIHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKICAgICAgICAgTm9kZSogbGFz
dEl0ZW07CiAgICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwpAQCAtNDksOSArNDcsOSBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7CiAgICAgfTsKIAot
ICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmlj
YXRpb25zKTsKLSAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMq
LCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7Ci0gICAgdmlydHVhbCB+Tm9kZUxpc3QoKTsKKyAg
ICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05v
dGlmaWNhdGlvbnMpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBDYWNoZXMqLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAgdmlydHVhbCB+RHlu
YW1pY05vZGVMaXN0KCk7CiAKICAgICBib29sIG5lZWRzTm90aWZpY2F0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNOb3RpZmljYXRpb25zOyB9CiAKQEAgLTYyLDcgKzYwLDcgQEAgcHVibGlj
OgogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwg
dm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIHZpcnR1YWwgdm9pZCByb290Tm9k
ZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQorICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0
ZUNoYW5nZWQoKSB7IH0KIAogcHJvdGVjdGVkOgogICAgIC8vIGhlbHBlciBmdW5jdGlvbnMgZm9y
IHNlYXJjaGluZyBhbGwgRWxlbWVudEltcGxzIGluIGEgdHJlZQpAQCAtNzUsMTEgKzczLDExIEBA
IHByb3RlY3RlZDoKICAgICBib29sIG1fb3duc0NhY2hlczsKICAgICBib29sIG1fbmVlZHNOb3Rp
ZmljYXRpb25zOwogCi0gcHJpdmF0ZToKK3ByaXZhdGU6CiAgICAgTm9kZSogaXRlbUZvcndhcmRz
RnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09m
ZnNldCkgY29uc3Q7CiAgICAgTm9kZSogaXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0
YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OwogfTsKIAot
fSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAv
LyBEeW5hbWljTm9kZUxpc3RfaApJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5pZGwJKHJldmlzaW9uIDI4OTc3KQorKysgV2Vi
Q29yZS9kb20vRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTIgQEAg
bW9kdWxlIGNvcmUgewogICAgICAgICAvLyBIVE1MIDUKICAgICAgICAgTm9kZUxpc3QgZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgbmFtZSk7CiAKKyAgICAgICAgLy8gRWxlbWVu
dFNlbGVjdG9yIC0gU2VsZWN0b3IgQVBJCisgICAgICAgIEVsZW1lbnQgICAgICAgICAgICAgcXVl
cnlTZWxlY3RvcihpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3Ry
aW5nIHNlbGVjdG9ycykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAg
ICBOb2RlTGlzdCAgICAgICAgICAgIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gW0NvbnZlcnRVbmRlZmlu
ZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBzZWxlY3RvcnMpCisgICAgICAgICAgICBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogI2lmIGRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0Mp
CiAgICAgICAgIC8vIE9iamVjdGl2ZS1DIGV4dGVuc2lvbnMKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBpbm5lclRleHQ7CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lTm9kZUxp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDI4OTc3KQorKysgV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsOCArMzAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLU5hbWVOb2RlTGlzdDo6TmFtZU5vZGVMaXN0KE5vZGUqIHJvb3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVzKQotICAgIDogTm9kZUxp
c3Qocm9vdCwgY2FjaGVzLCB0cnVlKQorTmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3QoTm9kZSog
cm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyogY2FjaGVz
KQorICAgIDogRHluYW1pY05vZGVMaXN0KHJvb3QsIGNhY2hlcywgdHJ1ZSkKICAgICAsIG1fbm9k
ZU5hbWUobmFtZSkKIHsKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCShyZXZpc2lvbiAyODk3NykKKysr
IFdlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAs
MTEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVm
IE5hbWVOb2RlTGlzdF9oCiAjZGVmaW5lIE5hbWVOb2RlTGlzdF9oCiAKLSNpbmNsdWRlICJOb2Rl
TGlzdC5oIgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxLDkgKzMyLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogLyoqCiAgKiBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4g
YSBFbGVtZW50IHdpdGggYSBnaXZlbiAibmFtZT0iIHRhZwogICovCi1jbGFzcyBOYW1lTm9kZUxp
c3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgTmFtZU5vZGVMaXN0IDogcHVibGljIER5bmFt
aWNOb2RlTGlzdCB7CiBwdWJsaWM6Ci0gICAgTmFtZU5vZGVMaXN0KE5vZGUqIHJvb3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgIE5hbWVOb2RlTGlzdChOb2Rl
KiByb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKik7CiAK
ICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCiAKQEAg
LTQyLDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQg
b2YgRE9NKQogICAgIAotICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQo
KSB7IE5vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOyB9CisgICAgdmlydHVhbCB2
b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHsgRHluYW1pY05vZGVMaXN0Ojpyb290Tm9k
ZUNoaWxkcmVuQ2hhbmdlZCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZU1hdGNoZXMoTm9kZSogdGVzdE5vZGUpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDI4OTc3KQor
KysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKIAorI2luY2x1ZGUgIkNT
U1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVs
ZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNo
ZWV0LmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ2hpbGROb2RlTGlzdC5oIgogI2luY2x1
ZGUgIkNsYXNzTm9kZUxpc3QuaCIKICNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgpAQCAtMzksNiArNDcsNyBAQAogI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgogI2luY2x1
ZGUgIk5hbWVkQXR0ck1hcC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlNlbGVjdG9yTm9kZUxpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0
cmVhbS5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCkBAIC00OSwxNiArNTgsMTYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi10eXBlZGVmIEhh
c2hTZXQ8Tm9kZUxpc3QqPiBOb2RlTGlzdFNldDsKK3R5cGVkZWYgSGFzaFNldDxEeW5hbWljTm9k
ZUxpc3QqPiBOb2RlTGlzdFNldDsKIHN0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7CiAgICAgTm9k
ZUxpc3RTZXQgbV9saXN0c1RvTm90aWZ5OwotICAgIE5vZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5v
ZGVMaXN0Q2FjaGVzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBOb2RlTGlzdDo6Q2FjaGVzPiBtX2Ns
YXNzTm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIE5vZGVMaXN0OjpDYWNoZXM+
IG1fbmFtZU5vZGVMaXN0Q2FjaGVzOworICAgIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzIG1fY2hp
bGROb2RlTGlzdENhY2hlczsKKyAgICBIYXNoTWFwPFN0cmluZywgRHluYW1pY05vZGVMaXN0OjpD
YWNoZXM+IG1fY2xhc3NOb2RlTGlzdENhY2hlczsKKyAgICBIYXNoTWFwPFN0cmluZywgRHluYW1p
Y05vZGVMaXN0OjpDYWNoZXM+IG1fbmFtZU5vZGVMaXN0Q2FjaGVzOwogfTsKIAogLy8gTm9kZUxp
c3QgdGhhdCBsaW1pdHMgdG8gYSBwYXJ0aWN1bGFyIHRhZy4KLWNsYXNzIFRhZ05vZGVMaXN0IDog
cHVibGljIE5vZGVMaXN0IHsKK2NsYXNzIFRhZ05vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2Rl
TGlzdCB7CiBwdWJsaWM6CiAgICAgVGFnTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lKTsKIApAQCAtNzMsNyArODIsNyBAQCBwcml2YXRlOgogfTsKIAogaW5saW5lIFRh
Z05vZGVMaXN0OjpUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUp
Ci0gICAgOiBOb2RlTGlzdChyb290Tm9kZSwgdHJ1ZSkKKyAgICA6IER5bmFtaWNOb2RlTGlzdChy
b290Tm9kZSwgdHJ1ZSkKICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKICAgICAs
IG1fbG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKQEAgLTQ0MSw3ICs0NTAsNyBAQCB1bnNpZ25lZCBO
b2RlOjpub2RlSW5kZXgoKSBjb25zdAogICAgIHJldHVybiBjb3VudDsKIH0KIAotdm9pZCBOb2Rl
OjpyZWdpc3Rlck5vZGVMaXN0KE5vZGVMaXN0KiBsaXN0KQordm9pZCBOb2RlOjpyZWdpc3RlckR5
bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqIGxpc3QpCiB7CiAgICAgaWYgKCFtX25vZGVM
aXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0YSk7CkBA
IC00NTQsNyArNDYzLDcgQEAgdm9pZCBOb2RlOjpyZWdpc3Rlck5vZGVMaXN0KE5vZGVMaXN0KiBs
aQogICAgIG1fZG9jdW1lbnQtPmFkZE5vZGVMaXN0KCk7CiB9CiAKLXZvaWQgTm9kZTo6dW5yZWdp
c3Rlck5vZGVMaXN0KE5vZGVMaXN0KiBsaXN0KQordm9pZCBOb2RlOjp1bnJlZ2lzdGVyRHluYW1p
Y05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkKIHsKICAgICBBU1NFUlQobV9ub2RlTGlz
dHMpOwogICAgIG1fZG9jdW1lbnQtPnJlbW92ZU5vZGVMaXN0KCk7CkBAIC0xMjE1LDcgKzEyMjQs
NyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAgICAgaWYgKCFt
X25vZGVMaXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNOb2RlRGF0
YSk7CiAKLSAgICByZXR1cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgJm1f
bm9kZUxpc3RzLT5tX25hbWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIE5vZGVMaXN0
OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJuIG5ldyBOYW1lTm9kZUxpc3Qo
dGhpcywgZWxlbWVudE5hbWUsICZtX25vZGVMaXN0cy0+bV9uYW1lTm9kZUxpc3RDYWNoZXMuYWRk
KGVsZW1lbnROYW1lLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsK
IH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShj
b25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpCkBAIC0xMjIzLDcgKzEyMzIsNjAgQEAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogICAgIGlmICghbV9ub2RlTGlzdHMpCiAg
ICAgICAgIG1fbm9kZUxpc3RzLnNldChuZXcgTm9kZUxpc3RzTm9kZURhdGEpOwogCi0gICAgcmV0
dXJuIG5ldyBDbGFzc05vZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsICZtX25vZGVMaXN0cy0+bV9j
bGFzc05vZGVMaXN0Q2FjaGVzLmFkZChjbGFzc05hbWVzLCBOb2RlTGlzdDo6Q2FjaGVzKCkpLmZp
cnN0LT5zZWNvbmQpOworICAgIHJldHVybiBuZXcgQ2xhc3NOb2RlTGlzdCh0aGlzLCBjbGFzc05h
bWVzLCAmbV9ub2RlTGlzdHMtPm1fY2xhc3NOb2RlTGlzdENhY2hlcy5hZGQoY2xhc3NOYW1lcywg
RHluYW1pY05vZGVMaXN0OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7Cit9CisKK1Bhc3NSZWZQ
dHI8RWxlbWVudD4gTm9kZTo6cXVlcnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYoc2VsZWN0b3JzLmlzTnVsbCgpIHx8IHNlbGVj
dG9ycy5pc0VtcHR5KCkpCisgICAgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICBDU1NTdHlsZVNoZWV0IHRlbXBTdHlsZVNoZWV0KGRvY3Vt
ZW50KCkpOworICAgIENTU1BhcnNlciBwKHRydWUpOworICAgIFJlZlB0cjxDU1NSdWxlPiBydWxl
ID0gcC5wYXJzZVJ1bGUoJnRlbXBTdHlsZVNoZWV0LCBzZWxlY3RvcnMgKyAie30iKTsKKyAgICBp
ZiAoIXJ1bGUgfHwgIXJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBDU1NTdHlsZVNlbGVjdG9yKiBz
dHlsZVNlbGVjdG9yID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIENTU1NlbGVj
dG9yKiBxdWVyeVNlbGVjdG9yID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZS5nZXQo
KSktPnNlbGVjdG9yKCk7CisgICAgCisgICAgLy8gRklYTUU6IFdlIGNhbiBzcGVlZCB0aGlzIHVw
IGJ5IGltcGxlbWVudGluZyBjYWNoaW5nIHNpbWlsYXIgdG8gdGhlIG9uZSB1c2UgYnkgZ2V0RWxl
bWVudEJ5SWQKKyAgICBmb3IgKE5vZGUgKm4gPSB0cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkg
eworICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
KTsKKyAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUo
ZWxlbWVudCk7CisgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHF1ZXJ5
U2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT5uZXh0KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3R5bGVTZWxlY3Rvci0+Y2hlY2tTZWxlY3RvcihzZWxlY3RvcikpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPE5vZGVMaXN0
PiBOb2RlOjpxdWVyeVNlbGVjdG9yQWxsKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBpZihzZWxlY3RvcnMuaXNOdWxsKCkgfHwgc2VsZWN0b3JzLmlz
RW1wdHkoKSkKKyAgICB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIENTU1N0eWxlU2hlZXQgdGVtcFN0eWxlU2hlZXQoZG9jdW1lbnQoKSk7
CisgICAgQ1NTUGFyc2VyIHAodHJ1ZSk7CisgICAgUmVmUHRyPENTU1J1bGU+IHJ1bGUgPSBwLnBh
cnNlUnVsZSgmdGVtcFN0eWxlU2hlZXQsIHNlbGVjdG9ycyArICJ7fSIpOworICAgIGlmICghcnVs
ZSB8fCAhcnVsZS0+aXNTdHlsZVJ1bGUoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBTZWxlY3Rvck5vZGVMaXN0KiByZXN1
bHRMaXN0ID0gbmV3IFNlbGVjdG9yTm9kZUxpc3QodGhpcywgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4ocnVsZS5nZXQoKSktPnNlbGVjdG9yKCkpOworCisgICAgcmV0dXJuIHJlc3VsdExpc3Q7
CiB9CiAKIERvY3VtZW50ICpOb2RlOjpvd25lckRvY3VtZW50KCkgY29uc3QKSW5kZXg6IFdlYkNv
cmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9u
IDI4OTc3KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0b21pY1N0cmluZzsKIGNsYXNzIENv
bnRhaW5lck5vZGU7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIER5bmFtaWNOb2RlTGlzdDsKIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBFdmVudDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CkBAIC00NDIs
OCArNDQzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1RyZWVBbmRNYXJrKGNvbnN0IE5vZGUq
IG1hcmtlZE5vZGUxLCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDEsIGNvbnN0IE5vZGUqIG1hcmtl
ZE5vZGUyID0gMCwgY29uc3QgY2hhciogbWFya2VkTGFiZWwyID0gMCkgY29uc3Q7CiAjZW5kaWYK
IAotICAgIHZvaWQgcmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCopOwotICAgIHZvaWQgdW5yZWdp
c3Rlck5vZGVMaXN0KE5vZGVMaXN0Kik7CisgICAgdm9pZCByZWdpc3RlckR5bmFtaWNOb2RlTGlz
dChEeW5hbWljTm9kZUxpc3QqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3Qo
RHluYW1pY05vZGVMaXN0Kik7CiAgICAgdm9pZCBub3RpZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5n
ZWQoKTsKICAgICB2b2lkIG5vdGlmeUxvY2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiAg
ICAgdm9pZCBub3RpZnlOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkKCk7CkBAIC00NTEsMTAgKzQ1
MiwxNCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0
RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUpOwotCiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNC
eU5hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50TmFtZSk7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlz
dD4gZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMpOwogCisg
ICAgUGFzc1JlZlB0cjxFbGVtZW50PiBxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0
b3JzLCBFeGNlcHRpb25Db2RlJik7CisvLyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5U2Vs
ZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIE5TUmVzb2x2ZXIsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBxdWVyeVNlbGVjdG9yQWxsKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJik7CisvLyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBxdWVyeVNlbGVjdG9yQWxsKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBOU1Jlc29sdmVyLCBF
eGNlcHRpb25Db2RlJik7CisKIHByaXZhdGU6IC8vIG1lbWJlcnMKICAgICBEb2NQdHI8RG9jdW1l
bnQ+IG1fZG9jdW1lbnQ7CiAgICAgTm9kZSogbV9wcmV2aW91czsKSW5kZXg6IFdlYkNvcmUvZG9t
L05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5jcHAJKHJl
dmlzaW9uIDI4OTc3KQorKysgV2ViQ29yZS9kb20vTm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE5MCArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTm9kZUxpc3QuaCIKLQot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLU5vZGVMaXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2Rl
LCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKLSAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCi0g
ICAgLCBtX2NhY2hlcyhuZXcgQ2FjaGVzKQotICAgICwgbV9vd25zQ2FjaGVzKHRydWUpCi0gICAg
LCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCi17Ci0gICAgbV9yb290
Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKLX0gICAgCi0KLU5vZGVMaXN0OjpOb2RlTGlz
dChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBOb2RlTGlzdDo6Q2FjaGVzKiBpbmZvLCBib29s
IG5lZWRzTm90aWZpY2F0aW9ucykKLSAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCi0gICAgLCBt
X2NhY2hlcyhpbmZvKQotICAgICwgbV9vd25zQ2FjaGVzKGZhbHNlKQotICAgICwgbV9uZWVkc05v
dGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQotewotICAgIG1fcm9vdE5vZGUtPnJlZ2lz
dGVyTm9kZUxpc3QodGhpcyk7Ci19ICAgIAotCi1Ob2RlTGlzdDo6fk5vZGVMaXN0KCkKLXsKLSAg
ICBtX3Jvb3ROb2RlLT51bnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Ci0gICAgaWYgKG1fb3duc0Nh
Y2hlcykKLSAgICAgICAgZGVsZXRlIG1fY2FjaGVzOwotfQotCi11bnNpZ25lZCBOb2RlTGlzdDo6
cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0KSBjb25zdAotewotICAgIGlmICghc3RhcnQpCi0g
ICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5nZXQoKTsKLQotICAgIGlmIChtX2NhY2hlcy0+aXNM
ZW5ndGhDYWNoZVZhbGlkICYmIHN0YXJ0ID09IG1fcm9vdE5vZGUpCi0gICAgICAgIHJldHVybiBt
X2NhY2hlcy0+Y2FjaGVkTGVuZ3RoOwotCi0gICAgdW5zaWduZWQgbGVuID0gMDsKLQotICAgIGZv
ciAoTm9kZSogbiA9IHN0YXJ0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygp
KQotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMobikpCi0gICAgICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgICAgICBsZW4gKz0g
cmVjdXJzaXZlTGVuZ3RoKG4pOwotICAgICAgICB9Ci0KLSAgICBpZiAoc3RhcnQgPT0gbV9yb290
Tm9kZSkgewotICAgICAgICBtX2NhY2hlcy0+Y2FjaGVkTGVuZ3RoID0gbGVuOwotICAgICAgICBt
X2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bGVuOwotfQotCi1Ob2RlKiBOb2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSog
c3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0ID49IDApOwotCi0gICAgZm9yIChOb2RlICpuID0gc3Rh
cnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7Ci0gICAg
ICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlTWF0Y2hl
cyhuKSkgewotICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgICAg
IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAg
bV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zm
c2V0LS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsg
Ly8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0aGlzIHN1YnRyZWUKLX0KLQotTm9kZSogTm9kZUxpc3Q6
Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBp
bnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAotewotICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQg
PCAwKTsKLSAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlv
dXNOb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkgewotICAgICAgICAgICAgICAg
IGlmICghcmVtYWluaW5nT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5s
YXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNl
dCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFs
aWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0Kys7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsgLy8gbm8gbWF0Y2hpbmcgbm9kZSBpbiB0
aGlzIHN1YnRyZWUKLX0KLQotTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQg
b2Zmc2V0LCBOb2RlKiBzdGFydCkgY29uc3QKLXsKLSAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0g
b2Zmc2V0OwotICAgIGlmICghc3RhcnQpIHsKLSAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLT5m
aXJzdENoaWxkKCk7Ci0gICAgICAgIGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgewot
ICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQpIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmxhc3RJdGVtOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChvZmZzZXQgPiBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgfHwgbV9jYWNoZXMtPmxh
c3RJdGVtT2Zmc2V0IC0gb2Zmc2V0IDwgb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RhcnQg
PSBtX2NhY2hlcy0+bGFzdEl0ZW07Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0IC09
IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChyZW1haW5pbmdPZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gaXRlbUJh
Y2t3YXJkc0Zyb21DdXJyZW50KHN0YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNl
dCwgcmVtYWluaW5nT2Zmc2V0KTsKLX0KLQotTm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKLXsKLSAgICBpZiAobV9yb290Tm9k
ZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBtX3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVs
ZW1lbnRJZCk7Ci0KLSAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlTWF0Y2hlcyhub2RlKSkKLSAg
ICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGZvciAoTm9kZSogcCA9IG5vZGUtPnBhcmVu
dE5vZGUoKTsgcDsgcCA9IHAtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIGlmIChwID09IG1f
cm9vdE5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbCA9IGxlbmd0aCgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGl0ZW0oaSk7Ci0g
ICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5nZXRJREF0dHJpYnV0ZSgpID09IGVsZW1lbnRJZCkKLSAgICAgICAgICAgIHJldHVy
biBub2RlOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIE5vZGVMaXN0Ojpyb290
Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgbV9jYWNoZXMtPnJlc2V0KCk7Ci19Ci0KLQot
Tm9kZUxpc3Q6OkNhY2hlczo6Q2FjaGVzKCkKLSAgICA6IGxhc3RJdGVtKDApCi0gICAgLCBpc0xl
bmd0aENhY2hlVmFsaWQoZmFsc2UpCi0gICAgLCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQotewot
fQotCi12b2lkIE5vZGVMaXN0OjpDYWNoZXM6OnJlc2V0KCkKLXsKLSAgICBsYXN0SXRlbSA9IDA7
Ci0gICAgaXNMZW5ndGhDYWNoZVZhbGlkID0gZmFsc2U7Ci0gICAgaXNJdGVtQ2FjaGVWYWxpZCA9
IGZhbHNlOyAgICAgCi19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzcpCisrKyBXZWJD
b3JlL2RvbS9Ob2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1OCArMjgsMjMgQEAKIAog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXRv
bWljU3RyaW5nOwotY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xh
c3MgTm9kZTsKIAotY2xhc3MgTm9kZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4g
ewotcHVibGljOgotCi0gICAgc3RydWN0IENhY2hlcyB7Ci0gICAgICAgIENhY2hlcygpOwotICAg
ICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjYWNoZWRMZW5n
dGg7Ci0gICAgICAgIE5vZGUqIGxhc3RJdGVtOwotICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9m
ZnNldDsKLSAgICAgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAxOwotICAgICAgICBib29s
IGlzSXRlbUNhY2hlVmFsaWQgOiAxOworICAgIGNsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8Tm9kZUxpc3Q+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vZGVMaXN0KCkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgfk5vZGVMaXN0KCkgeyB9CisKKyAgICAgICAgLy8gRE9NIG1ldGhvZHMg
JiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdAorICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYpIGNvbnN0ID0gMDsKICAgICB9OwogCi0gICAgTm9kZUxpc3QoUGFzc1JlZlB0
cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwotICAgIE5vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRp
b25zKTsKLSAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOwotCi0gICAgYm9vbCBuZWVkc05vdGlmaWNh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzTm90aWZpY2F0aW9uczsgfQotCi0gICAgLy8g
RE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdAotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3QgPSAwOwotICAgIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJp
bmcmKSBjb25zdDsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLSAg
ICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkge30KLQotcHJvdGVjdGVkOgotICAgIC8vIGhl
bHBlciBmdW5jdGlvbnMgZm9yIHNlYXJjaGluZyBhbGwgRWxlbWVudEltcGxzIGluIGEgdHJlZQot
ICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCA9IDApIGNvbnN0OwotICAg
IE5vZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQgPSAwKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSogdGVzdE5vZGUpIGNvbnN0
ID0gMDsKLQotICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3ROb2RlOwotICAgIG11dGFibGUgQ2FjaGVz
KiBtX2NhY2hlczsKLSAgICBib29sIG1fb3duc0NhY2hlczsKLSAgICBib29sIG1fbmVlZHNOb3Rp
ZmljYXRpb25zOwotCi0gcHJpdmF0ZToKLSAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dDsKLSAgICBOb2RlKiBpdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2ln
bmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7Ci19OwotCi19IC8vbmFtZXNw
YWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIE5vZGVMaXN0X2gK
SW5kZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9k
b20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rvck5vZGVMaXN0LmgiCisKKyNpbmNs
dWRlICJDU1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2VsZWN0b3JOb2RlTGlzdDo6U2VsZWN0b3JOb2Rl
TGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDU1NTZWxlY3RvciogcXVlcnlTZWxlY3Rv
cikKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByb290Tm9kZS0+ZG9jdW1lbnQoKTsKKyAg
ICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0
b3IoKTsKKyAgICBmb3IgKE5vZGUqIG4gPSByb290Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOyBu
OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnRO
b2RlKCkpIHsKKyAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmluaXRFbGVtZW50QW5kUHNldWRv
U3RhdGUoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pKTsKKyAgICAgICAgICAgIGZvciAoQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yID0gcXVlcnlTZWxlY3Rvcjsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2Vs
ZWN0b3ItPm5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVj
a1NlbGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1fbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgU2VsZWN0b3JOb2RlTGlzdF9oCisjZGVmaW5lIFNlbGVjdG9yTm9k
ZUxpc3RfaAorCisjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOb2RlOworICAgIGNs
YXNzIENTU1NlbGVjdG9yOworCisgICAgY2xhc3MgU2VsZWN0b3JOb2RlTGlzdCA6IHB1YmxpYyBT
dGF0aWNOb2RlTGlzdCB7CisgICAgcHVibGljOgorICAgICAgICBTZWxlY3Rvck5vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENTU1NlbGVjdG9yKiBzZWxlY3Rvcik7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2VsZWN0b3JOb2RlTGlzdF9o
CkluZGV4OiBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vU3RhdGljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20v
U3RhdGljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkF0
b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordW5zaWduZWQgU3RhdGljTm9kZUxpc3Q6Omxlbmd0aCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOworfQorCitOb2RlKiBTdGF0aWNO
b2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBt
X25vZGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbaW5kZXhdLmdldCgpOworICAg
IHJldHVybiAwOworfQorCitOb2RlKiBTdGF0aWNOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAoreworICAgIHNpemVfdCBsZW5ndGggPSBt
X25vZGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGVzW2ldLmdldCgpOworICAgICAgICBpZiAobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0SURB
dHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdGF0
aWNOb2RlTGlzdC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3Qu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdGF0aWNOb2RlTGlzdF9o
CisjZGVmaW5lIFN0YXRpY05vZGVMaXN0X2gKKworI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgY2xhc3MgTm9kZTsKKworICAgIGNsYXNzIFN0YXRpY05vZGVMaXN0
IDogcHVibGljIE5vZGVMaXN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIERlcml2ZWQgY2xh
c3NlcyBzaG91bGQgYnVpbGQgdXAgdGhlIFZlY3RvciBpbiB0aGVpciBjb25zdHJ1Y3Rvci4KKyAg
ICAgICAgU3RhdGljTm9kZUxpc3QoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+U3RhdGljTm9kZUxp
c3QoKSB7IH0KKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgICAgICB2
aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKwor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fbm9kZXM7Cisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3RhdGljTm9kZUxp
c3RfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18113</attachid>
            <date>2007-12-25 13:34:25 -0800</date>
            <delta_ts>2007-12-25 16:40:03 -0800</delta_ts>
            <desc>Now with tests :)</desc>
            <filename>qsa-with-tests.diff</filename>
            <type>text/plain</type>
            <size>88641</size>
            <attacher name="David Smith">catfish.man</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyODk3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMDctMTItMjUgIERhdmlkIFNtaXRoICA8Y2F0ZmlzaC5tYW5AZ21h
aWwuY29tPiBhbmQgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgLSBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4NworICAgICAgICBJbXBsZW1lbnQgdGhlIG1v
c3QgdXNlZnVsIHBhcnQgb2YgdGhlIFczQyBTZWxlY3RvcnMgQVBJLgorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNl
bGVjdG9yLmg6IE1ha2UgTm9kZSBhIGZyaWVuZCBvZiBDU1NTdHlsZVNlbGVjdG9yIHNvIGl0IGNh
biB1c2UgY2hlY2tTZWxlY3RvcigpCisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCk6IENoYW5nZSB0
byBiZWluZyBhIER5bmFtaWNOb2RlTGlzdAorICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0Lmg6
CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xh
c3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdCk6IENoYW5nZSB0byBiZWluZyBhIER5bmFtaWNOb2Rl
TGlzdAorICAgICAgICAqIGRvbS9DbGFzc05vZGVMaXN0Lmg6CisgICAgICAgICogZG9tL0RvY3Vt
ZW50LmlkbDogQWRkIHRoZSBuZXcgZnVuY3Rpb25zCisgICAgICAgICogZG9tL0R5bmFtaWNOb2Rl
TGlzdC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVMaXN0KTogUmVuYW1lIE5vZGVM
aXN0IHRvIER5bmFtaWNOb2RlTGlzdCwgdG8gZGlmZmVyZW50aWF0ZSBpdCBmcm9tIHRoZSBuZXcg
U3RhdGljTm9kZUxpc3QKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6fkR5bmFt
aWNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJlY3Vyc2l2
ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJk
c0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6aXRlbUJh
Y2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6
cmVjdXJzaXZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6Oml0ZW1X
aXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJvb3ROb2RlQ2hp
bGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkR5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
OjpDYWNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHluYW1pY05vZGVMaXN0OjpDYWNoZXM6OnJl
c2V0KToKKyAgICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6IENvcGllZCBmcm9tIFdlYkNv
cmUvZG9tL05vZGVMaXN0LmguCisgICAgICAgIChXZWJDb3JlOjpEeW5hbWljTm9kZUxpc3Q6OnJv
b3ROb2RlQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaWRsOiBBZGQg
dGhlIG5ldyBmdW5jdGlvbnMKKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0LmNwcDogQ2hhbmdl
IHRvIGJlaW5nIGEgRHluYW1pY05vZGVMaXN0CisgICAgICAgIChXZWJDb3JlOjpOYW1lTm9kZUxp
c3Q6Ok5hbWVOb2RlTGlzdCk6CisgICAgICAgICogZG9tL05hbWVOb2RlTGlzdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TmFtZU5vZGVMaXN0Ojpyb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQpOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpUYWdO
b2RlTGlzdCk6IENoYW5nZSB0byBiZWluZyBhIER5bmFtaWNOb2RlTGlzdAorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6cmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6dW5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
OjpnZXRFbGVtZW50c0J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3IpOiBu
ZXcKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwpOiBuZXcKKyAgICAg
ICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGRvbS9Ob2RlTGlzdC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogZG9tL05vZGVMaXN0Lmg6IFRoaXMgaXMgbm93IGFuIGFic3RyYWN0IHN1cGVyY2xh
c3Mgb2YgRHluYW1pY05vZGVMaXN0IGFuZCBTdGF0aWNOb2RlTGlzdAorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUxpc3Q6Ok5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0Ojp+Tm9k
ZUxpc3QpOgorICAgICAgICAqIGRvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rvck5vZGVMaXN0OjpTZWxlY3Rvck5vZGVMaXN0KTogTmV3IFN0
YXRpY05vZGVMaXN0IHN1YmNsYXNzIHRoYXQgZmlsdGVycyBlbGVtZW50cyBieSBDU1Mgc2VsZWN0
b3IKKyAgICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBk
b20vU3RhdGljTm9kZUxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY05v
ZGVMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljTm9kZUxpc3Q6Oml0ZW1XaXRoTmFtZSk6CisgICAg
ICAgICogZG9tL1N0YXRpY05vZGVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3Rh
dGljTm9kZUxpc3Q6OlN0YXRpY05vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY05v
ZGVMaXN0Ojp+U3RhdGljTm9kZUxpc3QpOgorCiAyMDA3LTEyLTI1ICBNYXJrIFJvd2UgIDxtcm93
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyODk3OSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTc4LDcgKzE5NzgsNiBAQAogCQlBODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkgLyog
TmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODE4NzIxMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggKi87IH07CiAJ
CUE4MTg3MjFGMDk3N0QzQzAwMDU4MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE0MDk3N0QzQzAwMDU4
MjZEOSAvKiBDb250YWluZXJOb2RlLmNwcCAqLzsgfTsKIAkJQTgxODcyMjAwOTc3RDNDMDAwNTgy
NkQ5IC8qIENoaWxkTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4MTg3MjE1MDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0Lmgg
Ki87IH07Ci0JCUE4MTg3MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxNjA5NzdEM0Mw
MDA1ODI2RDkgLyogTm9kZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyMzA5NzdEM0MwMDA1ODI2
RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTgxODcyMjQw
OTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFt
ZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxk
Tm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovOyB9OwpA
QCAtMzYxNCw2ICszNjEzLDEyIEBACiAJCUJDNzcyQzRGMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1F
VHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNzcyQzVFMEM0
RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNUQwQzRFQjM0NDAwODMyODVGIC8q
IE1JTUVUeXBlUmVnaXN0cnlNYWMubW0gKi87IH07CiAJCUJDN0Y0NEE4MEI5RTMyNEUwMEE5RDA4
MSAvKiBJbWFnZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzdGNDRBNzBCOUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDN0ZBNjIw
MEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3RkE2MUUwRDFGMENCRDAwREIyMkE5IC8q
IER5bmFtaWNOb2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjIxMEQxRjBDQkQwMERCMjJBOSAv
KiBEeW5hbWljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDN0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAq
LzsgfTsKKwkJQkM3RkE2MkQwRDFGMEVGRjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTYyQjBEMUYw
RUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCAqLzsgfTsKKwkJQkM3RkE2MkUwRDFGMEVG
RjAwREIyMkE5IC8qIFN0YXRpY05vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDN0ZBNjJDMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNO
b2RlTGlzdC5jcHAgKi87IH07CisJCUJDN0ZBNjgxMEQxRjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rv
ck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzdGQTY3RjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5oICovOyB9Owor
CQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzdGQTY4MDBEMUYxNjc5
MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi87IH07CiAJCUJDODBDOTg3MENEMjk0
RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg1MENEMjk0RUUwMEEwQjdCMyAv
KiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCAqLzsgfTsKIAkJQkM4MEM5ODgwQ0QyOTRFRTAw
QTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODBDOTg2MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NU
aW1pbmdGdW5jdGlvblZhbHVlLmggKi87IH07CiAJCUJDODBDOThCMENEMjk1MDUwMEEwQjdCMyAv
KiBBbmltYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDODBDOTg5MENEMjk1MDUwMEEwQjdCMyAvKiBBbmltYXRpb25Db250
cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTYxMDgsNyArNjExMyw2IEBACiAJCUE4MTg3MjEzMDk3N0Qz
QzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hbWVOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4
NzIxNDA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250YWluZXJOb2RlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTUwOTc3RDNDMDAwNTgyNkQ5
IC8qIENoaWxkTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENo
aWxkTm9kZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTgxODcyMTYwOTc3
RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBOb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4
MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hp
bGROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hp
bGROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjI1LDYgKzc2
MjksMTIgQEAKIAkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbEJhci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxCYXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlEMDgxIC8qIElt
YWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlT2Jz
ZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MUUwRDFGMENCRDAw
REIyMkE5IC8qIER5bmFtaWNOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBEeW5hbWljTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQzdGQTYxRjBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER5bmFtaWNOb2RlTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQzdGQTYyQjBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9k
ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljTm9kZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3RkE2MkMwRDFGMEVGRjAwREIyMkE5
IC8qIFN0YXRpY05vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0YXRpY05vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM3
RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0b3JOb2RlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rvck5vZGVM
aXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MEM5ODUwQ0QyOTRFRTAw
QTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4NjBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5n
RnVuY3Rpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTVGlt
aW5nRnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgwQzk4
OTBDRDI5NTA1MDBBMEI3QjMgLyogQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE2Niw2ICsxMjE3Niw4IEBACiAJCQkJQTgxODVG
MzYwOTc2NTc2NTAwNTgyNkQ5IC8qIERPTUltcGxlbWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODE4
NUYzMzA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uaCAqLywKIAkJCQk5M0VF
QzFFOTA5QzI4Nzc3MDBDNTE1RDEgLyogRE9NSW1wbGVtZW50YXRpb24uaWRsICovLAorCQkJCUJD
N0ZBNjFFMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuY3BwICovLAorCQkJCUJD
N0ZBNjFGMEQxRjBDQkQwMERCMjJBOSAvKiBEeW5hbWljTm9kZUxpc3QuaCAqLywKIAkJCQk2NTUw
QjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJCTY1NTBCNjlB
MDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRBN0Y2MDlENTYz
MjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEyMjI0LDcgKzEyMjM2LDYgQEAKIAkJ
CQk4NTRGRTcyQTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCAqLywKIAkJCQk4
NTRGRTcyQjBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggKi8sCiAJCQkJMUE3NTBE
ODcwQTkwRTM5NDAwMEZGMjE1IC8qIE5vZGVJdGVyYXRvci5pZGwgKi8sCi0JCQkJQTgxODcyMTYw
OTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVMaXN0LmNwcCAqLywKIAkJCQlBODE4NzIxMDA5NzdEM0Mw
MDA1ODI2RDkgLyogTm9kZUxpc3QuaCAqLywKIAkJCQk4NUFDQTlGQTBBOUI2MzEwMDA2NzFFOTAg
LyogTm9kZUxpc3QuaWRsICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1RiAvKiBOb3Rh
dGlvbi5jcHAgKi8sCkBAIC0xMjI1Miw2ICsxMjI2MywxMCBAQAogCQkJCUQyM0NBNTQ4MEFCMEU5
ODMwMDUxMDhBNSAvKiBSYW5nZUV4Y2VwdGlvbi5pZGwgKi8sCiAJCQkJODUwMzFCMzUwQTQ0RUZD
NzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk4NTAzMUIz
NjBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCAqLywKKwkJCQlC
QzdGQTY4MDBEMUYxNjc5MDBEQjIyQTkgLyogU2VsZWN0b3JOb2RlTGlzdC5jcHAgKi8sCisJCQkJ
QkM3RkE2N0YwRDFGMTY3OTAwREIyMkE5IC8qIFNlbGVjdG9yTm9kZUxpc3QuaCAqLywKKwkJCQlC
QzdGQTYyQzBEMUYwRUZGMDBEQjIyQTkgLyogU3RhdGljTm9kZUxpc3QuY3BwICovLAorCQkJCUJD
N0ZBNjJCMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2RlTGlzdC5oICovLAogCQkJCUE4QzRB
N0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywKIAkJCQlBOEM0QTdF
QjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJCUFBNEMzQTc0MEIy
QjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovLApAQCAtMTQxMTgsNiArMTQxMzMs
OSBAQAogCQkJCTkzMzA5RTFFMDk5RTY0OTIwMDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0EzNzkxNTBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMzc5M0YwRDE2NDdFMDAwQjc5M0Q2IC8qIEpTTG9jYXRp
b24ubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyMTBEMUYwQ0JEMDBEQjIyQTkgLyog
RHluYW1pY05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzdGQTYyRDBEMUYwRUZGMDBE
QjIyQTkgLyogU3RhdGljTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDN0ZBNjgxMEQx
RjE2NzkwMERCMjJBOSAvKiBTZWxlY3Rvck5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1
Mzc3LDcgKzE1Mzk1LDYgQEAKIAkJCQk4NTRGRTczMDBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUZp
bHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczMjBBMjI5N0JFMDA1OEQ3QUQgLyog
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTRGRTczNDBBMjI5
N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4MTg3
MjIxMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEVBN0VCRjBBMTk0NUQwMDBBOEVGNUYgLyogTm90YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUEwRDU3MzYwQTVDNzdGRTAwN0VERDRDIC8qIE92ZXJmbG93RXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjI3NTM1NjQwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNTgzMiw2ICsxNTg0OSw5IEBACiAJCQkJOTMzMDlERjcw
OTlFNjQ5MjAwNTZFNTgxIC8qIG1hcmt1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUx
RDA5OUU2NDkyMDA1NkU1ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0EzNzkxNDBEMTYzRTU1MDBCNzkzRDYgLyogSlNMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCQzdGQTYyMDBEMUYwQ0JEMDBEQjIyQTkgLyogRHluYW1pY05vZGVMaXN0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUJDN0ZBNjJFMEQxRjBFRkYwMERCMjJBOSAvKiBTdGF0aWNOb2Rl
TGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCQzdGQTY4MjBEMUYxNjc5MDBEQjIyQTkgLyog
U2VsZWN0b3JOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmgJKHJldmlzaW9uIDI4OTc5KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTEgKzEyOSwxMSBAQCBjbGFzcyBTdHlsZWRFbGVtZW50
OwogIAogICAgICAgICBDU1NGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIHsgcmV0dXJuIG1f
Zm9udFNlbGVjdG9yLmdldCgpOyB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0KICAgICAgICAgLyogY2hl
Y2tzIGlmIGEgY29tcG91bmQgc2VsZWN0b3IgKHdoaWNoIGNhbiBjb25zaXN0IG9mIG11bHRpcGxl
IHNpbXBsZSBzZWxlY3RvcnMpCiAgICAgICAgICAgIG1hdGNoZXMgdGhlIGdpdmVuIEVsZW1lbnQg
Ki8KLSAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3Rvcik7Cisg
ICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciopOworCisgICAgcHJvdGVjdGVk
OgogICAgICAgICBlbnVtIFNlbGVjdG9yTWF0Y2ggeyBTZWxlY3Rvck1hdGNoZXM9MCwgU2VsZWN0
b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5fTsKICAgICAgICAgU2VsZWN0
b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCAqZSwg
Ym9vbCBpc0FuY2VzdG9yLCBib29sIGlzU3ViU2VsZWN0b3IpOwogCkBAIC0yNDIsNiArMjQyLDcg
QEAgY2xhc3MgU3R5bGVkRWxlbWVudDsKICNlbmRpZgogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBD
U1NSdWxlU2V0OworICAgICAgICBmcmllbmQgY2xhc3MgTm9kZTsKICAgICB9OwogCiAgICAgY2xh
c3MgQ1NTUnVsZURhdGEgewpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDI4OTc5
KQorKysgV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDggKzMwLDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChOb2RlKiBuLCBOb2RlTGlzdDo6Q2Fj
aGVzKiBpbmZvKQotICAgIDogTm9kZUxpc3QobiwgaW5mbywgZmFsc2UpCitDaGlsZE5vZGVMaXN0
OjpDaGlsZE5vZGVMaXN0KE5vZGUqIG4sIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKiBpbmZvKQor
ICAgIDogRHluYW1pY05vZGVMaXN0KG4sIGluZm8sIGZhbHNlKQogewogfQogCkluZGV4OiBXZWJD
b3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hpbGRO
b2RlTGlzdC5oCShyZXZpc2lvbiAyODk3OSkKKysrIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwxNiArMjAs
MTcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVm
IENoaWxkTm9kZUxpc3RfaAogI2RlZmluZSBDaGlsZE5vZGVMaXN0X2gKIAotI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQ2hpbGROb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBD
aGlsZE5vZGVMaXN0IDogcHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiBwdWJsaWM6Ci0gICAgQ2hp
bGROb2RlTGlzdChOb2RlKiwgTm9kZUxpc3Q6OkNhY2hlcyopOworICAgIENoaWxkTm9kZUxpc3Qo
Tm9kZSosIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzkpCisrKyBXZWJD
b3JlL2RvbS9DbGFzc05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNsYXNzTm9kZUxpc3Q6OkNsYXNzTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBOb2Rl
TGlzdDo6Q2FjaGVzKiBjYWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290Tm9kZSwgY2FjaGVzLCB0
cnVlKQorQ2xhc3NOb2RlTGlzdDo6Q2xhc3NOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBjb25zdCBTdHJpbmcmIGNsYXNzTmFtZXMsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKiBj
YWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcywgdHJ1ZSkKIHsK
ICAgICBtX2NsYXNzTmFtZXMucGFyc2VDbGFzc0F0dHJpYnV0ZShjbGFzc05hbWVzLCBtX3Jvb3RO
b2RlLT5kb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9D
bGFzc05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5o
CShyZXZpc2lvbiAyODk3OSkKKysrIFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDE1IEBACiAjZGVmaW5lIENsYXNzTm9kZUxpc3RfaAogCiAj
aW5jbHVkZSAiQ2xhc3NOYW1lcy5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAi
RHluYW1pY05vZGVMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFN0
cmluZzsKIAotICAgIGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworICAg
IGNsYXNzIENsYXNzTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIENsYXNzTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29u
c3QgU3RyaW5nJiBjbGFzc05hbWVzLCBOb2RlTGlzdDo6Q2FjaGVzKik7CisgICAgICAgIENsYXNz
Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05h
bWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcyopOwogCiAgICAgICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaWRsCShyZXZpc2lvbiAyODk3OSkKKysrIFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiwxMiBAQCBtb2R1
bGUgY29yZSB7CiAKICAgICAgICAgLy8gSFRNTCA1CiAgICAgICAgIE5vZGVMaXN0ICAgICAgICAg
ICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpbiBET01TdHJpbmcgdGFnbmFtZSk7CisKKyAgICAg
ICAgLy8gRG9jdW1lbnRTZWxlY3RvciAtIFNlbGVjdG9yIEFQSQorICAgICAgICBFbGVtZW50ICAg
ICAgICAgICAgIHF1ZXJ5U2VsZWN0b3IoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBzZWxlY3RvcnMpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKyAgICAgICAgTm9kZUxpc3QgICAgICAgICAgICBxdWVyeVNlbGVjdG9yQWxsKGluIFtD
b252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc2VsZWN0b3JzKQor
ICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgfTsKIAogfQpJbmRleDogV2Vi
Q29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAyODk3MikJKGZyb20gV2ViQ29yZS9kb20vTm9k
ZUxpc3QuY3BwOjI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBAQAorLyoqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitOb2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2Rl
PiByb290Tm9kZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCisgICAgOiBtX3Jvb3ROb2RlKHJv
b3ROb2RlKQorICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKKyAgICAsIG1fb3duc0NhY2hlcyh0
cnVlKQorICAgICwgbV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQorewor
ICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Cit9ICAgIAorCitOb2RlTGlz
dDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgTm9kZUxpc3Q6OkNhY2hlcyog
aW5mbywgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpCisgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2Rl
KQorICAgICwgbV9jYWNoZXMoaW5mbykKKyAgICAsIG1fb3duc0NhY2hlcyhmYWxzZSkKKyAgICAs
IG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0aW9ucykKK3sKKyAgICBtX3Jvb3RO
b2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6On5Ob2RlTGlz
dCgpCit7CisgICAgbV9yb290Tm9kZS0+dW5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIGlm
IChtX293bnNDYWNoZXMpCisgICAgICAgIGRlbGV0ZSBtX2NhY2hlczsKK30KKwordW5zaWduZWQg
Tm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKiBzdGFydCkgY29uc3QKK3sKKyAgICBpZiAo
IXN0YXJ0KQorICAgICAgICBzdGFydCA9IG1fcm9vdE5vZGUuZ2V0KCk7CisKKyAgICBpZiAobV9j
YWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBzdGFydCA9PSBtX3Jvb3ROb2RlKQorICAgICAg
ICByZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExlbmd0aDsKKworICAgIHVuc2lnbmVkIGxlbiA9IDA7
CisKKyAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAg
ICAgbGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChuKTsKKyAgICAgICAgfQorCisgICAgaWYgKHN0YXJ0
ID09IG1fcm9vdE5vZGUpIHsKKyAgICAgICAgbV9jYWNoZXMtPmNhY2hlZExlbmd0aCA9IGxlbjsK
KyAgICAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGxlbjsKK30KKworTm9kZSogTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJy
ZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA+PSAwKTsKKworICAgIGZvciAoTm9k
ZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShtX3Jvb3ROb2RlLmdldCgp
KSkgeworICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAo
bm9kZU1hdGNoZXMobikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOworICAgICAgICAg
ICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAg
ICAgICAgICAgIG1fY2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
bWFpbmluZ09mZnNldC0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5nIG5vZGUgaW4gdGhpcyBzdWJ0cmVlCit9CisKK05vZGUq
IE5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVk
IG9mZnNldCwgaW50IHJlbWFpbmluZ09mZnNldCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVtYWlu
aW5nT2Zmc2V0IDwgMCk7CisgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2
ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgeworICAgICAgICBpZiAobi0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgeworICAgICAgICAgICAgICAgICAgICBt
X2NhY2hlcy0+bGFzdEl0ZW0gPSBuOworICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+bGFz
dEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5pc0l0
ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCsrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7IC8vIG5vIG1hdGNoaW5n
IG5vZGUgaW4gdGhpcyBzdWJ0cmVlCit9CisKK05vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVt
KHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQpIGNvbnN0Cit7CisgICAgaW50IHJlbWFpbmlu
Z09mZnNldCA9IG9mZnNldDsKKyAgICBpZiAoIXN0YXJ0KSB7CisgICAgICAgIHN0YXJ0ID0gbV9y
b290Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAobV9jYWNoZXMtPmlzSXRlbUNhY2hl
VmFsaWQpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5sYXN0SXRlbTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0IHx8IG1f
Y2FjaGVzLT5sYXN0SXRlbU9mZnNldCAtIG9mZnNldCA8IG9mZnNldCkgeworICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOworICAgICAgICAgICAgICAgIHJlbWFpbmlu
Z09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVtYWluaW5nT2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0
dXJuIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZz
ZXQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KHN0
YXJ0LCBvZmZzZXQsIHJlbWFpbmluZ09mZnNldCk7Cit9CisKK05vZGUqIE5vZGVMaXN0OjppdGVt
V2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0Cit7CisgICAgaWYg
KG1fcm9vdE5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgbV9yb290Tm9kZS0+aW5Eb2N1bWVudCgp
KSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX3Jvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZChlbGVtZW50SWQpOworCisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZU1hdGNoZXMo
bm9kZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBmb3IgKE5vZGUqIHAgPSBu
b2RlLT5wYXJlbnROb2RlKCk7IHA7IHAgPSBwLT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICBp
ZiAocCA9PSBtX3Jvb3ROb2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworCisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHVuc2lnbmVkIGwgPSBsZW5ndGgoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbDsgaSsrKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBp
dGVtKGkpOworICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+Z2V0SURBdHRyaWJ1dGUoKSA9PSBlbGVtZW50SWQpCisgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBOb2Rl
TGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQoreworICAgIG1fY2FjaGVzLT5yZXNldCgp
OworfQorCisKK05vZGVMaXN0OjpDYWNoZXM6OkNhY2hlcygpCisgICAgOiBsYXN0SXRlbSgwKQor
ICAgICwgaXNMZW5ndGhDYWNoZVZhbGlkKGZhbHNlKQorICAgICwgaXNJdGVtQ2FjaGVWYWxpZChm
YWxzZSkKK3sKK30KKwordm9pZCBOb2RlTGlzdDo6Q2FjaGVzOjpyZXNldCgpCit7CisgICAgbGFz
dEl0ZW0gPSAwOworICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZhbHNlOworICAgIGlzSXRlbUNh
Y2hlVmFsaWQgPSBmYWxzZTsgICAgIAorfQorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9EeW5hbWlj
Tm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0R5bmFtaWNOb2RlTGlzdC5j
cHAJKHJldmlzaW9uIDI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjMsMzkgKzIxLDM5IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0LmgiCiAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1O
b2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgYm9vbCBuZWVkc05v
dGlmaWNhdGlvbnMpCitEeW5hbWljTm9kZUxpc3Q6OkR5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRy
PE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKICAgICA6IG1fcm9vdE5v
ZGUocm9vdE5vZGUpCiAgICAgLCBtX2NhY2hlcyhuZXcgQ2FjaGVzKQogICAgICwgbV9vd25zQ2Fj
aGVzKHRydWUpCiAgICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMp
CiB7Ci0gICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBtX3Jvb3RO
b2RlLT5yZWdpc3RlckR5bmFtaWNOb2RlTGlzdCh0aGlzKTsKIH0gICAgCiAKLU5vZGVMaXN0OjpO
b2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBOb2RlTGlzdDo6Q2FjaGVzKiBpbmZv
LCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKK0R5bmFtaWNOb2RlTGlzdDo6RHluYW1pY05vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzKiBp
bmZvLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucykKICAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUp
CiAgICAgLCBtX2NhY2hlcyhpbmZvKQogICAgICwgbV9vd25zQ2FjaGVzKGZhbHNlKQogICAgICwg
bV9uZWVkc05vdGlmaWNhdGlvbnMobmVlZHNOb3RpZmljYXRpb25zKQogewotICAgIG1fcm9vdE5v
ZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJEeW5h
bWljTm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCi1Ob2RlTGlzdDo6fk5vZGVMaXN0KCkKK0R5bmFt
aWNOb2RlTGlzdDo6fkR5bmFtaWNOb2RlTGlzdCgpCiB7Ci0gICAgbV9yb290Tm9kZS0+dW5yZWdp
c3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJEeW5hbWljTm9k
ZUxpc3QodGhpcyk7CiAgICAgaWYgKG1fb3duc0NhY2hlcykKICAgICAgICAgZGVsZXRlIG1fY2Fj
aGVzOwogfQogCi11bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0
KSBjb25zdAordW5zaWduZWQgRHluYW1pY05vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSog
c3RhcnQpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgc3RhcnQgPSBtX3Jvb3RO
b2RlLmdldCgpOwpAQCAtODAsNyArNzgsNyBAQCB1bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJzaXZl
TGVuZ3RoKE5vZGUqCiAgICAgcmV0dXJuIGxlbjsKIH0KIAotTm9kZSogTm9kZUxpc3Q6Oml0ZW1G
b3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1h
aW5pbmdPZmZzZXQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zy
b21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZz
ZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA+PSAwKTsKIApAQCAtMTAx
LDcgKzk5LDcgQEAgTm9kZSogTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KAogICAg
IHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQogfQogCi1Ob2Rl
KiBOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25l
ZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0CitOb2RlKiBEeW5hbWljTm9kZUxp
c3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0
LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdAogewogICAgIEFTU0VSVChyZW1haW5pbmdPZmZz
ZXQgPCAwKTsKICAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7CkBAIC0xMjEsNyArMTE5LDcgQEAgTm9kZSog
Tm9kZUxpc3Q6Oml0ZW1CYWNrd2FyZHNGcm9tQ3VycmVudAogICAgIHJldHVybiAwOyAvLyBubyBt
YXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQogfQogCi1Ob2RlKiBOb2RlTGlzdDo6cmVjdXJz
aXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAorTm9kZSogRHluYW1p
Y05vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQpIGNv
bnN0CiB7CiAgICAgaW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKICAgICBpZiAoIXN0YXJ0
KSB7CkBAIC0xNDIsNyArMTQwLDcgQEAgTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5z
aWduZWQgbwogICAgICAgICByZXR1cm4gaXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9m
ZnNldCwgcmVtYWluaW5nT2Zmc2V0KTsKIH0KIAotTm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRoTmFt
ZShjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKK05vZGUqIER5bmFtaWNOb2Rl
TGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAog
ewogICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmlu
RG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKQEAgLTE2NywyMCArMTY1LDIwIEBAIE5vZGUq
IE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWkKICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBOb2RlTGlzdDo6cm9vdE5vZGVDaGlsZHJlbkNoYW5nZWQoKQordm9pZCBEeW5hbWljTm9k
ZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKIHsKICAgICBtX2NhY2hlcy0+cmVzZXQo
KTsKIH0KIAogCi1Ob2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQorRHluYW1pY05vZGVMaXN0OjpD
YWNoZXM6OkNhY2hlcygpCiAgICAgOiBsYXN0SXRlbSgwKQogICAgICwgaXNMZW5ndGhDYWNoZVZh
bGlkKGZhbHNlKQogICAgICwgaXNJdGVtQ2FjaGVWYWxpZChmYWxzZSkKIHsKIH0KIAotdm9pZCBO
b2RlTGlzdDo6Q2FjaGVzOjpyZXNldCgpCit2b2lkIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVzOjpy
ZXNldCgpCiB7CiAgICAgbGFzdEl0ZW0gPSAwOwogICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9IGZh
bHNlOwpJbmRleDogV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0LmgJKHJldmlzaW9uIDI4OTcyKQkoZnJvbSBXZWJD
b3JlL2RvbS9Ob2RlTGlzdC5oOjI4OTcyKQorKysgV2ViQ29yZS9kb20vRHluYW1pY05vZGVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBOb2RlTGlzdF9oCisjZGVmaW5l
IE5vZGVMaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQXRvbWljU3RyaW5nOworY2xhc3MgTm9kZTsKKworY2xhc3MgTm9kZUxpc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4geworcHVibGljOgorCisgICAgc3RydWN0IENh
Y2hlcyB7CisgICAgICAgIENhY2hlcygpOworICAgICAgICB2b2lkIHJlc2V0KCk7CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBjYWNoZWRMZW5ndGg7CisgICAgICAgIE5vZGUqIGxhc3RJdGVt
OworICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsKKyAgICAgICAgYm9vbCBpc0xlbmd0
aENhY2hlVmFsaWQgOiAxOworICAgICAgICBib29sIGlzSXRlbUNhY2hlVmFsaWQgOiAxOworICAg
IH07CisKKyAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRz
Tm90aWZpY2F0aW9ucyk7CisgICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwg
Q2FjaGVzKiwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOworICAgIHZpcnR1YWwgfk5vZGVMaXN0
KCk7CisKKyAgICBib29sIG5lZWRzTm90aWZpY2F0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNOb3RpZmljYXRpb25zOyB9CisKKyAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9y
IE5vZGVMaXN0CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7CisgICAgTm9kZSog
aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworCisgICAgLy8gT3RoZXIg
bWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNoaWxk
cmVuQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQo
KSB7fQorCitwcm90ZWN0ZWQ6CisgICAgLy8gaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5n
IGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVlCisgICAgdW5zaWduZWQgcmVjdXJzaXZlTGVuZ3Ro
KE5vZGUqIHN0YXJ0ID0gMCkgY29uc3Q7CisgICAgTm9kZSogcmVjdXJzaXZlSXRlbSAodW5zaWdu
ZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBub2Rl
TWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3QgPSAwOworCisgICAgUmVmUHRyPE5vZGU+IG1f
cm9vdE5vZGU7CisgICAgbXV0YWJsZSBDYWNoZXMqIG1fY2FjaGVzOworICAgIGJvb2wgbV9vd25z
Q2FjaGVzOworICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7CisKKyBwcml2YXRlOgorICAg
IE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZz
ZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0OworICAgIE5vZGUqIGl0ZW1CYWNrd2FyZHNG
cm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zm
c2V0KSBjb25zdDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EeW5hbWlj
Tm9kZUxpc3QuaAkocmV2aXNpb24gMjg5NzIpCisrKyBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMyw5ICsyMSwxMCBAQAogICoKICAqLwogCi0jaWZuZGVmIE5vZGVMaXN0X2gKLSNkZWZp
bmUgTm9kZUxpc3RfaAorI2lmbmRlZiBEeW5hbWljTm9kZUxpc3RfaAorI2RlZmluZSBEeW5hbWlj
Tm9kZUxpc3RfaAogCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgpAQCAtMzUsMTMgKzM0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF0b21pY1N0
cmluZzsKIGNsYXNzIE5vZGU7CiAKLWNsYXNzIE5vZGVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8
Tm9kZUxpc3Q+IHsKK2NsYXNzIER5bmFtaWNOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CiBw
dWJsaWM6Ci0KICAgICBzdHJ1Y3QgQ2FjaGVzIHsKICAgICAgICAgQ2FjaGVzKCk7CiAgICAgICAg
IHZvaWQgcmVzZXQoKTsKLSAgICAgICAgCisKICAgICAgICAgdW5zaWduZWQgY2FjaGVkTGVuZ3Ro
OwogICAgICAgICBOb2RlKiBsYXN0SXRlbTsKICAgICAgICAgdW5zaWduZWQgbGFzdEl0ZW1PZmZz
ZXQ7CkBAIC00OSw5ICs0Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0l0ZW1DYWNoZVZh
bGlkIDogMTsKICAgICB9OwogCi0gICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9k
ZSwgYm9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwotICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKTsKLSAgICB2aXJ0
dWFsIH5Ob2RlTGlzdCgpOworICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0aW9ucyk7CisgICAgRHluYW1pY05vZGVMaXN0KFBh
c3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyosIGJvb2wgbmVlZHNOb3RpZmljYXRpb25z
KTsKKyAgICB2aXJ0dWFsIH5EeW5hbWljTm9kZUxpc3QoKTsKIAogICAgIGJvb2wgbmVlZHNOb3Rp
ZmljYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc05vdGlmaWNhdGlvbnM7IH0KIApAQCAt
NjIsNyArNjAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBv
ZiBET00pCiAgICAgdmlydHVhbCB2b2lkIHJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHt9CisgICAgdmlydHVhbCB2
b2lkIHJvb3ROb2RlQXR0cmlidXRlQ2hhbmdlZCgpIHsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgLy8g
aGVscGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFsbCBFbGVtZW50SW1wbHMgaW4gYSB0cmVl
CkBAIC03NSwxMSArNzMsMTEgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9vd25zQ2FjaGVzOwog
ICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7CiAKLSBwcml2YXRlOgorcHJpdmF0ZToKICAg
ICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zm
c2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25zdDsKICAgICBOb2RlKiBpdGVtQmFja3dhcmRz
RnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmluZ09m
ZnNldCkgY29uc3Q7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZgorI2VuZGlmIC8vIER5bmFtaWNOb2RlTGlzdF9oCkluZGV4OiBXZWJDb3JlL2Rv
bS9FbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkocmV2
aXNpb24gMjg5NzkpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDYgKzEwNSwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIC8vIEhUTUwgNQogICAg
ICAgICBOb2RlTGlzdCBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGluIERPTVN0cmluZyBuYW1lKTsK
IAorICAgICAgICAvLyBFbGVtZW50U2VsZWN0b3IgLSBTZWxlY3RvciBBUEkKKyAgICAgICAgRWxl
bWVudCAgICAgICAgICAgICBxdWVyeVNlbGVjdG9yKGluIFtDb252ZXJ0VW5kZWZpbmVkT3JOdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgc2VsZWN0b3JzKQorICAgICAgICAgICAgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGVMaXN0ICAgICAgICAgICAgcXVlcnlTZWxlY3RvckFs
bChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHNlbGVj
dG9ycykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworCiAjaWYgZGVmaW5lZChM
QU5HVUFHRV9PQkpFQ1RJVkVfQykKICAgICAgICAgLy8gT2JqZWN0aXZlLUMgZXh0ZW5zaW9ucwog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGlubmVyVGV4dDsKSW5kZXg6IFdl
YkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFt
ZU5vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzkpCisrKyBXZWJDb3JlL2RvbS9OYW1lTm9kZUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotTmFtZU5vZGVMaXN0OjpOYW1lTm9k
ZUxpc3QoTm9kZSogcm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOb2RlTGlzdDo6Q2FjaGVzKiBj
YWNoZXMpCi0gICAgOiBOb2RlTGlzdChyb290LCBjYWNoZXMsIHRydWUpCitOYW1lTm9kZUxpc3Q6
Ok5hbWVOb2RlTGlzdChOb2RlKiByb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIER5bmFtaWNOb2Rl
TGlzdDo6Q2FjaGVzKiBjYWNoZXMpCisgICAgOiBEeW5hbWljTm9kZUxpc3Qocm9vdCwgY2FjaGVz
LCB0cnVlKQogICAgICwgbV9ub2RlTmFtZShuYW1lKQogewogfQpJbmRleDogV2ViQ29yZS9kb20v
TmFtZU5vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJ
KHJldmlzaW9uIDI4OTc5KQorKysgV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDEwICsyMCwxMSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CiAgKgogICovCisKICNpZm5kZWYgTmFtZU5vZGVMaXN0X2gKICNkZWZpbmUgTmFtZU5vZGVMaXN0
X2gKIAotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRHluYW1pY05vZGVMaXN0Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzEsOSArMzIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvKioKICAqIE5vZGVMaXN0IHdoaWNo
IGxpc3RzIGFsbCBOb2RlcyBpbiBhIEVsZW1lbnQgd2l0aCBhIGdpdmVuICJuYW1lPSIgdGFnCiAg
Ki8KLWNsYXNzIE5hbWVOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlzdCB7CitjbGFzcyBOYW1lTm9k
ZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBOYW1lTm9kZUxp
c3QoTm9kZSogcm9vdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOb2RlTGlzdDo6Q2FjaGVzKik7Cisg
ICAgTmFtZU5vZGVMaXN0KE5vZGUqIHJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgRHluYW1pY05v
ZGVMaXN0OjpDYWNoZXMqKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAg
cGFyZW50IGNsYXNzZXMKIApAQCAtNDIsNyArNDMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBPdGhl
ciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHJvb3RO
b2RlQXR0cmlidXRlQ2hhbmdlZCgpIHsgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2Vk
KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcm9vdE5vZGVBdHRyaWJ1dGVDaGFuZ2VkKCkgeyBEeW5h
bWljTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7IH0KIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3Q7CkluZGV4
OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNw
cAkocmV2aXNpb24gMjg5NzkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTEgKzI0LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTm9k
ZS5oIgogCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisj
aW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgor
I2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNs
dWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaGls
ZE5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiQ2xhc3NOb2RlTGlzdC5oIgogI2luY2x1ZGUgIkRPTUlt
cGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEeW5hbWlj
Tm9kZUxpc3QuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0zOSw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiTmFt
ZU5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiU2VsZWN0b3JOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlRleHQu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTQ5
LDE2ICs1OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLXR5cGVkZWYgSGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OwordHlwZWRl
ZiBIYXNoU2V0PER5bmFtaWNOb2RlTGlzdCo+IE5vZGVMaXN0U2V0Owogc3RydWN0IE5vZGVMaXN0
c05vZGVEYXRhIHsKICAgICBOb2RlTGlzdFNldCBtX2xpc3RzVG9Ob3RpZnk7Ci0gICAgTm9kZUxp
c3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxpc3RDYWNoZXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIE5v
ZGVMaXN0OjpDYWNoZXM+IG1fY2xhc3NOb2RlTGlzdENhY2hlczsKLSAgICBIYXNoTWFwPFN0cmlu
ZywgTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNoZXM7CisgICAgRHluYW1pY05v
ZGVMaXN0OjpDYWNoZXMgbV9jaGlsZE5vZGVMaXN0Q2FjaGVzOworICAgIEhhc2hNYXA8U3RyaW5n
LCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9jbGFzc05vZGVMaXN0Q2FjaGVzOworICAgIEhh
c2hNYXA8U3RyaW5nLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcz4gbV9uYW1lTm9kZUxpc3RDYWNo
ZXM7CiB9OwogCiAvLyBOb2RlTGlzdCB0aGF0IGxpbWl0cyB0byBhIHBhcnRpY3VsYXIgdGFnLgot
Y2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworY2xhc3MgVGFnTm9kZUxpc3Qg
OiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKIHB1YmxpYzoKICAgICBUYWdOb2RlTGlzdChQYXNz
UmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOwogCkBAIC03Myw3ICs4Miw3IEBAIHByaXZh
dGU6CiB9OwogCiBpbmxpbmUgVGFnTm9kZUxpc3Q6OlRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSkKLSAgICA6IE5vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQorICAg
IDogRHluYW1pY05vZGVMaXN0KHJvb3ROb2RlLCB0cnVlKQogICAgICwgbV9uYW1lc3BhY2VVUkko
bmFtZXNwYWNlVVJJKQogICAgICwgbV9sb2NhbE5hbWUobG9jYWxOYW1lKQogewpAQCAtNDQxLDcg
KzQ1MCw3IEBAIHVuc2lnbmVkIE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiAgICAgcmV0dXJuIGNv
dW50OwogfQogCi12b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2
b2lkIE5vZGU6OnJlZ2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCogbGlzdCkK
IHsKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQobmV3IE5v
ZGVMaXN0c05vZGVEYXRhKTsKQEAgLTQ1NCw3ICs0NjMsNyBAQCB2b2lkIE5vZGU6OnJlZ2lzdGVy
Tm9kZUxpc3QoTm9kZUxpc3QqIGxpCiAgICAgbV9kb2N1bWVudC0+YWRkTm9kZUxpc3QoKTsKIH0K
IAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCit2b2lkIE5v
ZGU6OnVucmVnaXN0ZXJEeW5hbWljTm9kZUxpc3QoRHluYW1pY05vZGVMaXN0KiBsaXN0KQogewog
ICAgIEFTU0VSVChtX25vZGVMaXN0cyk7CiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlTm9kZUxpc3Qo
KTsKQEAgLTEyMTUsNyArMTIyNCw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OmdldEVs
ZW1lbnRzQnkKICAgICBpZiAoIW1fbm9kZUxpc3RzKQogICAgICAgICBtX25vZGVMaXN0cy5zZXQo
bmV3IE5vZGVMaXN0c05vZGVEYXRhKTsKIAotICAgIHJldHVybiBuZXcgTmFtZU5vZGVMaXN0KHRo
aXMsIGVsZW1lbnROYW1lLCAmbV9ub2RlTGlzdHMtPm1fbmFtZU5vZGVMaXN0Q2FjaGVzLmFkZChl
bGVtZW50TmFtZSwgTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vjb25kKTsKKyAgICByZXR1
cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgJm1fbm9kZUxpc3RzLT5tX25h
bWVOb2RlTGlzdENhY2hlcy5hZGQoZWxlbWVudE5hbWUsIER5bmFtaWNOb2RlTGlzdDo6Q2FjaGVz
KCkpLmZpcnN0LT5zZWNvbmQpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcykKQEAgLTEyMjMsNyAr
MTIzMiw2MCBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5CiAgICAg
aWYgKCFtX25vZGVMaXN0cykKICAgICAgICAgbV9ub2RlTGlzdHMuc2V0KG5ldyBOb2RlTGlzdHNO
b2RlRGF0YSk7CiAKLSAgICByZXR1cm4gbmV3IENsYXNzTm9kZUxpc3QodGhpcywgY2xhc3NOYW1l
cywgJm1fbm9kZUxpc3RzLT5tX2NsYXNzTm9kZUxpc3RDYWNoZXMuYWRkKGNsYXNzTmFtZXMsIE5v
ZGVMaXN0OjpDYWNoZXMoKSkuZmlyc3QtPnNlY29uZCk7CisgICAgcmV0dXJuIG5ldyBDbGFzc05v
ZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsICZtX25vZGVMaXN0cy0+bV9jbGFzc05vZGVMaXN0Q2Fj
aGVzLmFkZChjbGFzc05hbWVzLCBEeW5hbWljTm9kZUxpc3Q6OkNhY2hlcygpKS5maXJzdC0+c2Vj
b25kKTsKK30KKworUGFzc1JlZlB0cjxFbGVtZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNvbnN0
IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZihzZWxlY3Rv
cnMuaXNOdWxsKCkgfHwgc2VsZWN0b3JzLmlzRW1wdHkoKSkKKyAgICB7CisgICAgICAgIGVjID0g
U1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENTU1N0eWxlU2hlZXQg
dGVtcFN0eWxlU2hlZXQoZG9jdW1lbnQoKSk7CisgICAgQ1NTUGFyc2VyIHAodHJ1ZSk7CisgICAg
UmVmUHRyPENTU1J1bGU+IHJ1bGUgPSBwLnBhcnNlUnVsZSgmdGVtcFN0eWxlU2hlZXQsIHNlbGVj
dG9ycyArICJ7fSIpOworICAgIGlmICghcnVsZSB8fCAhcnVsZS0+aXNTdHlsZVJ1bGUoKSkgewor
ICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVj
dG9yKCk7CisgICAgQ1NTU2VsZWN0b3IqIHF1ZXJ5U2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDU1NT
dHlsZVJ1bGUqPihydWxlLmdldCgpKS0+c2VsZWN0b3IoKTsKKyAgICAKKyAgICAvLyBGSVhNRTog
V2UgY2FuIHNwZWVkIHRoaXMgdXAgYnkgaW1wbGVtZW50aW5nIGNhY2hpbmcgc2ltaWxhciB0byB0
aGUgb25lIHVzZSBieSBnZXRFbGVtZW50QnlJZAorICAgIGZvciAoTm9kZSAqbiA9IHRyYXZlcnNl
TmV4dE5vZGUoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBpZiAo
bi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pOworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+aW5pdEVs
ZW1lbnRBbmRQc2V1ZG9TdGF0ZShlbGVtZW50KTsKKyAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yID0gcXVlcnlTZWxlY3Rvcjsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0
b3ItPm5leHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHlsZVNlbGVjdG9yLT5jaGVja1Nl
bGVjdG9yKHNlbGVjdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisK
K1Bhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmKHNlbGVjdG9ycy5pc051
bGwoKSB8fCBzZWxlY3RvcnMuaXNFbXB0eSgpKQorICAgIHsKKyAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1NTU3R5bGVTaGVldCB0ZW1wU3R5
bGVTaGVldChkb2N1bWVudCgpKTsKKyAgICBDU1NQYXJzZXIgcCh0cnVlKTsKKyAgICBSZWZQdHI8
Q1NTUnVsZT4gcnVsZSA9IHAucGFyc2VSdWxlKCZ0ZW1wU3R5bGVTaGVldCwgc2VsZWN0b3JzICsg
Int9Iik7CisgICAgaWYgKCFydWxlIHx8ICFydWxlLT5pc1N0eWxlUnVsZSgpKSB7CisgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIFNl
bGVjdG9yTm9kZUxpc3QqIHJlc3VsdExpc3QgPSBuZXcgU2VsZWN0b3JOb2RlTGlzdCh0aGlzLCBz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlLmdldCgpKS0+c2VsZWN0b3IoKSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0TGlzdDsKIH0KIAogRG9jdW1lbnQgKk5vZGU6Om93bmVyRG9jdW1lbnQo
KSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gMjg5NzkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXRv
bWljU3RyaW5nOwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERvY3VtZW50OworY2xhc3Mg
RHluYW1pY05vZGVMaXN0OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEV2ZW50OwogY2xhc3MgRXZl
bnRMaXN0ZW5lcjsKQEAgLTQ0Miw4ICs0NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93VHJl
ZUFuZE1hcmsoY29uc3QgTm9kZSogbWFya2VkTm9kZTEsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVs
MSwgY29uc3QgTm9kZSogbWFya2VkTm9kZTIgPSAwLCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDIg
PSAwKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3Rlck5vZGVMaXN0KE5vZGVMaXN0
Kik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3QqKTsKKyAgICB2b2lkIHJl
Z2lzdGVyRHluYW1pY05vZGVMaXN0KER5bmFtaWNOb2RlTGlzdCopOworICAgIHZvaWQgdW5yZWdp
c3RlckR5bmFtaWNOb2RlTGlzdChEeW5hbWljTm9kZUxpc3QqKTsKICAgICB2b2lkIG5vdGlmeU5v
ZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5TG9jYWxOb2RlTGlzdHND
aGlsZHJlbkNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeU5vZGVMaXN0c0F0dHJpYnV0ZUNoYW5n
ZWQoKTsKQEAgLTQ1MSwxMCArNDUyLDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBQYXNzUmVmUHRy
PE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IFN0cmluZyYgbmFt
ZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSk7Ci0KICAgICBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiBnZXRFbGVtZW50c0J5TmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKTsKICAg
ICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0IFN0cmlu
ZyYgY2xhc3NOYW1lcyk7CiAKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5U2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKKy8vICAgIFBhc3NSZWZQ
dHI8RWxlbWVudD4gcXVlcnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgTlNSZXNv
bHZlciwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5U2Vs
ZWN0b3JBbGwoY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIEV4Y2VwdGlvbkNvZGUmKTsKKy8vICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcnMsIE5TUmVzb2x2ZXIsIEV4Y2VwdGlvbkNvZGUmKTsKKwogcHJpdmF0ZTogLy8gbWVtYmVy
cwogICAgIERvY1B0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKICAgICBOb2RlKiBtX3ByZXZpb3Vz
OwpJbmRleDogV2ViQ29yZS9kb20vTm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjg5NzkpCisrKyBXZWJDb3JlL2RvbS9Ob2RlTGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTkwICswLDAgQEAKLS8qKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJOb2RlTGlzdC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVt
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NS
ZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQotICAgIDogbV9y
b290Tm9kZShyb290Tm9kZSkKLSAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCi0gICAgLCBtX293
bnNDYWNoZXModHJ1ZSkKLSAgICAsIG1fbmVlZHNOb3RpZmljYXRpb25zKG5lZWRzTm90aWZpY2F0
aW9ucykKLXsKLSAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOwotfSAgICAK
LQotTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0
OjpDYWNoZXMqIGluZm8sIGJvb2wgbmVlZHNOb3RpZmljYXRpb25zKQotICAgIDogbV9yb290Tm9k
ZShyb290Tm9kZSkKLSAgICAsIG1fY2FjaGVzKGluZm8pCi0gICAgLCBtX293bnNDYWNoZXMoZmFs
c2UpCi0gICAgLCBtX25lZWRzTm90aWZpY2F0aW9ucyhuZWVkc05vdGlmaWNhdGlvbnMpCi17Ci0g
ICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKLX0gICAgCi0KLU5vZGVMaXN0
Ojp+Tm9kZUxpc3QoKQotewotICAgIG1fcm9vdE5vZGUtPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlz
KTsKLSAgICBpZiAobV9vd25zQ2FjaGVzKQotICAgICAgICBkZWxldGUgbV9jYWNoZXM7Ci19Ci0K
LXVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSogc3RhcnQpIGNvbnN0Ci17
Ci0gICAgaWYgKCFzdGFydCkKLSAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgpOwotCi0g
ICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gbV9yb290Tm9k
ZSkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7Ci0KLSAgICB1bnNpZ25l
ZCBsZW4gPSAwOwotCi0gICAgZm9yIChOb2RlKiBuID0gc3RhcnQtPmZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsK
LSAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKLSAgICAgICAgICAgICAgICBsZW4rKzsK
LSAgICAgICAgICAgIGxlbiArPSByZWN1cnNpdmVMZW5ndGgobik7Ci0gICAgICAgIH0KLQotICAg
IGlmIChzdGFydCA9PSBtX3Jvb3ROb2RlKSB7Ci0gICAgICAgIG1fY2FjaGVzLT5jYWNoZWRMZW5n
dGggPSBsZW47Ci0gICAgICAgIG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgPSB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBsZW47Ci19Ci0KLU5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2Fy
ZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5n
T2Zmc2V0KSBjb25zdAotewotICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7Ci0KLSAg
ICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290
Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5p
bmdPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsK
LSAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0Owot
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZW1haW5pbmdPZmZzZXQtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAwOyAvLyBubyBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQot
fQotCi1Ob2RlKiBOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0
LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKHJlbWFpbmluZ09mZnNldCA8IDApOwotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBu
ID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKLSAgICAgICAg
aWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4p
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsKLSAgICAgICAgICAgICAgICAgICAgbV9j
YWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBtX2Nh
Y2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQr
KzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOyAvLyBu
byBtYXRjaGluZyBub2RlIGluIHRoaXMgc3VidHJlZQotfQotCi1Ob2RlKiBOb2RlTGlzdDo6cmVj
dXJzaXZlSXRlbSh1bnNpZ25lZCBvZmZzZXQsIE5vZGUqIHN0YXJ0KSBjb25zdAotewotICAgIGlu
dCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgaWYgKCFzdGFydCkgewotICAgICAgICBz
dGFydCA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKG1fY2FjaGVzLT5p
c0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2FjaGVzLT5s
YXN0SXRlbU9mZnNldCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+bGFzdEl0
ZW07Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0SXRlbU9m
ZnNldCB8fCBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKLSAg
ICAgICAgICAgICAgICBzdGFydCA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKLSAgICAgICAgICAgICAg
ICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlbWFpbmluZ09mZnNldCA8IDApCi0g
ICAgICAgIHJldHVybiBpdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQoc3RhcnQsIG9mZnNldCwgcmVt
YWluaW5nT2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBpdGVtRm9yd2FyZHNGcm9t
Q3VycmVudChzdGFydCwgb2Zmc2V0LCByZW1haW5pbmdPZmZzZXQpOwotfQotCi1Ob2RlKiBOb2Rl
TGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAot
ewotICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmlu
RG9jdW1lbnQoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKLQotICAgICAgICBpZiAoIW5vZGUgfHwgIW5v
ZGVNYXRjaGVzKG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgZm9yIChO
b2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKQotICAg
ICAgICAgICAgaWYgKHAgPT0gbV9yb290Tm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBsID0gbGVuZ3Ro
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBOb2Rl
KiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldElEQXR0cmlidXRlKCkgPT0gZWxlbWVudElk
KQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKLXsKLSAgICBtX2NhY2hl
cy0+cmVzZXQoKTsKLX0KLQotCi1Ob2RlTGlzdDo6Q2FjaGVzOjpDYWNoZXMoKQotICAgIDogbGFz
dEl0ZW0oMCkKLSAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSkKLSAgICAsIGlzSXRlbUNh
Y2hlVmFsaWQoZmFsc2UpCi17Ci19Ci0KLXZvaWQgTm9kZUxpc3Q6OkNhY2hlczo6cmVzZXQoKQot
ewotICAgIGxhc3RJdGVtID0gMDsKLSAgICBpc0xlbmd0aENhY2hlVmFsaWQgPSBmYWxzZTsKLSAg
ICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7ICAgICAKLX0KLQotfQpJbmRleDogV2ViQ29yZS9k
b20vTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCShyZXZp
c2lvbiAyODk3OSkKKysrIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDU4ICsyOCwyMyBAQAogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBBdG9taWNTdHJpbmc7Ci1jbGFzcyBOb2RlOworICAgIGNsYXNzIEF0
b21pY1N0cmluZzsKKyAgICBjbGFzcyBOb2RlOwogCi1jbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPE5vZGVMaXN0PiB7Ci1wdWJsaWM6Ci0KLSAgICBzdHJ1Y3QgQ2FjaGVzIHsKLSAg
ICAgICAgQ2FjaGVzKCk7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgCi0gICAgICAg
IHVuc2lnbmVkIGNhY2hlZExlbmd0aDsKLSAgICAgICAgTm9kZSogbGFzdEl0ZW07Ci0gICAgICAg
IHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwotICAgICAgICBib29sIGlzTGVuZ3RoQ2FjaGVWYWxp
ZCA6IDE7Ci0gICAgICAgIGJvb2wgaXNJdGVtQ2FjaGVWYWxpZCA6IDE7CisgICAgY2xhc3MgTm9k
ZUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxOb2RlTGlzdD4geworICAgIHB1YmxpYzoKKyAgICAg
ICAgTm9kZUxpc3QoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+Tm9kZUxpc3QoKSB7IH0KKworICAg
ICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0CisgICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIE5vZGUq
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBOb2RlKiBp
dGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3QgPSAwOwogICAgIH07CiAKLSAg
ICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBib29sIG5lZWRzTm90aWZpY2F0
aW9ucyk7Ci0gICAgTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ2FjaGVzKiwg
Ym9vbCBuZWVkc05vdGlmaWNhdGlvbnMpOwotICAgIHZpcnR1YWwgfk5vZGVMaXN0KCk7Ci0KLSAg
ICBib29sIG5lZWRzTm90aWZpY2F0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNOb3RpZmlj
YXRpb25zOyB9Ci0KLSAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGVMaXN0
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBO
b2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCA9IDA7Ci0gICAgTm9kZSogaXRlbVdpdGhO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAo
bm90IHBhcnQgb2YgRE9NKQotICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUNoaWxkcmVuQ2hhbmdl
ZCgpOwotICAgIHZpcnR1YWwgdm9pZCByb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKSB7fQotCi1w
cm90ZWN0ZWQ6Ci0gICAgLy8gaGVscGVyIGZ1bmN0aW9ucyBmb3Igc2VhcmNoaW5nIGFsbCBFbGVt
ZW50SW1wbHMgaW4gYSB0cmVlCi0gICAgdW5zaWduZWQgcmVjdXJzaXZlTGVuZ3RoKE5vZGUqIHN0
YXJ0ID0gMCkgY29uc3Q7Ci0gICAgTm9kZSogcmVjdXJzaXZlSXRlbSAodW5zaWduZWQgb2Zmc2V0
LCBOb2RlKiBzdGFydCA9IDApIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhO
b2RlKiB0ZXN0Tm9kZSkgY29uc3QgPSAwOwotCi0gICAgUmVmUHRyPE5vZGU+IG1fcm9vdE5vZGU7
Ci0gICAgbXV0YWJsZSBDYWNoZXMqIG1fY2FjaGVzOwotICAgIGJvb2wgbV9vd25zQ2FjaGVzOwot
ICAgIGJvb2wgbV9uZWVkc05vdGlmaWNhdGlvbnM7Ci0KLSBwcml2YXRlOgotICAgIE5vZGUqIGl0
ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCBy
ZW1haW5pbmdPZmZzZXQpIGNvbnN0OwotICAgIE5vZGUqIGl0ZW1CYWNrd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dDsKLX07Ci0KLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
CisjZW5kaWYgTm9kZUxpc3RfaApJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlbGVjdG9y
Tm9kZUxpc3QuaCIKKworI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5o
IgorI2luY2x1ZGUgIk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTZWxlY3Rvck5v
ZGVMaXN0OjpTZWxlY3Rvck5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENTU1Nl
bGVjdG9yKiBxdWVyeVNlbGVjdG9yKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJvb3RO
b2RlLT5kb2N1bWVudCgpOworICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IgPSBk
b2N1bWVudC0+c3R5bGVTZWxlY3RvcigpOworICAgIGZvciAoTm9kZSogbiA9IHJvb3ROb2RlLT50
cmF2ZXJzZU5leHROb2RlKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAg
ICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+
aW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOworICAg
ICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBxdWVyeVNlbGVjdG9yOyBzZWxl
Y3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHN0eWxlU2VsZWN0b3ItPmNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20v
U2VsZWN0b3JOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9k
ZUxpc3QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWxlY3Rvck5vZGVMaXN0X2gK
KyNkZWZpbmUgU2VsZWN0b3JOb2RlTGlzdF9oCisKKyNpbmNsdWRlICJTdGF0aWNOb2RlTGlzdC5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGNsYXNzIE5vZGU7CisgICAgY2xhc3MgQ1NTU2VsZWN0b3I7CisKKyAgICBjbGFzcyBTZWxlY3Rv
ck5vZGVMaXN0IDogcHVibGljIFN0YXRpY05vZGVMaXN0IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBTZWxlY3Rvck5vZGVMaXN0X2gKSW5kZXg6IFdlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGF0aWNOb2RlTGlz
dC5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1bnNpZ25lZCBTdGF0
aWNOb2RlTGlzdDo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2Rlcy5zaXplKCk7
Cit9CisKK05vZGUqIFN0YXRpY05vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAor
eworICAgIGlmIChpbmRleCA8IG1fbm9kZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9ub2Rl
c1tpbmRleF0uZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK05vZGUqIFN0YXRpY05vZGVMaXN0
OjppdGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0Cit7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IG1fbm9kZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZXNbaV0uZ2V0
KCk7CisgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpLT5nZXRJREF0dHJpYnV0ZSgpID09IGVsZW1lbnRJZCkKKyAgICAgICAgICAg
IHJldHVybiBub2RlOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2RvbS9TdGF0aWNOb2RlTGlzdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFN0YXRpY05vZGVMaXN0X2gKKyNkZWZpbmUgU3RhdGljTm9kZUxpc3RfaAorCisjaW5jbHVk
ZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOb2RlOworCisgICAg
Y2xhc3MgU3RhdGljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBidWlsZCB1cCB0aGUgVmVjdG9yIGluIHRo
ZWlyIGNvbnN0cnVjdG9yLgorICAgICAgICBTdGF0aWNOb2RlTGlzdCgpIHsgfQorICAgICAgICB2
aXJ0dWFsIH5TdGF0aWNOb2RlTGlzdCgpIHsgfQorCisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgTm9kZSogaXRlbVdpdGhOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYpIGNvbnN0OworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4gbV9ub2RlczsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBTdGF0aWNOb2RlTGlzdF9oCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyODk3OSkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDA3
LTEyLTI1ICBEYXZpZCBTbWl0aCAgPGNhdGZpc2gubWFuQGdtYWlsLmNvbT4gYW5kIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1ODcKKyAgICAgICAgSW1wbGVtZW50IHRoZSBtb3N0IHVzZWZ1bCBwYXJ0IG9mIHRo
ZSBXM0MgU2VsZWN0b3JzIEFQSS4KKworICAgICAgICAqIGZhc3QvZG9tL1NlbGVjdG9yQVBJOiBD
b3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9nZXRFbGVtZW50c0J5Q2xhc3NOYW1lLgor
ICAgICAgICAqIGZhc3QvZG9tL1NlbGVjdG9yQVBJL2R1bXBOb2RlTGlzdC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZmFzdC9kb20vU2VsZWN0b3JBUEkvZHVtcE5vZGVMaXN0Lmh0bWw6IE1vZGlm
aWVkIHRvIHRlc3QgcXVlcnlTZWxlY3RvciBhbmQgcXVlcnlTZWxlY3RvckFsbCBpbnN0ZWFkIG9m
IGdldEVsZW1lbnRzQnlDbGFzc05hbWUKKyAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OiBBZGRlZCBxdWVyeVNlbGVjdG9yIGFuZCBxdWVyeVNl
bGVjdG9yQWxsCisKIDIwMDctMTItMjMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIC0gdXBkYXRlZCByZXN1bHRzIChjaGFyYWN0ZXIgdXNlZCBmb3IgY29udHJvbHMg
Y2hhbmdlZCBpbiByMjg5NDUpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQ
SS8wMDEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1Nl
bGVjdG9yQVBJLzAwMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDAxLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMSArMCwwIEBACi1QQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQ
SS8wMDEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQ
SS8wMDEuaHRtbAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxl
Y3RvckFQSS8wMDEuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMCwwIEBACi08IWRvY3R5
cGUgaHRtbD4KLTxodG1sIGNsYXNzPSJhIj4KLSA8aGVhZD4KLSAgPHRpdGxlPmRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoKTogc2ltcGxlPC90aXRsZT4KLSAgPHNjcmlwdCBzcmM9InJl
c291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgotIDwvaGVhZD4KLSA8Ym9keSBjbGFzcz0iYSI+
Ci0gIDxwIGlkPSJyIj5GQUlMIChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0PiB0
KGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIlx0YVxuIiksIFtkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQsIGRvY3VtZW50LmJvZHldKSA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwMi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0
b3JBUEkvMDAyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi1QQVNT
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDIuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDIuaHRtbAkocmV2aXNp
b24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDIuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMyArMCwwIEBACi08IWRvY3R5cGUgaHRtbD4KLTxodG1sIGNs
YXNzPSJhCi1iIj4KLSA8aGVhZD4KLSAgPHRpdGxlPmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoKTogYWxzbyBzaW1wbGU8L3RpdGxlPgotICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Nv
bW1vbi5qcyI+PC9zY3JpcHQ+Ci0gPC9oZWFkPgotIDxib2R5IGNsYXNzPSJhCi0iPgotICA8cCBp
ZD0iciI+RkFJTCAoc2NyaXB0IGRpZCBub3QgcnVuKTwvcD4KLSAgPHNjcmlwdD4gdChkb2N1bWVu
dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhXG4iKSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCwgZG9jdW1lbnQuYm9keV0pIDwvc2NyaXB0PgotIDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwMy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDAzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLVBBU1MKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwMy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwMy5odG1sCShyZXZpc2lvbiAyODk3OSkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwMy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE1ICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWwgY2xhc3M9ImEiPgot
IDxoZWFkPgotICA8dGl0bGU+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpOiBjaGFu
Z2luZyBjbGFzc2VzPC90aXRsZT4KLSAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb21tb24uanMi
Pjwvc2NyaXB0PgotIDwvaGVhZD4KLSA8Ym9keSBjbGFzcz0iYSI+Ci0gIDxwIGlkPSJyIj5GQUlM
IChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0PgotICAgdmFyIGNvbGxlY3Rpb24g
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJhIikKLSAgIGRvY3VtZW50LmJvZHku
Y2xhc3NOYW1lID0gImIiCi0gICB0KGNvbGxlY3Rpb24sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnRdKQotICA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9TZWxlY3RvckFQSS8wMDQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwNC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI4
OTc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA0LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi1QQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9TZWxlY3RvckFQSS8wMDQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9TZWxlY3RvckFQSS8wMDQuaHRtbAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwx
NSArMCwwIEBACi08IWRvY3R5cGUgaHRtbD4KLTxodG1sIGNsYXNzPSJhIj4KLSA8aGVhZD4KLSAg
PHRpdGxlPmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoKTogY2hhbmdpbmcgY2xhc3Nl
czwvdGl0bGU+Ci0gIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4K
LSA8L2hlYWQ+Ci0gPGJvZHkgY2xhc3M9ImEiPgotICA8cCBpZD0iciI+RkFJTCAoc2NyaXB0IGRp
ZCBub3QgcnVuKTwvcD4KLSAgPHNjcmlwdD4KLSAgIHZhciBjb2xsZWN0aW9uID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYSIpCi0gICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSAr
PSAiXHRiIgotICAgdChjb2xsZWN0aW9uLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBkb2N1
bWVudC5ib2R5XSkKLSAgPC9zY3JpcHQ+Ci0gPC9ib2R5PgotPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA1LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwNS1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzAsMCBAQAotUEFTUwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA1Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA1Lmh0bWwJKHJldmlzaW9uIDI4OTc5KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA1Lmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTUgKzAsMCBAQAotPCFkb2N0eXBlIGh0bWw+Ci08aHRtbCBjbGFzcz0iYSI+Ci0gPGhl
YWQ+Ci0gIDx0aXRsZT5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCk6IGNoYW5naW5n
IGNsYXNzZXM8L3RpdGxlPgotICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9z
Y3JpcHQ+Ci0gPC9oZWFkPgotIDxib2R5IGNsYXNzPSJhIj4KLSAgPHAgaWQ9InIiPkZBSUwgKHNj
cmlwdCBkaWQgbm90IHJ1bik8L3A+Ci0gIDxzY3JpcHQ+Ci0gICB2YXIgY29sbGVjdGlvbiA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImEiKQotICAgZG9jdW1lbnQuYm9keS5yZW1v
dmVBdHRyaWJ1dGUoImNsYXNzIikKLSAgIHQoY29sbGVjdGlvbiwgW2RvY3VtZW50LmRvY3VtZW50
RWxlbWVudF0pCi0gIDwvc2NyaXB0PgotIDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwNi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA2LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDYtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzAsMCBAQAotUEFTUwotCi0KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwNi5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwNi5odG1sCShyZXZpc2lvbiAyODk3OSkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwNi5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE3ICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWw+Ci0gPGhlYWQ+Ci0g
IDx0aXRsZT5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCk6IGFkZGluZyBlbGVtZW50
IHdpdGggY2xhc3M8L3RpdGxlPgotICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1vbi5qcyI+
PC9zY3JpcHQ+Ci0gPC9oZWFkPgotIDxib2R5IGNsYXNzPSJhIj4KLSAgPHAgaWQ9InIiPkZBSUwg
KHNjcmlwdCBkaWQgbm90IHJ1bik8L3A+Ci0gIDxzY3JpcHQ+Ci0gICB2YXIgY29sbGVjdGlvbiA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImEiKSwKLSAgICAgICBlbGUgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJmb28iKTsKLSAgIGVsZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwg
ImEiKTsKLSAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlKQotICAgdChjb2xsZWN0aW9u
LCBbZG9jdW1lbnQuYm9keSwgZWxlXSkKLSAgPC9zY3JpcHQ+Ci0gPC9ib2R5PgotPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA3LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDctZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9y
QVBJLzAwNy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEgKzAsMCBAQAotUEFTUwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA3Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA3Lmh0bWwJKHJldmlzaW9u
IDI4OTc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA3Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTEgKzAsMCBAQAotPCFkb2N0eXBlIGh0bWw+Ci08aHRtbD4KLSA8
aGVhZD4KLSAgPHRpdGxlPmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoKTogbXVsdGlw
bGUgY2xhc3NlczwvdGl0bGU+Ci0gIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48
L3NjcmlwdD4KLSA8L2hlYWQ+Ci0gPGJvZHkgY2xhc3M9ImEgYiI+Ci0gIDxwIGlkPSJyIj5GQUlM
IChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0PiB0KGRvY3VtZW50LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUoImJcdFxmXG5cbmFccmIiKSwgW2RvY3VtZW50LmJvZHldKSA8L3Njcmlw
dD4KLSA8L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rv
ckFQSS8wMDgtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9t
L1NlbGVjdG9yQVBJLzAwOC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMSArMCwwIEBACi1QQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rv
ckFQSS8wMDguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rv
ckFQSS8wMDguaHRtbAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9T
ZWxlY3RvckFQSS8wMDguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMCwwIEBACi08IWRv
Y3R5cGUgaHRtbD4KLTxodG1sPgotIDxoZWFkPgotICA8dGl0bGU+ZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSgpOiBtdWx0aXBsZSBjbGFzc2VzPC90aXRsZT4KLSAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgotIDwvaGVhZD4KLSA8Ym9keSBjbGFzcz0i
YSI+Ci0gIDxwIGlkPSJyIj5GQUlMIChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0
PiB0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImFcZmEiKSwgW2RvY3VtZW50LmJv
ZHldKSA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9TZWxlY3RvckFQSS8wMDktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAwOS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI4OTc5
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDA5LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi1QQVNTCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9TZWxlY3RvckFQSS8wMDkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9TZWxlY3RvckFQSS8wMDkuaHRtbAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMDkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSAr
MCwwIEBACi08IWRvY3R5cGUgaHRtbD4KLTxodG1sIGNsYXNzPSJhIEEiPgotIDxoZWFkPgotICA8
dGl0bGU+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpOiBjYXNlIHNlbnNpdGl2ZTwv
dGl0bGU+Ci0gIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9uLmpzIj48L3NjcmlwdD4KLSA8
L2hlYWQ+Ci0gPGJvZHkgY2xhc3M9ImEgYSI+Ci0gIDxwIGlkPSJyIj5GQUlMIChzY3JpcHQgZGlk
IG5vdCBydW4pPC9wPgotICA8c2NyaXB0PiB0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoIkEgYSIpLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSkgPC9zY3JpcHQ+Ci0gPC9ib2R5
PgotPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDEwLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQ
SS8wMTAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL1NlbGVjdG9yQVBJLzAxMC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MCwwIEBACi1QQVNTCi0KLQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkv
MDEwLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8w
MTAueG1sCShyZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9y
QVBJLzAxMC54bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTIgKzAsMCBAQAotPGh0bWwgeG1sbnM9
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOmc9Imh0dHA6Ly93d3cudzMub3Jn
LzIwMDAvc3ZnIj4KLSA8aGVhZD4KLSAgPHRpdGxlPmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoKTogY29tcG91bmQ8L3RpdGxlPgotICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2NvbW1v
bi5qcyI+PC9zY3JpcHQ+Ci0gPC9oZWFkPgotIDxib2R5PgotICA8cCBpZD0iciI+RkFJTCAoc2Ny
aXB0IGRpZCBub3QgcnVuKTwvcD4gIAotICA8eCBjbGFzcz0iYSIvPgotICA8Zzp4IGNsYXNzPSJh
Ii8+Ci0gIDxzY3JpcHQ+IHQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYSIpLCBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgieCIpKSA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMTEtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAx
MS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20v
U2VsZWN0b3JBUEkvMDExLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICswLDAg
QEAKLVRoaXMgcGFnZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGVycm9yczoKLQotZXJyb3Igb24g
bGluZSAxMiBhdCBjb2x1bW4gMjAwOiBOYW1lc3BhY2VkIEF0dHJpYnV0ZSBjbGFzcyBpbiAnaHR0
cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcgcmVkZWZpbmVkCi1CZWxvdyBpcyBhIHJlbmRlcmlu
ZyBvZiB0aGUgcGFnZSB1cCB0byB0aGUgZmlyc3QgZXJyb3IuCi0KLVBBU1MKLQotCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMTEueG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMS54bWwJKHJldmlzaW9uIDI4OTc5KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDExLnhtbAkod29ya2luZyBjb3B5
KQpAQCAtMSwxOSArMCwwIEBACi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94
aHRtbCIgeG1sbnM6Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOmg9Imh0dHA6
Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOnQ9Imh0dHA6Ly90Yy5sYWJzLm9wZXJhLmNv
bS8jdGVzdCI+Ci0gPGhlYWQ+Ci0gIDx0aXRsZT5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NO
YW1lKCk6ICJ0cmlja3kiIGNvbXBvdW5kPC90aXRsZT4KLSAgPHNjcmlwdCBzcmM9InJlc291cmNl
cy9jb21tb24uanMiPjwvc2NyaXB0PgotIDwvaGVhZD4KLSA8Ym9keT4KLSAgPHAgaWQ9InIiPkZB
SUwgKHNjcmlwdCBkaWQgbm90IHJ1bik8L3A+ICAKLSAgPHggY2xhc3M9ImEiLz4KLSAgPGc6eCBj
bGFzcz0iYSIvPgotICA8eCB0OmNsYXNzPSJhIiBoOmNsYXNzPSJhIiBnOmNsYXNzPSJhIi8+Ci0g
IDxnOnggdDpjbGFzcz0iYSIgaDpjbGFzcz0iYSIgZzpjbGFzcz0iYSIvPgotICA8dDp4IGNsYXNz
PSJhIiB0OmNsYXNzPSJhIiBoOmNsYXNzPSJhIiBnOmNsYXNzPSJhIi8+Ci0gIDxzY3JpcHQ+Ci0g
ICB2YXIgY29sbGVjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImEiKSwK
LSAgICAgICB0ZXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIngiKQotICAgdChj
b2xsZWN0aW9uLCBbdGVzdFswXSwgdGVzdFsxXV0pCi0gIDwvc2NyaXB0PgotIDwvYm9keT4KLTwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMi1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDEy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9T
ZWxlY3RvckFQSS8wMTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAK
LVBBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMi5odG1sCShy
ZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMi5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0
bWwgY2xhc3M9ImEiPgotIDxoZWFkPgotICA8dGl0bGU+ZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKCk6IHNpbXBsZTwvdGl0bGU+Ci0gIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29tbW9u
LmpzIj48L3NjcmlwdD4KLSA8L2hlYWQ+Ci0gPGJvZHkgY2xhc3M9ImEiPgotICA8cCBpZD0iciI+
RkFJTCAoc2NyaXB0IGRpZCBub3QgcnVuKTwvcD4KLSAgPHNjcmlwdD4gdChkb2N1bWVudC5ib2R5
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImEiKSwgW10pIDwvc2NyaXB0PgotIDwvYm9keT4KLTwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvMDEz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9T
ZWxlY3RvckFQSS8wMTMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzAsMCBA
QAotUEFTUwotCi0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxMy5o
dG1sCShyZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJ
LzAxMy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3ICswLDAgQEAKLTwhZG9jdHlwZSBodG1s
PgotPGh0bWwgY2xhc3M9ImEiPgotIDxoZWFkPgotICA8dGl0bGU+ZWxlbWVudC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCk6IGFkZGluZyBhbiBlbGVtZW50PC90aXRsZT4KLSAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgotIDwvaGVhZD4KLSA8Ym9keSBjbGFzcz0i
YSI+Ci0gIDxwIGlkPSJyIj5GQUlMIChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0
PgotICAgdmFyIGNvbGxlY3Rpb24gPSBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoImEiKSwKLSAgICAgICBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ4LXkteiIpCi0g
ICBlbGUuY2xhc3NOYW1lID0gImEiCi0gICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZSkg
Ci0gICB0KGNvbGxlY3Rpb24sIFtlbGVdKQotICA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMTQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJLzAxNC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0
b3JBUEkvMDE0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSArMCwwIEBACi1QQVNT
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMTQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMTQuaHRtbAkocmV2aXNp
b24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS8wMTQuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNCArMCwwIEBACi08aHRtbCBjbGFzcz0iYSBBIj4KLSA8aGVh
ZD4KLSAgPHRpdGxlPmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoKTogY2FzZSBzZW5z
aXRpdmUgKHF1aXJrcyBtb2RlKTwvdGl0bGU+Ci0gIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29t
bW9uLmpzIj48L3NjcmlwdD4KLSA8L2hlYWQ+Ci0gPGJvZHkgY2xhc3M9ImEgYSI+Ci0gIDxwIGlk
PSJyIj5GQUlMIChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0PgotICAgIC8vIFdl
IGRpZmZlciBmcm9tIE9wZXJhJ3MgaW1wbGVtZW50YXRpb24gaGVyZS4gIFdlIGFyZSBjYXNlLWlu
c2Vuc2l0aXZlIGluIHF1aXJrcyBtb2RlLgotICAgIC8vIHQoZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgiQSBhIiksIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKQotICAgIHQoZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiQSBhIiksIFtkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQsIGRvY3VtZW50LmJvZHldKQotICA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS9kdW1wTm9kZUxpc3QtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2R1
bXBOb2RlTGlzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9kb20vU2VsZWN0b3JBUEkvZHVtcE5vZGVMaXN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNSwyMiArNSwzOCBAQCBMaW5lIDMKIGxpbmUgNAogbGluZSA1CiAKLVtvYmplY3Qg
SFRNTERpdkVsZW1lbnRdLCBbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwgW29iamVjdCBIVE1MRGl2
RWxlbWVudF0sIGxlbmd0aDogMworW29iamVjdCBIVE1MRGl2RWxlbWVudF0sIGxlbmd0aDogMQog
W29iamVjdCBIVE1MRGl2RWxlbWVudF0sIFtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCBbb2JqZWN0
IEhUTUxEaXZFbGVtZW50XSwgW29iamVjdCBIVE1MUGFyYWdyYXBoRWxlbWVudF0sIGxlbmd0aDog
NAotW29iamVjdCBIVE1MRGl2RWxlbWVudF0sIFtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCBsZW5n
dGg6IDIKLVtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCBbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwg
bGVuZ3RoOiAyCi1sZW5ndGg6IDAKLWxlbmd0aDogMAotbGVuZ3RoOiAwCi1sZW5ndGg6IDAKK1tv
YmplY3QgSFRNTERpdkVsZW1lbnRdLCBbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwgW29iamVjdCBI
VE1MRGl2RWxlbWVudF0sIFtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCBbb2JqZWN0IEhUTUxQYXJh
Z3JhcGhFbGVtZW50XSwgbGVuZ3RoOiA1CitFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlv
biAxMgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK0Vycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyCitFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKIGxlbmd0aDogMAogW29iamVj
dCBIVE1MRGl2RWxlbWVudF0sIGxlbmd0aDogMQogW29iamVjdCBIVE1MRGl2RWxlbWVudF0sIFtv
YmplY3QgSFRNTFBhcmFncmFwaEVsZW1lbnRdLCBsZW5ndGg6IDIKLVtvYmplY3QgSFRNTERpdkVs
ZW1lbnRdLCBsZW5ndGg6IDEKLVtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCBsZW5ndGg6IDEKLWxl
bmd0aDogMAotbGVuZ3RoOiAwCi1sZW5ndGg6IDAKLWxlbmd0aDogMAotbGVuZ3RoOiAwCitbb2Jq
ZWN0IEhUTUxEaXZFbGVtZW50XSwgW29iamVjdCBIVE1MUGFyYWdyYXBoRWxlbWVudF0sIGxlbmd0
aDogMgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK0Vycm9yOiBTWU5UQVhf
RVJSOiBET00gRXhjZXB0aW9uIDEyCitFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK0Vycm9yOiBTWU5UQVhfRVJS
OiBET00gRXhjZXB0aW9uIDEyCitbb2JqZWN0IEhUTUxEaXZFbGVtZW50XQorW29iamVjdCBIVE1M
RGl2RWxlbWVudF0KK1tvYmplY3QgSFRNTERpdkVsZW1lbnRdCitFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK0Vy
cm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIKK1R5cGVF
cnJvcjogTnVsbCB2YWx1ZQorW29iamVjdCBIVE1MRGl2RWxlbWVudF0KK1tvYmplY3QgSFRNTERp
dkVsZW1lbnRdCitbb2JqZWN0IEhUTUxEaXZFbGVtZW50XQorRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIKK0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCitFcnJv
cjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMgorRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBF
eGNlcHRpb24gMTIKK0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyCiAKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2R1bXBOb2RlTGlzdC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2R1bXBOb2RlTGlzdC5o
dG1sCShyZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJ
L2R1bXBOb2RlTGlzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+
CiA8Ym9keT4KIDxkaXYgY2xhc3M9Im9uZSI+TGluZSAxPGRpdiBjbGFzcz0idHdvIj5MaW5lIDI8
L2Rpdj48cD5MaW5lIDxpPjM8L2k+PC9wPjwvZGl2PgotPGRpdiBpZD0idGVzdCIgY2xhc3M9Im9u
ZSB0d28iPjxkaXYgY2xhc3M9Im9uZSB0d28iPmxpbmUgNDwvZGl2PjxwIGNsYXNzPSJ0d28iPmxp
bmUgNTwvcD48L2Rpdj4KKzxkaXYgaWQ9InRlc3QiIGNsYXNzPSJvbmUgdHdvIj48ZGl2IGlkPSJ0
ZXN0MiIgY2xhc3M9Im9uZSB0d28iPmxpbmUgNDwvZGl2PjxwIGNsYXNzPSJ0d28iPmxpbmUgNTwv
cD48L2Rpdj4KIDxwPjxvbCBpZD0iY29uc29sZSI+PC9vbD48L3A+CiA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKQEAg
LTE0LDYgKzE0LDExIEBACiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
IikuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgfQogICAgIAorICAgIEVsZW1lbnQucHJvdG90eXBl
LmR1bXAgPSBmdW5jdGlvbigpCisgICAgeworICAgIAlyZXR1cm4gdGhpczsKKyAgICB9CisgICAg
CiAgICAgTm9kZUxpc3QucHJvdG90eXBlLmR1bXAgPSBmdW5jdGlvbigpCiAgICAgewogICAgICAg
ICB2YXIgcmVzdWx0ID0gIiI7CkBAIC0yNiwyNiArMzEsNDQgQEAKIAogICAgIHRyeSB7CiAgICAg
ICAgIHZhciBlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdCIpOworICAgICAgICAK
KyAgICAgICAgdHJ5IHsgbG9nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiN0ZXN0IikuZHVt
cCgpKTsJICAgfSBjYXRjaCAoZSkgeyBsb2coZSkgfQorICAgICAgICB0cnkgeyBsb2coZG9jdW1l
bnQucXVlcnlTZWxlY3RvckFsbCgiLnR3byIpLmR1bXAoKSk7CSAgIH0gY2F0Y2ggKGUpIHsgbG9n
KGUpIH0KKyAgICAgICAgdHJ5IHsgbG9nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5vbmUs
IC50d28iKS5kdW1wKCkpOyB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAgIHRyeSB7IGxv
Zyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJAZm9udC1mYWNlIikuZHVtcCgpKTsgfSBjYXRj
aCAoZSkgeyBsb2coZSkgfQorICAgICAgICB0cnkgeyBsb2coZG9jdW1lbnQucXVlcnlTZWxlY3Rv
ckFsbCgiIikuZHVtcCgpKTsJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5
IHsgbG9nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoKS5kdW1wKCkpOwkJCSAgIH0gY2F0Y2gg
KGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5IHsgbG9nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwobnVsbCkuZHVtcCgpKTsJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5
IHsgbG9nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodW5kZWZpbmVkKS5kdW1wKCkpOwkgICB9
IGNhdGNoIChlKSB7IGxvZyhlKSB9CisKKyAgICAgICAgdHJ5IHsgbG9nKGVsbS5xdWVyeVNlbGVj
dG9yQWxsKCIjdGVzdCIpLmR1bXAoKSk7CQkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAg
ICAgIHRyeSB7IGxvZyhlbG0ucXVlcnlTZWxlY3RvckFsbCgiI3Rlc3QyIikuZHVtcCgpKTsgICAg
ICAgICAgfSBjYXRjaCAoZSkgeyBsb2coZSkgfQorICAgICAgICB0cnkgeyBsb2coZWxtLnF1ZXJ5
U2VsZWN0b3JBbGwoIi50d28iKS5kdW1wKCkpOwkJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0K
KyAgICAgICAgdHJ5IHsgbG9nKGVsbS5xdWVyeVNlbGVjdG9yQWxsKCIub25lLCAudHdvIikuZHVt
cCgpKTsJICAgfSBjYXRjaCAoZSkgeyBsb2coZSkgfQorICAgICAgICB0cnkgeyBsb2coZWxtLnF1
ZXJ5U2VsZWN0b3JBbGwoIkBmb250LWZhY2UiKS5kdW1wKCkpOwkgICB9IGNhdGNoIChlKSB7IGxv
ZyhlKSB9CisgICAgICAgIHRyeSB7IGxvZyhlbG0ucXVlcnlTZWxlY3RvckFsbCgiIikuZHVtcCgp
KTsJCQkJICAgfSBjYXRjaCAoZSkgeyBsb2coZSkgfQorICAgICAgICB0cnkgeyBsb2coZWxtLnF1
ZXJ5U2VsZWN0b3JBbGwoKS5kdW1wKCkpOwkJCQkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9Cisg
ICAgICAgIHRyeSB7IGxvZyhlbG0ucXVlcnlTZWxlY3RvckFsbChudWxsKS5kdW1wKCkpOwkJCSAg
IH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5IHsgbG9nKGVsbS5xdWVyeVNlbGVj
dG9yQWxsKHVuZGVmaW5lZCkuZHVtcCgpKTsJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KIAot
ICAgICAgICBsb2coZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgib25lIikuZHVtcCgp
KTsKLSAgICAgICAgbG9nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInR3byIpLmR1
bXAoKSk7Ci0gICAgICAgIGxvZyhkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJvbmUg
dHdvIikuZHVtcCgpKTsKLSAgICAgICAgbG9nKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoIm9uZVx0XHRcbiBcZnR3byIpLmR1bXAoKSk7Ci0gICAgICAgIGxvZyhkb2N1bWVudC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKCIiKS5kdW1wKCkpOwotICAgICAgICBsb2coZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgib25ldHdvIikuZHVtcCgpKTsKLSAgICAgICAgbG9nKGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoKS5kdW1wKCkpOwotICAgICAgICBsb2coZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShudWxsKS5kdW1wKCkpOwotICAgICAgICBsb2coZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh1bmRlZmluZWQpLmR1bXAoKSk7CisgICAgICAg
IHRyeSB7IGxvZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdGVzdCIpLmR1bXAoKSk7CQkgICB9
IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAgIHRyeSB7IGxvZyhkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCIudHdvIikuZHVtcCgpKTsJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAg
ICAgdHJ5IHsgbG9nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5vbmUsIC50d28iKS5kdW1wKCkp
OwkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAgIHRyeSB7IGxvZyhkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCJAZm9udC1mYWNlIikuZHVtcCgpKTsJICAgfSBjYXRjaCAoZSkgeyBsb2co
ZSkgfQorICAgICAgICB0cnkgeyBsb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiIikuZHVtcCgp
KTsJCQkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAgIHRyeSB7IGxvZyhkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCkuZHVtcCgpKTsJCQkJICAgfSBjYXRjaCAoZSkgeyBsb2coZSkgfQor
ICAgICAgICB0cnkgeyBsb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcihudWxsKS5kdW1wKCkpOwkJ
CSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5IHsgbG9nKGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IodW5kZWZpbmVkKS5kdW1wKCkpOwkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9
CiAKLSAgICAgICAgbG9nKGVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJvbmUiKS5kdW1wKCkp
OwotICAgICAgICBsb2coZWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInR3byIpLmR1bXAoKSk7
Ci0gICAgICAgIGxvZyhlbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgib25lIHR3byIpLmR1bXAo
KSk7Ci0gICAgICAgIGxvZyhlbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgib25lXHRcdFxuIFxm
dHdvIikuZHVtcCgpKTsKLSAgICAgICAgbG9nKGVsbS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCIi
KS5kdW1wKCkpOwotICAgICAgICBsb2coZWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm9uZXR3
byIpLmR1bXAoKSk7Ci0gICAgICAgIGxvZyhlbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgpLmR1
bXAoKSk7Ci0gICAgICAgIGxvZyhlbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShudWxsKS5kdW1w
KCkpOwotICAgICAgICBsb2coZWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodW5kZWZpbmVkKS5k
dW1wKCkpOworICAgICAgICB0cnkgeyBsb2coZWxtLnF1ZXJ5U2VsZWN0b3IoIiN0ZXN0IikuZHVt
cCgpKTsJCQkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAgIHRyeSB7IGxvZyhlbG0u
cXVlcnlTZWxlY3RvcigiI3Rlc3QyIikuZHVtcCgpKTsgICAgICAgICAgICAgfSBjYXRjaCAoZSkg
eyBsb2coZSkgfQorICAgICAgICB0cnkgeyBsb2coZWxtLnF1ZXJ5U2VsZWN0b3IoIi50d28iKS5k
dW1wKCkpOwkJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5IHsgbG9nKGVs
bS5xdWVyeVNlbGVjdG9yKCIub25lLCAudHdvIikuZHVtcCgpKTsJCSAgIH0gY2F0Y2ggKGUpIHsg
bG9nKGUpIH0KKyAgICAgICAgdHJ5IHsgbG9nKGVsbS5xdWVyeVNlbGVjdG9yKCJAZm9udC1mYWNl
IikuZHVtcCgpKTsJCSAgIH0gY2F0Y2ggKGUpIHsgbG9nKGUpIH0KKyAgICAgICAgdHJ5IHsgbG9n
KGVsbS5xdWVyeVNlbGVjdG9yKCIiKS5kdW1wKCkpOwkJCQkgICB9IGNhdGNoIChlKSB7IGxvZyhl
KSB9CisgICAgICAgIHRyeSB7IGxvZyhlbG0ucXVlcnlTZWxlY3RvcigpLmR1bXAoKSk7CQkJCQkg
ICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAgIHRyeSB7IGxvZyhlbG0ucXVlcnlTZWxl
Y3RvcihudWxsKS5kdW1wKCkpOwkJCQkgICB9IGNhdGNoIChlKSB7IGxvZyhlKSB9CisgICAgICAg
IHRyeSB7IGxvZyhlbG0ucXVlcnlTZWxlY3Rvcih1bmRlZmluZWQpLmR1bXAoKSk7CQkJICAgfSBj
YXRjaCAoZSkgeyBsb2coZSkgfQogICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgIGxvZygiRXhj
ZXB0aW9uOiAiICsgZXguZGVzY3JpcHRpb24pOwogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0b3JBUEkvYXJyYXkvMDAxLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS9hcnJh
eS8wMDEtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLVBBU1MKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMS5odG1s
CShyZXZpc2lvbiAyODk3OSkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2Fy
cmF5LzAwMS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzICswLDAgQEAKLTwhZG9jdHlwZSBo
dG1sPgotPGh0bWwgY2xhc3M9ImEKLWIiPgotIDxoZWFkPgotICA8dGl0bGU+ZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZShhcnJheSk6ICJhXG4iPC90aXRsZT4KLSAgPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9jb21tb24uanMiPjwvc2NyaXB0PgotIDwvaGVhZD4KLSA8Ym9keSBjbGFz
cz0iYQotIj4KLSAgPHAgaWQ9InIiPkZBSUwgKHNjcmlwdCBkaWQgbm90IHJ1bik8L3A+Ci0gIDxz
Y3JpcHQ+IHQoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShbImFcbiJdKSwgW2RvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQuYm9keV0pIDwvc2NyaXB0PgotIDwvYm9keT4K
LTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAw
Mi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0
b3JBUEkvYXJyYXkvMDAyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS9hcnJheS8wMDItZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xICswLDAgQEAKLVBBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1Nl
bGVjdG9yQVBJL2FycmF5LzAwMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMi5odG1sCShyZXZpc2lvbiAyODk3OSkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDEyICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWwgY2xhc3M9ImEKLWIiPgot
IDxoZWFkPgotICA8dGl0bGU+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhcnJheSk6
ICJiIiwiYSI8L3RpdGxlPgotICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2NvbW1vbi5qcyI+
PC9zY3JpcHQ+Ci0gPC9oZWFkPgotIDxib2R5IGNsYXNzPSJiLGEiPgotICA8cCBpZD0iciI+RkFJ
TCAoc2NyaXB0IGRpZCBub3QgcnVuKTwvcD4KLSAgPHNjcmlwdD4gdChkb2N1bWVudC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKFsiYiIsICJhIl0pLCBbZG9jdW1lbnQuYm9keV0pIDwvc2NyaXB0Pgot
IDwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJ
L2FycmF5LzAwMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vU2VsZWN0b3JBUEkvYXJyYXkvMDAzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjg5NzkpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS9hcnJheS8wMDMtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLVBBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMy5odG1sCShyZXZpc2lvbiAyODk3OSkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwMy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDExICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWw+Ci0gPGhl
YWQ+Ci0gIDx0aXRsZT5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGFycmF5KTogImIg
YSI8L3RpdGxlPgotICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2NvbW1vbi5qcyI+PC9zY3Jp
cHQ+Ci0gPC9oZWFkPgotIDxib2R5IGNsYXNzPSJhIGIiPgotICA8cCBpZD0iciI+RkFJTCAoc2Ny
aXB0IGRpZCBub3QgcnVuKTwvcD4KLSAgPHNjcmlwdD4gdChkb2N1bWVudC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKFsiYiBhIl0pLCBbZG9jdW1lbnQuYm9keV0pIDwvc2NyaXB0PgotIDwvYm9keT4K
LTwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAw
NC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0
b3JBUEkvYXJyYXkvMDA0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS9hcnJheS8wMDQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xICswLDAgQEAKLVBBU1MKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1Nl
bGVjdG9yQVBJL2FycmF5LzAwNC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwNC5odG1sCShyZXZpc2lvbiAyODk3OSkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJL2FycmF5LzAwNC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDExICswLDAgQEAKLTwhZG9jdHlwZSBodG1sPgotPGh0bWwgY2xhc3M9ImEsYiI+Ci0g
PGhlYWQ+Ci0gIDx0aXRsZT5lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYXJyYXkpOiAi
YSIsICJiIjwvdGl0bGU+Ci0gIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvY29tbW9uLmpzIj48
L3NjcmlwdD4KLSA8L2hlYWQ+Ci0gPGJvZHkgY2xhc3M9ImEsYiB4Ij4KLSAgPHAgaWQ9InIiIGNs
YXNzPSJhLGJ4Ij5GQUlMIChzY3JpcHQgZGlkIG5vdCBydW4pPC9wPgotICA8c2NyaXB0IGNsYXNz
PSJ4YSxiIj4gdChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShbIlxmYSIsImJcbiJdKSwgW2RvY3VtZW50LmJvZHldKSA8L3NjcmlwdD4KLSA8L2JvZHk+Ci08
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3RvckFQSS9yZXNvdXJjZXMv
Y29tbW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdG9yQVBJ
L3Jlc291cmNlcy9jb21tb24uanMJKHJldmlzaW9uIDI4OTc5KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vU2VsZWN0b3JBUEkvcmVzb3VyY2VzL2NvbW1vbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MSwyMSArMCwwIEBACi0vLyBydW5zIGEgdGVzdCBhbmQgd3JpdGVzIGEgbG9nCi1mdW5jdGlvbiB0
KGNvbGxlY3Rpb24sIGVsZW1lbnRzKSB7Ci0gIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCi0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotCi0gIHZhciBsb2cg
PSAiIiwKLSAgICAgIHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiciIpLAotICAgICAgcGFz
cyA9IHRydWUKLSAgaWYoY29sbGVjdGlvbi5sZW5ndGggIT0gZWxlbWVudHMubGVuZ3RoKSB7Ci0g
ICAgcGFzcyA9IGZhbHNlCi0gICAgbG9nICs9ICJHb3QgIiArIGNvbGxlY3Rpb24ubGVuZ3RoICsg
IiBlbGVtZW50cywgZXhwZWN0ZWQgIiArIGVsZW1lbnRzLmxlbmd0aCArICIuICIKLSAgfQotICBm
b3IodmFyIGkgPSAwLCBtYXggPSBjb2xsZWN0aW9uLmxlbmd0aCA+IGVsZW1lbnRzLmxlbmd0aCA/
IGVsZW1lbnRzLmxlbmd0aCA6IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgbWF4OyBpKyspIHsKLSAg
ICBpZihjb2xsZWN0aW9uW2ldICE9IGVsZW1lbnRzW2ldKSB7Ci0gICAgICBwYXNzID0gZmFsc2UK
LSAgICAgIGxvZyArPSAiR290IGVsZW1lbnQgYCIgKyBjb2xsZWN0aW9uW2ldLnRhZ05hbWUgKyAi
YCAoIiArIGNvbGxlY3Rpb25baV0ubmFtZXNwYWNlVVJJICsgIikiCi0gICAgICBsb2cgKz0gIiwg
ZXhwZWN0ZWQgZWxlbWVudCBgIiArIGVsZW1lbnRzW2ldLnRhZ05hbWUgKyAiYCAoIiArIGVsZW1l
bnRzW2ldLm5hbWVzcGFjZVVSSSArICIpLiAiCi0gICAgfQotICB9Ci0gIHIudGV4dENvbnRlbnQg
PSBwYXNzID8gIlBBU1MiIDogIkZBSUwgKCIgKyBsb2cgKyAiKSIKLX0KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMjg5NzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5k
b3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMzgs
NiArMzM4LDggQEAgd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRJbgogd2lu
ZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRTdGF0ZSBbZnVuY3Rpb25dCiB3aW5k
b3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCBbZnVuY3Rpb25dCiB3
aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5Q29tbWFuZFZhbHVlIFtmdW5jdGlvbl0KK3dp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvciBbZnVuY3Rpb25dCit3aW5kb3cu
RG9jdW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgW2Z1bmN0aW9uXQogd2luZG93LkRv
Y3VtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQu
cHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50
LnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgW2Z1bmN0aW9uXQpAQCAtNDQxLDYgKzQ0Myw4IEBAIHdp
bmRvdy5FbGVtZW50LnByb3RvdHlwZS5pc1N1cHBvcnRlZCBbZnUKIHdpbmRvdy5FbGVtZW50LnBy
b3RvdHlwZS5sb29rdXBOYW1lc3BhY2VVUkkgW2Z1bmN0aW9uXQogd2luZG93LkVsZW1lbnQucHJv
dG90eXBlLmxvb2t1cFByZWZpeCBbZnVuY3Rpb25dCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUu
bm9ybWFsaXplIFtmdW5jdGlvbl0KK3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVj
dG9yIFtmdW5jdGlvbl0KK3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxs
IFtmdW5jdGlvbl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUgW2Z1
bmN0aW9uXQogd2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TIFtmdW5j
dGlvbl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGVOb2RlIFtmdW5j
dGlvbl0K
</data>
<flag name="review"
          id="7863"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>