<?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>88385</bug_id>
          
          <creation_ts>2012-06-05 18:40:01 -0700</creation_ts>
          <short_desc>Global object variable accesses should not require an extra load</short_desc>
          <delta_ts>2012-06-06 17:50:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>642081</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-05 18:40:01 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642086</commentid>
    <comment_count>1</comment_count>
      <attachid>145910</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-05 18:42:58 -0700</bug_when>
    <thetext>Created attachment 145910
it begins!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642094</commentid>
    <comment_count>2</comment_count>
      <attachid>145912</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-05 19:00:00 -0700</bug_when>
    <thetext>Created attachment 145912
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642095</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-05 19:00:57 -0700</bug_when>
    <thetext>Oops, didn&apos;t mean to put either patch up for EWS.  The first one doesn&apos;t have the build foo for any non-Mac platforms.  The second one, if it compiles, it will be a miracle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642166</commentid>
    <comment_count>4</comment_count>
      <attachid>145931</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-05 21:49:32 -0700</bug_when>
    <thetext>Created attachment 145931
the code is written

Now I actually ought to compile it.  And test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642232</commentid>
    <comment_count>5</comment_count>
      <attachid>145947</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-05 23:56:34 -0700</bug_when>
    <thetext>Created attachment 145947
it&apos;s starting to do things

Got it to compile and do the right thing for a stupidly simple test.

Now the real testing starts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642662</commentid>
    <comment_count>6</comment_count>
      <attachid>146079</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 11:52:32 -0700</bug_when>
    <thetext>Created attachment 146079
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642664</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 11:55:27 -0700</bug_when>
    <thetext>Attachment 146079 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:39:  &quot;wtf/UnusedParam.h&quot; already included at Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:36  [build/include] [4]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642678</commentid>
    <comment_count>8</comment_count>
      <attachid>146079</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-06 12:06:58 -0700</bug_when>
    <thetext>Comment on attachment 146079
the patch

r=us</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642696</commentid>
    <comment_count>9</comment_count>
      <attachid>146079</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-06 12:32:49 -0700</bug_when>
    <thetext>Comment on attachment 146079
the patch

Attachment 146079 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12897884</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642705</commentid>
    <comment_count>10</comment_count>
      <attachid>146079</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-06-06 12:42:48 -0700</bug_when>
    <thetext>Comment on attachment 146079
the patch

Attachment 146079 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12900877</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642721</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 13:04:14 -0700</bug_when>
    <thetext>Based on the buildbot feedback it appears that I have some minor issues to fix:

- 32-bit build foo.

- DOM calls into symbolTableStuff.

Working on these now, but will first post an updated patch with some other fixes.

This now appears to be a 1% across the board win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642725</commentid>
    <comment_count>12</comment_count>
      <attachid>146092</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 13:05:08 -0700</bug_when>
    <thetext>Created attachment 146092
the latest, not yet for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642829</commentid>
    <comment_count>13</comment_count>
      <attachid>146115</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 14:46:02 -0700</bug_when>
    <thetext>Created attachment 146115
almost ready

Win EWS might scream because of exports but other than that it should be good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642836</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-06 14:50:52 -0700</bug_when>
    <thetext>Attachment 146115 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:39:  &quot;wtf/UnusedParam.h&quot; already included at Source/JavaScriptCore/runtime/JSSegmentedVariableObject.h:36  [build/include] [4]
Source/JavaScriptCore/jit/JITPropertyAccess.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642867</commentid>
    <comment_count>15</comment_count>
      <attachid>146115</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-06 15:13:05 -0700</bug_when>
    <thetext>Comment on attachment 146115
almost ready

Attachment 146115 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12897929</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642878</commentid>
    <comment_count>16</comment_count>
      <attachid>146124</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 15:22:34 -0700</bug_when>
    <thetext>Created attachment 146124
with mac build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642943</commentid>
    <comment_count>17</comment_count>
      <attachid>146124</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-06 16:47:30 -0700</bug_when>
    <thetext>Comment on attachment 146124
with mac build fixes

Attachment 146124 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12897968</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642950</commentid>
    <comment_count>18</comment_count>
      <attachid>146144</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 16:50:59 -0700</bug_when>
    <thetext>Created attachment 146144
trying to make windows green</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643022</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-06 17:50:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/119655</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145910</attachid>
            <date>2012-06-05 18:42:58 -0700</date>
            <delta_ts>2012-06-05 19:00:00 -0700</delta_ts>
            <desc>it begins!</desc>
            <filename>globalobj_patch_1.diff</filename>
            <type>text/plain</type>
            <size>31564</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NTQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEyLTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdCB2YXJpYWJsZSBhY2Nlc3NlcyBzaG91bGQgbm90IHJlcXVpcmUgYW4gZXh0
cmEgbG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODgzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MhCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6
SlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0
ZSk6CisgICAgICAgICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNT
Y29wZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2Nv
cGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpK
U1N5bWJvbFRhYmxlT2JqZWN0OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9i
amVjdDo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmpl
Y3Q6OmlzRHluYW1pY1Njb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmpl
Y3QuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNTeW1ib2xUYWJsZU9iamVj
dCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnN5bWJvbFRhYmxlKToKKyAg
ICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6Cisg
ICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6
CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNWYXJpYWJsZU9iamVjdCk6
CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3QpOgorICAg
ICAgICAoSlNDOjpKU1ZhcmlhYmxlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0MpOgorCiAyMDEyLTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgREZHIENGRyBzaW1wbGlmaWNhdGlvbiBzaG91bGQgbm90IGF0dGVtcHQgdG8gZGVyZWYg
bm9kZXMgaW5zaWRlIG9mIGFuIHVucmVhY2hhYmxlIHN1YmdyYXBoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNSw2ICsxMzUsOCBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZH
Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMz
Q0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdC
eXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAw
Q0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsg
fTsKKwkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3
RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2
IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5j
cHAgKi87IH07CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQx
NENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUYxNENBN0RDQTAwODVGM0M2IC8q
IEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICov
OyB9OwpAQCAtODI4LDYgKzgzMCw4IEBACiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxp
bmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZG
MjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDQ2FsbEhlbHBlcnMuaDsgcGF0aCA9
IGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5
MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBK
U1N5bWJvbFRhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U3ltYm9sVGFibGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMy
OTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBH
ZXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdl
dEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk0MSw2ICsx
OTQ1LDggQEAKIAkJCQk4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggKi8sCiAJCQkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNw
cCAqLywKIAkJCQkyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAq
LywKKwkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAgKi8sCisJCQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmpl
Y3QuaCAqLywKIAkJCQkxNEFCQjQ1NDA5OUMyQTBGMDBFMkEyNEYgLyogSlNUeXBlLmggKi8sCiAJ
CQkJNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLywKIAkJCQlGNjky
QTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNWYWx1ZS5jcHAgKi8sCkBAIC0yNjU3LDYgKzI2NjMs
NyBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1
bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkxOUQwRDE1
N0VFMEEyMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0zMjI5LDYgKzMyMzYsNyBAQAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3
QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoSlNDZWxs
KiBjZWxsLCBFCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9i
YWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6
OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0gICAgaWYgKHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNT
dHJpY3RNb2RlKCkpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEpTVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90KTsKIH0KQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIEFTU0VSVCghSGVhcDo6aGVh
cCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7
CiAKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhleGVj
LT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQorICAgIGlm
IChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERh
dGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEpTVmFsdWUgdmFsdWVCZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgSlNH
bG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoKICAgICBKU0dsb2JhbE9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgUHJvcGVydHlT
bG90IHNsb3Q7CiAgICAgLy8gc2lsZW50bHkgaWdub3JlIGF0dGVtcHRzIHRvIGFkZCBhY2Nlc3Nv
cnMgYWxpYXNpbmcgdmFycy4KLSAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpICYmIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCisg
ICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSAmJiBzeW1ib2xUYWJsZUdl
dCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOwogfQpAQCAtNDQ4LDcgKzQ0OCw3
IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCgKICAgICBKU0dsb2Jh
bE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwpOwogICAg
IGlmIChnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0
YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBz
bG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5bWJv
bFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0
KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIGJvb2wgSlNHbG9iYWxPYmpl
Y3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvcikKQEAgLTQ1Niw3ICs0NTYsNyBAQCBib29sIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eURlc2NyCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNH
bG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0
b3I8SlNWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShl
eGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5
TmFtZSwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3Qs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNs
ZWFyUmFyZURhdGEoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zODMsNyArMzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChKU1ZhcmlhYmxl
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBib29sIHNsb3RJc1dyaXRlYWJs
ZTsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCwgc2xv
dElzV3JpdGVhYmxlKTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXMsIHByb3Bl
cnR5TmFtZSwgc2xvdCwgc2xvdElzV3JpdGVhYmxlKTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9v
bCBKU0dsb2JhbE9iamVjdDo6c3ltYm9sVGFibGVIYXNQcm9wZXJ0eShQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NiwxMyArNjYsMTMgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoSlND
ZWxsKiBjZQogICAgICAgICAvLyBhIHBvaW50ZXIgY29tcGFyZS4KICAgICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7CiAgICAgICAgIGJvb2wgaXNXcml0YWJsZSA9IHRydWU7Ci0gICAgICAgIHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCwgaXNXcml0YWJsZSk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCwgaXNX
cml0YWJsZSk7CiAgICAgICAgIGlmICghaXNXcml0YWJsZSkgewogICAgICAgICAgICAgdGhyb3dF
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVy
dHlXcml0ZUVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODEsNyAr
ODEsNyBAQCB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dChKU0NlbGwqIGNlCiB2b2lkIEpT
U3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKKyAgICBpZiAoc3ltYm9sVGFibGVQdXRX
aXRoQXR0cmlidXRlcyh0aGlzT2JqZWN0LCBleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVj
dDo6cHV0RGlyZWN0VmlydHUKIAogYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxKU1N0YXRpY1Nj
b3BlT2JqZWN0Kj4oY2VsbCktPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2Vs
bCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU1N5bWJvbFRhYmxlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJKU0FjdGl2
YXRpb24uaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RhdGlj
U2NvcGVPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBzdGF0aWNfY2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCktPkpTU3lt
Ym9sVGFibGVPYmplY3Q6On5KU1N5bWJvbFRhYmxlT2JqZWN0KCk7Cit9CisKK2Jvb2wgSlNTeW1i
b2xUYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNTeW1ib2xUYWJsZU9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CisgICAg
aWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuY29udGFpbnMocHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBKU09iamVjdDo6
ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9p
ZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CisgICAgU3ltYm9sVGFi
bGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCk7
CisgICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIShp
dC0+c2Vjb25kLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRl
RG9udEVudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50
aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7CisgICAgfQorICAgIAorICAgIEpTT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOworfQorCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6
OmlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgeworICAgIGNhc2UgR2xv
YmFsT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTR2xvYmFs
T2JqZWN0Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Cisg
ICAgY2FzZSBBY3RpdmF0aW9uT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEpTQWN0aXZhdGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFt
aWNDaGVja3MpOworICAgIGNhc2UgU3RhdGljU2NvcGVPYmplY3RUeXBlOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdGF0aWNTY29wZU9iamVjdCo+KHRoaXMpLT5pc0R5bmFt
aWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1N5bWJvbFRhYmxl
T2JqZWN0X2gKKyNkZWZpbmUgSlNTeW1ib2xUYWJsZU9iamVjdF9oCisKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlN5bWJv
bFRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1N5bWJvbFRhYmxlT2JqZWN0
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOworICAgIAorICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIGNv
bnN0IHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKyAgICAKKyAgICBzdGF0aWMgTk9fUkVU
VVJOX0RVRV9UT19BU1NFUlQgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAgYm9vbCBpc0R5bmFtaWNT
Y29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OworICAgIAorcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dl
dFByb3BlcnR5TmFtZXMgfCBKU05vbkZpbmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAK
KyAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICAgICAgOiBKU05v
bkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3N5bWJvbFRh
YmxlKHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgQVNTRVJUKG1fc3ltYm9sVGFibGUpOwor
ICAgIH0KKyAgICAKKyAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRh
YmxlR2V0KAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgo
KSkuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1i
b2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKKyAgICBTeW1i
b2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcigKKyAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFi
bGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFi
bGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCwKKyAgICBib29sJiBzbG90SXNXcml0ZWFibGUpCit7CisgICAgU3ltYm9sVGFi
bGVFbnRyeSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlO
YW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgc2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0
SW5kZXgoKSkuZ2V0KCkpOworICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxl
T2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAorICAgIFN5bWJvbFRhYmxl
T2JqZWN0VHlwZSogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsCisgICAgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQVNTRVJUKCFI
ZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVj
dCkpOworICAgIAorICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5bWJvbFRh
YmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChlbnRy
eS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbnRyeS5pc1JlYWRP
bmx5KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBi
b29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoCisgICAgU3ltYm9sVGFibGVPYmplY3RU
eXBlKiBvYmplY3QsIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwKKyAgICBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcChvYmplY3QpKTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9i
amVjdC0+c3ltYm9sVGFibGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAg
IGlmIChpdGVyID09IG9iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAg
IEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOworICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmli
dXRlcyk7CisgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9i
YWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1N5bWJvbFRhYmxlT2JqZWN0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFy
aWFibGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3MCArMjksNiBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKIAot
I2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0j
aW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgotI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFy
cmF5LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCi0KIG5hbWVzcGFjZSBKU0Mg
ewogCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAg
IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihjZWxsKS0+SlNWYXJpYWJsZU9iamVjdDo6
fkpTVmFyaWFibGVPYmplY3QoKTsKLX0KLQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKLXsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VmFyaWFibGVPYmplY3QqPihjZWxsKTsKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS5jb250YWlucyhwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOwotfQotCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OmdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgSlNW
YXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4ob2Jq
ZWN0KTsKLSAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+
c3ltYm9sVGFibGUoKS5lbmQoKTsKLSAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0p
IHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQotICAgICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKLSAgICB9
Ci0gICAgCi0gICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci19Ci0KLWJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3lt
Ym9sVGFibGVHZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJs
ZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICBpZiAoIWVudHJ5
LmlzTnVsbCgpKSB7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVs
ZXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKLXsKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29w
ZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChzdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbE9iamVjdFR5cGU6
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0dsb2JhbE9iamVjdCo+KHRoaXMp
LT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGNhc2UgQWN0aXZh
dGlvbk9iamVjdFR5cGU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0FjdGl2
YXRpb24qPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKLSAg
ICBjYXNlIFN0YXRpY1Njb3BlT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEpTU3RhdGljU2NvcGVPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWly
ZXNEeW5hbWljQ2hlY2tzKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBKU1ZhcmlhYmxlT2JqZWN0X2gKIAogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTeW1ib2xUYWJsZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KQEAgLTQxLDQwICs0MiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgY2xhc3MgUmVnaXN0ZXI7CiAKLSAg
ICBjbGFzcyBKU1ZhcmlhYmxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAg
IGNsYXNzIEpTVmFyaWFibGVPYmplY3QgOiBwdWJsaWMgSlNTeW1ib2xUYWJsZU9iamVjdCB7CiAg
ICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOwotCi0gICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsg
cmV0dXJuICptX3N5bWJvbFRhYmxlOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLQotICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RV
RV9UT19BU1NFUlQgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0R5
bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OworICAgICAgICB0
eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVy
c1tpbmRleF07IH0KIAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnN0ICogYWRk
cmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9CiAgICAgICAg
IHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZSZWdpc3RlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYXJpYWJsZU9iamVjdCwgbV9yZWdpc3RlcnMpOyB9CiAKLSAgICAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oVmFyaWFibGVPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksICZzX2luZm8pOwotICAgICAgICB9Ci0gICAgICAgIAogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTTm9uRmluYWxPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU1N5bWJvbFRhYmxlT2JqZWN0
OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1fc3ltYm9sVGFibGUoc3lt
Ym9sVGFibGUpCisgICAgICAgICAgICA6IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCBzeW1ib2xUYWJsZSkKICAgICAgICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRl
cnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgICAgICB7
CiAgICAgICAgIH0KQEAgLTgyLDc2ICs2NiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAg
ICAgQVNTRVJUKG1fc3ltYm9sVGFibGUpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gc2l6ZW9mKFJlZ2lzdGVyKSwgUmVnaXN0ZXJf
c2hvdWxkX2JlX3NhbWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXIpOwogICAgICAgICB9CiAKICAgICAg
ICAgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IGNvcHlSZWdpc3RlckFy
cmF5KEpTR2xvYmFsRGF0YSYsIFdyaXRlQmFycmllcjxVbmtub3duPiogc3JjLCBzaXplX3QgY291
bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFydHMpOwogICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRlQmFy
cmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkpOwogCi0gICAgICAgIGJvb2wgc3ltYm9sVGFi
bGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYpOwotICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1
dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwot
ICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgICAgICBT
eW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsgLy8gTWFwcyBuYW1lIC0+IG9mZnNldCBmcm9tICJy
IiBpbiByZWdpc3RlciBmaWxlLgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG1fcmVn
aXN0ZXJzOyAvLyAiciIgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIE93bkFycmF5UHRy
PFdyaXRlQmFycmllcjxVbmtub3duPiA+IG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQg
Y29weSBvZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRz
IHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgfTsKIAotICAgIGlubGlu
ZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKLSAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZShyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGJvb2wmIHNsb3RJc1dy
aXRlYWJsZSkKLSAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xU
YWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYg
KCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdpc3RlckF0
KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKLSAgICAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9
ICFlbnRyeS5pc1JlYWRPbmx5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJp
YWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotICAgIHsKLSAg
ICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
ICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhl
YXA6OmhlYXAodGhpcykpOwotCi0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1i
b2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAg
aWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoZW50cnkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0g
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJv
cGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIHRoaXMs
IHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wg
SlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwotCi0gICAg
ICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS5maW5kKHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZSgp
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwo
KSk7Ci0gICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCiAgICAgaW5saW5lIFBhc3NPd25BcnJheVB0
cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBKU1ZhcmlhYmxlT2JqZWN0Ojpjb3B5UmVnaXN0ZXJB
cnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFdyaXRlQmFycmllcjxVbmtub3duPiogc3Jj
LCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFydHMpCiAgICAgewogICAgICAgICBP
d25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRB
cnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W2NvdW50XSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145912</attachid>
            <date>2012-06-05 19:00:00 -0700</date>
            <delta_ts>2012-06-05 21:49:32 -0700</delta_ts>
            <desc>more!</desc>
            <filename>globalobj_patch_2.diff</filename>
            <type>text/plain</type>
            <size>44089</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NTQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDEyLTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2xvYmFsIG9iamVjdCB2YXJpYWJsZSBhY2Nlc3NlcyBzaG91bGQgbm90IHJlcXVpcmUgYW4gZXh0
cmEgbG9hZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODgzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MhCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVDb25zdERlY2wpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0YXRpY1Zhcik6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6ZXhlY3V0ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpk
ZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpnZXRPd25Q
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAg
ICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0ds
b2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0ZXJBdCk6CisgICAgICAgIChKU0M6OkpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QpOgorICAgICAg
ICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNT
dGF0aWNTY29wZU9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNTdGF0aWNTY29wZU9iamVj
dDo6cHV0RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRh
YmxlT2JqZWN0OjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6
ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0
RGlyZWN0VmlydHVhbCk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmlzRHlu
YW1pY1Njb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDogQWRk
ZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAg
ICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpT
Qzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6SlNTeW1ib2xUYWJsZU9iamVjdCk6CisgICAgICAgIChK
U0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAg
IChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNWYXJpYWJsZU9iamVjdCk6CisgICAgICAg
IChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OkpTVmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlND
OjpKU1ZhcmlhYmxlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0MpOgorCiAy
MDEyLTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZH
IENGRyBzaW1wbGlmaWNhdGlvbiBzaG91bGQgbm90IGF0dGVtcHQgdG8gZGVyZWYgbm9kZXMgaW5z
aWRlIG9mIGFuIHVucmVhY2hhYmxlIHN1YmdyYXBoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEz
NSw2ICsxMzUsOCBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4
MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0Mz
REIxIC8qIERGR0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNh
Y2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8q
IERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDA5
MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsgfTsKKwkJMEY5
MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3RUUwOUQwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi87IH07
CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUYxNENBN0RDQTAwODVGM0M2IC8qIEdldEJ5SWRT
dGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovOyB9OwpAQCAt
ODI4LDYgKzgzMCw4IEBACiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0Nv
dW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIz
OSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIxIC8qIERGR0NDYWxsSGVscGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDQ2FsbEhlbHBlcnMuaDsgcGF0aCA9IGRmZy9ERkdD
Q2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMDkxNTdF
RTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3ltYm9sVGFi
bGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTMxNENBN0RD
MTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3Rh
dHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5SWRTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk0MSw2ICsxOTQ1LDggQEAK
IAkJCQk4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggKi8sCiAJ
CQkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLywKIAkJ
CQkyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLywKKwkJCQkw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8sCisJ
CQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLywK
IAkJCQkxNEFCQjQ1NDA5OUMyQTBGMDBFMkEyNEYgLyogSlNUeXBlLmggKi8sCiAJCQkJNjUwN0Qy
OTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUluZm8uaCAqLywKIAkJCQlGNjkyQTg4NzAyNTU1
OTdEMDFGRjYwRjcgLyogSlNWYWx1ZS5jcHAgKi8sCkBAIC0yNjU3LDYgKzI2NjMsNyBAQAogCQkJ
CTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMTYwMTVFMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0
QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjI5LDYg
KzMyMzYsNyBAQAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3Jz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4
QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTE5NTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNzcsNyArMTE3Nyw3IEBAIFJlc29sdmVSZXN1bHQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29sdmVS
ZXN1bHQ6OkR5bmFtaWNGbGFnOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAgICAg
IAotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nh
c3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIEpTU3ltYm9sVGFi
bGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2Jq
ZWN0Kj4oY3VycmVudFNjb3BlKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1
cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsK
IAogICAgICAgICAvLyBGb3VuZCB0aGUgcHJvcGVydHkKQEAgLTEyMzQsNyArMTIzNCw3IEBAIFJl
c29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICAgICAgSlNPYmplY3Qq
IGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOwogICAgICAgICBpZiAoIWN1cnJlbnRTY29wZS0+
aXNWYXJpYWJsZU9iamVjdCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEpTVmFy
aWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2Jq
ZWN0Kj4oY3VycmVudFNjb3BlKTsKKyAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogY3VycmVu
dFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjdXJyZW50U2Nv
cGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxlT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAoZW50
cnkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDYsNyArMTQ0Niw3IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3QKIAogICAgICAgICBwcm9m
aWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9nbG9iYWxfdmFyKTsKICAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChyZXNvbHZlUmVzdWx0LmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoJnJlc29sdmVSZXN1bHQuZ2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyQXQocmVzb2x2ZVJl
c3VsdC5pbmRleCgpKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsK
ICAgICAgICAgcmV0dXJuIGRzdDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2
YWxFeGVjdXRhCiAgICAgZm9yIChTY29wZUNoYWluTm9kZSogbm9kZSA9IHNjb3BlQ2hhaW47IDsg
bm9kZSA9IG5vZGUtPm5leHQuZ2V0KCkpIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAg
ICBpZiAobm9kZS0+b2JqZWN0LT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgIW5vZGUtPm9iamVjdC0+
aXNTdGF0aWNTY29wZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZU9iamVjdCA9IGpz
Q2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4obm9kZS0+b2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAg
IHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihub2RlLT5vYmpl
Y3QuZ2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQoIUhlYXA6
OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVj
dCkpOwogCi0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1
dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9k
ZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIEpTVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KQEAgLTE1OCw3ICsxNTgs
NyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTCiAgICAgSlNHbG9i
YWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQ
dXRXaXRoQXR0cmlidXRlcyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGF0dHJpYnV0ZXMpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNP
YmplY3QsIGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRl
cykpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTVmFsdWUgdmFsdWVCZWZvcmUgPSB0aGlzT2Jq
ZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTc2
LDcgKzE3Niw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KEoKICAg
ICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9i
amVjdCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgLy8gc2lsZW50bHkgaWdub3JlIGF0
dGVtcHRzIHRvIGFkZCBhY2Nlc3NvcnMgYWxpYXNpbmcgdmFycy4KLSAgICBpZiAoZGVzY3JpcHRv
ci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHBy
b3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0
b3IoKSAmJiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hvdWxkVGhyb3cp
OwogfQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCgKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2Jh
bE9iamVjdCo+KGNlbGwpOwogICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNWYXJpYWJs
ZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
cmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKQEAgLTQ1Niw3ICs0NTYsNyBAQCBib29sIEpT
R2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyCiAgICAgSlNHbG9iYWxPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIGlmIChnZXRT
dGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0YXRl
OjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIHN5bWJv
bFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OmNsZWFyUmFyZURhdGEoSlNDZWxsKiBjZWxsKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBKYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkRnVuY3Rpb25QdHIgamF2YVNjcmlwdEV4
cGVyaW1lbnRzRW5hYmxlZDsKICAgICB9OwogCi0gICAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBw
dWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7CisgICAgY2xhc3MgSlNHbG9iYWxPYmplY3QgOiBwdWJs
aWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlw
ZWRlZiBIYXNoU2V0PFJlZlB0cjxPcGFxdWVKU1dlYWtPYmplY3RNYXA+ID4gV2Vha01hcFNldDsK
IApAQCAtOTAsNyArOTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKIAot
ICAgICAgICBzaXplX3QgbV9yZWdpc3RlckFycmF5U2l6ZTsKICAgICAgICAgUmVnaXN0ZXIgbV9n
bG9iYWxDYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplXTsKIAogICAg
ICAgICBXcml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG1fZ2xvYmFsU2NvcGVDaGFpbjsKQEAg
LTE2NCw3ICsxNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9iamVjdCBCYXNlOworICAgICAg
ICB0eXBlZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgQmFzZTsKIAogICAgICAgICBzdGF0
aWMgSlNHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgICAgICB7CkBAIC0xNzcsOCArMTc2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IDApCi0gICAg
ICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1i
b2xUYWJsZSwgMCkKLSAgICAgICAgICAgICwgbV9yZWdpc3RlckFycmF5U2l6ZSgwKQorICAgICAg
ICAgICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwg
Jm1fc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAsIG1fZ2xvYmFsU2NvcGVDaGFpbigpCiAgICAg
ICAgICAgICAsIG1fd2Vha1JhbmRvbShzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVy
KCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCiAgICAg
ICAgICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKQEAgLTMwOCw4ICszMDYsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRFdmFsRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9l
dmFsRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICAgICAgYm9vbCBldmFsRW5hYmxlZCgpIHsgcmV0
dXJuIG1fZXZhbEVuYWJsZWQ7IH0KIAotICAgICAgICB2b2lkIHJlc2l6ZVJlZ2lzdGVycyhzaXpl
X3QgbmV3U2l6ZSk7Ci0KICAgICAgICAgdm9pZCByZXNldFByb3RvdHlwZShKU0dsb2JhbERhdGEm
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KCkgY29uc3QgeyByZXR1cm4gKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKTsgfQpAQCAt
MzM0LDcgKzMzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBkb3VibGUgd2Vha1JhbmRv
bU51bWJlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXQoKTsgfQogICAgIHByb3RlY3RlZDoK
IAotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlk
ZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVz
R2V0UHJvcGVydHlOYW1lcyB8IEpTVmFyaWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRP
d25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwog
CiAgICAgICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewogICAgICAgICAgICAgR2xvYmFs
UHJvcGVydHlJbmZvKGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFsdWUgdiwgdW5zaWduZWQgYSkK
QEAgLTM1OSw3ICszNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNyZWF0
ZVRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSopOwogCi0gICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJz
KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3JpdGVC
YXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KTsKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2xlYXJSYXJlRGF0YShKU0NlbGwqKTsKICAg
ICB9OwogCkBAIC0zNzEsMTkgKzM2NiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0
dXJuIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGFzT2JqZWN0KHZhbHVlKSk7CiAgICAgfQogCi0g
ICAgaW5saW5lIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3du
PiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCkKLSAgICB7Ci0gICAgICAgIEpTVmFyaWFi
bGVPYmplY3Q6OnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkpOwotICAgICAg
ICBtX3JlZ2lzdGVyQXJyYXlTaXplID0gY291bnQ7Ci0gICAgfQotCiAgICAgaW5saW5lIGJvb2wg
SlNHbG9iYWxPYmplY3Q6Omhhc093blByb3BlcnR5Rm9yV3JpdGUoRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNs
b3Q7Ci0gICAgICAgIGlmIChKU1ZhcmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
cywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgaWYgKEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGJvb2wgc2xvdElzV3Jp
dGVhYmxlOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90
LCBzbG90SXNXcml0ZWFibGUpOworICAgICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQodGhpcywg
cHJvcGVydHlOYW1lLCBzbG90LCBzbG90SXNXcml0ZWFibGUpOwogICAgIH0KIAogICAgIGlubGlu
ZSBib29sIEpTR2xvYmFsT2JqZWN0OjpzeW1ib2xUYWJsZUhhc1Byb3BlcnR5KFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyhpbnQg
bnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZSZWdpc3RlcnNU
b0FkZCA+PSAwKTsKKyAgICAKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fcmVnaXN0ZXJzLnNpemUo
KTsKKyAgICBtX3JlZ2lzdGVycy5ncm93KG9sZFNpemUgKyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRk
KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZDsgaS0t
OykKKyAgICAgICAgbV9yZWdpc3RlcnNbb2xkU2l6ZSArIGldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ob2xk
U2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAorI2RlZmluZSBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTeW1ib2xU
YWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFi
bGUuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CitjbGFzcyBSZWdpc3RlcjsKKworLy8gVGhpcyBpcyBhIG1vc3RseSBkcm9wLWlu
IHJlcGxhY2VtZW50IGZvciBKU1ZhcmlhYmxlT2JqZWN0LCBleGNlcHQgdGhhdCBpdCBwcmVzZXJ2
ZXMKKy8vIHRoZSBpbnZhcmlhbnQgdGhhdCBhZnRlciBhIHZhcmlhYmxlIGlzIGNyZWF0ZWQsIGl0
cyBhZGRyZXNzIGluIG1lbW9yeSB3aWxsIG5vdCBjaGFuZ2UKKy8vIHNvIGxvbmcgYXMgdGhlIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QgaXMgYWxpdmUuIFRoaXMgYWxsb3dzIG9wdGltaXphdGlv
bnMgYmFzZWQKKy8vIG9uIGdldHRpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGFuZCBy
ZW1lbWJlcmluZyBpdC4gQXMgd2VsbCwgdW5saWtlIGEKKy8vIEpTVmFyaWFibGVPYmplY3QsIHRo
aXMgd2lsbCBtYW5hZ2UgdGhlIG1lbW9yeSBmb3IgdGhlIHJlZ2lzdGVycyBpdHNlbGYgYW5kIG5l
aXRoZXIKKy8vIHJlcXVpcmVzIG5vciBhbGxvd3MgZm9yIHRoZSBzdWJjbGFzc2VzIHRvIG1hbmFn
ZSB0aGF0IG1lbW9yeS4KKworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCA6IHB1Ymxp
YyBKU1N5bWJvbFRhYmxlT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
U3ltYm9sVGFibGVPYmplY3QgQmFzZTsKKworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVn
aXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQor
ICAgIAorICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRp
YWxpemVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucworICAgIC8vIHRoZSBpbmRleCBv
ZiB0aGUgZmlyc3Qgb25lIGFkZGVkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdp
c3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CisKKyAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSkKKyAgICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KGdsb2JhbERhdGEs
IHN0cnVjdHVyZSwgc3ltYm9sVGFibGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgfQorCisgICAgU2VnbWVudGVkVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPiwgMTY+IG1fcmVnaXN0ZXJzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29w
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMyAr
NjYsMTMgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoSlNDZWxsKiBjZQogICAgICAg
ICAvLyBhIHBvaW50ZXIgY29tcGFyZS4KICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAg
ICAgIGJvb2wgaXNXcml0YWJsZSA9IHRydWU7Ci0gICAgICAgIHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCwgaXNXcml0YWJsZSk7CisgICAgICAgIHN5bWJvbFRh
YmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCwgaXNXcml0YWJsZSk7CiAgICAg
ICAgIGlmICghaXNXcml0YWJsZSkgewogICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVh
dGVUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODEsNyArODEsNyBAQCB2b2lkIEpT
U3RhdGljU2NvcGVPYmplY3Q6OnB1dChKU0NlbGwqIGNlCiB2b2lkIEpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogewogICAgIEpTU3RhdGljU2NvcGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
dGF0aWNTY29wZU9iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlUHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyaWJ1dGVzKSkKKyAgICBpZiAoc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyh0
aGlzT2JqZWN0LCBleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJp
YnV0ZXMpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0RGlyZWN0Vmly
dHUKIAogYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2Vs
bCktPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIHN5bWJv
bFRhYmxlR2V0KGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2VsbCksIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U1N5bWJvbFRhYmxlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKKyNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9p
ZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0
aWNfY2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCktPkpTU3ltYm9sVGFibGVPYmplY3Q6
On5KU1N5bWJvbFRhYmxlT2JqZWN0KCk7Cit9CisKK2Jvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6
ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4oY2VsbCk7CisgICAgaWYgKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCkuY29udGFpbnMocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKK30KKwordm9pZCBKU1N5bWJvbFRhYmxl
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQoreworICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
eW1ib2xUYWJsZU9iamVjdCo+KG9iamVjdCk7CisgICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCk7CisgICAgZm9yIChTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoIShpdC0+c2Vjb25kLmdldEF0
dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKSkKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQt
PmZpcnN0LmdldCgpKSk7CisgICAgfQorICAgIAorICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCit2b2lk
IEpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmlzRHluYW1pY1Njb3Bl
KGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsT2JqZWN0VHlwZToK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTR2xvYmFsT2JqZWN0Kj4odGhpcykt
PmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7CisgICAgY2FzZSBBY3RpdmF0
aW9uT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQWN0aXZh
dGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOworICAg
IGNhc2UgU3RhdGljU2NvcGVPYmplY3RUeXBlOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNTdGF0aWNTY29wZU9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJl
c0R5bmFtaWNDaGVja3MpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0X2gKKyNkZWZp
bmUgSlNTeW1ib2xUYWJsZU9iamVjdF9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgorI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1N5bWJvbFRhYmxlT2JqZWN0IDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNl
OworICAgIAorICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICpt
X3N5bWJvbFRhYmxlOyB9CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKKyAgICAKKyAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NF
UlQgdm9pZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blBy
b3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVu
dW1lcmF0aW9uTW9kZSk7CisgICAgCisgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1
aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OworICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMg
fCBKU05vbkZpbmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAKKyAgICBKU1N5bWJvbFRh
YmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICAgICAgQVNTRVJUKG1fc3ltYm9sVGFibGUpOworICAgIH0KKyAgICAKKyAg
ICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5
bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAorICAgIFN5
bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG9iamVj
dC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cisg
ICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2xvdC5z
ZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5
cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5
cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQoreworICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5
bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlm
IChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlc2NyaXB0b3Iu
c2V0RGVzY3JpcHRvcigKKyAgICAgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgor
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBv
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwKKyAg
ICBib29sJiBzbG90SXNXcml0ZWFibGUpCit7CisgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUo
KSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
c2xvdC5zZXRWYWx1ZShvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkp
OworICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lu
bGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsCisgICAgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVl
KSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOworICAgIAorICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuaW5saW5lR2V0
KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3Ry
aWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xv
YmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxl
UHV0V2l0aEF0dHJpYnV0ZXMoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwKKyAgICBK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsK
KyAgICAKKyAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9iamVjdC0+c3ltYm9sVGFi
bGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChpdGVyID09IG9i
amVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFN5
bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgIEFTU0VSVCghZW50cnku
aXNOdWxsKCkpOworICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgb2Jq
ZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3Qs
IHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBKU1N5bWJvbFRhYmxlT2JqZWN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDExOTUz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3MCArMjksNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKIAotI2luY2x1ZGUgIkpTQWN0
aXZhdGlvbi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNTdGF0
aWNTY29wZU9iamVjdC5oIgotI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVk
ZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpTVmFy
aWFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIHN0YXRpY19jYXN0PEpT
VmFyaWFibGVPYmplY3QqPihjZWxsKS0+SlNWYXJpYWJsZU9iamVjdDo6fkpTVmFyaWFibGVPYmpl
Y3QoKTsKLX0KLQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3Qq
PihjZWxsKTsKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5jb250YWlucyhwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0
dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwotfQotCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgSlNWYXJpYWJsZU9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5l
bmQoKTsKLSAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlm
ICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQotICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKLSAgICB9Ci0gICAgCi0gICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7Ci19Ci0KLWJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVHZXQoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQot
ewotICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChw
cm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkgfCBEb250RGVsZXRlKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBKU1Zhcmlh
YmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJl
c0R5bmFtaWNDaGVja3MpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+dHlwZUlu
Zm8oKS50eXBlKCkpIHsKLSAgICBjYXNlIEdsb2JhbE9iamVjdFR5cGU6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBKU0dsb2JhbE9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29w
ZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGNhc2UgQWN0aXZhdGlvbk9iamVjdFR5cGU6
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0FjdGl2YXRpb24qPih0aGlzKS0+
aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKLSAgICBjYXNlIFN0YXRpY1Nj
b3BlT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RhdGlj
U2NvcGVPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tz
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxl
T2JqZWN0LmgJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiAr
MzAsNyBAQAogI2RlZmluZSBKU1ZhcmlhYmxlT2JqZWN0X2gKIAogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAiSlNTeW1ib2xUYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVy
LmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KQEAgLTQxLDQwICs0MiwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiAgICAgY2xhc3MgUmVnaXN0ZXI7CiAKLSAgICBjbGFzcyBKU1Zhcmlh
YmxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIGNsYXNzIEpTVmFyaWFi
bGVPYmplY3QgOiBwdWJsaWMgSlNTeW1ib2xUYWJsZU9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwotCi0g
ICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuICptX3N5bWJv
bFRhYmxlOyB9Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJv
eShKU0NlbGwqKTsKLQotICAgICAgICBzdGF0aWMgTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQgdm9p
ZCBwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVt
ZXJhdGlvbk1vZGUpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29s
JiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0OworICAgICAgICB0eXBlZGVmIEpTU3ltYm9s
VGFibGVPYmplY3QgQmFzZTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHJlZ2lz
dGVyQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KIAog
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGNvbnN0ICogYWRkcmVzc09mUmVnaXN0ZXJz
KCkgY29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9CiAgICAgICAgIHN0YXRpYyBzaXplX3Qg
b2Zmc2V0T2ZSZWdpc3RlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNWYXJpYWJsZU9i
amVjdCwgbV9yZWdpc3RlcnMpOyB9CiAKLSAgICAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oVmFyaWFibGVPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwot
ICAgICAgICB9Ci0gICAgICAgIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpT
Tm9uRmluYWxPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKIAogICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUmVnaXN0ZXIq
IHJlZ2lzdGVycykKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICA6IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzeW1i
b2xUYWJsZSkKICAgICAgICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0
ZUJhcnJpZXI8VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgICAgICB7CiAgICAgICAgIH0KQEAg
LTgyLDc2ICs2NiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3lt
Ym9sVGFibGUpOwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgPT0gc2l6ZW9mKFJlZ2lzdGVyKSwgUmVnaXN0ZXJfc2hvdWxkX2JlX3NhbWVf
c2l6ZV9hc19Xcml0ZUJhcnJpZXIpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc093bkFycmF5
UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IGNvcHlSZWdpc3RlckFycmF5KEpTR2xvYmFsRGF0
YSYsIFdyaXRlQmFycmllcjxVbmtub3duPiogc3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxs
ZnJhbWVTdGFydHMpOwogICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+
IHJlZ2lzdGVyQXJyYXkpOwogCi0gICAgICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzeW1i
b2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBi
b29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xv
dElzV3JpdGVhYmxlKTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgICAgICBTeW1ib2xUYWJsZSogbV9z
eW1ib2xUYWJsZTsgLy8gTWFwcyBuYW1lIC0+IG9mZnNldCBmcm9tICJyIiBpbiByZWdpc3RlciBm
aWxlLgogICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIg
aW4gdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxV
bmtub3duPiA+IG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBvZiByZWdpc3Rl
cnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVycyBvdXQg
b2YgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAgfTsKIAotICAgIGlubGluZSBib29sIEpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBz
eW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAg
ICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKLSAgICB7
Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdl
dChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKCFlbnRyeS5pc051bGwo
KSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLmdldCgpKTsKLSAgICAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRP
bmx5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3lt
Ym9sVGFibGVQdXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBBU1NFUlQoIUhl
YXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykp
OwotCi0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGlu
ZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKGVudHJ5LmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZW50cnkuaXNSZWFk
T25seSgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9y
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVj
dDo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCi0gICAgewotICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6
OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwotCi0gICAgICAgIFN5bWJvbFRhYmxl
OjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpOwotICAgICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZSgpLmVuZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0
ZXItPnNlY29uZDsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGVu
dHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCiAgICAgaW5saW5lIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiBKU1ZhcmlhYmxlT2JqZWN0Ojpjb3B5UmVnaXN0ZXJBcnJheShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFdyaXRlQmFycmllcjxVbmtub3duPiogc3JjLCBzaXplX3QgY291bnQs
IHNpemVfdCBjYWxsZnJhbWVTdGFydHMpCiAgICAgewogICAgICAgICBPd25BcnJheVB0cjxXcml0
ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3Jp
dGVCYXJyaWVyPFVua25vd24+W2NvdW50XSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145931</attachid>
            <date>2012-06-05 21:49:32 -0700</date>
            <delta_ts>2012-06-05 23:56:34 -0700</delta_ts>
            <desc>the code is written</desc>
            <filename>globalobj_patch_3.diff</filename>
            <type>text/plain</type>
            <size>75321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBA
QAorMjAxMi0wNi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzIQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0lu
c3RydWN0aW9uLmg6CisgICAgICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3Ry
dWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAqIGRmZy9E
RkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1Zhck51bWJl
cik6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNSZWdpc3Rl
clBvaW50ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnJlZ2lzdGVyUG9pbnRlcik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSGVhcCk6CisgICAgICAgIChKU0M6
OkhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6
OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRf
Z2xvYmFsX3Zhcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2dsb2JhbF92YXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAg
KEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0
OjpwdXREaXJlY3RWaXJ0dWFsKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmlu
ZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmFkZFN0
YXRpY0dsb2JhbHMpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAo
SlNHbG9iYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxP
YmplY3QpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Omhh
c093blByb3BlcnR5Rm9yV3JpdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgpOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMpOgorICAgICAgICAoSlND
OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnJlZ2lzdGVyQXQpOgorICAgICAgICAoSlNDOjpKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0Ojphc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpK
U1N0YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKToKKyAgICAgICAgKEpTQzo6SlNT
dGF0aWNTY29wZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKiBydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAg
IChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpKU1N5
bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9s
VGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU1N5bWJv
bFRhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xU
YWJsZU9iamVjdDo6aXNEeW5hbWljU2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1N5bWJvbFRh
YmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6c3ltYm9sVGFi
bGUpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpKU1N5bWJvbFRhYmxlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZUdldCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRh
YmxlUHV0KToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6Cisg
ICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU1ZhcmlhYmxl
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVj
dCk6CisgICAgICAgIChKU0M6OkpTVmFyaWFibGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKwogMjAxMi0w
Ni0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBDRkcg
c2ltcGxpZmljYXRpb24gc2hvdWxkIG5vdCBhdHRlbXB0IHRvIGRlcmVmIG5vZGVzIGluc2lkZSBv
ZiBhbiB1bnJlYWNoYWJsZSBzdWJncmFwaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiAr
MTM1LDggQEAKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYx
NDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTRDMTRDM0NENDMwMDdDM0RCMSAv
KiBERkdCeXRlQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjVGMDhDQzE0NkJFNjAyMDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0Iy
OTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdD
b21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VF
MDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07CisJCTBGOTE5RDBE
MTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0Qg
LyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0
YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwICovOyB9OwogCQkw
RjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0MTRDQTdEQzEwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMz
Mjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLzsgfTsKQEAgLTgyOCw2
ICs4MzAsOCBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGN0Iy
OTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQ0NhbGxI
ZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5RDA5MTU3RUUwOUQw
MDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2Jq
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjkzMTRDQTdEQzEwMDg1
RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxsTGlua1N0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeUlkU3RhdHVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NDEsNiArMTk0NSw4IEBACiAJCQkJ
ODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oICovLAogCQkJCTI2
MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi8sCiAJCQkJMjYw
MEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8sCisJCQkJMEY5MTlE
MDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwICovLAorCQkJCTBG
OTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJ
MTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4
NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8sCiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAx
RkY2MEY3IC8qIEpTVmFsdWUuY3BwICovLApAQCAtMjY1Nyw2ICsyNjYzLDcgQEAKIAkJCQkwRjNC
M0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdE
IC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzIyOSw2ICszMjM2
LDcgQEAKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1
NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGOTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjMsMTUgKzkyMywxNSBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewogICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGdldF9nbG9iYWxfdmFyXHQgJXMsICVkXG4i
LCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIGluZGV4KTsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gKCsraXQpLT51
LnJlZ2lzdGVyUG9pbnRlcjsKKyAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGdldF9nbG9iYWxf
dmFyXHQgJXMsICVkKCVwKVxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0
YSgpLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKSwg
cmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyOiB7Ci0gICAgICAgICAg
ICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gKCsraXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsK
ICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0
YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJcdCAlZCwgJXNcbiIsIGxvY2F0aW9uLCBpbmRleCwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAgICAgZGF0YUxvZygiWyU0
ZF0gcHV0X2dsb2JhbF92YXJcdCAlZCglcCksICVzXG4iLCBsb2NhdGlvbiwgbV9nbG9iYWxPYmpl
Y3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlciksIHJlZ2lzdGVyUG9pbnRlciwg
cmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6IHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxMTk1MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDYgKzE5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJbnN0cnVj
dGlvbihMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSB7IHUuY2FsbExpbmtJbmZvID0g
Y2FsbExpbmtJbmZvOyB9CiAgICAgICAgIAogICAgICAgICBJbnN0cnVjdGlvbihWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUpIHsgdS5wcm9maWxlID0gcHJvZmlsZTsgfQorICAgICAgICAKKyAgICAgICAg
SW5zdHJ1Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpIHsgdS5y
ZWdpc3RlclBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KIAogICAgICAgICB1bmlvbiB7CiAg
ICAgICAgICAgICBPcGNvZGUgb3Bjb2RlOwpAQCAtMTk4LDYgKzIwMCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0cnVjdHVyZTsK
ICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNo
YWluOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+IGpzQ2VsbDsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyOwogICAgICAgICAg
ICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYzsKICAgICAgICAgICAgIExM
SW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUq
IHByb2ZpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoUHJvCiAgICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2YXJTdGFjay5zaXplKCkg
KyBmdW5jdGlvblN0YWNrLnNpemUoKTsKICAgICBpZiAoIW5ld0dsb2JhbHMpCiAgICAgICAgIHJl
dHVybjsKLSAgICBnbG9iYWxPYmplY3QtPnJlc2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZS0+c2l6
ZSgpICsgbmV3R2xvYmFscyk7CisgICAgZ2xvYmFsT2JqZWN0LT5hZGRSZWdpc3RlcnMobmV3R2xv
YmFscyk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0
YWNrW2ldOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVy
YXRvcjo6cmVzb2x2ZQogICAgICAgICAgICAgZmxhZ3MgfD0gUmVzb2x2ZVJlc3VsdDo6RHluYW1p
Y0ZsYWc7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSAgICAgICAgCi0gICAgICAgIEpT
VmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxl
T2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKKyAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogY3Vy
cmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjdXJyZW50
U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxl
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogCiAgICAgICAgIC8v
IEZvdW5kIHRoZSBwcm9wZXJ0eQpAQCAtMTIzNCw3ICsxMjM0LDcgQEAgUmVzb2x2ZVJlc3VsdCBC
eXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZQogICAgICAgICBKU09iamVjdCogY3VycmVudFNjb3Bl
ID0gaXRlci0+Z2V0KCk7CiAgICAgICAgIGlmICghY3VycmVudFNjb3BlLT5pc1ZhcmlhYmxlT2Jq
ZWN0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCog
Y3VycmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50
U2NvcGUpOworICAgICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmpl
Y3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CiAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3QtPnN5bWJvbFRh
YmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdAogCiAgICAgICAgIHByb2ZpbGUgPSBlbWl0UHJv
ZmlsZWRPcGNvZGUob3BfZ2V0X2dsb2JhbF92YXIpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29s
dmVSZXN1bHQuaW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgmcmVzb2x2
ZVJlc3VsdC5nbG9iYWxPYmplY3QoKS0+cmVnaXN0ZXJBdChyZXNvbHZlUmVzdWx0LmluZGV4KCkp
KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1
cm4gZHN0OwogCkBAIC0xNDc0LDcgKzE0NzQsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFB1dFN0CiAgICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgog
ICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6UmVhZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBl
bWl0T3Bjb2RlKG9wX3B1dF9nbG9iYWxfdmFyKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHJlc29sdmVSZXN1bHQuaW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgmcmVzb2x2ZVJlc3VsdC5nbG9iYWxPYmplY3QoKS0+cmVnaXN0ZXJBdChyZXNvbHZlUmVzdWx0
LmluZGV4KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRleCgp
KTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNSwyMSArMTE1LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAgIHN0
YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3JHbG9iYWxWYXIoR1BSUmVnIGdsb2JhbCwgaW50MzJfdCB2
YXJOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhnbG9iYWwsIHZhck51bWJl
ciAqIHNpemVvZihSZWdpc3RlcikpOwotICAgIH0KLQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0Zv
ckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvckdsb2JhbFZhcihHUFJSZWcgZ2xv
YmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKGds
b2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLQogICAgIHN0YXRp
YyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAg
ICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2
aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTk1MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIxNiwxNCArMjIxNiwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsKICAg
ICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGdldEdsb2JhbFZhciA9IGFkZFRvR3Jh
cGgoR2V0R2xvYmFsVmFyLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCks
IE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggZ2V0R2xvYmFsVmFy
ID0gYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhtX2lubGluZVN0YWNrVG9wLT5nbG9i
YWxPYmplY3QoKS0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5yZWdpc3RlclBvaW50ZXIpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRHbG9iYWxWYXIpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2dsb2JhbF92YXIpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewogICAgICAgICAgICAgTm9kZUluZGV4
IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIs
IE9wSW5mbyhtX2lubGluZVN0YWNrVG9wLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0UmVnaXN0ZXJJ
c0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpKSwg
dmFsdWUpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3Bw
CShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE4ICsxOTQsMTggQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdsb2JhbFZh
ckxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCisgICAgTm9kZUluZGV4IGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXgg
aW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVt
YmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5j
b2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUucmVn
aXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFB1
dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJO
dW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09
IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIo
KSA9PSByZWdpc3RlclBvaW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNo
aWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtMjE3LDcgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7
CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKHVu
c2lnbmVkIHZhck51bWJlciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICBOb2Rl
SW5kZXggZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJl
Z2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CkBAIC0yMjYsMTIgKzIyNiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJl
cigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lz
dGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUudmFy
TnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
cmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IApAQCAtOTgyLDEzICs5ODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRmluYWxseSBoYW5k
bGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBidXQgd2UgY2FuIHN0
aWxsCiAgICAgICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBzb21lIHN1YnRsZSBj
b25kaXRpb25zIGFyZSBtZXQuCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUudmFyTnVtYmVy
KCksIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkpOworICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUucmVn
aXN0ZXJQb2ludGVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBpZiAobV9maXhwb2ludFN0YXRlID09
IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIoKSwg
Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAg
ICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9p
bnRlcigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2Rl
SW5kZXggbm9kZUluZGV4KQogICAgICAgICBkYXRhTG9nKCIlc3ZhciV1IiwgaGFzUHJpbnRlZCA/
ICIsICIgOiAiIiwgbm9kZS52YXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVl
OwogICAgIH0KKyAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgeworICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgIiVzZ2xvYmFsJXUoJXApIiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5maW5k
UmVnaXN0ZXJJbmRleChub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwKKyAgICAgICAgICAgIG5vZGUu
cmVnaXN0ZXJQb2ludGVyKCkpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICB9CiAg
ICAgaWYgKG5vZGUuaGFzSWRlbnRpZmllcigpKSB7CiAgICAgICAgIGRhdGFMb2coIiVzaWQldXsl
c30iLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpLnVzdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3ICs0MjEsNyBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0R2xvYmFsVmFy
IHx8IG9wKCkgPT0gR2V0U2NvcGVkVmFyIHx8IG9wKCkgPT0gUHV0U2NvcGVkVmFyOworICAgICAg
ICByZXR1cm4gb3AoKSA9PSBHZXRTY29wZWRWYXIgfHwgb3AoKSA9PSBQdXRTY29wZWRWYXI7CiAg
ICAgfQogCiAgICAgdW5zaWduZWQgdmFyTnVtYmVyKCkKQEAgLTQyOSw2ICs0MjksMTYgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoaGFzVmFyTnVtYmVyKCkpOwogICAgICAgICByZXR1
cm4gbV9vcEluZm87CiAgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVnaXN0ZXJQb2ludGVyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBvcCgpID09IFB1
dEdsb2JhbFZhcjsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdp
c3RlclBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CisgICAgfQogCiAgICAgYm9vbCBoYXNTY29wZUNo
YWluRGVwdGgoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU2NCwzMyArMzU2NCwzMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwogCi0gICAgICAgIEpTVmFyaWFibGVP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmln
aW4pOwotICAgICAgICBtX2ppdC5sb2FkUHRyKGNvbnN0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25v
d24+Kio+KGdsb2JhbE9iamVjdC0+YWRkcmVzc09mUmVnaXN0ZXJzKCkpLCByZXN1bHQuZ3ByKCkp
OwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvckdsb2JhbFZhcihyZXN1
bHQuZ3ByKCksIG5vZGUudmFyTnVtYmVyKCkpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwg
bm9kZS52YXJOdW1iZXIoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7
CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2Fk
LmdwcigpLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRh
ZykpLCByZXN1bHRUYWcuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogCi0g
ICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQ
YXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAog
ICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRo
aXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAg
ICAgIEdQUlJlZyBnbG9iYWxPYmplY3RSZWcgPSBnbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0UmVnKTsKLQotICAgICAgICB3cml0ZUJhcnJpZXIo
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLnRhZ0dQUigpLCBu
b2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7
CisgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFy
cmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUudGFnR1BS
KCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNo
UmVnKTsKKyAgICAgICAgfQogCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZ2xvYmFsT2JqZWN0UmVnLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lz
dGVycygpKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BS
KCksIEpJVENvbXBpbGVyOjp0YWdGb3JHbG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1i
ZXIoKSkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3JHbG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1iZXIoKSkp
OworICAgICAgICAvLyBGSVhNRTogaWYgd2UgaGFwcGVuIHRvIGhhdmUgYSBzcGFyZSByZWdpc3Rl
ciAtIGFuZCBfT05MWV8gaWYgd2UgaGFwcGVuIHRvIGhhdmUKKyAgICAgICAgLy8gYSBzcGFyZSBy
ZWdpc3RlciAtIGEgZ29vZCBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcHV0IHRoZSByZWdpc3Rl
ciBwb2ludGVyIGludG8KKyAgICAgICAgLy8gYSByZWdpc3RlciBhbmQgdGhlbiBkbyBhIHplcm8g
b2Zmc2V0IHN0b3JlIGZvbGxvd2VkIGJ5IGEgZm91ci1vZmZzZXQgc3RvcmUgKG9yCisgICAgICAg
IC8vIHZpY2UtdmVyc2EgZGVwZW5kaW5nIG9uIGVuZGlhbm5lc3MpLgorICAgICAgICBtX2ppdC5z
dG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQb2ludGVy
KCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9kZS5yZWdp
c3RlclBvaW50ZXIoKS0+cGF5bG9hZFBvaW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE5NTMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzU5Myw5ICszNTkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAg
IG1faml0LmxvYWRQdHIoZ2xvYmFsT2JqZWN0LT5hZGRyZXNzT2ZSZWdpc3RlcnMoKSwgcmVzdWx0
LmdwcigpKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvckds
b2JhbFZhcihyZXN1bHQuZ3ByKCksIG5vZGUudmFyTnVtYmVyKCkpLCByZXN1bHQuZ3ByKCkpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKG5vZGUucmVnaXN0ZXJBZGRyZXNzKCksIHJlc3VsdC5ncHIo
KSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNjAzLDE4ICszNjAxLDE1IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CiAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RSZWcg
PSBnbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKLQotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0
UmVnKTsKLQotICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JW
YXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RSZWcsIEpTVmFyaWFibGVPYmplY3Q6Om9m
ZnNldE9mUmVnaXN0ZXJzKCkpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHNjcmF0Y2hSZWcs
IG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5h
YmxlZCgpKSB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFi
bGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2pp
dC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgbm9kZS5yZWdpc3RlckFkZHJlc3MoKSk7CiAKICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2
b2lkKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICAgICAgc3Rh
dGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwogICAgICAgICBz
dGF0aWMgdWludDhfdCogYWRkcmVzc09mQ2FyZEZvcihKU0NlbGwqKTsKQEAgLTI4Miw2ICsyODMs
MTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxs
KS0+c2V0TWFya2VkKGNlbGwpOwogICAgIH0KIAorICAgIGlubGluZSBib29sIEhlYXA6OmlzV3Jp
dGVCYXJyaWVyRW5hYmxlZCgpCisgICAgeworI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisKICNpZiBFTkFCTEUoR0dDKQogICAgIGlu
bGluZSB1aW50OF90KiBIZWFwOjphZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCogY2VsbCkKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBmb3IgKFNj
b3BlQ2hhaW5Ob2RlKiBub2RlID0gc2NvcGVDaGFpbjsgOyBub2RlID0gbm9kZS0+bmV4dC5nZXQo
KSkgewogICAgICAgICBBU1NFUlQobm9kZSk7CiAgICAgICAgIGlmIChub2RlLT5vYmplY3QtPmlz
VmFyaWFibGVPYmplY3QoKSAmJiAhbm9kZS0+b2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3Qq
Pihub2RlLT5vYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgdmFyaWFibGVPYmplY3QgPSBqc0Nh
c3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KG5vZGUtPm9iamVjdC5nZXQoKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTI4NjAsMzAgKzI4NjAsMjggQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7CiAgICAgfQogICAgIERFRklORV9PUENPREUob3BfZ2V0X2dsb2JhbF92YXIpIHsKLSAg
ICAgICAgLyogZ2V0X2dsb2JhbF92YXIgZHN0KHIpIGdsb2JhbE9iamVjdChjKSBpbmRleChuKQor
ICAgICAgICAvKiBnZXRfZ2xvYmFsX3ZhciBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHJlZ2lzdGVy
UG9pbnRlcihuKQogCiAgICAgICAgICAgIEdldHMgdGhlIGdsb2JhbCB2YXIgYXQgZ2xvYmFsIHNs
b3QgaW5kZXggYW5kIHBsYWNlcyBpdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICAqLwogICAg
ICAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IHNjb3BlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgQVNTRVJUKHNjb3Bl
LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgaW50IGluZGV4ID0gdlBDWzJdLnUub3BlcmFu
ZDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENb
Ml0udS5yZWdpc3RlclBvaW50ZXI7CiAKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRz
dCkgPSBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCkuZ2V0KCk7CisgICAgICAgIGNhbGxGcmFtZS0+
dW5jaGVja2VkUihkc3QpID0gcmVnaXN0ZXJQb2ludGVyLT5nZXQoKTsKICAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dsb2JhbF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7CiAgICAgfQogICAgIERFRklORV9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpIHsKLSAg
ICAgICAgLyogcHV0X2dsb2JhbF92YXIgZ2xvYmFsT2JqZWN0KGMpIGluZGV4KG4pIHZhbHVlKHIp
CisgICAgICAgIC8qIHB1dF9nbG9iYWxfdmFyIGdsb2JhbE9iamVjdChjKSByZWdpc3RlclBvaW50
ZXIobikgdmFsdWUocikKICAgICAgICAgIAogICAgICAgICAgICBQdXRzIHZhbHVlIGludG8gZ2xv
YmFsIHNsb3QgaW5kZXguCiAgICAgICAgICAqLwogICAgICAgICBKU0dsb2JhbE9iamVjdCogc2Nv
cGUgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogICAgICAgICBBU1NFUlQoc2NvcGUtPmlz
R2xvYmFsT2JqZWN0KCkpOwotICAgICAgICBpbnQgaW5kZXggPSB2UENbMV0udS5vcGVyYW5kOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IHZQQ1sxXS51
LnJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgaW50IHZhbHVlID0gdlBDWzJdLnUub3BlcmFuZDsK
ICAgICAgICAgCi0gICAgICAgIHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KS5zZXQoKmdsb2JhbERh
dGEsIHNjb3BlLCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7CisgICAgICAgIHJlZ2lz
dGVyUG9pbnRlci0+c2V0KCpnbG9iYWxEYXRhLCBzY29wZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5q
c1ZhbHVlKCkpOwogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3Zh
cik7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJl
dmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNjAsMTMgKzEwNjAsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3Njb3BlZF92YXIoSW5zdHJ1Ywogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgIEFT
U0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGludCBpbmRleCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBsb2FkUHRyKCZnbG9iYWxPYmpl
Y3QtPm1fcmVnaXN0ZXJzLCByZWdUMik7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdp
c3RlclBvaW50ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50ZXI7CiAK
LSAgICBlbWl0TG9hZChpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CisgICAgbG9hZDMyKHJl
Z2lzdGVyUG9pbnRlci0+dGFnUG9pbnRlcigpLCByZWdUMSk7CisgICAgbG9hZDMyKHJlZ2lzdGVy
UG9pbnRlci0+cGF5bG9hZFBvaW50ZXIoKSwgcmVnVDApOwogICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIG1hcChtX2J5
dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfZ2xvYmFsX3ZhciksIGRzdCwgcmVn
VDEsIHJlZ1QwKTsKQEAgLTEwNzQsMTggKzEwNzEsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2dsb2JhbF92YXIoSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3ZhcihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBpbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBy
ZWdpc3RlclBvaW50ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXI7
CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDIpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihn
bG9iYWxPYmplY3QsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVC
YXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOworICAgIAorICAgIGlmIChIZWFwOjppc1dyaXRlQmFy
cmllckVuYWJsZWQoKSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgcmVnVDIpOworICAgICAgICAKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmpl
Y3QsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MpOworICAgIH0KIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNW
YXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QyKTsKLSAgICBlbWl0U3Rv
cmUoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDEsIHJlZ2lz
dGVyUG9pbnRlci0+dGFnUG9pbnRlcigpKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCByZWdpc3RlclBv
aW50ZXItPnBheWxvYWRQb2ludGVyKCkpOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BD
T0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3ZhciksIHZhbHVlLCByZWdUMSwgcmVnVDApOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAsOSArMTAxMCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgbG9hZFB0cigmZ2xvYmFsT2JqZWN0LT5tX3JlZ2lzdGVycywgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CisgICAgbG9hZFB0cihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50ZXIsIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKIH0KQEAgLTEwMjIsMTEgKzEwMjAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1YwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLQotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIo
Z2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRl
QmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICAKKyAgICBzdG9yZVB0cihyZWdUMCwgY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2Jq
ZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzKTsKIH0KIAogdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0
Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTA0MSwxMyArMTA0MSwxMCBAQCBfbGxpbnRfb3BfcHV0X3Njb3BlZF92YXI6CiAKIF9sbGlu
dF9vcF9nZXRfZ2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGkgOFtQ
Q10sIHQxCisgICAgbG9hZHAgOFtQQ10sIHQwCiAgICAgbG9hZGkgNFtQQ10sIHQzCi0gICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCi0gICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAK
LSAgICBsb2FkaSBUYWdPZmZzZXRbdDAsIHQxLCA4XSwgdDIKLSAgICBsb2FkaSBQYXlsb2FkT2Zm
c2V0W3QwLCB0MSwgOF0sIHQxCisgICAgbG9hZGkgVGFnT2Zmc2V0W3QwXSwgdDIKKyAgICBsb2Fk
aSBQYXlsb2FkT2Zmc2V0W3QwXSwgdDEKICAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQz
LCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQogICAgIGxvYWRp
IDEyW1BDXSwgdDMKQEAgLTEwNTgsMTQgKzEwNTUsMTEgQEAgX2xsaW50X29wX2dldF9nbG9iYWxf
dmFyOgogX2xsaW50X29wX3B1dF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAg
ICBsb2FkaSA4W1BDXSwgdDEKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9i
amVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAorICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKLSAgICBsb2FkaSA0W1BDXSwgdDEKICAgICB3
cml0ZUJhcnJpZXIodDIsIHQzKQotICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwLCB0MSwgOF0K
LSAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQorICAgIHN0b3JlaSB0Miwg
VGFnT2Zmc2V0W3QwXQorICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MF0KICAgICBkaXNw
YXRjaCgzKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtODk1LDI4ICs4OTUsMjIgQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFyOgogCiBf
bGxpbnRfb3BfZ2V0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRp
cyAxNltQQiwgUEMsIDhdLCB0MQorICAgIGxvYWRwIDE2W1BCLCBQQywgOF0sIHQwCiAgICAgbG9h
ZGlzIDhbUEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2Jh
bE9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAotICAgIGxvYWRwIFt0MCwgdDEsIDhdLCB0Mgot
ICAgIHN0b3JlcCB0MiwgW2NmciwgdDMsIDhdCi0gICAgbG9hZHAgMjRbUEIsIFBDLCA4XSwgdDMK
LSAgICB2YWx1ZVByb2ZpbGUodDIsIHQzKQorICAgIGxvYWRwIFt0MF0sIHQxCisgICAgc3RvcmVw
IHQxLCBbY2ZyLCB0MywgOF0KKyAgICBsb2FkcCAyNFtQQiwgUEMsIDhdLCB0MAorICAgIHZhbHVl
UHJvZmlsZSh0MSwgdDApCiAgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRfb3BfcHV0X2dsb2Jh
bF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0
MQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9n
bG9iYWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3JlZ2lzdGVy
c1t0MF0sIHQwCisgICAgbG9hZHAgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDEsIHQyKQotICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgd3JpdGVC
YXJyaWVyKHQyKQotICAgIHN0b3JlcCB0MiwgW3QwLCB0MSwgOF0KKyAgICBzdG9yZXAgdDIsIFt0
MF0KICAgICBkaXNwYXRjaCgzKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEUKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9i
amVjdCo+KGNlbGwpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVh
cCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAodGhpc09iamVj
dC0+c3ltYm9sVGFibGVQdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSkpCisgICAgaWYgKHN5bWJvbFRhYmxlUHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgSlNWYXJpYWJsZU9iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOwogfQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnB1dERpcmVjdFZpcnR1YWwoSlMKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAot
ICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSlNWYWx1ZSB2YWx1ZUJlZm9yZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBKU0dsb2Jh
bE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSgogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdDsKICAgICAvLyBzaWxlbnRseSBpZ25vcmUgYXR0ZW1wdHMgdG8gYWRkIGFjY2Vzc29ycyBh
bGlhc2luZyB2YXJzLgotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkg
JiYgdGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBp
ZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHN5bWJvbFRhYmxlR2V0KHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CkBAIC0zNDUsNyArMzQ1LDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CiAgICAgQ09NUElMRV9BU1NFUlQo
U3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLSAgICBKU1Zhcmlh
YmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX2dsb2JhbFNjb3Bl
Q2hhaW4pOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1fbWV0aG9k
Q2FsbER1bW15KTsKQEAgLTM5MywxNyArMzkzLDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3Qt
Pm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2Jq
ZWN0LT5tX3N0cmluZ09iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9y
LCAmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKLQotICAgIGlmICh0
aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkpIHsKLSAgICAgICAgLy8gT3V0c2lkZSB0aGUgZXhl
Y3V0aW9uIG9mIGdsb2JhbCBjb2RlLCB3aGVuIG91ciB2YXJpYWJsZXMgYXJlIHRvcm4gb2ZmLAot
ICAgICAgICAvLyB3ZSBjYW4gbWFyayB0aGUgdG9ybi1vZmYgYXJyYXkuCi0gICAgICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5nZXQoKSwgdGhpc09i
amVjdC0+bV9yZWdpc3RlckFycmF5U2l6ZSk7Ci0gICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0LT5t
X3JlZ2lzdGVycykgewotICAgICAgICAvLyBEdXJpbmcgZXhlY3V0aW9uIG9mIGdsb2JhbCBjb2Rl
LCB3aGVuIG91ciB2YXJpYWJsZXMgYXJlIGluIHRoZSByZWdpc3RlciBmaWxlLAotICAgICAgICAv
LyB0aGUgc3ltYm9sIHRhYmxlIHRlbGxzIHVzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGVyZSBhcmUs
IGFuZCByZWdpc3RlcnMKLSAgICAgICAgLy8gcG9pbnRzIHRvIHdoZXJlIHRoZXkgZW5kLCBhbmQg
dGhlIHJlZ2lzdGVycyB1c2VkIGZvciBleGVjdXRpb24gYmVnaW4uCi0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzIC0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS5zaXplKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuc2l6ZSgpKTsKLSAgICB9
CiB9CiAKIEV4ZWNTdGF0ZSogSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKQpAQCAtNDExLDI2
ICs0MDAsOSBAQCBFeGVjU3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKICAgICBy
ZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9nbG9iYWxDYWxsRnJhbWUgKyBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemUpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNpemVS
ZWdpc3RlcnMoc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgLy8gUHJldmlvdXMgZHVwbGljYXRlIHN5
bWJvbHMgbWF5IGhhdmUgY3JlYXRlZCBzcGFyZSBjYXBhY2l0eSBpbiBtX3JlZ2lzdGVyQXJyYXku
Ci0gICAgaWYgKG5ld1NpemUgPD0gbV9yZWdpc3RlckFycmF5U2l6ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVyQXJyYXlTaXplOwotICAgIE93bkFy
cmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5
UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bbmV3U2l6ZV0pOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2xkU2l6ZTsgKytpKQotICAgICAgICByZWdpc3RlckFycmF5W2ldLnNldChn
bG9iYWxEYXRhKCksIHRoaXMsIG1fcmVnaXN0ZXJBcnJheVtpXS5nZXQoKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyQXJy
YXlbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lz
dGVycyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7Ci0gICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywg
cmVnaXN0ZXJBcnJheS5yZWxlYXNlKCksIG5ld1NpemUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2Jq
ZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNv
dW50KQogewotICAgIHJlc2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZSgpLnNpemUoKSArIGNvdW50
KTsKKyAgICBhZGRSZWdpc3RlcnMoY291bnQpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyYgZ2xvYmFsID0gZ2xvYmFs
c1tpXTsKQEAgLTQ0OCw3ICs0MjAsNyBAQCBib29sIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9i
YWxPYmplY3QqPihjZWxsKTsKICAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTVmFyaWFi
bGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNP
YmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAg
IHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCiBib29sIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCkBAIC00NTYsNyArNDI4LDcgQEAgYm9vbCBK
U0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcgogICAgIEpTR2xvYmFsT2JqZWN0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBpZiAoZ2V0
U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTVmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0
ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVz
Y3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBzeW1i
b2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCiB2
b2lkIEpTR2xvYmFsT2JqZWN0OjpjbGVhclJhcmVEYXRhKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSmF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZEZ1bmN0aW9uUHRyIGphdmFTY3JpcHRF
eHBlcmltZW50c0VuYWJsZWQ7CiAgICAgfTsKIAotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDog
cHVibGljIEpTVmFyaWFibGVPYmplY3QgeworICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVi
bGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIHByaXZhdGU6CiAgICAgICAgIHR5
cGVkZWYgSGFzaFNldDxSZWZQdHI8T3BhcXVlSlNXZWFrT2JqZWN0TWFwPiA+IFdlYWtNYXBTZXQ7
CiAKQEAgLTkwLDcgKzkwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAK
LSAgICAgICAgc2l6ZV90IG1fcmVnaXN0ZXJBcnJheVNpemU7CiAgICAgICAgIFJlZ2lzdGVyIG1f
Z2xvYmFsQ2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZV07CiAKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFNjb3BlQ2hhaW5Ob2RlPiBtX2dsb2JhbFNjb3BlQ2hhaW47CkBA
IC0xNjQsNyArMTYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKKyAgICAg
ICAgdHlwZWRlZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKICAgICAgICAgc3Rh
dGljIEpTR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgewpAQCAtMTc3LDggKzE3Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBH
bG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSAwKQotICAg
ICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3lt
Ym9sVGFibGUsIDApCi0gICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKKyAgICAg
ICAgICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
ICZtX3N5bWJvbFRhYmxlKQogICAgICAgICAgICAgLCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQogICAg
ICAgICAgICAgLCBtX3dlYWtSYW5kb20oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJl
cigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQogICAg
ICAgICAgICAgLCBtX2V2YWxFbmFibGVkKHRydWUpCkBAIC0zMDgsOCArMzA2LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0RXZhbEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1f
ZXZhbEVuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgICAgIGJvb2wgZXZhbEVuYWJsZWQoKSB7IHJl
dHVybiBtX2V2YWxFbmFibGVkOyB9CiAKLSAgICAgICAgdm9pZCByZXNpemVSZWdpc3RlcnMoc2l6
ZV90IG5ld1NpemUpOwotCiAgICAgICAgIHZvaWQgcmVzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRh
JiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSgpIGNvbnN0IHsgcmV0dXJuICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7IH0KQEAg
LTMzNCw3ICszMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIHdlYWtSYW5k
b21OdW1iZXIoKSB7IHJldHVybiBtX3dlYWtSYW5kb20uZ2V0KCk7IH0KICAgICBwcm90ZWN0ZWQ6
CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
IAogICAgICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKICAgICAgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyhjb25zdCBJZGVudGlmaWVyJiBpLCBKU1ZhbHVlIHYsIHVuc2lnbmVkIGEp
CkBAIC0zNTksNyArMzU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjcmVh
dGVUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqKTsKIAotICAgICAgICB2b2lkIHNldFJlZ2lzdGVy
cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRl
QmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNsZWFyUmFyZURhdGEoSlNDZWxsKik7CiAg
ICAgfTsKIApAQCAtMzcxLDE5ICszNjYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihhc09iamVjdCh2YWx1ZSkpOwogICAgIH0KIAot
ICAgIGlubGluZSB2b2lkIEpTR2xvYmFsT2JqZWN0OjpzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4gPiByZWdpc3RlckFycmF5LCBzaXplX3QgY291bnQpCi0gICAgewotICAgICAgICBKU1Zhcmlh
YmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5KTsKLSAgICAg
ICAgbV9yZWdpc3RlckFycmF5U2l6ZSA9IGNvdW50OwotICAgIH0KLQogICAgIGlubGluZSBib29s
IEpTR2xvYmFsT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eUZvcldyaXRlKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90OwotICAgICAgICBpZiAoSlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIGlmIChKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBib29sIHNsb3RJc1dy
aXRlYWJsZTsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xv
dCwgc2xvdElzV3JpdGVhYmxlKTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXMs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc2xvdElzV3JpdGVhYmxlKTsKICAgICB9CiAKICAgICBpbmxp
bmUgYm9vbCBKU0dsb2JhbE9iamVjdDo6c3ltYm9sVGFibGVIYXNQcm9wZXJ0eShQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2ludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRl
eCh2b2lkKiByZWdpc3RlckFkZHJlc3MpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IG1fcmVn
aXN0ZXJzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAoJm1fcmVnaXN0ZXJzW2ldICE9IHJl
Z2lzdGVyQWRkcmVzcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm4gaTsK
KyAgICB9CisgICAgQ1JBU0goKTsKK30KKworaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCkKK3sKKyAgICBBU1NFUlQo
bnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCA+PSAwKTsKKyAgICAKKyAgICBzaXplX3Qgb2xkU2l6ZSA9
IG1fcmVnaXN0ZXJzLnNpemUoKTsKKyAgICBtX3JlZ2lzdGVycy5ncm93KG9sZFNpemUgKyBudW1i
ZXJPZlJlZ2lzdGVyc1RvQWRkKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gbnVtYmVyT2ZS
ZWdpc3RlcnNUb0FkZDsgaS0tOykKKyAgICAgICAgbV9yZWdpc3RlcnNbb2xkU2l6ZSArIGldLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisgICAgCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4ob2xkU2l6ZSk7Cit9CisKK3ZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRv
cikKK3sKKyAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAm
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0
dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8o
KS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KQorICAgICAgICBzbG90VmlzaXRvci5hcHBl
bmQoJm1fcmVnaXN0ZXJzW2ldKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAorI2RlZmluZSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5j
bHVkZSAiSlNTeW1ib2xUYWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCisjaW5j
bHVkZSAiU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNs
dWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBSZWdpc3RlcjsKKworLy8gVGhpcyBpcyBh
IG1vc3RseSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBKU1ZhcmlhYmxlT2JqZWN0LCBleGNlcHQg
dGhhdCBpdCBwcmVzZXJ2ZXMKKy8vIHRoZSBpbnZhcmlhbnQgdGhhdCBhZnRlciBhIHZhcmlhYmxl
IGlzIGNyZWF0ZWQsIGl0cyBhZGRyZXNzIGluIG1lbW9yeSB3aWxsIG5vdCBjaGFuZ2UKKy8vIHNv
IGxvbmcgYXMgdGhlIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgaXMgYWxpdmUuIFRoaXMgYWxs
b3dzIG9wdGltaXphdGlvbnMgYmFzZWQKKy8vIG9uIGdldHRpbmcgdGhlIGFkZHJlc3Mgb2YgdGhl
IHZhcmlhYmxlIGFuZCByZW1lbWJlcmluZyBpdC4gQXMgd2VsbCwgdW5saWtlIGEKKy8vIEpTVmFy
aWFibGVPYmplY3QsIHRoaXMgd2lsbCBtYW5hZ2UgdGhlIG1lbW9yeSBmb3IgdGhlIHJlZ2lzdGVy
cyBpdHNlbGYgYW5kIG5laXRoZXIKKy8vIHJlcXVpcmVzIG5vciBhbGxvd3MgZm9yIHRoZSBzdWJj
bGFzc2VzIHRvIG1hbmFnZSB0aGF0IG1lbW9yeS4gRmluYWxseSwKKy8vIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QgaGFzIGl0cyBvd24gR0MgdHJhY2luZyBmdW5jdGlvbmFsaXR5LCBzaW5jZSBp
dCBrbm93cyB0aGUKKy8vIGV4YWN0IGRpbWVuc2lvbnMgb2YgdGhlIHZhcmlhYmxlcyBhcnJheSBh
dCBhbGwgdGltZXMuCisKK2NsYXNzIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgOiBwdWJsaWMg
SlNTeW1ib2xUYWJsZU9iamVjdCB7CisgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworCitwdWJsaWM6CisgICAgdHlwZWRlZiBKU1N5
bWJvbFRhYmxlT2JqZWN0IEJhc2U7CisKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHJlZ2lz
dGVyQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KKyAg
ICAKKyAgICAvLyBUaGlzIGlzIGEgc2xvdyBtZXRob2QgY2FsbCwgd2hpY2ggc2VhcmNoZXMgdGhl
IHJlZ2lzdGVyIGJhbmsgdG8gZmluZCB0aGUgaW5kZXgKKyAgICAvLyBnaXZlbiBhIHBvaW50ZXIu
IEl0IHdpbGwgQ1JBU0goKSBpZiBpdCBkb2VzIG5vdCBmaW5kIHRoZSByZWdpc3Rlci4gT25seSB1
c2UgdGhpcworICAgIC8vIGluIGRlYnVnIGNvZGUgKGxpa2UgYnl0ZWNvZGUgZHVtcGluZykuCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGZpbmRSZWdpc3RlckluZGV4KHZvaWQqKSBjb25zdDsK
KyAgICAKKyAgICBXcml0ZUJhcnJpZXI8VWtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09i
amVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICB7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50
ZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CisgICAgfQorICAg
IAorICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxp
emVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucworICAgIC8vIHRoZSBpbmRleCBvZiB0
aGUgZmlyc3Qgb25lIGFkZGVkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdpc3Rl
cnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1
cmVGbGFnczsKKworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
KQorICAgICAgICA6IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBz
eW1ib2xUYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKKyAgICB9CisKKyAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJyaWVy
PFVua25vd24+LCAxNj4gbV9yZWdpc3RlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAko
cmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0
aWNTY29wZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEzICs2NiwxMyBAQCB2b2lk
IEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dChKU0NlbGwqIGNlCiAgICAgICAgIC8vIGEgcG9pbnRl
ciBjb21wYXJlLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYm9vbCBpc1dy
aXRhYmxlID0gdHJ1ZTsKLSAgICAgICAgdGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVy
dHlOYW1lLCBzbG90LCBpc1dyaXRhYmxlKTsKKyAgICAgICAgc3ltYm9sVGFibGVHZXQodGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90LCBpc1dyaXRhYmxlKTsKICAgICAgICAgaWYgKCFpc1dy
aXRhYmxlKSB7CiAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFi
bGVQdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCisg
ICAgaWYgKHN5bWJvbFRhYmxlUHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9i
amVjdDo6cHV0KEpTQ2VsbCogY2UKIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0RGlyZWN0
VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAg
SlNTdGF0aWNTY29wZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2Jq
ZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0
cmlidXRlcyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0
ZXMpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg5LDcgKzg5
LDcgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dQogCiBib29sIEpT
U3RhdGljU2NvcGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICByZXR1cm4ganNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihjZWxsKS0+c3ltYm9sVGFi
bGVHZXQocHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQoanND
YXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0K
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3ltYm9sVGFibGVP
YmplY3QuaCIKKworI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZUFycmF5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEpTU3ltYm9sVGFi
bGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTU3lt
Ym9sVGFibGVPYmplY3QqPihjZWxsKS0+SlNTeW1ib2xUYWJsZU9iamVjdDo6fkpTU3ltYm9sVGFi
bGVPYmplY3QoKTsKK30KKworYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0
eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3lt
Ym9sVGFibGVPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS5jb250YWlucyhwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAg
SlNTeW1ib2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2Jq
ZWN0Kj4ob2JqZWN0KTsKKyAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25z
dF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYg
RG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAg
ICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkp
KTsKKyAgICB9CisgICAgCisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNTeW1ib2xUYWJs
ZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK2Jvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWly
ZXNEeW5hbWljQ2hlY2tzKSBjb25zdAoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkudHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxPYmplY3RUeXBlOgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNHbG9iYWxPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2Nv
cGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICBjYXNlIEFjdGl2YXRpb25PYmplY3RUeXBl
OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNBY3RpdmF0aW9uKj4odGhpcykt
PmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7CisgICAgY2FzZSBTdGF0aWNT
Y29wZU9iamVjdFR5cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0YXRp
Y1Njb3BlT2JqZWN0Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNr
cyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEpTU3ltYm9sVGFibGVPYmplY3RfaAorI2RlZmluZSBKU1N5bWJvbFRh
YmxlT2JqZWN0X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlE
ZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTU3ltYm9sVGFibGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7
IH0KKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOworICAgIAorICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERp
cmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKKyAgICAKKyAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0No
ZWNrcykgY29uc3Q7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTTm9uRmluYWxP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKQorICAgICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
ICAgICBBU1NFUlQobV9zeW1ib2xUYWJsZSk7CisgICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxl
KiBtX3N5bWJvbFRhYmxlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmpl
Y3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFibGVPYmpl
Y3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnku
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVj
dC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBi
b29sIHN5bWJvbFRhYmxlR2V0KAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
Cit7CisgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5p
bmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KAorICAgICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVu
dHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBz
eW1ib2xUYWJsZUdldCgKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LAorICAgIGJvb2wmIHNsb3RJ
c1dyaXRlYWJsZSkKK3sKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1i
b2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAo
ZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVl
KG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdElz
V3JpdGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVQdXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBi
b29sIHNob3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CisgICAgCisgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkgeworICAgICAgICBpZiAoc2hvdWxk
VGhyb3cpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
b2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmpl
Y3QsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3lt
Ym9sVGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmli
dXRlcygKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8
fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOworICAgIAorICAgIFN5
bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmZpbmQocHJv
cGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xU
YWJsZSgpLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU3ltYm9sVGFibGVFbnRy
eSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Cisg
ICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOworICAg
IHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTU3lt
Ym9sVGFibGVPYmplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDcwICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgogCi0jaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCi0j
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0
LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eURl
c2NyaXB0b3IuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVj
dCo+KGNlbGwpLT5KU1ZhcmlhYmxlT2JqZWN0Ojp+SlNWYXJpYWJsZU9iamVjdCgpOwotfQotCi1i
b29sIEpTVmFyaWFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEpTVmFyaWFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwotICAg
IGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci19Ci0KLXZv
aWQgSlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihvYmplY3QpOwotICAgIFN5bWJvbFRhYmxlOjpjb25z
dF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwotICAgIGZv
ciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFi
bGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29u
ZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4
ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwotICAgIH0KLSAgICAKLSAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0K
LQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpOwotICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVu
dHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OnB1
dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFs
dWUsIHVuc2lnbmVkKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEpT
VmFyaWFibGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNr
cykgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkg
ewotICAgIGNhc2UgR2xvYmFsT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEpTR2xvYmFsT2JqZWN0Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHlu
YW1pY0NoZWNrcyk7Ci0gICAgY2FzZSBBY3RpdmF0aW9uT2JqZWN0VHlwZToKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTQWN0aXZhdGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29w
ZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGNhc2UgU3RhdGljU2NvcGVPYmplY3RUeXBl
OgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdGF0aWNTY29wZU9iamVjdCo+
KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2
aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJs
ZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjZGVm
aW5lIEpTVmFyaWFibGVPYmplY3RfaAogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU1N5bWJvbFRhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRl
ICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNDEsNDAg
KzQyLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKICAgICBjbGFzcyBSZWdpc3RlcjsKIAotICAgIGNsYXNzIEpTVmFyaWFibGVPYmplY3QgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1
YmxpYyBKU1N5bWJvbFRhYmxlT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHB1YmxpYzoK
LSAgICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KLQot
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwot
Ci0gICAgICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZp
cnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
Ci0gICAgICAgIAotICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHlu
YW1pY0NoZWNrcykgY29uc3Q7CisgICAgICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBC
YXNlOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQogCiAgICAgICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogY29uc3QgKiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiAmbV9yZWdpc3RlcnM7IH0KICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lz
dGVycygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1ZhcmlhYmxlT2JqZWN0LCBtX3JlZ2lz
dGVycyk7IH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhWYXJp
YWJsZU9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNOb25GaW5hbE9iamVj
dDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEpTU3ltYm9sVGFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAg
IEpTVmFyaWFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQot
ICAgICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAg
ICAgICAgICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgIDogSlNT
eW1ib2xUYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN5bWJvbFRhYmxlKQogICAg
ICAgICAgICAgLCBtX3JlZ2lzdGVycyhyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KHJlZ2lzdGVycykpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtODIsNzYgKzY2LDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJsZSk7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9
PSBzaXplb2YoUmVnaXN0ZXIpLCBSZWdpc3Rlcl9zaG91bGRfYmVfc2FtZV9zaXplX2FzX1dyaXRl
QmFycmllcik7CiAgICAgICAgIH0KIAogICAgICAgICBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJy
aWVyPFVua25vd24+ID4gY29weVJlZ2lzdGVyQXJyYXkoSlNHbG9iYWxEYXRhJiwgV3JpdGVCYXJy
aWVyPFVua25vd24+KiBzcmMsIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhbGxmcmFtZVN0YXJ0cyk7
CiAgICAgICAgIHZvaWQgc2V0UmVnaXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0
ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJh
eSk7CiAKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHN5bWJvbFRhYmxlR2V0KFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7Ci0gICAgICAgIGJvb2wgc3ltYm9sVGFi
bGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUp
OwotICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Ci0gICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXRX
aXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOwotCi0gICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOyAv
LyBNYXBzIG5hbWUgLT4gb2Zmc2V0IGZyb20gInIiIGluIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiogbV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgcmVnaXN0
ZXIgZmlsZS4KICAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gbV9y
ZWdpc3RlckFycmF5OyAvLyBJbmRlcGVuZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVu
IGEgdmFyaWFibGUgb2JqZWN0IGNvcGllcyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0
ZXIgZmlsZS4KICAgICB9OwogCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3lt
Ym9sVGFibGVHZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQotICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCku
aW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgICAgICBpZiAoIWVudHJ5
LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKQotICAgIHsKLSAgICAgICAgU3lt
Ym9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCkpOwotICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwot
ICAgICAgICAgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dChF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCi0gICAgewotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7Ci0gICAgICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1
ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7Ci0KLSAgICAgICAg
U3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5
TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpIHsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRUaHJvdykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkg
PT0gSGVhcDo6aGVhcCh0aGlzKSk7Ci0KLSAgICAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAg
ICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCkuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOwot
ICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICAgICAgZW50cnkuc2V0QXR0cmli
dXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5z
ZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KICAgICBpbmxpbmUgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IEpT
VmFyaWFibGVPYmplY3Q6OmNvcHlSZWdpc3RlckFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzcmMsIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhbGxm
cmFtZVN0YXJ0cykKICAgICB7CiAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtu
b3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5r
bm93bj5bY291bnRdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRl
QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dy
aXRlQmFycmllci5oCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Xcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHUuc2xvdDsKICAgICB9CiAgICAgCisgICAgaW50MzJf
dCogdGFnUG9pbnRlcigpIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3Jp
cHRvcio+KCZtX3ZhbHVlKS0+YXNCaXRzLnRhZzsgfQorICAgIGludDMyX3QqIHBheWxvYWRQb2lu
dGVyKCkgeyByZXR1cm4gJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oJm1f
dmFsdWUpLT5hc0JpdHMucGF5bG9hZDsgfQorICAgIAogICAgIHR5cGVkZWYgSlNWYWx1ZSAoV3Jp
dGVCYXJyaWVyQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwogICAgIG9wZXJhdG9yIFVuc3Bl
Y2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCkgPyByZWludGVycHJldF9jYXN0
PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFnZXQoKTsgfSAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145947</attachid>
            <date>2012-06-05 23:56:34 -0700</date>
            <delta_ts>2012-06-06 11:52:32 -0700</delta_ts>
            <desc>it&apos;s starting to do things</desc>
            <filename>globalobj_patch_4.diff</filename>
            <type>text/plain</type>
            <size>82194</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxMi0wNi0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzIQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0lu
c3RydWN0aW9uLmg6CisgICAgICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3Ry
dWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVy
KToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2
ZUxhc3RVbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoUmVzb2x2ZVJlc3Vs
dCk6CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5oOgorICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdH
cmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxPYmplY3RGb3Ip
OgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aGFzVmFyTnVtYmVyKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc1JlZ2lzdGVyUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6cmVnaXN0ZXJQb2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAg
ICAgIChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
Z2xvYmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0
dWFsKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6
OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAg
ICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVn
aXN0ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFk
ZFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0
ZXJBdCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFzc2VydFJl
Z2lzdGVySXNJblRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTdGF0aWNTY29wZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZp
cnR1YWwpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0
eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVz
dHJveSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1l
cyk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwp
OgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZSk6Cisg
ICAgICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5
bWJvbFRhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFi
bGVPYmplY3Q6OkpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRh
YmxlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlR2V0
KToKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuaDoKKyAgICAgICAgKEpTVmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1Zhcmlh
YmxlT2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9i
amVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1l
L1dyaXRlQmFycmllci5oOgorCiAyMDEyLTA2LTA1ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhp
YW5AaW50ZWwuY29tPgogCiAgICAgICAgIEltcHJvdmUgTWF0aC5yb3VuZCBhbmQgTWF0aC5mbG9v
ciBpbnRyaW5zaWMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
MTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwxMCBAQAogCQkw
RjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2Rl
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAw
N0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTE5RDBDMTU3
RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAv
KiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsgfTsKKwkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0
RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICov
OyB9OworCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
MTlEMEYxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RDE0
Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RjE0Q0E3
RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJ
ZFN0YXR1cy5jcHAgKi87IH07CkBAIC04MjgsNiArODMyLDEwIEBACiAJCTBGNzcwMDhFMTQwMkZE
RDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIxIC8qIERGR0ND
YWxsSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDQ2FsbEhl
bHBlcnMuaDsgcGF0aCA9IGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmpl
Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5RDBBMTU3RUUw
OUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5
RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8q
IENhbGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMy
OTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5SWRTdGF0dXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkzNCw2ICsxOTQyLDggQEAKIAkJCQlBN0Y5OTM1
RDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oICovLAogCQkJCUE3MjdGRjY2MERBMzA1
M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLywKIAkJCQlBNzI3RkY2
NTBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oICovLAorCQkJCTBG
OTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAq
LywKKwkJCQkwRjkxOUQwRjE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oICovLAogCQkJCUE3RTQyQzE5MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3Bl
T2JqZWN0LmNwcCAqLywKIAkJCQlBN0U0MkMxODBFMzkzODgzMDA2NUE1NDQgLyogSlNTdGF0aWNT
Y29wZU9iamVjdC5oICovLAogCQkJCUJDMDJFOUI2MEUxODQyRkEwMDBGOTI5NyAvKiBKU1N0cmlu
Zy5jcHAgKi8sCkBAIC0xOTQxLDYgKzE5NTEsOCBAQAogCQkJCTg2RTg1NTM4MTExQjk5NjgwMDFB
RjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCAqLywKIAkJCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovLAogCQkJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1
RiAvKiBKU1N0cmluZ0pvaW5lci5oICovLAorCQkJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAv
KiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLywKKwkJCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRF
N0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovLAogCQkJCTE0QUJCNDU0MDk5QzJBMEYwMEUy
QTI0RiAvKiBKU1R5cGUuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNU
eXBlSW5mby5oICovLAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU1ZhbHVlLmNw
cCAqLywKQEAgLTI2NTcsNiArMjY2OSw4IEBACiAJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5
ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYx
OThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjI5LDYgKzMyNDMs
OCBAQAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3
NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkyMywxNSArOTIzLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhl
YywgY28KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFyOiB7CiAgICAg
ICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRl
eCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gZ2V0X2ds
b2JhbF92YXJcdCAlcywgJWRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRh
dGEoKSwgaW5kZXgpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3Rl
clBvaW50ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQb2ludGVyOworICAgICAgICAgICAgZGF0YUxv
ZygiWyU0ZF0gZ2V0X2dsb2JhbF92YXJcdCAlcywgZyVkKCVwKVxuIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5k
ZXgocmVnaXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgICAgIGl0Kys7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9nbG9i
YWxfdmFyOiB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKKyAg
ICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gKCsraXQp
LT51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVy
YW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJcdCAlZCwgJXNc
biIsIGxvY2F0aW9uLCBpbmRleCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAg
ICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJcdCBnJWQoJXApLCAlc1xuIiwg
bG9jYXRpb24sIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50
ZXIpLCByZWdpc3RlclBvaW50ZXIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNl
OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
c3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSW5zdHJ1Y3Rpb24oTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bykgeyB1LmNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mbzsgfQogICAgICAgICAKICAgICAgICAg
SW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUucHJvZmlsZSA9IHByb2ZpbGU7
IH0KKyAgICAgICAgCisgICAgICAgIEluc3RydWN0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiog
cmVnaXN0ZXJQb2ludGVyKSB7IHUucmVnaXN0ZXJQb2ludGVyID0gcmVnaXN0ZXJQb2ludGVyOyB9
CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgT3Bjb2RlIG9wY29kZTsKQEAgLTE5OCw2
ICsyMDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbjsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
SlNDZWxsPiBqc0NlbGw7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lz
dGVyUG9pbnRlcjsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRl
ckZ1bmM7CiAgICAgICAgICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAg
ICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDExIEBAIHZv
aWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB9CiAjZW5kaWYKIAorV3JpdGVCYXJy
aWVyPFVua25vd24+KiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclBvaW50ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAmanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5yZWdp
c3RlckF0KGluZGV4KCkpOworfQorCiBzdGF0aWMgYm9vbCBzX2R1bXBzR2VuZXJhdGVkQ29kZSA9
IGZhbHNlOwogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpzZXREdW1wc0dlbmVyYXRlZENvZGUo
Ym9vbCBkdW1wc0dlbmVyYXRlZENvZGUpCkBAIC0yODAsNyArMjg1LDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIHNpemVfdCBuZXdHbG9iYWxzID0gdmFy
U3RhY2suc2l6ZSgpICsgZnVuY3Rpb25TdGFjay5zaXplKCk7CiAgICAgaWYgKCFuZXdHbG9iYWxz
KQogICAgICAgICByZXR1cm47Ci0gICAgZ2xvYmFsT2JqZWN0LT5yZXNpemVSZWdpc3RlcnMoc3lt
Ym9sVGFibGUtPnNpemUoKSArIG5ld0dsb2JhbHMpOworICAgIGdsb2JhbE9iamVjdC0+YWRkUmVn
aXN0ZXJzKG5ld0dsb2JhbHMpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlv
blN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
ID0gZnVuY3Rpb25TdGFja1tpXTsKQEAgLTY3OSw2ICs2ODQsMTQgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cmV0cmlldmVMYXN0VW5hcgogICAgIHNyY0luZGV4ID0gaW5zdHJ1Y3Rpb25zKCku
YXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmV0
cmlldmVMYXN0VW5hcnlPcChXcml0ZUJhcnJpZXI8VW5rbm93bj4qJiBkc3RQb2ludGVyLCBpbnQm
IHNyY0luZGV4KQoreworICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gMyk7Cisg
ICAgc2l6ZV90IHNpemUgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZHN0UG9pbnRlciA9
IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAyKS51LnJlZ2lzdGVyUG9pbnRlcjsKKyAgICBzcmNJ
bmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAxKS51Lm9wZXJhbmQ7Cit9CisKIHZvaWQg
QUxXQVlTX0lOTElORSBCeXRlY29kZUdlbmVyYXRvcjo6cmV3aW5kQmluYXJ5T3AoKQogewogICAg
IEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gNCk7CkBAIC0xMTc3LDcgKzExOTAsNyBA
QCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlCiAgICAgICAgICAgICBm
bGFncyB8PSBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZzsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9ICAgICAgICAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlh
YmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOworICAg
ICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8
SlNTeW1ib2xUYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3QtPnN5bWJvbFRhYmxlKCkuZ2V0KHBy
b3BlcnR5LmltcGwoKSk7CiAKICAgICAgICAgLy8gRm91bmQgdGhlIHByb3BlcnR5CkBAIC0xMjM0
LDcgKzEyNDcsNyBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlCiAg
ICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKICAgICAgICAgaWYg
KCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVPYmplY3QoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nh
c3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIEpTU3ltYm9sVGFi
bGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2Jq
ZWN0Kj4oY3VycmVudFNjb3BlKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1
cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsK
ICAgICAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0x
NDM3LDE2ICsxNDUwLDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0
U3QKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkluZGV4ZWRHbG9iYWw6CiAgICAgY2FzZSBSZXNv
bHZlUmVzdWx0OjpSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAgICAgICAgIGlmIChtX2xhc3RPcGNv
ZGVJRCA9PSBvcF9wdXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAgICAgaW50IGRzdEluZGV4Owor
ICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBkc3RQb2ludGVyOwogICAgICAgICAg
ICAgaW50IHNyY0luZGV4OwogICAgICAgICAgICAgcmV0cmlldmVMYXN0VW5hcnlPcChkc3RJbmRl
eCwgc3JjSW5kZXgpOwotICAgICAgICAgICAgaWYgKGRzdEluZGV4ID09IHJlc29sdmVSZXN1bHQu
aW5kZXgoKSAmJiBzcmNJbmRleCA9PSBkc3QtPmluZGV4KCkpCisgICAgICAgICAgICBpZiAoZHN0
UG9pbnRlciA9PSByZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9pbnRlcigpICYmIHNyY0luZGV4ID09
IGRzdC0+aW5kZXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAK
ICAgICAgICAgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZ2xvYmFsX3Zhcik7
CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKKyAgICAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQucmVnaXN0ZXJQb2ludGVyKCkpOwogICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgICAgIHJldHVybiBkc3Q7
CiAKQEAgLTE0NzQsNyArMTQ4Nyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UHV0U3QKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkluZGV4ZWRHbG9iYWw6CiAgICAgY2Fz
ZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAgICAgICAgIGVtaXRPcGNv
ZGUob3BfcHV0X2dsb2JhbF92YXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVz
b2x2ZVJlc3VsdC5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29s
dmVSZXN1bHQucmVnaXN0ZXJQb2ludGVyKCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQodmFsdWUtPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYgKzE5Nyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgaW5kZXgoKSBjb25zdCB7IEFTU0VSVCAo
aXNJbmRleGVkKCkgfHwgaXNSZWdpc3RlcigpKTsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAg
c2l6ZV90IGRlcHRoKCkgY29uc3QgeyBBU1NFUlQoaXNTY29wZWQoKSk7IHJldHVybiBtX2RlcHRo
OyB9CiAgICAgICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IEFTU0VSVChpc0ds
b2JhbCgpKTsgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9
CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKCkgY29uc3Q7
CiAKICAgICAgICAgYm9vbCBpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgUmVn
aXN0ZXJGbGFnOyB9CiAgICAgICAgIGJvb2wgaXNEeW5hbWljKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlICYgRHluYW1pY0ZsYWc7IH0KQEAgLTU0MSw2ICs1NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgVmFsdWVQcm9maWxlKiBlbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOwogICAg
ICAgICB2b2lkIHJldHJpZXZlTGFzdEJpbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjMUlu
ZGV4LCBpbnQmIHNyYzJJbmRleCk7CiAgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChp
bnQmIGRzdEluZGV4LCBpbnQmIHNyY0luZGV4KTsKKyAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RV
bmFyeU9wKFdyaXRlQmFycmllcjxVbmtub3duPiomIGRzdFBvaW50ZXIsIGludCYgc3JjSW5kZXgp
OwogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kQmluYXJ5T3AoKTsKICAgICAgICAg
QUxXQVlTX0lOTElORSB2b2lkIHJld2luZFVuYXJ5T3AoKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMTk1MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTUsMjEgKzExNSw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yR2xvYmFsVmFyKEdQUlJlZyBnbG9iYWws
IGludDMyX3QgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoZ2xvYmFs
LCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWRk
cmVzcyB0YWdGb3JHbG9iYWxWYXIoR1BSUmVnIGdsb2JhbCwgaW50MzJfdCB2YXJOdW1iZXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhnbG9iYWwsIHZhck51bWJlciAqIHNpemVvZihS
ZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpOwotICAgIH0KLQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3JHbG9iYWxWYXIo
R1BSUmVnIGdsb2JhbCwgaW50MzJfdCB2YXJOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
QWRkcmVzcyhnbG9iYWwsIHZhck51bWJlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9Ci0K
ICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgewogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMTYsMTQgKzIyMTYsMjAgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxf
dmFyOiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRHbG9iYWxWYXIg
PSBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZUluZGV4IGdl
dEdsb2JhbFZhciA9IGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgR2V0R2xvYmFsVmFyLAor
ICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoY3VycmVudEluc3RydWN0
aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVyKSksCisgICAgICAgICAgICAgICAgT3BJbmZvKHByZWRp
Y3Rpb24pKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBnZXRHbG9iYWxWYXIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2dsb2JhbF92
YXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewogICAg
ICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9H
cmFwaCgKKyAgICAgICAgICAgICAgICBQdXRHbG9iYWxWYXIsCisgICAgICAgICAgICAgICAgT3BJ
bmZvKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0
UmVnaXN0ZXJJc0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBv
aW50ZXIpKSwKKyAgICAgICAgICAgICAgICB2YWx1ZSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wdXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
MTggKzE5NCwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAg
ICAKLSAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51
bWJlciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICBOb2RlSW5kZXggZ2xvYmFs
VmFyTG9hZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVy
KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2Nr
KCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlm
IChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAg
IGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsNyArMjE3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGds
b2JhbFZhclN0b3JlRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQorICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9u
KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTIyNiwxMiArMjI2LDEy
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVy
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBv
aW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC05ODIsMTMgKzk4MiwxMyBAQCBwcml2YXRl
OgogICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUgbm90
IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKICAgICAgICAgLy8gb3B0aW1pemUgdGhlbSBw
cm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KICAgICAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2Fk
RWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZv
cihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxW
YXJMb2FkRWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAg
ICAgICBpZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxp
bWluYXRpb24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVF
bGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAy
LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgZGF0
YUxvZygiJXN2YXIldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudmFyTnVtYmVyKCkp
OwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKG5vZGUuaGFzUmVn
aXN0ZXJQb2ludGVyKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICIlc2dsb2Jh
bCV1KCVwKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsCisgICAgICAgICAgICBnbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lzdGVySW5kZXgobm9kZS5yZWdpc3RlclBv
aW50ZXIoKSksCisgICAgICAgICAgICBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQogICAgIGlmIChub2RlLmhhc0lkZW50aWZpZXIoKSkg
ewogICAgICAgICBkYXRhTG9nKCIlc2lkJXV7JXN9IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
bm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUuaWRl
bnRpZmllck51bWJlcigpKS51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGhhc1By
aW50ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTAsNiArMzEwLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICZtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KTsKKyAgICB9CisgICAgCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGVGb3IoSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlubGluZUNh
bGxGcmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
MTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhh
c1Zhck51bWJlcigpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRHbG9iYWxWYXIg
fHwgb3AoKSA9PSBQdXRHbG9iYWxWYXIgfHwgb3AoKSA9PSBHZXRTY29wZWRWYXIgfHwgb3AoKSA9
PSBQdXRTY29wZWRWYXI7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldFNjb3BlZFZhciB8fCBv
cCgpID09IFB1dFNjb3BlZFZhcjsKICAgICB9CiAKICAgICB1bnNpZ25lZCB2YXJOdW1iZXIoKQpA
QCAtNDI5LDYgKzQyOSwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VSVChoYXNWYXJO
dW1iZXIoKSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgYm9v
bCBoYXNSZWdpc3RlclBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0
R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0R2xvYmFsVmFyOworICAgIH0KKyAgICAKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKKyAgICB9
CiAKICAgICBib29sIGhhc1Njb3BlQ2hhaW5EZXB0aCgpCiAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShy
ZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTY0LDMzICszNTY0LDMyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEdldEdsb2JhbFZhcjogewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
CiAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoY29uc3Rf
Y2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qKj4oZ2xvYmFsT2JqZWN0LT5hZGRyZXNzT2ZSZWdp
c3RlcnMoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6dGFnRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwgbm9kZS52YXJOdW1iZXIoKSksIHNjcmF0
Y2guZ3ByKCkpOwotICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3JH
bG9iYWxWYXIocmVzdWx0LmdwcigpLCBub2RlLnZhck51bWJlcigpKSwgcmVzdWx0LmdwcigpKTsK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkp
LCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpBZGRyZXNzKHJlc3VsdFBheWxvYWQuZ3ByKCksIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7CisgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7CiAKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoLmdwcigp
LCByZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRl
bXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGdsb2JhbE9iamVjdFJlZyA9IGdsb2Jh
bE9iamVjdC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigp
OwotCi0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpLCBnbG9iYWxPYmplY3RSZWcpOwot
Ci0gICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSwgdmFsdWUudGFnR1BSKCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlh
YmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNv
ZGVPcmlnaW4pLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOworICAgICAgICB9CiAKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhnbG9iYWxPYmplY3RSZWcsIEpTVmFyaWFi
bGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgbV9q
aXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgSklUQ29tcGlsZXI6OnRhZ0Zvckdsb2JhbFZhcihz
Y3JhdGNoUmVnLCBub2RlLnZhck51bWJlcigpKSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWUucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvckdsb2JhbFZhcihzY3JhdGNo
UmVnLCBub2RlLnZhck51bWJlcigpKSk7CisgICAgICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXBwZW4g
dG8gaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyIC0gYW5kIF9PTkxZXyBpZiB3ZSBoYXBwZW4gdG8gaGF2
ZQorICAgICAgICAvLyBhIHNwYXJlIHJlZ2lzdGVyIC0gYSBnb29kIG9wdGltaXphdGlvbiB3b3Vs
ZCBiZSB0byBwdXQgdGhlIHJlZ2lzdGVyIHBvaW50ZXIgaW50bworICAgICAgICAvLyBhIHJlZ2lz
dGVyIGFuZCB0aGVuIGRvIGEgemVybyBvZmZzZXQgc3RvcmUgZm9sbG93ZWQgYnkgYSBmb3VyLW9m
ZnNldCBzdG9yZSAob3IKKyAgICAgICAgLy8gdmljZS12ZXJzYSBkZXBlbmRpbmcgb24gZW5kaWFu
bmVzcykuCisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIG5vZGUucmVnaXN0
ZXJQb2ludGVyKCktPnRhZ1BvaW50ZXIoKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUu
cGF5bG9hZEdQUigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT5wYXlsb2FkUG9pbnRlcigpKTsK
IAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTkzLDkgKzM1OTMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAgICBK
U1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihnbG9iYWxPYmplY3QtPmFkZHJl
c3NPZlJlZ2lzdGVycygpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwgbm9kZS52YXJOdW1i
ZXIoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIobm9kZS5yZWdpc3Rl
clBvaW50ZXIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM2MDMsMTggKzM2
MDEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAg
Y2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAKLSAgICAgICAg
R1BSUmVnIGdsb2JhbE9iamVjdFJlZyA9IGdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbikpLCBnbG9iYWxPYmplY3RSZWcpOwotCi0gICAgICAgIHdyaXRlQmFycmllcihtX2pp
dC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hp
bGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKLQotICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdFJl
ZywgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hSZWcpOwot
ICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3JHbG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICBpZiAo
SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLmNoaWxkMSgp
LCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBub2RlLnJlZ2lz
dGVyUG9pbnRlcigpKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTE5
NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw2ICs4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgYm9vbCB0
ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0TWFy
a2VkKGNvbnN0IHZvaWQqKTsKIAorICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmllckVu
YWJsZWQoKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCos
IEpTVmFsdWUpOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxs
KiwgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpT
Q2VsbCopOwpAQCAtMjgyLDYgKzI4MywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFy
a2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRNYXJrZWQoY2VsbCk7CiAgICAgfQogCisgICAg
aW5saW5lIGJvb2wgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkKKyAgICB7CisjaWYgRU5B
QkxFKEdHQykgfHwgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KKwog
I2lmIEVOQUJMRShHR0MpCiAgICAgaW5saW5lIHVpbnQ4X3QqIEhlYXA6OmFkZHJlc3NPZkNhcmRG
b3IoSlNDZWxsKiBjZWxsKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgIGZvciAoU2NvcGVDaGFpbk5vZGUqIG5vZGUgPSBzY29wZUNoYWluOyA7
IG5vZGUgPSBub2RlLT5uZXh0LmdldCgpKSB7CiAgICAgICAgIEFTU0VSVChub2RlKTsKICAgICAg
ICAgaWYgKG5vZGUtPm9iamVjdC0+aXNWYXJpYWJsZU9iamVjdCgpICYmICFub2RlLT5vYmplY3Qt
PmlzU3RhdGljU2NvcGVPYmplY3QoKSkgewotICAgICAgICAgICAgdmFyaWFibGVPYmplY3QgPSBq
c0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KG5vZGUtPm9iamVjdC5nZXQoKSk7CisgICAgICAgICAg
ICB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4obm9kZS0+b2Jq
ZWN0LmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMjg2
MCwzMCArMjg2MCwyOCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVj
CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShv
cF9nZXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAvKiBnZXRfZ2xvYmFsX3ZhciBkc3QocikgZ2xv
YmFsT2JqZWN0KGMpIGluZGV4KG4pCisgICAgICAgIC8qIGdldF9nbG9iYWxfdmFyIGRzdChyKSBn
bG9iYWxPYmplY3QoYykgcmVnaXN0ZXJQb2ludGVyKG4pCiAKICAgICAgICAgICAgR2V0cyB0aGUg
Z2xvYmFsIHZhciBhdCBnbG9iYWwgc2xvdCBpbmRleCBhbmQgcGxhY2VzIGl0IGluIHJlZ2lzdGVy
IGRzdC4KICAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwot
ICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
OwotICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgICAgICBpbnQg
aW5kZXggPSB2UENbMl0udS5vcGVyYW5kOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHJlZ2lzdGVyUG9pbnRlciA9IHZQQ1syXS51LnJlZ2lzdGVyUG9pbnRlcjsKIAotICAgICAgICBj
YWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KS5nZXQo
KTsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSByZWdpc3RlclBvaW50ZXIt
PmdldCgpOwogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfZ2xvYmFsX3Zhcik7
CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShv
cF9wdXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAvKiBwdXRfZ2xvYmFsX3ZhciBnbG9iYWxPYmpl
Y3QoYykgaW5kZXgobikgdmFsdWUocikKKyAgICAgICAgLyogcHV0X2dsb2JhbF92YXIgZ2xvYmFs
T2JqZWN0KGMpIHJlZ2lzdGVyUG9pbnRlcihuKSB2YWx1ZShyKQogICAgICAgICAgCiAgICAgICAg
ICAgIFB1dHMgdmFsdWUgaW50byBnbG9iYWwgc2xvdCBpbmRleC4KICAgICAgICAgICovCiAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAg
ICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIGludCBpbmRl
eCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVn
aXN0ZXJQb2ludGVyID0gdlBDWzFdLnUucmVnaXN0ZXJQb2ludGVyOwogICAgICAgICBpbnQgdmFs
dWUgPSB2UENbMl0udS5vcGVyYW5kOwogICAgICAgICAKLSAgICAgICAgc2NvcGUtPnJlZ2lzdGVy
QXQoaW5kZXgpLnNldCgqZ2xvYmFsRGF0YSwgc2NvcGUsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNW
YWx1ZSgpKTsKKyAgICAgICAgcmVnaXN0ZXJQb2ludGVyLT5zZXQoKmdsb2JhbERhdGEsIHNjb3Bl
LCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7CiAgICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2MCwxMyArMTA2MCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0
cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3Qo
KSk7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQot
ICAgIGxvYWRQdHIoJmdsb2JhbE9iamVjdC0+bV9yZWdpc3RlcnMsIHJlZ1QyKTsKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51LnJlZ2lzdGVyUG9pbnRlcjsKIAotICAgIGVtaXRMb2FkKGluZGV4LCByZWdUMSwgcmVnVDAs
IHJlZ1QyKTsKKyAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT50YWdQb2ludGVyKCksIHJlZ1Qx
KTsKKyAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT5wYXlsb2FkUG9pbnRlcigpLCByZWdUMCk7
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dl
dF9nbG9iYWxfdmFyKSwgZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtMTA3NCwxOCArMTA3MSwyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7Ci0K
LSAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgCisg
ICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7CisgICAgICAgIAorICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgfQogCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygp
KSwgcmVnVDIpOwotICAgIGVtaXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7Cisg
ICAgc3RvcmUzMihyZWdUMSwgcmVnaXN0ZXJQb2ludGVyLT50YWdQb2ludGVyKCkpOworICAgIHN0
b3JlMzIocmVnVDAsIHJlZ2lzdGVyUG9pbnRlci0+cGF5bG9hZFBvaW50ZXIoKSk7CiAgICAgbWFw
KG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKSwgdmFs
dWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpT
VmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCkBAIC0xMDEwLDkgKzEwMTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwotICAgIGxvYWRQdHIoJmdsb2JhbE9iamVjdC0+bV9yZWdpc3RlcnMsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOworICAgIGxvYWRQdHIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVyLCByZWdUMCk7CiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CkBAIC0xMDIyLDExICsxMDIxLDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWMKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7Ci0K
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSks
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
LCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgCisgICAgc3RvcmVQdHIocmVn
VDAsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcik7CisgICAgaWYgKEhl
YXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGds
b2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJh
cnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiB9CiAKIHZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJ
ZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTEwNDEsMTMgKzEwNDEsMTAgQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFyOgog
CiBfbGxpbnRfb3BfZ2V0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxv
YWRpIDhbUENdLCB0MQorICAgIGxvYWRwIDhbUENdLCB0MAogICAgIGxvYWRpIDRbUENdLCB0Mwot
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9i
YWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3JlZ2lzdGVyc1t0
MF0sIHQwCi0gICAgbG9hZGkgVGFnT2Zmc2V0W3QwLCB0MSwgOF0sIHQyCi0gICAgbG9hZGkgUGF5
bG9hZE9mZnNldFt0MCwgdDEsIDhdLCB0MQorICAgIGxvYWRpIFRhZ09mZnNldFt0MF0sIHQyCisg
ICAgbG9hZGkgUGF5bG9hZE9mZnNldFt0MF0sIHQxCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRb
Y2ZyLCB0MywgOF0KICAgICBzdG9yZWkgdDEsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MywgOF0KICAg
ICBsb2FkaSAxMltQQ10sIHQzCkBAIC0xMDU4LDE0ICsxMDU1LDExIEBAIF9sbGludF9vcF9nZXRf
Z2xvYmFsX3ZhcjoKIF9sbGludF9vcF9wdXRfZ2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlv
bigpCiAgICAgbG9hZGkgOFtQQ10sIHQxCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0g
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCi0gICAgbG9hZHAgSlNH
bG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKKyAgICBsb2FkaSA0W1BDXSwgdDAKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCi0gICAgbG9hZGkgNFtQQ10sIHQx
CiAgICAgd3JpdGVCYXJyaWVyKHQyLCB0MykKLSAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFt0MCwg
dDEsIDhdCi0gICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KKyAgICBzdG9y
ZWkgdDIsIFRhZ09mZnNldFt0MF0KKyAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDBdCiAg
ICAgZGlzcGF0Y2goMykKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTE5NTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTg5NSwyOCArODk1LDIyIEBAIF9sbGludF9vcF9wdXRfc2NvcGVkX3Zh
cjoKIAogX2xsaW50X29wX2dldF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAg
ICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDEKKyAgICBsb2FkcCAxNltQQiwgUEMsIDhdLCB0MAog
ICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQzCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQw
Ci0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCi0gICAgbG9hZHAg
SlNHbG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKLSAgICBsb2FkcCBbdDAsIHQxLCA4
XSwgdDIKLSAgICBzdG9yZXAgdDIsIFtjZnIsIHQzLCA4XQotICAgIGxvYWRwIDI0W1BCLCBQQywg
OF0sIHQzCi0gICAgdmFsdWVQcm9maWxlKHQyLCB0MykKKyAgICBsb2FkcCBbdDBdLCB0MQorICAg
IHN0b3JlcCB0MSwgW2NmciwgdDMsIDhdCisgICAgbG9hZHAgMjRbUEIsIFBDLCA4XSwgdDAKKyAg
ICB2YWx1ZVByb2ZpbGUodDEsIHQwKQogICAgIGRpc3BhdGNoKDQpCiAKIAogX2xsaW50X29wX3B1
dF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaXMgMTZbUEIsIFBD
LCA4XSwgdDEKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9y
ZWdpc3RlcnNbdDBdLCB0MAorICAgIGxvYWRwIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHQxLCB0MikKLSAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MQogICAg
IHdyaXRlQmFycmllcih0MikKLSAgICBzdG9yZXAgdDIsIFt0MCwgdDEsIDhdCisgICAgc3RvcmVw
IHQyLCBbdDBdCiAgICAgZGlzcGF0Y2goMykKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENs
YXNzSW5mbyBKU0dsb2JhbE9iamVjdDo6c19pbmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkpTVmFy
aWFibGVPYmplY3Q6OnNfaW5mbywgMCwgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZSwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0dsb2JhbE9iamVjdCkgfTsKK2NvbnN0IENsYXNzSW5mbyBKU0ds
b2JhbE9iamVjdDo6c19pbmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q6OnNfaW5mbywgMCwgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZSwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0dsb2JhbE9iamVjdCkgfTsKIAogY29uc3QgR2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUgSlNHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7ICZh
bGxvd3NBY2Nlc3NGcm9tLCAmc3VwcG9ydHNQcm9maWxpbmcsICZzdXBwb3J0c1JpY2hTb3VyY2VJ
bmZvLCAmc2hvdWxkSW50ZXJydXB0U2NyaXB0LCAmamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxl
ZCB9OwogCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRQogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmICh0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKSkKKyAgICBpZiAoc3ltYm9sVGFibGVQdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCiB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKQEAgLTE1OCwxMiArMTU4LDEyIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnB1dERpcmVjdFZpcnR1YWwoSlMKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAot
ICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSlNWYWx1ZSB2YWx1ZUJlZm9yZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAg
SlNWYXJpYWJsZU9iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICBpZiAoIXZhbHVlQmVmb3Jl
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWVBZnRlciA9IHRoaXNPYmplY3QtPmdldERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmICh2YWx1ZUFmdGVy
KQpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3Bl
cnR5KEoKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9i
amVjdCo+KG9iamVjdCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgLy8gc2lsZW50bHkg
aWdub3JlIGF0dGVtcHRzIHRvIGFkZCBhY2Nlc3NvcnMgYWxpYXNpbmcgdmFycy4KLSAgICBpZiAo
ZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSAmJiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93
blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hv
dWxkVGhyb3cpOwogfQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxh
Zyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgSlNWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRJZk5lZWRlZCh2
aXNpdG9yLCAmdGhpc09iamVjdC0+bV9nbG9iYWxTY29wZUNoYWluKTsKICAgICB2aXNpdElmTmVl
ZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX21ldGhvZENhbGxEdW1teSk7CkBAIC0zOTMsMTcg
KzM5Myw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2
aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAg
ICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV9zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUpOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1faW50ZXJu
YWxGdW5jdGlvblN0cnVjdHVyZSk7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlckFy
cmF5KSB7Ci0gICAgICAgIC8vIE91dHNpZGUgdGhlIGV4ZWN1dGlvbiBvZiBnbG9iYWwgY29kZSwg
d2hlbiBvdXIgdmFyaWFibGVzIGFyZSB0b3JuIG9mZiwKLSAgICAgICAgLy8gd2UgY2FuIG1hcmsg
dGhlIHRvcm4tb2ZmIGFycmF5LgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2Jq
ZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCksIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheVNp
emUpOwotICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlcnMpIHsKLSAgICAgICAg
Ly8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBnbG9iYWwgY29kZSwgd2hlbiBvdXIgdmFyaWFibGVzIGFy
ZSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwKLSAgICAgICAgLy8gdGhlIHN5bWJvbCB0YWJsZSB0ZWxs
cyB1cyBob3cgbWFueSB2YXJpYWJsZXMgdGhlcmUgYXJlLCBhbmQgcmVnaXN0ZXJzCi0gICAgICAg
IC8vIHBvaW50cyB0byB3aGVyZSB0aGV5IGVuZCwgYW5kIHRoZSByZWdpc3RlcnMgdXNlZCBmb3Ig
ZXhlY3V0aW9uIGJlZ2luLgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0
LT5tX3JlZ2lzdGVycyAtIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuc2l6ZSgpLCB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLnNpemUoKSk7Ci0gICAgfQogfQogCiBFeGVjU3RhdGUqIEpTR2xv
YmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKQEAgLTQxMSwyNiArNDAwLDkgQEAgRXhlY1N0YXRlKiBK
U0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpCiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRl
KG1fZ2xvYmFsQ2FsbEZyYW1lICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsK
IH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzaXplUmVnaXN0ZXJzKHNpemVfdCBuZXdTaXpl
KQotewotICAgIC8vIFByZXZpb3VzIGR1cGxpY2F0ZSBzeW1ib2xzIG1heSBoYXZlIGNyZWF0ZWQg
c3BhcmUgY2FwYWNpdHkgaW4gbV9yZWdpc3RlckFycmF5LgotICAgIGlmIChuZXdTaXplIDw9IG1f
cmVnaXN0ZXJBcnJheVNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBvbGRTaXpl
ID0gbV9yZWdpc3RlckFycmF5U2l6ZTsKLSAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVu
a25vd24+W25ld1NpemVdKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZFNpemU7ICsr
aSkKLSAgICAgICAgcmVnaXN0ZXJBcnJheVtpXS5zZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBtX3Jl
Z2lzdGVyQXJyYXlbaV0uZ2V0KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwg
bmV3U2l6ZTsgKytpKQotICAgICAgICByZWdpc3RlckFycmF5W2ldLnNldFVuZGVmaW5lZCgpOwot
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5Lmdl
dCgpOwotICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgp
LCBuZXdTaXplKTsKLX0KLQogdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhH
bG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkKIHsKLSAgICByZXNpemVSZWdp
c3RlcnMoc3ltYm9sVGFibGUoKS5zaXplKCkgKyBjb3VudCk7CisgICAgYWRkUmVnaXN0ZXJzKGNv
dW50KTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8mIGdsb2JhbCA9IGdsb2JhbHNbaV07CkBAIC00NDYsMTcgKzQxOCwx
NyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsCiBib29sIEpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNl
bGwpOwotICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNWYXJpYWJsZU9iamVjdD4oZXhl
YywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyks
IHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQogCiBib29sIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwotICAgIGlm
IChnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhl
Y1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKKyAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUo
ZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpj
bGVhclJhcmVEYXRhKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bERhdGEuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRoaXMuaCIKLSNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCkBAIC03NCw3ICs3NCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBKYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkRnVuY3Rp
b25QdHIgamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZDsKICAgICB9OwogCi0gICAgY2xhc3Mg
SlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7CisgICAgY2xhc3MgSlNH
bG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgcHJp
dmF0ZToKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxPcGFxdWVKU1dlYWtPYmplY3RN
YXA+ID4gV2Vha01hcFNldDsKIApAQCAtOTAsNyArOTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHByb3RlY3RlZDoKIAotICAgICAgICBzaXplX3QgbV9yZWdpc3RlckFycmF5U2l6ZTsKICAg
ICAgICAgUmVnaXN0ZXIgbV9nbG9iYWxDYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplXTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG1fZ2xv
YmFsU2NvcGVDaGFpbjsKQEAgLTE2NCw3ICsxNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgICAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9i
amVjdCBCYXNlOworICAgICAgICB0eXBlZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgQmFz
ZTsKIAogICAgICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7CkBAIC0xNzcsOCAr
MTc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxp
Y2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSA9IDApCi0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSwgMCkKLSAgICAgICAgICAgICwgbV9yZWdpc3RlckFy
cmF5U2l6ZSgwKQorICAgICAgICAgICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAsIG1fZ2xvYmFs
U2NvcGVDaGFpbigpCiAgICAgICAgICAgICAsIG1fd2Vha1JhbmRvbShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpICsgMS4wKSkpCiAgICAgICAgICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKQEAgLTMwOCw4
ICszMDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRFdmFsRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9ldmFsRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICAgICAgYm9vbCBl
dmFsRW5hYmxlZCgpIHsgcmV0dXJuIG1fZXZhbEVuYWJsZWQ7IH0KIAotICAgICAgICB2b2lkIHJl
c2l6ZVJlZ2lzdGVycyhzaXplX3QgbmV3U2l6ZSk7Ci0KICAgICAgICAgdm9pZCByZXNldFByb3Rv
dHlwZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKICAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gKkhlYXA6OmhlYXAodGhpcyktPmds
b2JhbERhdGEoKTsgfQpAQCAtMzM0LDcgKzMzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBkb3VibGUgd2Vha1JhbmRvbU51bWJlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXQoKTsg
fQogICAgIHByb3RlY3RlZDoKIAotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTVmFyaWFibGVPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewog
ICAgICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFs
dWUgdiwgdW5zaWduZWQgYSkKQEAgLTM1OSw3ICszNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGNyZWF0ZVRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSopOwogCi0gICAgICAg
IHZvaWQgc2V0UmVnaXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNz
T3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90
IGNvdW50KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2xlYXJSYXJl
RGF0YShKU0NlbGwqKTsKICAgICB9OwogCkBAIC0zNzEsMTkgKzM2NiwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGFzT2JqZWN0KHZh
bHVlKSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldFJlZ2lz
dGVycyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdy
aXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCkKLSAgICB7
Ci0gICAgICAgIEpTVmFyaWFibGVPYmplY3Q6OnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lz
dGVyQXJyYXkpOwotICAgICAgICBtX3JlZ2lzdGVyQXJyYXlTaXplID0gY291bnQ7Ci0gICAgfQot
CiAgICAgaW5saW5lIGJvb2wgSlNHbG9iYWxPYmplY3Q6Omhhc093blByb3BlcnR5Rm9yV3JpdGUo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIHsKICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIGlmIChKU1ZhcmlhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAg
aWYgKEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGJvb2wgc2xvdElzV3JpdGVhYmxlOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90LCBzbG90SXNXcml0ZWFibGUpOworICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGVHZXQodGhpcywgcHJvcGVydHlOYW1lLCBzbG90LCBzbG90SXNXcml0ZWFibGUpOwog
ICAgIH0KIAogICAgIGlubGluZSBib29sIEpTR2xvYmFsT2JqZWN0OjpzeW1ib2xUYWJsZUhhc1By
b3BlcnR5KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKK3sKKyAgICBmb3IgKGlu
dCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICgmbV9yZWdpc3Rl
cnNbaV0gIT0gcmVnaXN0ZXJBZGRyZXNzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHJldHVybiBpOworICAgIH0KKyAgICBDUkFTSCgpOworfQorCitpbnQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQorewor
ICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOworICAgIAorICAgIHNpemVf
dCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOworICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xk
U2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkg
PSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQorICAgICAgICBtX3JlZ2lzdGVyc1tvbGRT
aXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKK30KKwordm9pZCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKQoreworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBK
U1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9y
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycy5z
aXplKCk7IGktLTspCisgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9y
ZWdpc3RlcnNbaV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdF9oCisjZGVmaW5lIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJK
U1N5bWJvbFRhYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJT
eW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFJlZ2lzdGVyOworCisvLyBUaGlzIGlzIGEgbW9zdGx5
IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIEpTVmFyaWFibGVPYmplY3QsIGV4Y2VwdCB0aGF0IGl0
IHByZXNlcnZlcworLy8gdGhlIGludmFyaWFudCB0aGF0IGFmdGVyIGEgdmFyaWFibGUgaXMgY3Jl
YXRlZCwgaXRzIGFkZHJlc3MgaW4gbWVtb3J5IHdpbGwgbm90IGNoYW5nZQorLy8gc28gbG9uZyBh
cyB0aGUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBpcyBhbGl2ZS4gVGhpcyBhbGxvd3Mgb3B0
aW1pemF0aW9ucyBiYXNlZAorLy8gb24gZ2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFi
bGUgYW5kIHJlbWVtYmVyaW5nIGl0LiBBcyB3ZWxsLCB1bmxpa2UgYQorLy8gSlNWYXJpYWJsZU9i
amVjdCwgdGhpcyB3aWxsIG1hbmFnZSB0aGUgbWVtb3J5IGZvciB0aGUgcmVnaXN0ZXJzIGl0c2Vs
ZiBhbmQgbmVpdGhlcgorLy8gcmVxdWlyZXMgbm9yIGFsbG93cyBmb3IgdGhlIHN1YmNsYXNzZXMg
dG8gbWFuYWdlIHRoYXQgbWVtb3J5LiBGaW5hbGx5LAorLy8gSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdCBoYXMgaXRzIG93biBHQyB0cmFjaW5nIGZ1bmN0aW9uYWxpdHksIHNpbmNlIGl0IGtub3dz
IHRoZQorLy8gZXhhY3QgZGltZW5zaW9ucyBvZiB0aGUgdmFyaWFibGVzIGFycmF5IGF0IGFsbCB0
aW1lcy4KKworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU1N5bWJv
bFRhYmxlT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTU3ltYm9sVGFi
bGVPYmplY3QgQmFzZTsKKworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChp
bnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgYSBzbG93IG1ldGhvZCBjYWxsLCB3aGljaCBzZWFyY2hlcyB0aGUgcmVnaXN0ZXIgYmFu
ayB0byBmaW5kIHRoZSBpbmRleAorICAgIC8vIGdpdmVuIGEgcG9pbnRlci4gSXQgd2lsbCBDUkFT
SCgpIGlmIGl0IGRvZXMgbm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBPbmx5IHVzZSB0aGlzCisgICAg
Ly8gaW4gZGVidWcgY29kZSAobGlrZSBieXRlY29kZSBkdW1waW5nKS4KKyAgICBKU19FWFBPUlRf
UFJJVkFURSBpbnQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOworICAgIAorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CisgICAgfQorICAgIAorICAgIC8vIEFkZHMgbnVt
YmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZp
bmVkLCBhbmQgcmV0dXJucworICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVk
LgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgICAgICA6IEpTU3ltYm9sVGFi
bGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICB9CisK
KyAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+LCAxNj4gbV9yZWdpc3Rl
cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDEzICs2NiwxMyBAQCB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1
dChKU0NlbGwqIGNlCiAgICAgICAgIC8vIGEgcG9pbnRlciBjb21wYXJlLgogICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYm9vbCBpc1dyaXRhYmxlID0gdHJ1ZTsKLSAgICAgICAg
dGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90LCBpc1dyaXRhYmxl
KTsKKyAgICAgICAgc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
LCBpc1dyaXRhYmxlKTsKICAgICAgICAgaWYgKCFpc1dyaXRhYmxlKSB7CiAgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXQoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCisgICAgaWYgKHN5bWJvbFRhYmxlUHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04
MSw3ICs4MSw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEpTQ2VsbCogY2UKIHZv
aWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAo
dGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQorICAgIGlmIChzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBKU1N0YXRpY1Njb3Bl
T2JqZWN0OjpwdXREaXJlY3RWaXJ0dQogCiBib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4ganNDYXN0PEpTU3Rh
dGljU2NvcGVPYmplY3QqPihjZWxsKS0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90
KTsKKyAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQoanNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3Qq
PihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTU3ltYm9sVGFibGVPYmplY3QuaCIKKworI2luY2x1ZGUgIkpT
QWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNT
dGF0aWNTY29wZU9iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKS0+
SlNTeW1ib2xUYWJsZU9iamVjdDo6fkpTU3ltYm9sVGFibGVPYmplY3QoKTsKK30KKworYm9vbCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU1N5bWJvbFRhYmxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsK
KyAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5jb250YWlucyhwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQor
Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5l
bmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlm
ICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICB9CisgICAgCisgICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7Cit9CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNTeW1ib2xUYWJsZU9i
amVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdAor
eworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxPYmplY3RUeXBlOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNH
bG9iYWxPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tz
KTsKKyAgICBjYXNlIEFjdGl2YXRpb25PYmplY3RUeXBlOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNBY3RpdmF0aW9uKj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVz
RHluYW1pY0NoZWNrcyk7CisgICAgY2FzZSBTdGF0aWNTY29wZU9iamVjdFR5cGU6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0YXRpY1Njb3BlT2JqZWN0Kj4odGhpcyktPmlz
RHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTU3ltYm9s
VGFibGVPYmplY3RfaAorI2RlZmluZSBKU1N5bWJvbFRhYmxlT2JqZWN0X2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
U3ltYm9sVGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU3ltYm9sVGFibGVP
YmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
KCkgY29uc3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwor
ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBib29sIGlzRHlu
YW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTTm9uRmluYWxPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
ICAgIAorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgICAgICA6
IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fc3lt
Ym9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJs
ZSk7CisgICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAorICAg
IFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAgICAgICBvYmplY3QtPnJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERv
bnREZWxldGUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1i
b2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKKyAgICBTeW1i
b2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90LAorICAgIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKK3sKKyAgICBTeW1i
b2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdC0+cmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVh
ZE9ubHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9s
VGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCisgICAgU3ltYm9s
VGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
b2JqZWN0KSk7CisgICAgCisgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG9iamVjdC0+c3lt
Ym9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYg
KGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVudHJ5Lmlz
UmVhZE9ubHkoKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5s
aW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcygKKyAgICBTeW1ib2xUYWJsZU9i
amVjdFR5cGUqIG9iamVjdCwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAorICAgIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7
CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKG9iamVjdCkpOworICAgIAorICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVy
ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7
CisgICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7
CisgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CisgICAgZW50cnkuc2V0QXR0cmlidXRlcyhh
dHRyaWJ1dGVzKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0
KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTU3ltYm9sVGFibGVPYmplY3RfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0
LmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDcwICsy
OSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5o
IgogCi0jaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKLSNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKLQogbmFtZXNwYWNl
IEpTQyB7CiAKLXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17
Ci0gICAgc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwpLT5KU1ZhcmlhYmxlT2Jq
ZWN0Ojp+SlNWYXJpYWJsZU9iamVjdCgpOwotfQotCi1ib29sIEpTVmFyaWFibGVPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQotewotICAgIEpTVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci19Ci0KLXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3Qq
PihvYmplY3QpOwotICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwotICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250
RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwot
ICAgIH0KLSAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0
OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJv
bFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmICgh
ZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERv
bnREZWxldGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEpTVmFyaWFibGVPYmplY3Q6OmlzRHluYW1p
Y1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsT2JqZWN0
VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTR2xvYmFsT2JqZWN0Kj4o
dGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAgY2FzZSBB
Y3RpdmF0aW9uT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpT
QWN0aXZhdGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3Mp
OwotICAgIGNhc2UgU3RhdGljU2NvcGVPYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNTdGF0aWNTY29wZU9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShy
ZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEpTVmFyaWFibGVPYmplY3RfaAog
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N5bWJvbFRhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNDEsNDAgKzQyLDIzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBjbGFzcyBSZWdpc3RlcjsK
IAotICAgIGNsYXNzIEpTVmFyaWFibGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CisgICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU1N5bWJvbFRhYmxlT2JqZWN0
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29u
c3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAgIAotICAgICAgICBib29s
IGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CisgICAg
ICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCiAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
aXN0ZXJzW2luZGV4XTsgfQogCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29uc3Qg
KiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAmbV9yZWdpc3RlcnM7IH0KICAg
ICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1ZhcmlhYmxlT2JqZWN0LCBtX3JlZ2lzdGVycyk7IH0KIAotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhWYXJpYWJsZU9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgcHJvdGVjdGVkOgot
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNH
ZXRQcm9wZXJ0eU5hbWVzIHwgSlNOb25GaW5hbE9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTU3ltYm9sVGFibGVP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIEpTVmFyaWFibGVPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlLCBSZWdpc3RlciogcmVnaXN0ZXJzKQotICAgICAgICAgICAgOiBKU05vbkZpbmFs
T2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkKLSAgICAgICAgICAgICwgbV9zeW1ib2xUYWJs
ZShzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgIDogSlNTeW1ib2xUYWJsZU9iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsIHN5bWJvbFRhYmxlKQogICAgICAgICAgICAgLCBtX3JlZ2lzdGVycyhy
ZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KHJlZ2lzdGVycykpCiAgICAg
ICAgIHsKICAgICAgICAgfQpAQCAtODIsNzYgKzY2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAg
ICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJsZSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9PSBzaXplb2YoUmVnaXN0ZXIpLCBSZWdp
c3Rlcl9zaG91bGRfYmVfc2FtZV9zaXplX2FzX1dyaXRlQmFycmllcik7CiAgICAgICAgIH0KIAog
ICAgICAgICBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gY29weVJlZ2lz
dGVyQXJyYXkoSlNHbG9iYWxEYXRhJiwgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzcmMsIHNpemVf
dCBjb3VudCwgc2l6ZV90IGNhbGxmcmFtZVN0YXJ0cyk7CiAgICAgICAgIHZvaWQgc2V0UmVnaXN0
ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3Jp
dGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSk7CiAKLSAgICAgICAgYm9vbCBzeW1i
b2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJik7Ci0gICAgICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmLCBib29sJiBzbG90SXNXcml0ZWFibGUpOwotICAgICAgICBib29sIHN5bWJvbFRh
YmxlUHV0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJv
dyk7Ci0gICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERh
dGEmLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAg
ICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOyAvLyBNYXBzIG5hbWUgLT4gb2Zmc2V0IGZy
b20gInIiIGluIHJlZ2lzdGVyIGZpbGUuCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiog
bV9yZWdpc3RlcnM7IC8vICJyIiBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgT3duQXJy
YXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gbV9yZWdpc3RlckFycmF5OyAvLyBJbmRlcGVu
ZGVudCBjb3B5IG9mIHJlZ2lzdGVycywgdXNlZCB3aGVuIGEgdmFyaWFibGUgb2JqZWN0IGNvcGll
cyBpdHMgcmVnaXN0ZXJzIG91dCBvZiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICB9OwogCi0gICAg
aW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotICAgIHsKLSAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpOwotICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICBzbG90LnNldFZhbHVlKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0
KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgYm9vbCYgc2xv
dElzV3JpdGVhYmxlKQotICAgIHsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5
bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgICAg
ICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKHJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCkpOwotICAgICAgICAgICAgc2xvdElzV3JpdGVh
YmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBK
U1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCi0gICAg
ewotICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
Ci0gICAgICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkg
PT0gSGVhcDo6aGVhcCh0aGlzKSk7Ci0KLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAg
ICAgICBpZiAoZW50cnkuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJv
dykKLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwg
dGhpcywgdmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7Ci0K
LSAgICAgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLmZpbmQo
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIGlmIChpdGVyID09IHN5bWJvbFRh
YmxlKCkuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFN5bWJvbFRh
YmxlRW50cnkmIGVudHJ5ID0gaXRlci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoIWVudHJ5Lmlz
TnVsbCgpKTsKLSAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgcmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgdmFs
dWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgUGFzc093bkFy
cmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IEpTVmFyaWFibGVPYmplY3Q6OmNvcHlSZWdp
c3RlckFycmF5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBzcmMsIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhbGxmcmFtZVN0YXJ0cykKICAgICB7CiAgICAg
ICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBh
ZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bY291bnRdKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCShyZXZpc2lvbiAx
MTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHUuc2xvdDsKICAgICB9CiAgICAgCisgICAgaW50MzJfdCogdGFnUG9pbnRlcigpIHsgcmV0dXJu
ICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KCZtX3ZhbHVlKS0+YXNCaXRz
LnRhZzsgfQorICAgIGludDMyX3QqIHBheWxvYWRQb2ludGVyKCkgeyByZXR1cm4gJmJpdHdpc2Vf
Y2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oJm1fdmFsdWUpLT5hc0JpdHMucGF5bG9hZDsg
fQorICAgIAogICAgIHR5cGVkZWYgSlNWYWx1ZSAoV3JpdGVCYXJyaWVyQmFzZTo6KlVuc3BlY2lm
aWVkQm9vbFR5cGUpOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCkgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigx
KSA6IDA7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFnZXQoKTsgfSAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146079</attachid>
            <date>2012-06-06 11:52:32 -0700</date>
            <delta_ts>2012-06-06 13:05:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>globalobj_patch_5.diff</filename>
            <type>text/plain</type>
            <size>85835</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNiBA
QAorMjAxMi0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBXb3JrIGluIHByb2dyZXNzIQorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAg
ICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0cnVjdGlv
bik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVyKToKKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RVbmFyeU9wKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oOgorICAgICAgICAoUmVzb2x2ZVJlc3VsdCk6CisgICAgICAgIChCeXRl
Y29kZUdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAg
ICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNl
OjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNl
OjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxPYmplY3RGb3IpOgorICAgICAgICAoR3JhcGgp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFz
VmFyTnVtYmVyKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c1JlZ2lzdGVyUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cmVnaXN0ZXJQb2lu
dGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChIZWFwKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9nbG9iYWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3Zhcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6CisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnB1dCk6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKToKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpK
U0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRleCk6CisgICAg
ICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJlZ2lzdGVycyk6CisgICAg
ICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0ZXJBdCk6CisgICAgICAgIChK
U0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dCk6CisgICAgICAg
IChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAo
SlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6
SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6
OkpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgorICAgICAgICAoSlNDOjpK
U1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZSk6CisgICAgICAgICogcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpT
U3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojpz
eW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OkpTU3ltYm9s
VGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0OjpmaW5pc2hD
cmVhdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6
c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwOgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpT
VmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxlT2JqZWN0OjpKU1Zhcmlh
YmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgor
CiAyMDEyLTA2LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXSBFbmFibGUgdGhlIExMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw5ICsxODYsMTEgQEAgU0VUKEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBydW50aW1lL0pTT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNPTk9i
amVjdC5jcHAKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCisgICAgcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAKICAgICBydW50aW1lL0pTU3RyaW5nLmNwcAogICAgIHJ1bnRpbWUvSlNT
dHJpbmdKb2luZXIuY3BwCisgICAgcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAogICAg
IHJ1bnRpbWUvSlNWYWx1ZS5jcHAKICAgICBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwCiAg
ICAgcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5MCw2ICs0
OTAsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oIFwKQEAgLTQ5Nyw2ICs0OTksOCBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0pvaW5lci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFsdWUuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShy
ZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDkgKzE5NCwxMSBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1l
L0pTT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNwcCBcCiAgICAgcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBcCisgICAgcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCBc
CiAgICAgcnVudGltZS9KU1N0cmluZy5jcHAgXAogICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIu
Y3BwIFwKKyAgICBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwIFwKICAgICBydW50aW1l
L0pTVmFsdWUuY3BwIFwKICAgICBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwIFwKICAgICBy
dW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDExOTUz
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsNiAr
ODc0LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHJ1bnRpbWVcSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTU3RhdGljU2NvcGVPYmplY3QuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTg5OCw2ICs5MDYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcSlNTeW1ib2xUYWJsZU9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVHlwZS5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTk1MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwxMCBAQAogCQkwRjdCMjk0
QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyog
REZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERGR0J5dGVDb2RlQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUYwOEND
MTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIx
IC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTE5RDBDMTU3RUUwOUYw
MDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsgfTsKKwkJMEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2Jq
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEUx
NTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovOyB9Owor
CQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMEYx
NTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RDE0Q0E3REMz
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RjE0Q0E3RENBMDA4
NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1
cy5jcHAgKi87IH07CkBAIC04MjgsNiArODMyLDEwIEBACiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcw
MDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIxIC8qIERGR0NDYWxsSGVs
cGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDQ2FsbEhlbHBlcnMu
aDsgcGF0aCA9IGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5RDBBMTU3RUUwOUQwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5RDBGMTU3
RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxM
aW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTQxNENB
N0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTkzNCw2ICsxOTQyLDggQEAKIAkJCQlBN0Y5OTM1RDBGRDcz
MjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oICovLAogCQkJCUE3MjdGRjY2MERBMzA1M0IwMEU1
NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLywKIAkJCQlBNzI3RkY2NTBEQTMw
NTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oICovLAorCQkJCTBGOTE5RDBF
MTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLywKKwkJ
CQkwRjkxOUQwRjE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
ICovLAogCQkJCUE3RTQyQzE5MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0
LmNwcCAqLywKIAkJCQlBN0U0MkMxODBFMzkzODgzMDA2NUE1NDQgLyogSlNTdGF0aWNTY29wZU9i
amVjdC5oICovLAogCQkJCUJDMDJFOUI2MEUxODQyRkEwMDBGOTI5NyAvKiBKU1N0cmluZy5jcHAg
Ki8sCkBAIC0xOTQxLDYgKzE5NTEsOCBAQAogCQkJCTg2RTg1NTM4MTExQjk5NjgwMDFBRjUxRSAv
KiBKU1N0cmluZ0J1aWxkZXIuaCAqLywKIAkJCQkyNjAwQjVBNDE1MkJBQUE3MDA5MUVFNUYgLyog
SlNTdHJpbmdKb2luZXIuY3BwICovLAogCQkJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBK
U1N0cmluZ0pvaW5lci5oICovLAorCQkJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5
bWJvbFRhYmxlT2JqZWN0LmNwcCAqLywKKwkJCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyog
SlNTeW1ib2xUYWJsZU9iamVjdC5oICovLAogCQkJCTE0QUJCNDU0MDk5QzJBMEYwMEUyQTI0RiAv
KiBKU1R5cGUuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5m
by5oICovLAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBKU1ZhbHVlLmNwcCAqLywK
QEAgLTI2NTcsNiArMjY2OSw4IEBACiAJCQkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1NEZCNEYwMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNjAxNUUxNTYxOThDOTAw
QzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjI5LDYgKzMyNDMsOCBAQAog
CQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkw
MDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5
MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTky
MywxNSArOTIzLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFyOiB7CiAgICAgICAgICAg
ICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGludCBpbmRleCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gZ2V0X2dsb2JhbF92
YXJcdCAlcywgJWRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSwg
aW5kZXgpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50
ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQb2ludGVyOworICAgICAgICAgICAgZGF0YUxvZygiWyU0
ZF0gZ2V0X2dsb2JhbF92YXJcdCAlcywgZyVkKCVwKVxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShleGVjLCByMCkuZGF0YSgpLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5kZXgocmVn
aXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAgICAgIGl0Kys7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFy
OiB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gKCsraXQpLT51LnJl
Z2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwot
ICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJcdCAlZCwgJXNcbiIsIGxv
Y2F0aW9uLCBpbmRleCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOworICAgICAgICAg
ICAgZGF0YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJcdCBnJWQoJXApLCAlc1xuIiwgbG9jYXRp
b24sIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpLCBy
ZWdpc3RlclBvaW50ZXIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2
aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSW5zdHJ1Y3Rpb24oTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykgeyB1
LmNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mbzsgfQogICAgICAgICAKICAgICAgICAgSW5zdHJ1
Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUucHJvZmlsZSA9IHByb2ZpbGU7IH0KKyAg
ICAgICAgCisgICAgICAgIEluc3RydWN0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0
ZXJQb2ludGVyKSB7IHUucmVnaXN0ZXJQb2ludGVyID0gcmVnaXN0ZXJQb2ludGVyOyB9CiAKICAg
ICAgICAgdW5pb24gewogICAgICAgICAgICAgT3Bjb2RlIG9wY29kZTsKQEAgLTE5OCw2ICsyMDAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNo
YWluPiBzdHJ1Y3R1cmVDaGFpbjsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxs
PiBqc0NlbGw7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9p
bnRlcjsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRlckZ1bmM7
CiAgICAgICAgICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvOwogICAgICAgICAg
ICAgVmFsdWVQcm9maWxlKiBwcm9maWxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDExIEBAIHZvaWQgUmVz
b2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB9CiAjZW5kaWYKIAorV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclBvaW50ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiAmanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5yZWdpc3RlckF0
KGluZGV4KCkpOworfQorCiBzdGF0aWMgYm9vbCBzX2R1bXBzR2VuZXJhdGVkQ29kZSA9IGZhbHNl
OwogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBk
dW1wc0dlbmVyYXRlZENvZGUpCkBAIC0yODAsNyArMjg1LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIHNpemVfdCBuZXdHbG9iYWxzID0gdmFyU3RhY2su
c2l6ZSgpICsgZnVuY3Rpb25TdGFjay5zaXplKCk7CiAgICAgaWYgKCFuZXdHbG9iYWxzKQogICAg
ICAgICByZXR1cm47Ci0gICAgZ2xvYmFsT2JqZWN0LT5yZXNpemVSZWdpc3RlcnMoc3ltYm9sVGFi
bGUtPnNpemUoKSArIG5ld0dsb2JhbHMpOworICAgIGdsb2JhbE9iamVjdC0+YWRkUmVnaXN0ZXJz
KG5ld0dsb2JhbHMpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0YWNr
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0gZnVu
Y3Rpb25TdGFja1tpXTsKQEAgLTY3OSw2ICs2ODQsMTQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cmV0cmlldmVMYXN0VW5hcgogICAgIHNyY0luZGV4ID0gaW5zdHJ1Y3Rpb25zKCkuYXQoc2l6
ZSAtIDEpLnUub3BlcmFuZDsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmV0cmlldmVM
YXN0VW5hcnlPcChXcml0ZUJhcnJpZXI8VW5rbm93bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0lu
ZGV4KQoreworICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gMyk7CisgICAgc2l6
ZV90IHNpemUgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZHN0UG9pbnRlciA9IGluc3Ry
dWN0aW9ucygpLmF0KHNpemUgLSAyKS51LnJlZ2lzdGVyUG9pbnRlcjsKKyAgICBzcmNJbmRleCA9
IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAxKS51Lm9wZXJhbmQ7Cit9CisKIHZvaWQgQUxXQVlT
X0lOTElORSBCeXRlY29kZUdlbmVyYXRvcjo6cmV3aW5kQmluYXJ5T3AoKQogewogICAgIEFTU0VS
VChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gNCk7CkBAIC0xMTc3LDcgKzExOTAsNyBAQCBSZXNv
bHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlCiAgICAgICAgICAgICBmbGFncyB8
PSBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9ICAgICAgICAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlhYmxlT2Jq
ZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOworICAgICAgICBK
U1N5bWJvbFRhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNTeW1i
b2xUYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3QtPnN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5
LmltcGwoKSk7CiAKICAgICAgICAgLy8gRm91bmQgdGhlIHByb3BlcnR5CkBAIC0xMjM0LDcgKzEy
NDcsNyBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlCiAgICAgICAg
IEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKICAgICAgICAgaWYgKCFjdXJy
ZW50U2NvcGUtPmlzVmFyaWFibGVPYmplY3QoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNW
YXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIEpTU3ltYm9sVGFibGVPYmpl
Y3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4o
Y3VycmVudFNjb3BlKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGN1cnJlbnRW
YXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgpKTsKICAgICAg
ICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDM3LDE2
ICsxNDUwLDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3QKICAg
ICBjYXNlIFJlc29sdmVSZXN1bHQ6OkluZGV4ZWRHbG9iYWw6CiAgICAgY2FzZSBSZXNvbHZlUmVz
dWx0OjpSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAgICAgICAgIGlmIChtX2xhc3RPcGNvZGVJRCA9
PSBvcF9wdXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAgICAgaW50IGRzdEluZGV4OworICAgICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBkc3RQb2ludGVyOwogICAgICAgICAgICAgaW50
IHNyY0luZGV4OwotICAgICAgICAgICAgcmV0cmlldmVMYXN0VW5hcnlPcChkc3RJbmRleCwgc3Jj
SW5kZXgpOwotICAgICAgICAgICAgaWYgKGRzdEluZGV4ID09IHJlc29sdmVSZXN1bHQuaW5kZXgo
KSAmJiBzcmNJbmRleCA9PSBkc3QtPmluZGV4KCkpCisgICAgICAgICAgICByZXRyaWV2ZUxhc3RV
bmFyeU9wKGRzdFBvaW50ZXIsIHNyY0luZGV4KTsKKyAgICAgICAgICAgIGlmIChkc3RQb2ludGVy
ID09IHJlc29sdmVSZXN1bHQucmVnaXN0ZXJQb2ludGVyKCkgJiYgc3JjSW5kZXggPT0gZHN0LT5p
bmRleCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgIH0KIAogICAgICAg
ICBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9nbG9iYWxfdmFyKTsKICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5yZWdpc3RlclBvaW50ZXIoKSk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICAgICAgcmV0dXJuIGRzdDsKIApAQCAt
MTQ3NCw3ICsxNDg3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRT
dAogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2JhbDoKICAgICBjYXNlIFJlc29s
dmVSZXN1bHQ6OlJlYWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAgICAgZW1pdE9wY29kZShvcF9w
dXRfZ2xvYmFsX3Zhcik7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVz
dWx0LmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3Vs
dC5yZWdpc3RlclBvaW50ZXIoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh2YWx1
ZS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAko
cmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiArMTk3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBpbmRleCgpIGNvbnN0IHsgQVNTRVJUIChpc0luZGV4
ZWQoKSB8fCBpc1JlZ2lzdGVyKCkpOyByZXR1cm4gbV9pbmRleDsgfQogICAgICAgICBzaXplX3Qg
ZGVwdGgoKSBjb25zdCB7IEFTU0VSVChpc1Njb3BlZCgpKTsgcmV0dXJuIG1fZGVwdGg7IH0KICAg
ICAgICAgSlNPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzR2xvYmFsKCkp
OyBBU1NFUlQobV9nbG9iYWxPYmplY3QpOyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKyAgICAg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIoKSBjb25zdDsKIAogICAg
ICAgICBib29sIGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBSZWdpc3RlckZs
YWc7IH0KICAgICAgICAgYm9vbCBpc0R5bmFtaWMoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgJiBE
eW5hbWljRmxhZzsgfQpAQCAtNTQxLDYgKzU0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBWYWx1ZVByb2ZpbGUqIGVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJRCk7CiAgICAgICAgIHZv
aWQgcmV0cmlldmVMYXN0QmluYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50JiBzcmMxSW5kZXgsIGlu
dCYgc3JjMkluZGV4KTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RVbmFyeU9wKGludCYgZHN0
SW5kZXgsIGludCYgc3JjSW5kZXgpOworICAgICAgICB2b2lkIHJldHJpZXZlTGFzdFVuYXJ5T3Ao
V3JpdGVCYXJyaWVyPFVua25vd24+KiYgZHN0UG9pbnRlciwgaW50JiBzcmNJbmRleCk7CiAgICAg
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRCaW5hcnlPcCgpOwogICAgICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlPcCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDExOTUzMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNSwyMSArMTE1LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAotICAg
IHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3JHbG9iYWxWYXIoR1BSUmVnIGdsb2JhbCwgaW50MzJf
dCB2YXJOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhnbG9iYWwsIHZhck51
bWJlciAqIHNpemVvZihSZWdpc3RlcikpOwotICAgIH0KLQotICAgIHN0YXRpYyBBZGRyZXNzIHRh
Z0Zvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVy
KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvckdsb2JhbFZhcihHUFJSZWcg
Z2xvYmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNz
KGdsb2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLQogICAgIHN0
YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikK
ICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTk1
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIxNiwxNCArMjIxNiwyMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsK
ICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGdldEdsb2JhbFZhciA9IGFkZFRv
R3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggZ2V0R2xvYmFs
VmFyID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBHZXRHbG9iYWxWYXIsCisgICAgICAg
ICAgICAgICAgT3BJbmZvKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5yZWdpc3RlclBvaW50ZXIpKSwKKyAgICAgICAgICAgICAgICBPcEluZm8ocHJlZGljdGlvbikp
OwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEds
b2JhbFZhcik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZ2xvYmFsX3Zhcik7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFyOiB7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEdsb2JhbFZhciwgT3BJbmZvKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKAor
ICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhciwKKyAgICAgICAgICAgICAgICBPcEluZm8obV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hc3NlcnRSZWdpc3Rl
cklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcikp
LAorICAgICAgICAgICAgICAgIHZhbHVlKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1
dF9nbG9iYWxfdmFyKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxOCArMTk0
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAg
IE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2Fk
RWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAg
ICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwogICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAg
ICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+Z2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAgICAg
ICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUu
dmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Io
bm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIxNyw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggZ2xvYmFsVmFy
U3RvcmVFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCisgICAgTm9kZUluZGV4IGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24oV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAgTm9kZUluZGV4
IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtMjI2LDEyICsyMjYsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2Jh
bE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKQEAgLTk4MiwxMyArOTgyLDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNjZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVpdGUg
cHVyZSwgYnV0IHdlIGNhbiBzdGlsbAogICAgICAgICAvLyBvcHRpbWl6ZSB0aGVtIHByb3ZpZGVk
IHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBhcmUgbWV0LgogICAgICAgICBjYXNlIEdldEds
b2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbihub2RlLnZhck51bWJlcigpLCBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUu
Y29kZU9yaWdpbikpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZhckxvYWRF
bGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgICAgIGlm
IChtX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlv
bihub2RlLnZhck51bWJlcigpLCBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbikpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0
aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsMTMgQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgICAgICBkYXRhTG9nKCIl
c3ZhciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS52YXJOdW1iZXIoKSk7CiAgICAg
ICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KKyAgICBpZiAobm9kZS5oYXNSZWdpc3RlclBv
aW50ZXIoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIiVzZ2xvYmFsJXUoJXAp
IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLnJlZ2lzdGVyUG9pbnRlcigp
KSwKKyAgICAgICAgICAgIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOworICAgICAgICBoYXNQcmlu
dGVkID0gdHJ1ZTsKKyAgICB9CiAgICAgaWYgKG5vZGUuaGFzSWRlbnRpZmllcigpKSB7CiAgICAg
ICAgIGRhdGFMb2coIiVzaWQldXslc30iLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmlk
ZW50aWZpZXJOdW1iZXIoKSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIobm9kZS5pZGVudGlmaWVy
TnVtYmVyKCkpLnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9
IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
MTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMCw2ICszMTAsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1fc3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEubGFzdCgpOwogICAgIH0KICAgICAKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pOworICAg
IH0KKyAgICAKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZUZvcihJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1l
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExOTUzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MjEsNyArNDIxLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzVmFyTnVt
YmVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBvcCgp
ID09IFB1dEdsb2JhbFZhciB8fCBvcCgpID09IEdldFNjb3BlZFZhciB8fCBvcCgpID09IFB1dFNj
b3BlZFZhcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0U2NvcGVkVmFyIHx8IG9wKCkgPT0g
UHV0U2NvcGVkVmFyOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHZhck51bWJlcigpCkBAIC00Mjks
NiArNDI5LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGhhc1Zhck51bWJlcigp
KTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KKyAgICAKKyAgICBib29sIGhhc1Jl
Z2lzdGVyUG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRHbG9iYWxW
YXIgfHwgb3AoKSA9PSBQdXRHbG9iYWxWYXI7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obV9vcEluZm8pOworICAgIH0KIAogICAg
IGJvb2wgaGFzU2NvcGVDaGFpbkRlcHRoKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NjQsMzMgKzM1NjQsMzIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0R2xv
YmFsVmFyOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKIAotICAg
ICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9iYWxPYmplY3RG
b3Iobm9kZS5jb2RlT3JpZ2luKTsKLSAgICAgICAgbV9qaXQubG9hZFB0cihjb25zdF9jYXN0PFdy
aXRlQmFycmllcjxVbmtub3duPioqPihnbG9iYWxPYmplY3QtPmFkZHJlc3NPZlJlZ2lzdGVycygp
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdG
b3JHbG9iYWxWYXIocmVzdWx0LmdwcigpLCBub2RlLnZhck51bWJlcigpKSwgc2NyYXRjaC5ncHIo
KSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvckdsb2JhbFZh
cihyZXN1bHQuZ3ByKCksIG5vZGUudmFyTnVtYmVyKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS5yZWdpc3RlclBvaW50ZXIoKSksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWQuZ3ByKCksIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXls
b2FkLmdwcigpKTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2guZ3ByKCksIHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IGdsb2JhbE9iamVjdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0UmVnID0gZ2xvYmFsT2JqZWN0
LmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIGdsb2JhbE9iamVjdFJlZyk7Ci0KLSAgICAg
ICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2
YWx1ZS50YWdHUFIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nl
c3MsIHNjcmF0Y2hSZWcpOworICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdp
biksIHZhbHVlLnRhZ0dQUigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJs
ZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgIH0KIAotICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdFJlZywgSlNWYXJpYWJsZU9iamVj
dDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hSZWcpOwotICAgICAgICBtX2ppdC5zdG9y
ZTMyKHZhbHVlLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yR2xvYmFsVmFyKHNjcmF0Y2hS
ZWcsIG5vZGUudmFyTnVtYmVyKCkpKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5wYXls
b2FkR1BSKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yR2xvYmFsVmFyKHNjcmF0Y2hSZWcsIG5v
ZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgLy8gRklYTUU6IGlmIHdlIGhhcHBlbiB0byBoYXZl
IGEgc3BhcmUgcmVnaXN0ZXIgLSBhbmQgX09OTFlfIGlmIHdlIGhhcHBlbiB0byBoYXZlCisgICAg
ICAgIC8vIGEgc3BhcmUgcmVnaXN0ZXIgLSBhIGdvb2Qgb3B0aW1pemF0aW9uIHdvdWxkIGJlIHRv
IHB1dCB0aGUgcmVnaXN0ZXIgcG9pbnRlciBpbnRvCisgICAgICAgIC8vIGEgcmVnaXN0ZXIgYW5k
IHRoZW4gZG8gYSB6ZXJvIG9mZnNldCBzdG9yZSBmb2xsb3dlZCBieSBhIGZvdXItb2Zmc2V0IHN0
b3JlIChvcgorICAgICAgICAvLyB2aWNlLXZlcnNhIGRlcGVuZGluZyBvbiBlbmRpYW5uZXNzKS4K
KyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgbm9kZS5yZWdpc3RlclBvaW50
ZXIoKS0+dGFnUG9pbnRlcigpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5wYXlsb2Fk
R1BSKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPnBheWxvYWRQb2ludGVyKCkpOwogCiAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OTMsOSArMzU5Myw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIEdldEdsb2JhbFZhcjog
ewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgIEpTVmFyaWFi
bGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVP
cmlnaW4pOwotICAgICAgICBtX2ppdC5sb2FkUHRyKGdsb2JhbE9iamVjdC0+YWRkcmVzc09mUmVn
aXN0ZXJzKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3JHbG9iYWxWYXIocmVzdWx0LmdwcigpLCBub2RlLnZhck51bWJlcigpKSwg
cmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihub2RlLnJlZ2lzdGVyUG9pbnRl
cigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzYwMywxOCArMzYwMSwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIFB1
dEdsb2JhbFZhcjogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0aGlzKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcg
Z2xvYmFsT2JqZWN0UmVnID0gZ2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICBHUFJSZWcgc2Ny
YXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KSksIGdsb2JhbE9iamVjdFJlZyk7Ci0KLSAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2Jh
bE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDEoKSwg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotCi0gICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ2xvYmFsT2JqZWN0UmVnLCBKU1Zh
cmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaFJlZyk7Ci0gICAgICAg
IG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvckdsb2Jh
bFZhcihzY3JhdGNoUmVnLCBub2RlLnZhck51bWJlcigpKSk7CisgICAgICAgIGlmIChIZWFwOjpp
c1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hpbGQxKCksIFdyaXRl
QmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIG5vZGUucmVnaXN0ZXJQb2lu
dGVyKCkpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxMTk1MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDYgKzg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBib29sIHRlc3RBbmRT
ZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgdm9pZCBzZXRNYXJrZWQoY29u
c3Qgdm9pZCopOwogCisgICAgICAgIHN0YXRpYyBib29sIGlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
OwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNWYWx1
ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBKU0Nl
bGwqKTsKICAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKik7
CkBAIC0yODIsNiArMjgzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYXJrZWRCbG9j
azo6YmxvY2tGb3IoY2VsbCktPnNldE1hcmtlZChjZWxsKTsKICAgICB9CiAKKyAgICBpbmxpbmUg
Ym9vbCBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKQorICAgIHsKKyNpZiBFTkFCTEUoR0dD
KSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIHJldHVybiB0cnVl
OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorCiAjaWYgRU5B
QkxFKEdHQykKICAgICBpbmxpbmUgdWludDhfdCogSGVhcDo6YWRkcmVzc09mQ2FyZEZvcihKU0Nl
bGwqIGNlbGwpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTQzLDcgKzE1NDMsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVj
dXRhCiAgICAgZm9yIChTY29wZUNoYWluTm9kZSogbm9kZSA9IHNjb3BlQ2hhaW47IDsgbm9kZSA9
IG5vZGUtPm5leHQuZ2V0KCkpIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAgICBpZiAo
bm9kZS0+b2JqZWN0LT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgIW5vZGUtPm9iamVjdC0+aXNTdGF0
aWNTY29wZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxK
U1ZhcmlhYmxlT2JqZWN0Kj4obm9kZS0+b2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIHZhcmlh
YmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihub2RlLT5vYmplY3QuZ2V0
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yODYwLDMwICsy
ODYwLDI4IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9n
bG9iYWxfdmFyKSB7Ci0gICAgICAgIC8qIGdldF9nbG9iYWxfdmFyIGRzdChyKSBnbG9iYWxPYmpl
Y3QoYykgaW5kZXgobikKKyAgICAgICAgLyogZ2V0X2dsb2JhbF92YXIgZHN0KHIpIGdsb2JhbE9i
amVjdChjKSByZWdpc3RlclBvaW50ZXIobikKIAogICAgICAgICAgICBHZXRzIHRoZSBnbG9iYWwg
dmFyIGF0IGdsb2JhbCBzbG90IGluZGV4IGFuZCBwbGFjZXMgaXQgaW4gcmVnaXN0ZXIgZHN0Lgog
ICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAg
ICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIGludCBpbmRleCA9
IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0
ZXJQb2ludGVyID0gdlBDWzJdLnUucmVnaXN0ZXJQb2ludGVyOwogCi0gICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihkc3QpID0gc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpLmdldCgpOworICAg
ICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlZ2lzdGVyUG9pbnRlci0+Z2V0KCk7
CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9nbG9iYWxfdmFyKTsKICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX3B1dF9n
bG9iYWxfdmFyKSB7Ci0gICAgICAgIC8qIHB1dF9nbG9iYWxfdmFyIGdsb2JhbE9iamVjdChjKSBp
bmRleChuKSB2YWx1ZShyKQorICAgICAgICAvKiBwdXRfZ2xvYmFsX3ZhciBnbG9iYWxPYmplY3Qo
YykgcmVnaXN0ZXJQb2ludGVyKG4pIHZhbHVlKHIpCiAgICAgICAgICAKICAgICAgICAgICAgUHV0
cyB2YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LgogICAgICAgICAgKi8KICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAg
QVNTRVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgaW50IGluZGV4ID0gdlBD
WzFdLnUub3BlcmFuZDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBv
aW50ZXIgPSB2UENbMV0udS5yZWdpc3RlclBvaW50ZXI7CiAgICAgICAgIGludCB2YWx1ZSA9IHZQ
Q1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIAotICAgICAgICBzY29wZS0+cmVnaXN0ZXJBdChpbmRl
eCkuc2V0KCpnbG9iYWxEYXRhLCBzY29wZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkp
OworICAgICAgICByZWdpc3RlclBvaW50ZXItPnNldCgqZ2xvYmFsRGF0YSwgc2NvcGUsIGNhbGxG
cmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYwLDEz
ICsxMDYwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWMKIHZv
aWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKTsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5pc0dsb2JhbE9iamVjdCgpKTsKLSAg
ICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgbG9h
ZFB0cigmZ2xvYmFsT2JqZWN0LT5tX3JlZ2lzdGVycywgcmVnVDIpOworICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUucmVn
aXN0ZXJQb2ludGVyOwogCi0gICAgZW1pdExvYWQoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIp
OworICAgIGxvYWQzMihyZWdpc3RlclBvaW50ZXItPnRhZ1BvaW50ZXIoKSwgcmVnVDEpOworICAg
IGxvYWQzMihyZWdpc3RlclBvaW50ZXItPnBheWxvYWRQb2ludGVyKCksIHJlZ1QwKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2dsb2Jh
bF92YXIpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CkBAIC0xMDc0LDE4ICsxMDcxLDIxIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
cmVnaXN0ZXJQb2ludGVyOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwogCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QyKTsKLQotICAgIGVt
aXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICAKKyAgICBpZiAo
SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksIHJlZ1QyKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMSwgcmVnVDMsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMs
IFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICB9CiAKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdU
Mik7Ci0gICAgZW1pdFN0b3JlKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBzdG9y
ZTMyKHJlZ1QxLCByZWdpc3RlclBvaW50ZXItPnRhZ1BvaW50ZXIoKSk7CisgICAgc3RvcmUzMihy
ZWdUMCwgcmVnaXN0ZXJQb2ludGVyLT5wYXlsb2FkUG9pbnRlcigpKTsKICAgICBtYXAobV9ieXRl
Y29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIpLCB2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
ICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNWYXJpYWJs
ZU9iamVjdC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKQEAgLTEwMTAsOSArMTAxMSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgbG9hZFB0cigmZ2xvYmFsT2JqZWN0LT5tX3JlZ2lzdGVycywgcmVnVDApOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CisgICAgbG9hZFB0cihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50ZXIsIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKIH0KQEAgLTEwMjIsMTEgKzEwMjEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1YwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLQotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDEp
OwotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIo
Z2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRl
QmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICAKKyAgICBzdG9yZVB0cihyZWdUMCwgY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2Jq
ZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZv
clZhcmlhYmxlQWNjZXNzKTsKIH0KIAogdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0
Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTA0MSwxMyArMTA0MSwxMCBAQCBfbGxpbnRfb3BfcHV0X3Njb3BlZF92YXI6CiAKIF9sbGlu
dF9vcF9nZXRfZ2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGkgOFtQ
Q10sIHQxCisgICAgbG9hZHAgOFtQQ10sIHQwCiAgICAgbG9hZGkgNFtQQ10sIHQzCi0gICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCi0gICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAK
LSAgICBsb2FkaSBUYWdPZmZzZXRbdDAsIHQxLCA4XSwgdDIKLSAgICBsb2FkaSBQYXlsb2FkT2Zm
c2V0W3QwLCB0MSwgOF0sIHQxCisgICAgbG9hZGkgVGFnT2Zmc2V0W3QwXSwgdDIKKyAgICBsb2Fk
aSBQYXlsb2FkT2Zmc2V0W3QwXSwgdDEKICAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQz
LCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQogICAgIGxvYWRp
IDEyW1BDXSwgdDMKQEAgLTEwNTgsMTQgKzEwNTUsMTEgQEAgX2xsaW50X29wX2dldF9nbG9iYWxf
dmFyOgogX2xsaW50X29wX3B1dF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAg
ICBsb2FkaSA4W1BDXSwgdDEKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9i
amVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAorICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKLSAgICBsb2FkaSA0W1BDXSwgdDEKICAgICB3
cml0ZUJhcnJpZXIodDIsIHQzKQotICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwLCB0MSwgOF0K
LSAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQorICAgIHN0b3JlaSB0Miwg
VGFnT2Zmc2V0W3QwXQorICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MF0KICAgICBkaXNw
YXRjaCgzKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtODk1LDI4ICs4OTUsMjIgQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFyOgogCiBf
bGxpbnRfb3BfZ2V0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRp
cyAxNltQQiwgUEMsIDhdLCB0MQorICAgIGxvYWRwIDE2W1BCLCBQQywgOF0sIHQwCiAgICAgbG9h
ZGlzIDhbUEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2Jh
bE9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAotICAgIGxvYWRwIFt0MCwgdDEsIDhdLCB0Mgot
ICAgIHN0b3JlcCB0MiwgW2NmciwgdDMsIDhdCi0gICAgbG9hZHAgMjRbUEIsIFBDLCA4XSwgdDMK
LSAgICB2YWx1ZVByb2ZpbGUodDIsIHQzKQorICAgIGxvYWRwIFt0MF0sIHQxCisgICAgc3RvcmVw
IHQxLCBbY2ZyLCB0MywgOF0KKyAgICBsb2FkcCAyNFtQQiwgUEMsIDhdLCB0MAorICAgIHZhbHVl
UHJvZmlsZSh0MSwgdDApCiAgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRfb3BfcHV0X2dsb2Jh
bF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0
MQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9n
bG9iYWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3JlZ2lzdGVy
c1t0MF0sIHQwCisgICAgbG9hZHAgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDEsIHQyKQotICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgd3JpdGVC
YXJyaWVyKHQyKQotICAgIHN0b3JlcCB0MiwgW3QwLCB0MSwgOF0KKyAgICBzdG9yZXAgdDIsIFt0
MF0KICAgICBkaXNwYXRjaCgzKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZv
IEpTR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmSlNWYXJpYWJsZU9i
amVjdDo6c19pbmZvLCAwLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTR2xvYmFsT2JqZWN0KSB9OworY29uc3QgQ2xhc3NJbmZvIEpTR2xvYmFsT2Jq
ZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6c19pbmZvLCAwLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTR2xvYmFsT2JqZWN0KSB9OwogCiBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSBKU0dsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsgJmFsbG93c0Fj
Y2Vzc0Zyb20sICZzdXBwb3J0c1Byb2ZpbGluZywgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sICZz
aG91bGRJbnRlcnJ1cHRTY3JpcHQsICZqYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkIH07CiAK
QEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxs
LCBFCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihjZWxsKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0gICAgaWYgKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RN
b2RlKCkpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0dXJuOwotICAg
IEpTVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpwdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQpAQCAtMTU4LDEyICsxNTgsMTIgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cHV0RGly
ZWN0VmlydHVhbChKUwogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0gICAgaWYg
KHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+Z2xvYmFsRGF0
YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKKyAgICBpZiAoc3ltYm9sVGFi
bGVQdXRXaXRoQXR0cmlidXRlcyh0aGlzT2JqZWN0LCBleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU1Zh
bHVlIHZhbHVlQmVmb3JlID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEo
KSwgcHJvcGVydHlOYW1lKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1Zhcmlh
YmxlT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIGlmICghdmFsdWVCZWZvcmUpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZUFmdGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKHZhbHVlQWZ0ZXIpCkBAIC0x
NzYsNyArMTc2LDcgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSgog
ICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
b2JqZWN0KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAvLyBzaWxlbnRseSBpZ25vcmUg
YXR0ZW1wdHMgdG8gYWRkIGFjY2Vzc29ycyBhbGlhc2luZyB2YXJzLgotICAgIGlmIChkZXNjcmlw
dG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgdGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3Jp
cHRvcigpICYmIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJv
dyk7CiB9CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNf
aW5mbyk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNp
dENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAg
ICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbigpKTsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3Is
ICZ0aGlzT2JqZWN0LT5tX2dsb2JhbFNjb3BlQ2hhaW4pOwogICAgIHZpc2l0SWZOZWVkZWQodmlz
aXRvciwgJnRoaXNPYmplY3QtPm1fbWV0aG9kQ2FsbER1bW15KTsKQEAgLTM5MywxNyArMzkzLDYg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0SWZO
ZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNp
dElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX3N0cmluZ09iamVjdFN0cnVjdHVyZSk7
CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0
aW9uU3RydWN0dXJlKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkpIHsK
LSAgICAgICAgLy8gT3V0c2lkZSB0aGUgZXhlY3V0aW9uIG9mIGdsb2JhbCBjb2RlLCB3aGVuIG91
ciB2YXJpYWJsZXMgYXJlIHRvcm4gb2ZmLAotICAgICAgICAvLyB3ZSBjYW4gbWFyayB0aGUgdG9y
bi1vZmYgYXJyYXkuCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1f
cmVnaXN0ZXJBcnJheS5nZXQoKSwgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5U2l6ZSk7Ci0g
ICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykgewotICAgICAgICAvLyBEdXJp
bmcgZXhlY3V0aW9uIG9mIGdsb2JhbCBjb2RlLCB3aGVuIG91ciB2YXJpYWJsZXMgYXJlIGluIHRo
ZSByZWdpc3RlciBmaWxlLAotICAgICAgICAvLyB0aGUgc3ltYm9sIHRhYmxlIHRlbGxzIHVzIGhv
dyBtYW55IHZhcmlhYmxlcyB0aGVyZSBhcmUsIGFuZCByZWdpc3RlcnMKLSAgICAgICAgLy8gcG9p
bnRzIHRvIHdoZXJlIHRoZXkgZW5kLCBhbmQgdGhlIHJlZ2lzdGVycyB1c2VkIGZvciBleGVjdXRp
b24gYmVnaW4uCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVn
aXN0ZXJzIC0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5zaXplKCksIHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCkuc2l6ZSgpKTsKLSAgICB9CiB9CiAKIEV4ZWNTdGF0ZSogSlNHbG9iYWxPYmpl
Y3Q6Omdsb2JhbEV4ZWMoKQpAQCAtNDExLDI2ICs0MDAsOSBAQCBFeGVjU3RhdGUqIEpTR2xvYmFs
T2JqZWN0OjpnbG9iYWxFeGVjKCkKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9nbG9i
YWxDYWxsRnJhbWUgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogfQogCi12
b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNpemVSZWdpc3RlcnMoc2l6ZV90IG5ld1NpemUpCi17Ci0g
ICAgLy8gUHJldmlvdXMgZHVwbGljYXRlIHN5bWJvbHMgbWF5IGhhdmUgY3JlYXRlZCBzcGFyZSBj
YXBhY2l0eSBpbiBtX3JlZ2lzdGVyQXJyYXkuCi0gICAgaWYgKG5ld1NpemUgPD0gbV9yZWdpc3Rl
ckFycmF5U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG9sZFNpemUgPSBtX3Jl
Z2lzdGVyQXJyYXlTaXplOwotICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+
IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5b
bmV3U2l6ZV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkU2l6ZTsgKytpKQotICAg
ICAgICByZWdpc3RlckFycmF5W2ldLnNldChnbG9iYWxEYXRhKCksIHRoaXMsIG1fcmVnaXN0ZXJB
cnJheVtpXS5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCi0gICAgICAgIHJlZ2lzdGVyQXJyYXlbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7Ci0g
ICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCksIG5ld1Np
emUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsb2JhbFBy
b3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNvdW50KQogewotICAgIHJlc2l6ZVJlZ2lzdGVycyhz
eW1ib2xUYWJsZSgpLnNpemUoKSArIGNvdW50KTsKKyAgICBhZGRSZWdpc3RlcnMoY291bnQpOwog
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyYgZ2xvYmFsID0gZ2xvYmFsc1tpXTsKQEAgLTQ0NiwxNyArNDE4LDE3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OmFkZFN0YXRpY0dsb2JhbHMoR2wKIGJvb2wgSlNHbG9iYWxPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTR2xv
YmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7Ci0g
ICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU1ZhcmlhYmxlT2JqZWN0PihleGVjLCBFeGVj
U3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQorICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09i
amVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAg
cmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9
CiAKIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU0dsb2JhbE9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKGdldFN0
YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU1ZhcmlhYmxlT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6
Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpKQorICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNsZWFyUmFy
ZURhdGEoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsVGhpcy5oIgotI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3Qu
aCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNX
ZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKQEAgLTc0LDcgKzc0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWRGdW5jdGlvblB0ciBq
YXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkOwogICAgIH07CiAKLSAgICBjbGFzcyBKU0dsb2Jh
bE9iamVjdCA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICBjbGFzcyBKU0dsb2JhbE9i
amVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBwcml2YXRlOgog
ICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE9wYXF1ZUpTV2Vha09iamVjdE1hcD4gPiBX
ZWFrTWFwU2V0OwogCkBAIC05MCw3ICs5MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJv
dGVjdGVkOgogCi0gICAgICAgIHNpemVfdCBtX3JlZ2lzdGVyQXJyYXlTaXplOwogICAgICAgICBS
ZWdpc3RlciBtX2dsb2JhbENhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emVdOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbV9nbG9iYWxTY29w
ZUNoYWluOwpAQCAtMTY0LDcgKzE2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJh
c2U7CisgICAgICAgIHR5cGVkZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBCYXNlOwogCiAg
ICAgICAgIHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKQEAgLTE3Nyw4ICsxNzYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNH
bG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
ID0gMCkKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1
cmUsICZtX3N5bWJvbFRhYmxlLCAwKQotICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXpl
KDApCisgICAgICAgICAgICA6IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSkKICAgICAgICAgICAgICwgbV9nbG9iYWxTY29wZUNo
YWluKCkKICAgICAgICAgICAgICwgbV93ZWFrUmFuZG9tKHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
YW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAx
LjApKSkKICAgICAgICAgICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQpAQCAtMzA4LDggKzMwNiw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldEV2YWxFbmFibGVkKGJvb2wgZW5h
YmxlZCkgeyBtX2V2YWxFbmFibGVkID0gZW5hYmxlZDsgfQogICAgICAgICBib29sIGV2YWxFbmFi
bGVkKCkgeyByZXR1cm4gbV9ldmFsRW5hYmxlZDsgfQogCi0gICAgICAgIHZvaWQgcmVzaXplUmVn
aXN0ZXJzKHNpemVfdCBuZXdTaXplKTsKLQogICAgICAgICB2b2lkIHJlc2V0UHJvdG90eXBlKEpT
R2xvYmFsRGF0YSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiAqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0
YSgpOyB9CkBAIC0zMzQsNyArMzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJs
ZSB3ZWFrUmFuZG9tTnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9CiAgICAg
cHJvdGVjdGVkOgogCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNWYXJpYWJsZU9iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6U3RydWN0
dXJlRmxhZ3M7CiAKICAgICAgICAgc3RydWN0IEdsb2JhbFByb3BlcnR5SW5mbyB7CiAgICAgICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oY29uc3QgSWRlbnRpZmllciYgaSwgSlNWYWx1ZSB2LCB1
bnNpZ25lZCBhKQpAQCAtMzU5LDcgKzM1NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgY3JlYXRlVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgdm9pZCBz
ZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NPd25BcnJh
eVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5LCBzaXplX3QgY291bnQp
OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjbGVhclJhcmVEYXRhKEpT
Q2VsbCopOwogICAgIH07CiAKQEAgLTM3MSwxOSArMzY2LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBKU0dsb2JhbE9iamVjdDo6c2V0UmVnaXN0ZXJzKFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJy
aWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KQotICAgIHsKLSAgICAg
ICAgSlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJh
eSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJBcnJheVNpemUgPSBjb3VudDsKLSAgICB9Ci0KICAgICBp
bmxpbmUgYm9vbCBKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgaWYgKEpTVmFyaWFibGVPYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICBpZiAoSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXMsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgYm9v
bCBzbG90SXNXcml0ZWFibGU7Ci0gICAgICAgIHJldHVybiBzeW1ib2xUYWJsZUdldChwcm9wZXJ0
eU5hbWUsIHNsb3QsIHNsb3RJc1dyaXRlYWJsZSk7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJs
ZUdldCh0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHNsb3RJc1dyaXRlYWJsZSk7CiAgICAgfQog
CiAgICAgaW5saW5lIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnN5bWJvbFRhYmxlSGFzUHJvcGVydHko
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitpbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJl
Z2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQoreworICAgIGZvciAoaW50IGkgPSBt
X3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAh
PSByZWdpc3RlckFkZHJlc3MpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0dXJu
IGk7CisgICAgfQorICAgIENSQVNIKCk7Cit9CisKK2ludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCit7CisgICAgQVNT
RVJUKG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgPj0gMCk7CisgICAgCisgICAgc2l6ZV90IG9sZFNp
emUgPSBtX3JlZ2lzdGVycy5zaXplKCk7CisgICAgbV9yZWdpc3RlcnMuZ3JvdyhvbGRTaXplICsg
bnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IG51bWJl
ck9mUmVnaXN0ZXJzVG9BZGQ7IGktLTspCisgICAgICAgIG1fcmVnaXN0ZXJzW29sZFNpemUgKyBp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNpemUpOworfQorCit2b2lkIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZp
c2l0b3IpCit7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChT
dHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEpTU3ltYm9s
VGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzLnNpemUoKTsg
aS0tOykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3JlZ2lzdGVy
c1tpXSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0X2gKKyNkZWZpbmUgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdF9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3ltYm9s
VGFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIlN5bWJvbFRh
YmxlLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL093bkFy
cmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOworY2xhc3MgUmVnaXN0ZXI7CisKKy8vIFRoaXMgaXMgYSBtb3N0bHkgZHJvcC1p
biByZXBsYWNlbWVudCBmb3IgSlNWYXJpYWJsZU9iamVjdCwgZXhjZXB0IHRoYXQgaXQgcHJlc2Vy
dmVzCisvLyB0aGUgaW52YXJpYW50IHRoYXQgYWZ0ZXIgYSB2YXJpYWJsZSBpcyBjcmVhdGVkLCBp
dHMgYWRkcmVzcyBpbiBtZW1vcnkgd2lsbCBub3QgY2hhbmdlCisvLyBzbyBsb25nIGFzIHRoZSBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IGlzIGFsaXZlLiBUaGlzIGFsbG93cyBvcHRpbWl6YXRp
b25zIGJhc2VkCisvLyBvbiBnZXR0aW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBhbmQg
cmVtZW1iZXJpbmcgaXQuIEFzIHdlbGwsIHVubGlrZSBhCisvLyBKU1ZhcmlhYmxlT2JqZWN0LCB0
aGlzIHdpbGwgbWFuYWdlIHRoZSBtZW1vcnkgZm9yIHRoZSByZWdpc3RlcnMgaXRzZWxmIGFuZCBu
ZWl0aGVyCisvLyByZXF1aXJlcyBub3IgYWxsb3dzIGZvciB0aGUgc3ViY2xhc3NlcyB0byBtYW5h
Z2UgdGhhdCBtZW1vcnkuIEZpbmFsbHksCisvLyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IGhh
cyBpdHMgb3duIEdDIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgc2luY2UgaXQga25vd3MgdGhlCisv
LyBleGFjdCBkaW1lbnNpb25zIG9mIHRoZSB2YXJpYWJsZXMgYXJyYXkgYXQgYWxsIHRpbWVzLgor
CitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IDogcHVibGljIEpTU3ltYm9sVGFibGVP
YmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zm
c2V0c0V4dHJhY3RvcjsKKworcHVibGljOgorICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVj
dCBCYXNlOworCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRl
eCkgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBh
IHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNoIHNlYXJjaGVzIHRoZSByZWdpc3RlciBiYW5rIHRvIGZp
bmQgdGhlIGluZGV4CisgICAgLy8gZ2l2ZW4gYSBwb2ludGVyLiBJdCB3aWxsIENSQVNIKCkgaWYg
aXQgZG9lcyBub3QgZmluZCB0aGUgcmVnaXN0ZXIuIE9ubHkgdXNlIHRoaXMKKyAgICAvLyBpbiBk
ZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2RlIGR1bXBpbmcpLgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IGludCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJQb2ludGVyKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAg
IGZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlcik7CisjZW5kaWYKKyAgICAgICAgcmV0
dXJuIHJlZ2lzdGVyUG9pbnRlcjsKKyAgICB9CisgICAgCisgICAgLy8gQWRkcyBudW1iZXJPZlJl
Z2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFu
ZCByZXR1cm5zCisgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNU
b0FkZCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpT
U3ltYm9sVGFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworCisgICAgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgICAgIDogSlNTeW1ib2xUYWJsZU9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7Cisg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIH0KKworICAgIFNl
Z21lbnRlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4sIDE2PiBtX3JlZ2lzdGVyczsKK307
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsMTMgKzY2LDEzIEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEpTQ2Vs
bCogY2UKICAgICAgICAgLy8gYSBwb2ludGVyIGNvbXBhcmUuCiAgICAgICAgIFByb3BlcnR5U2xv
dCBzbG90OwogICAgICAgICBib29sIGlzV3JpdGFibGUgPSB0cnVlOwotICAgICAgICB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QsIGlzV3JpdGFibGUpOworICAg
ICAgICBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIGlzV3Jp
dGFibGUpOwogICAgICAgICBpZiAoIWlzV3JpdGFibGUpIHsKICAgICAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5
V3JpdGVFcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAg
IGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKKyAgICBpZiAoc3ltYm9sVGFibGVQdXQodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxLDcgKzgx
LDcgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoSlNDZWxsKiBjZQogdm9pZCBKU1N0
YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKIHsKICAgICBKU1N0YXRpY1Njb3BlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpOwotICAgIGlmICh0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0
aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtODksNyArODksNyBAQCB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6
OnB1dERpcmVjdFZpcnR1CiAKIGJvb2wgSlNTdGF0aWNTY29wZU9iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBqc0Nhc3Q8SlNTdGF0aWNTY29w
ZU9iamVjdCo+KGNlbGwpLT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAg
IHJldHVybiBzeW1ib2xUYWJsZUdldChqc0Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGNlbGwp
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNTeW1ib2xUYWJsZU9iamVjdC5oIgorCisjaW5jbHVkZSAiSlNBY3RpdmF0
aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0YXRpY1Nj
b3BlT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Cit7CisgICAgc3RhdGljX2Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpLT5KU1N5bWJv
bFRhYmxlT2JqZWN0Ojp+SlNTeW1ib2xUYWJsZU9iamVjdCgpOworfQorCitib29sIEpTU3ltYm9s
VGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTU3ltYm9sVGFibGVPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQg
SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOworICAgIFN5bWJvbFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwor
ICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3lt
Ym9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCEoaXQt
PnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykpCisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlm
aWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgIH0KKyAgICAKKyAgICBKU09iamVjdDo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2Rl
KTsKK30KKwordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojpp
c0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsKKyAgICBjYXNlIEdsb2Jh
bE9iamVjdFR5cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0dsb2JhbE9i
amVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOworICAg
IGNhc2UgQWN0aXZhdGlvbk9iamVjdFR5cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBKU0FjdGl2YXRpb24qPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWlj
Q2hlY2tzKTsKKyAgICBjYXNlIFN0YXRpY1Njb3BlT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IEpTU3RhdGljU2NvcGVPYmplY3QqPih0aGlzKS0+aXNEeW5hbWlj
U2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNTeW1ib2xUYWJsZU9i
amVjdF9oCisjZGVmaW5lIEpTU3ltYm9sVGFibGVPYmplY3RfaAorCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJTeW1ib2xU
YWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNTeW1ib2xUYWJsZU9iamVjdCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmlu
YWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSBjb25z
dCB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQorICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAgc3RhdGljIE5PX1JFVFVS
Tl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIGJvb2wgaXNEeW5hbWljU2Nv
cGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQ
cm9wZXJ0eU5hbWVzIHwgSlNOb25GaW5hbE9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgCisg
ICAgSlNTeW1ib2xUYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgICAgIDogSlNOb25G
aW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zeW1ib2xUYWJs
ZShzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEFTU0VSVChtX3N5bWJvbFRhYmxlKTsKKyAg
ICB9CisgICAgCisgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJs
ZUdldCgKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkp
LmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9s
VGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCisgICAgU3ltYm9s
VGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChl
bnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxl
T2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAorICAgIFN5bWJvbFRhYmxl
T2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QsCisgICAgYm9vbCYgc2xvdElzV3JpdGVhYmxlKQoreworICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldElu
ZGV4KCkpLmdldCgpKTsKKyAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgp
OworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9i
amVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKKyAgICBTeW1ib2xUYWJsZU9i
amVjdFR5cGUqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIEFTU0VSVCghSGVh
cDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3Qp
KTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnku
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZW50cnkuaXNSZWFkT25s
eSgpKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5k
ZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9v
bCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlw
ZSogb2JqZWN0LCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsCisgICAgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAob2JqZWN0KSk7CisgICAgCisgICAgU3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBvYmpl
Y3QtPnN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBp
ZiAoaXRlciA9PSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBB
U1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKKyAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0
ZXMpOworICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFs
RGF0YSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gSlNTeW1ib2xUYWJsZU9iamVjdF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwCShy
ZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNzAgKzI5LDYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0LmgiCiAKLSNp
bmNsdWRlICJKU0FjdGl2YXRpb24uaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2lu
Y2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJh
eS5oIgotI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgotCiBuYW1lc3BhY2UgSlNDIHsK
IAotdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBz
dGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY2VsbCktPkpTVmFyaWFibGVPYmplY3Q6On5K
U1ZhcmlhYmxlT2JqZWN0KCk7Ci19Ci0KLWJvb2wgSlNWYXJpYWJsZU9iamVjdDo6ZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Zh
cmlhYmxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCku
Y29udGFpbnMocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lKTsKLX0KLQotdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIEpTVmFy
aWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KG9iamVj
dCk7Ci0gICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCkuZW5kKCk7Ci0gICAgZm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBpZiAoIShpdC0+c2Vjb25kLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8
fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7Ci0gICAgfQot
ICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi1ib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJv
bFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKLXsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUo
KS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKCFlbnRyeS5p
c051bGwoKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IocmVnaXN0ZXJBdChl
bnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0
ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNT
dGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgSlNWYXJpYWJsZU9iamVjdDo6aXNEeW5hbWljU2NvcGUo
Ym9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdAotewotICAgIHN3aXRjaCAoc3RydWN0
dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9iYWxPYmplY3RUeXBlOgot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNHbG9iYWxPYmplY3QqPih0aGlzKS0+
aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKLSAgICBjYXNlIEFjdGl2YXRp
b25PYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNBY3RpdmF0
aW9uKj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAg
Y2FzZSBTdGF0aWNTY29wZU9iamVjdFR5cGU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBKU1N0YXRpY1Njb3BlT2JqZWN0Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVz
RHluYW1pY0NoZWNrcyk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
cmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgSlNWYXJpYWJsZU9iamVjdF9oCiAKICNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3ltYm9sVGFibGVPYmplY3QuaCIKICNpbmNs
dWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CkBAIC00MSw0MCArNDIsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGNsYXNzIFJlZ2lzdGVyOwogCi0gICAg
Y2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICBj
bGFzcyBKU1ZhcmlhYmxlT2JqZWN0IDogcHVibGljIEpTU3ltYm9sVGFibGVPYmplY3QgewogICAg
ICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmpl
Y3QgQmFzZTsKLQotICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSBjb25zdCB7IHJl
dHVybiAqbV9zeW1ib2xUYWJsZTsgfQotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVf
VE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEeW5h
bWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKKyAgICAgICAgdHlw
ZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnNb
aW5kZXhdOyB9CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBjb25zdCAqIGFkZHJl
c3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVyczsgfQogICAgICAgICBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTVmFyaWFibGVPYmplY3QsIG1fcmVnaXN0ZXJzKTsgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKFZhcmlhYmxlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCAmc19pbmZvKTsKLSAgICAgICAgfQotICAgICAgICAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3Bl
cnR5TmFtZXMgfCBKU05vbkZpbmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNTeW1ib2xUYWJsZU9iamVjdDo6
U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCi0gICAgICAgICAgICA6IEpTTm9uRmluYWxPYmplY3Qo
Z2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICAgICAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJv
bFRhYmxlKQorICAgICAgICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0
cnVjdHVyZSwgc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJzKHJlaW50ZXJw
cmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAgICAgICAgewog
ICAgICAgICB9CkBAIC04Miw3NiArNjYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAg
ICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAg
IEFTU0VSVChtX3N5bWJvbFRhYmxlKTsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHNpemVvZihSZWdpc3RlciksIFJlZ2lzdGVyX3No
b3VsZF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyKTsKICAgICAgICAgfQogCiAgICAgICAg
IFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBjb3B5UmVnaXN0ZXJBcnJh
eShKU0dsb2JhbERhdGEmLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHNyYywgc2l6ZV90IGNvdW50
LCBzaXplX3QgY2FsbGZyYW1lU3RhcnRzKTsKICAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5KTsKIAotICAgICAgICBib29sIHN5bWJvbFRhYmxl
R2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
KTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7Ci0gICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXQo
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKLSAg
ICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYsIFBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgU3lt
Ym9sVGFibGUqIG1fc3ltYm9sVGFibGU7IC8vIE1hcHMgbmFtZSAtPiBvZmZzZXQgZnJvbSAiciIg
aW4gcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBtX3JlZ2lz
dGVyczsgLy8gInIiIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgICAgICBPd25BcnJheVB0cjxX
cml0ZUJhcnJpZXI8VW5rbm93bj4gPiBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNv
cHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyBy
ZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgogICAgIH07CiAKLSAgICBpbmxpbmUg
Ym9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0gICAgewotICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05h
bWUoKSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHNsb3Qu
c2V0VmFsdWUocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVHZXQoUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBib29sJiBzbG90SXNXcml0
ZWFibGUpCi0gICAgewotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFi
bGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIGlmICgh
ZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUocmVnaXN0ZXJBdChl
bnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7Ci0gICAgICAgICAgICBzbG90SXNXcml0ZWFibGUgPSAh
ZW50cnkuaXNSZWFkT25seSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLSAgICB7Ci0gICAg
ICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAg
ICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFw
OjpoZWFwKHRoaXMpKTsKLQotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9s
VGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIGlm
IChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KGVudHJ5LmlzUmVhZE9ubHkoKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93KQotICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpT
VmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKLQotICAgICAg
ICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwotICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICByZWdp
c3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIGlubGluZSBQYXNzT3duQXJyYXlQdHI8
V3JpdGVCYXJyaWVyPFVua25vd24+ID4gSlNWYXJpYWJsZU9iamVjdDo6Y29weVJlZ2lzdGVyQXJy
YXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHNyYywg
c2l6ZV90IGNvdW50LCBzaXplX3QgY2FsbGZyYW1lU3RhcnRzKQogICAgIHsKICAgICAgICAgT3du
QXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0QXJy
YXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPltjb3VudF0pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHJldmlzaW9uIDExOTUzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdS5zbG90
OwogICAgIH0KICAgICAKKyAgICBpbnQzMl90KiB0YWdQb2ludGVyKCkgeyByZXR1cm4gJmJpdHdp
c2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oJm1fdmFsdWUpLT5hc0JpdHMudGFnOyB9
CisgICAgaW50MzJfdCogcGF5bG9hZFBvaW50ZXIoKSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IqPigmbV92YWx1ZSktPmFzQml0cy5wYXlsb2FkOyB9CisgICAg
CiAgICAgdHlwZWRlZiBKU1ZhbHVlIChXcml0ZUJhcnJpZXJCYXNlOjoqVW5zcGVjaWZpZWRCb29s
VHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdCB7IHJldHVy
biBnZXQoKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsg
fQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9IAo=
</data>
<flag name="review"
          id="153317"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="153327"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146092</attachid>
            <date>2012-06-06 13:05:08 -0700</date>
            <delta_ts>2012-06-06 14:46:02 -0700</delta_ts>
            <desc>the latest, not yet for landing</desc>
            <filename>globalobj_patch_6.diff</filename>
            <type>text/plain</type>
            <size>89044</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBA
QAorMjAxMi0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2ggYW5kIEdlb2Zm
cmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRlZCB0
byBhY2Nlc3MgYSBnbG9iYWwgdmFyaWFibGUsIHlvdSdkIGZpcnN0IGhhdmUKKyAgICAgICAgdG8g
bG9hZCB0aGUgcmVnaXN0ZXIgYXJyYXkgZnJvbSB0aGUgYXBwcm9wcmlhdGUgZ2xvYmFsIG9iamVj
dCBhbmQgdGhlbgorICAgICAgICBlaXRoZXIgbG9hZCBvciBzdG9yZSBhdCBhbiBvZmZzZXQgdG8g
dGhlIHJlZ2lzdGVyIGFycmF5LiBUaGlzIGlzIGJlY2F1c2UKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QgaW5oZXJpdGVkIGZyb20gSlNWYXJpYWJsZU9iamVjdCwgYW5kIEpTVmFyaWFibGVPYmplY3Qg
aXMKKyAgICAgICAgZGVzaWduZWQgd2l0aCB0aGUgcGVzc2ltaXN0aWMgYXNzdW1wdGlvbiB0aGF0
IGl0cyByZWdpc3RlciBhcnJheSBtYXkKKyAgICAgICAgcG9pbnQgaW50byB0aGUgY2FsbCBzdGFj
ay4gVGhpcyBpcyBuZXZlciB0aGUgY2FzZSBmb3IgZ2xvYmFsIG9iamVjdHMuCisgICAgICAgIEhl
bmNlLCBldmVuIHRob3VnaCB0aGUgZ2xvYmFsIG9iamVjdCBtYXkgYWRkIG1vcmUgcmVnaXN0ZXJz
IGF0IGFueSB0aW1lLAorICAgICAgICBpdCBkb2VzIG5vdCBuZWVkIHRvIHN0b3JlIHRoZW0gaW4g
YSBjb250aWd1b3VzIGFycmF5LiBJdCBjYW4gdXNlIGEKKyAgICAgICAgU2VnbWVudGVkVmVjdG9y
IG9yIHNpbWlsYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBnbG9i
YWwgb2JqZWN0cyBhbmQgdmFyaWFibGUgb2JqZWN0cyBhcyBmb2xsb3dzOgorICAgICAgICAKKyAg
ICAgICAgLSBUaGUgZnVuY3Rpb25hbGl0eSB0byB0cmFjayB2YXJpYWJsZXMgaW4gYW4gaW5kZXhh
YmxlIGFycmF5IHVzaW5nIGEKKyAgICAgICAgICBTeW1ib2xUYWJsZSB0byBtYXAgbmFtZXMgdG8g
aW5kaWNlcyBpcyBtb3ZlZCBpbnRvIEpTU3ltYm9sVGFibGVPYmplY3QsCisgICAgICAgICAgd2hp
Y2ggaXMgbm93IGEgc3VwZXJ0eXBlIG9mIEpTVmFyaWFibGVPYmplY3QuIEpTVmFyaWFibGVPYmpl
Y3QgaXMgbm93CisgICAgICAgICAganVzdCBhIGhvbGRlciBmb3IgYSByZWdpc3RlcnMgYXJyYXkg
YW5kIGltcGxlbWVudHMgdGhlIHJlZ2lzdGVyQXQoKQorICAgICAgICAgIG1ldGhvZCB0aGF0IGlz
IGxlZnQgYWJzdHJhY3QgaW4gSlNTeW1ib2xUYWJsZU9iamVjdC4gQmVjYXVzZSBhbGwgdXNlcnMK
KyAgICAgICAgICBvZiBKU1ZhcmlhYmxlT2JqZWN0IGtub3cgd2hldGhlciB0aGV5IGFyZSBhIEpT
U3RhdGljU2NvcGVPYmplY3QsCisgICAgICAgICAgSlNBY3RpdmF0aW9uLCBvciBKU0dsb2JhbE9i
amVjdCwgdGhpcyAiYWJzdHJhY3QiIG1ldGhvZCBpcyBub3QgdmlydHVhbDsKKyAgICAgICAgICBp
bnN0ZWFkIHRoZSB1dGlsaXR5IG1ldGhvZHMgdGhhdCB3b3VsZCBjYWxsIHJlZ2lzdGVyQXQoKSBh
cmUgbm93CisgICAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSB5b3UgdG8g
a25vdyBzdGF0aWNhbGx5IHdoYXQgc3VidHlwZSBvZgorICAgICAgICAgIEpTU3ltYm9sVGFibGVP
YmplY3QgeW91J3JlIHVzaW5nIChKU1ZhcmlhYmxlT2JqZWN0IG9yIHNvbWV0aGluZyBlbHNlKSwK
KyAgICAgICAgICBzbyB0aGF0IHJlZ2lzdGVyQXQoKSBjYW4gYmUgc3RhdGljYWxseSBib3VuZC4K
KyAgICAgICAgCisgICAgICAgIC0gQSBuZXcgY2xhc3MgaXMgYWRkZWQgY2FsbGVkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QsIHdoaWNoIG9ubHkKKyAgICAgICAgICBkaWZmZXJzIGZyb20gSlNW
YXJpYWJsZU9iamVjdCBpbiBob3cgaXQgYWxsb2NhdGVzIHJlZ2lzdGVycy4gSXQgdXNlcyBhCisg
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yIGluc3RlYWQgb2YgbWFudWFsbHkgbWFuYWdpbmcgYSBw
b2ludGVyIHRvIGEgY29udGlndW91cworICAgICAgICAgIHNsYWIgb2YgcmVnaXN0ZXJzLiBUaGlz
IGNoYW5nZXMgdGhlIGludGVyZmFjZSBzb21ld2hhdDsgZm9yIGV4YW1wbGUKKyAgICAgICAgICB3
aXRoIEpTVmFyaWFibGVPYmplY3QgaWYgeW91IHdhbnRlZCB0byBhZGQgYSByZWdpc3RlciB5b3Ug
aGFkIHRvIGRvCisgICAgICAgICAgaXQgeW91cnNlbGYgc2luY2UgdGhlIEpTVmFyaWFibGVPYmpl
Y3QgZGlkbid0IGtub3cgaG93IHRoZSByZWdpc3RlcnMKKyAgICAgICAgICBhcnJheSBvdWdodCB0
byBiZSBhbGxvY2F0ZWQuIFdpdGggSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB5b3UgY2FuCisg
ICAgICAgICAganVzdCBjYWxsIGFkZFJlZ2lzdGVycygpLiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IHByZXNlcnZlcyB0aGUKKyAgICAgICAgICBpbnZhcmlhbnQgdGhhdCBvbmNlIHlvdSBnZXQg
YSBwb2ludGVyIGludG8gYSByZWdpc3RlciwgdGhhdCBwb2ludGVyCisgICAgICAgICAgd2lsbCBj
b250aW51ZSB0byBiZSB2YWxpZCBzbyBsb25nIGFzIHRoZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IGlzCisgICAgICAgICAgYWxpdmUuIFRoaXMgYWxsb3dzIHRoZSBKSVRzIGFuZCBpbnRlcnBy
ZXRlcnMgdG8gc2tpcCB0aGUgZXh0cmEgbG9hZC4KKyAgICAgICAgCisgICAgICAgIC0gSlNHbG9i
YWxPYmplY3Qgbm93IGluaGVyaXRzIGZyb20gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC4gRm9y
IG5vdworICAgICAgICAgIChhbmQgcG9zc2libHkgZm9yZXZlcikgaXQgaXMgdGhlIG9ubHkgc3Vi
dHlwZSBvZiB0aGlzIG5ldyBjbGFzcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGJ5dGVjb2Rl
IGZvcm1hdCBpcyBjaGFuZ2VkIHNvIHRoYXQgZ2V0X2dsb2JhbF92YXIgYW5kCisgICAgICAgICAg
cHV0X2dsb2JhbF92YXIgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGRpcmVjdGx5IHJh
dGhlciB0aGFuCisgICAgICAgICAgaGF2aW5nIGFuIGluZGV4LiBBIGNvbnZlbmllbmNlIG1ldGhv
ZCBpcyBwcm92aWRlZCBpbgorICAgICAgICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgdG8g
Z2V0IHRoZSBpbmRleCBnaXZlbiBhIGEgcG9pbnRlciwgd2hpY2ggaXMKKyAgICAgICAgICB1c2Vk
IGZvciBhc3NlcnRpb25zIGFuZCBkZWJ1ZyBkdW1wcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
YXBwZWFycyB0byBiZSBhIDElIGFjcm9zcyB0aGUgYm9hcmQgd2luLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3Ry
dWN0aW9uLmg6CisgICAgICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3RydWN0
aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVyKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxh
c3RVbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoUmVzb2x2ZVJlc3VsdCk6
CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxPYmplY3RGb3IpOgor
ICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzVmFyTnVtYmVyKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1JlZ2lzdGVyUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cmVnaXN0ZXJQb2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xv
YmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0
ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0ZXJB
dCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFzc2VydFJlZ2lz
dGVySXNJblRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6
OnB1dCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJv
eSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZSk6CisgICAg
ICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJv
bFRhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVP
YmplY3Q6OkpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlR2V0KToK
KyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTVmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxl
T2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1dy
aXRlQmFycmllci5oOgorCiAyMDEyLTA2LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXSBFbmFibGUgdGhlIExMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw5ICsxODYsMTEgQEAg
U0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0pTT2JqZWN0LmNwcAogICAg
IHJ1bnRpbWUvSlNPTk9iamVjdC5jcHAKICAgICBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwCisgICAgcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAogICAgIHJ1
bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKICAgICBydW50aW1lL0pTU3RyaW5nLmNwcAog
ICAgIHJ1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCisgICAgcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNWYWx1ZS5jcHAKICAgICBydW50aW1lL0pTVmFyaWFi
bGVPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU1dyYXBwZXJPYmplY3QuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTE5NTMzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ5MCw2ICs0OTAsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0Lmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oIFwKQEAg
LTQ5Nyw2ICs0OTksOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGVJbmZvLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTk0LDkgKzE5NCwxMSBAQCBTT1VSQ0VTICs9
IFwKICAgICBydW50aW1lL0pTT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNw
cCBcCiAgICAgcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBcCisgICAgcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU1N0YXRpY1Nj
b3BlT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9KU1N0cmluZy5jcHAgXAogICAgIHJ1bnRpbWUv
SlNTdHJpbmdKb2luZXIuY3BwIFwKKyAgICBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3Bw
IFwKICAgICBydW50aW1lL0pTVmFsdWUuY3BwIFwKICAgICBydW50aW1lL0pTVmFyaWFibGVPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC04NzQsNiArODc0LDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHJ1bnRpbWVcSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgorCQkJCT4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTU3RhdGljU2NvcGVP
YmplY3QuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTg5OCw2ICs5MDYsMTQgQEAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9G
aWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9iamVjdC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTVHlwZS5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwx
MCBAQAogCQkwRjdCMjk0QjE0QzNDRDJGMDA3QzNEQjEgLyogREZHQ2FwYWJpbGl0aWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRjE0MTcy
QzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEMxNEMzQ0Q0MzAwN0MzREIxIC8qIERG
R0J5dGVDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3QjI5NEQx
NEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1v
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
OTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDA5MTU3RUUwOUQw
MDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLzsgfTsKKwkJMEY5MTlEMEQxNTdF
RTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBK
U1N5bWJvbFRhYmxlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuY3BwICovOyB9OworCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5MTlEMEYxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTMxNENBN0RDMTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkz
MzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5jcHAgKi87IH07CkBAIC04MjgsNiArODMyLDEwIEBACiAJCTBGNzcw
MDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QjI5NDgxNEMzQ0QyMzAwN0MzREIx
IC8qIERGR0NDYWxsSGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdDQ2FsbEhlbHBlcnMuaDsgcGF0aCA9IGRmZy9ERkdDQ2FsbEhlbHBlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9s
VGFibGVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTE5
RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMEUxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTE5RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTMxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5SWRTdGF0dXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkzNCw2ICsxOTQyLDggQEAKIAkJ
CQlBN0Y5OTM1RDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oICovLAogCQkJCUE3MjdG
RjY2MERBMzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCAqLywKIAkJ
CQlBNzI3RkY2NTBEQTMwNTNCMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oICov
LAorCQkJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcCAqLywKKwkJCQkwRjkxOUQwRjE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oICovLAogCQkJCUE3RTQyQzE5MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0
YXRpY1Njb3BlT2JqZWN0LmNwcCAqLywKIAkJCQlBN0U0MkMxODBFMzkzODgzMDA2NUE1NDQgLyog
SlNTdGF0aWNTY29wZU9iamVjdC5oICovLAogCQkJCUJDMDJFOUI2MEUxODQyRkEwMDBGOTI5NyAv
KiBKU1N0cmluZy5jcHAgKi8sCkBAIC0xOTQxLDYgKzE5NTEsOCBAQAogCQkJCTg2RTg1NTM4MTEx
Qjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCAqLywKIAkJCQkyNjAwQjVBNDE1MkJB
QUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuY3BwICovLAogCQkJCTI2MDBCNUE1MTUyQkFB
QTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oICovLAorCQkJCTBGOTE5RDA5MTU3RUUwOUQw
MDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLywKKwkJCQkwRjkxOUQwQTE1N0VF
MDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovLAogCQkJCTE0QUJCNDU0MDk5
QzJBMEYwMEUyQTI0RiAvKiBKU1R5cGUuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4
OTYgLyogSlNUeXBlSW5mby5oICovLAogCQkJCUY2OTJBODg3MDI1NTU5N0QwMUZGNjBGNyAvKiBK
U1ZhbHVlLmNwcCAqLywKQEAgLTI2NTcsNiArMjY2OSw4IEBACiAJCQkJMEYzQjNBMkMxNTQ3NTAw
MjAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MUFEMzE1
NEZCNEYwMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
NjAxNUUxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRF
N0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zMjI5
LDYgKzMyNDMsOCBAQAogCQkJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdEb21pbmF0
b3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBE
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
NUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5MTlEMTAxNTdGMzMyOTAwNEE0RTdEIC8qIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTE5NTMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkyMywxNSArOTIzLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNT
dGF0ZSogZXhlYywgY28KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFy
OiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAg
IGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0
ZF0gZ2V0X2dsb2JhbF92YXJcdCAlcywgJWRcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUoZXhl
YywgcjApLmRhdGEoKSwgaW5kZXgpOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiByZWdpc3RlclBvaW50ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQb2ludGVyOworICAgICAgICAg
ICAgZGF0YUxvZygiWyU0ZF0gZ2V0X2dsb2JhbF92YXJcdCAlcywgZyVkKCVwKVxuIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJl
Z2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKSwgcmVnaXN0ZXJQb2ludGVyKTsKICAgICAgICAg
ICAgIGl0Kys7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X3B1dF9nbG9iYWxfdmFyOiB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVy
ID0gKCsraXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0
KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJc
dCAlZCwgJXNcbiIsIGxvY2F0aW9uLCBpbmRleCwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRh
KCkpOworICAgICAgICAgICAgZGF0YUxvZygiWyU0ZF0gcHV0X2dsb2JhbF92YXJcdCBnJWQoJXAp
LCAlc1xuIiwgbG9jYXRpb24sIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdp
c3RlclBvaW50ZXIpLCByZWdpc3RlclBvaW50ZXIsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0
YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmVz
b2x2ZV9iYXNlOiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW5zdHJ1Y3Rpb24oTExJbnRDYWxsTGlua0luZm8qIGNh
bGxMaW5rSW5mbykgeyB1LmNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mbzsgfQogICAgICAgICAK
ICAgICAgICAgSW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUucHJvZmlsZSA9
IHByb2ZpbGU7IH0KKyAgICAgICAgCisgICAgICAgIEluc3RydWN0aW9uKFdyaXRlQmFycmllcjxV
bmtub3duPiogcmVnaXN0ZXJQb2ludGVyKSB7IHUucmVnaXN0ZXJQb2ludGVyID0gcmVnaXN0ZXJQ
b2ludGVyOyB9CiAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgT3Bjb2RlIG9wY29kZTsK
QEAgLTE5OCw2ICsyMDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbjsKICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJhc2U8SlNDZWxsPiBqc0NlbGw7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHJlZ2lzdGVyUG9pbnRlcjsKICAgICAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGdldHRlckZ1bmM7CiAgICAgICAgICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvOwogICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYx
LDExIEBAIHZvaWQgUmVzb2x2ZVJlc3VsdDo6Y2hlY2tWYWxpZGl0eSgpCiB9CiAjZW5kaWYKIAor
V3JpdGVCYXJyaWVyPFVua25vd24+KiBSZXNvbHZlUmVzdWx0OjpyZWdpc3RlclBvaW50ZXIoKSBj
b25zdAoreworICAgIHJldHVybiAmanNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KCkpLT5yZWdpc3RlckF0KGluZGV4KCkpOworfQorCiBzdGF0aWMgYm9vbCBzX2R1bXBzR2VuZXJh
dGVkQ29kZSA9IGZhbHNlOwogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpzZXREdW1wc0dlbmVy
YXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUpCkBAIC0yODAsNyArMjg1LDcgQEAgQnl0
ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFBybwogICAgIHNpemVfdCBuZXdHbG9i
YWxzID0gdmFyU3RhY2suc2l6ZSgpICsgZnVuY3Rpb25TdGFjay5zaXplKCk7CiAgICAgaWYgKCFu
ZXdHbG9iYWxzKQogICAgICAgICByZXR1cm47Ci0gICAgZ2xvYmFsT2JqZWN0LT5yZXNpemVSZWdp
c3RlcnMoc3ltYm9sVGFibGUtPnNpemUoKSArIG5ld0dsb2JhbHMpOworICAgIGdsb2JhbE9iamVj
dC0+YWRkUmVnaXN0ZXJzKG5ld0dsb2JhbHMpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvblN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUq
IGZ1bmN0aW9uID0gZnVuY3Rpb25TdGFja1tpXTsKQEAgLTY3OSw2ICs2ODQsMTQgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cmV0cmlldmVMYXN0VW5hcgogICAgIHNyY0luZGV4ID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6cmV0cmlldmVMYXN0VW5hcnlPcChXcml0ZUJhcnJpZXI8VW5rbm93bj4qJiBkc3RQb2lu
dGVyLCBpbnQmIHNyY0luZGV4KQoreworICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkg
Pj0gMyk7CisgICAgc2l6ZV90IHNpemUgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisgICAgZHN0
UG9pbnRlciA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAyKS51LnJlZ2lzdGVyUG9pbnRlcjsK
KyAgICBzcmNJbmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNpemUgLSAxKS51Lm9wZXJhbmQ7Cit9
CisKIHZvaWQgQUxXQVlTX0lOTElORSBCeXRlY29kZUdlbmVyYXRvcjo6cmV3aW5kQmluYXJ5T3Ao
KQogewogICAgIEFTU0VSVChpbnN0cnVjdGlvbnMoKS5zaXplKCkgPj0gNCk7CkBAIC0xMTc3LDcg
KzExOTAsNyBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlCiAgICAg
ICAgICAgICBmbGFncyB8PSBSZXNvbHZlUmVzdWx0OjpEeW5hbWljRmxhZzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9ICAgICAgICAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3Vy
cmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihjdXJyZW50U2Nv
cGUpOworICAgICAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3Qg
PSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CiAgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50VmFyaWFibGVPYmplY3QtPnN5bWJvbFRhYmxl
KCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAKICAgICAgICAgLy8gRm91bmQgdGhlIHByb3BlcnR5
CkBAIC0xMjM0LDcgKzEyNDcsNyBAQCBSZXNvbHZlUmVzdWx0IEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZXNvbHZlCiAgICAgICAgIEpTT2JqZWN0KiBjdXJyZW50U2NvcGUgPSBpdGVyLT5nZXQoKTsKICAg
ICAgICAgaWYgKCFjdXJyZW50U2NvcGUtPmlzVmFyaWFibGVPYmplY3QoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmpl
Y3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIEpT
U3ltYm9sVGFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJv
bFRhYmxlT2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHku
aW1wbCgpKTsKICAgICAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC0xNDM3LDE2ICsxNDUwLDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0R2V0U3QKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkluZGV4ZWRHbG9iYWw6CiAgICAg
Y2FzZSBSZXNvbHZlUmVzdWx0OjpSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAgICAgICAgIGlmICht
X2xhc3RPcGNvZGVJRCA9PSBvcF9wdXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAgICAgaW50IGRz
dEluZGV4OworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBkc3RQb2ludGVyOwog
ICAgICAgICAgICAgaW50IHNyY0luZGV4OwotICAgICAgICAgICAgcmV0cmlldmVMYXN0VW5hcnlP
cChkc3RJbmRleCwgc3JjSW5kZXgpOwotICAgICAgICAgICAgaWYgKGRzdEluZGV4ID09IHJlc29s
dmVSZXN1bHQuaW5kZXgoKSAmJiBzcmNJbmRleCA9PSBkc3QtPmluZGV4KCkpCisgICAgICAgICAg
ICByZXRyaWV2ZUxhc3RVbmFyeU9wKGRzdFBvaW50ZXIsIHNyY0luZGV4KTsKKyAgICAgICAgICAg
IGlmIChkc3RQb2ludGVyID09IHJlc29sdmVSZXN1bHQucmVnaXN0ZXJQb2ludGVyKCkgJiYgc3Jj
SW5kZXggPT0gZHN0LT5pbmRleCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
ICAgIH0KIAogICAgICAgICBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2dldF9nbG9i
YWxfdmFyKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7Ci0g
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LmluZGV4KCkpOworICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5yZWdpc3RlclBvaW50ZXIo
KSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKICAgICAgICAgcmV0
dXJuIGRzdDsKIApAQCAtMTQ3NCw3ICsxNDg3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRQdXRTdAogICAgIGNhc2UgUmVzb2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2JhbDoK
ICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJlYWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAgICAg
ZW1pdE9wY29kZShvcF9wdXRfZ2xvYmFsX3Zhcik7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyZXNvbHZlUmVzdWx0LmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocmVzb2x2ZVJlc3VsdC5yZWdpc3RlclBvaW50ZXIoKSk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcs
NiArMTk3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGludCBpbmRleCgpIGNvbnN0IHsg
QVNTRVJUIChpc0luZGV4ZWQoKSB8fCBpc1JlZ2lzdGVyKCkpOyByZXR1cm4gbV9pbmRleDsgfQog
ICAgICAgICBzaXplX3QgZGVwdGgoKSBjb25zdCB7IEFTU0VSVChpc1Njb3BlZCgpKTsgcmV0dXJu
IG1fZGVwdGg7IH0KICAgICAgICAgSlNPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgQVNT
RVJUKGlzR2xvYmFsKCkpOyBBU1NFUlQobV9nbG9iYWxPYmplY3QpOyByZXR1cm4gbV9nbG9iYWxP
YmplY3Q7IH0KKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIo
KSBjb25zdDsKIAogICAgICAgICBib29sIGlzUmVnaXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3R5
cGUgJiBSZWdpc3RlckZsYWc7IH0KICAgICAgICAgYm9vbCBpc0R5bmFtaWMoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgJiBEeW5hbWljRmxhZzsgfQpAQCAtNTQxLDYgKzU0Miw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBWYWx1ZVByb2ZpbGUqIGVtaXRQcm9maWxlZE9wY29kZShPcGNvZGVJ
RCk7CiAgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0QmluYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50
JiBzcmMxSW5kZXgsIGludCYgc3JjMkluZGV4KTsKICAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RV
bmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjSW5kZXgpOworICAgICAgICB2b2lkIHJldHJp
ZXZlTGFzdFVuYXJ5T3AoV3JpdGVCYXJyaWVyPFVua25vd24+KiYgZHN0UG9pbnRlciwgaW50JiBz
cmNJbmRleCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZXdpbmRCaW5hcnlPcCgpOwog
ICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kVW5hcnlPcCgpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyMSArMTE1LDYgQEAgcHVibGljOgogI2VuZGlmCiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3JHbG9iYWxWYXIoR1BSUmVn
IGdsb2JhbCwgaW50MzJfdCB2YXJOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gQWRkcmVz
cyhnbG9iYWwsIHZhck51bWJlciAqIHNpemVvZihSZWdpc3RlcikpOwotICAgIH0KLQotICAgIHN0
YXRpYyBBZGRyZXNzIHRhZ0Zvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICog
c2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvckds
b2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwot
ICAgIH0KLQogICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxNiwxNCArMjIxNiwyMCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0
X2dsb2JhbF92YXI6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGdldEds
b2JhbFZhciA9IGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8oY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBOb2Rl
SW5kZXggZ2V0R2xvYmFsVmFyID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBHZXRHbG9i
YWxWYXIsCisgICAgICAgICAgICAgICAgT3BJbmZvKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50ZXIpKSwKKyAgICAgICAgICAgICAgICBPcElu
Zm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIGdldEdsb2JhbFZhcik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRf
Z2xvYmFsX3Zhcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxfdmFy
OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEdsb2JhbFZhciwgT3BJ
bmZvKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCB2YWx1ZSk7CisgICAgICAgICAg
ICBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgIFB1dEdsb2JhbFZhciwKKyAgICAgICAgICAg
ICAgICBPcEluZm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LT5hc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJl
Z2lzdGVyUG9pbnRlcikpLAorICAgICAgICAgICAgICAgIHZhbHVlKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3B1dF9nbG9iYWxfdmFyKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5NCwxOCArMTk0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAg
ICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWdu
ZWQgdmFyTnVtYmVyLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIE5vZGVJbmRl
eCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3Rl
clBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewogICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOwogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAgICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBj
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2Jq
ZWN0KQorICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lz
dGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKS5pbmRleCgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTIxNyw3ICsyMTcsNyBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBOb2Rl
SW5kZXggZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgTm9kZUluZGV4IGdsb2JhbFZhclN0b3JlRWxp
bWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAg
ICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtMjI2LDEy
ICsyMjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVj
dCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3Rl
clBvaW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFs
VmFyOgotICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAm
JiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFs
T2JqZWN0KQorICAgICAgICAgICAgICAgIGlmIChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJl
Z2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTk4MiwxMyArOTgyLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNjZXNzZXMuIFRoZXNl
IGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAogICAgICAgICAvLyBvcHRpbWl6
ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBhcmUgbWV0LgogICAg
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2Jh
bFZhckxvYWRFbGltaW5hdGlvbihub2RlLnZhck51bWJlcigpLCBjb2RlQmxvY2soKS0+Z2xvYmFs
T2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoK
ICAgICAgICAgICAgIGlmIChtX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQp
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFy
U3RvcmVFbGltaW5hdGlvbihub2RlLnZhck51bWJlcigpLCBjb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxW
YXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTE5NTMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
Miw2ICsyMDIsMTMgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4KQogICAg
ICAgICBkYXRhTG9nKCIlc3ZhciV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS52YXJO
dW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KKyAgICBpZiAobm9k
ZS5oYXNSZWdpc3RlclBvaW50ZXIoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
IiVzZ2xvYmFsJXUoJXApIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwKKyAgICAgICAgICAgIGds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5maW5kUmVnaXN0ZXJJbmRleChub2RlLnJl
Z2lzdGVyUG9pbnRlcigpKSwKKyAgICAgICAgICAgIG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpOwor
ICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICB9CiAgICAgaWYgKG5vZGUuaGFzSWRlbnRp
ZmllcigpKSB7CiAgICAgICAgIGRhdGFMb2coIiVzaWQldXslc30iLCBoYXNQcmludGVkID8gIiwg
IiA6ICIiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
bm9kZS5pZGVudGlmaWVyTnVtYmVyKCkpLnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw2ICszMTAsMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gJm1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEubGFzdCgpOwogICAgIH0KICAgICAK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdp
bikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKGNv
ZGVPcmlnaW4pOworICAgIH0KKyAgICAKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZUZv
cihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIGlmICgh
aW5saW5lQ2FsbEZyYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IGJvb2wgaGFzVmFyTnVtYmVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IEdldEds
b2JhbFZhciB8fCBvcCgpID09IFB1dEdsb2JhbFZhciB8fCBvcCgpID09IEdldFNjb3BlZFZhciB8
fCBvcCgpID09IFB1dFNjb3BlZFZhcjsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0U2NvcGVk
VmFyIHx8IG9wKCkgPT0gUHV0U2NvcGVkVmFyOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHZhck51
bWJlcigpCkBAIC00MjksNiArNDI5LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJU
KGhhc1Zhck51bWJlcigpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KKyAgICAK
KyAgICBib29sIGhhc1JlZ2lzdGVyUG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gb3Ao
KSA9PSBHZXRHbG9iYWxWYXIgfHwgb3AoKSA9PSBQdXRHbG9iYWxWYXI7CisgICAgfQorICAgIAor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obV9vcEluZm8p
OworICAgIH0KIAogICAgIGJvb2wgaGFzU2NvcGVDaGFpbkRlcHRoKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NjQsMzMgKzM1NjQs
MzIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
Zyh0aGlzKTsKIAotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKTsKLSAgICAgICAgbV9qaXQubG9hZFB0
cihjb25zdF9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPioqPihnbG9iYWxPYmplY3QtPmFkZHJl
c3NPZlJlZ2lzdGVycygpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjp0YWdGb3JHbG9iYWxWYXIocmVzdWx0LmdwcigpLCBub2RlLnZhck51bWJlcigp
KSwgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvckdsb2JhbFZhcihyZXN1bHQuZ3ByKCksIG5vZGUudmFyTnVtYmVyKCkpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIobm9kZS5yZWdpc3RlclBv
aW50ZXIoKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWQuZ3By
KCksIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9h
ZCkpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0
Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAg
ICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVjdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0UmVn
ID0gZ2xvYmFsT2JqZWN0LmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0
Y2guZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIGdsb2JhbE9iamVj
dFJlZyk7Ci0KLSAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVy
Rm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOworICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLnRhZ0dQUigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJh
cnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgIH0KIAotICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGdsb2JhbE9iamVjdFJlZywg
SlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHNjcmF0Y2hSZWcpOwotICAg
ICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yR2xv
YmFsVmFyKHNjcmF0Y2hSZWcsIG5vZGUudmFyTnVtYmVyKCkpKTsKLSAgICAgICAgbV9qaXQuc3Rv
cmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yR2xvYmFsVmFy
KHNjcmF0Y2hSZWcsIG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgLy8gRklYTUU6IGlmIHdl
IGhhcHBlbiB0byBoYXZlIGEgc3BhcmUgcmVnaXN0ZXIgLSBhbmQgX09OTFlfIGlmIHdlIGhhcHBl
biB0byBoYXZlCisgICAgICAgIC8vIGEgc3BhcmUgcmVnaXN0ZXIgLSBhIGdvb2Qgb3B0aW1pemF0
aW9uIHdvdWxkIGJlIHRvIHB1dCB0aGUgcmVnaXN0ZXIgcG9pbnRlciBpbnRvCisgICAgICAgIC8v
IGEgcmVnaXN0ZXIgYW5kIHRoZW4gZG8gYSB6ZXJvIG9mZnNldCBzdG9yZSBmb2xsb3dlZCBieSBh
IGZvdXItb2Zmc2V0IHN0b3JlIChvcgorICAgICAgICAvLyB2aWNlLXZlcnNhIGRlcGVuZGluZyBv
biBlbmRpYW5uZXNzKS4KKyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgbm9k
ZS5yZWdpc3RlclBvaW50ZXIoKS0+dGFnUG9pbnRlcigpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUz
Mih2YWx1ZS5wYXlsb2FkR1BSKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPnBheWxvYWRQb2lu
dGVyKCkpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExOTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OTMsOSArMzU5
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNl
IEdldEdsb2JhbFZhcjogewogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0g
ICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVj
dEZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICBtX2ppdC5sb2FkUHRyKGdsb2JhbE9iamVj
dC0+YWRkcmVzc09mUmVnaXN0ZXJzKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3JHbG9iYWxWYXIocmVzdWx0LmdwcigpLCBub2Rl
LnZhck51bWJlcigpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihub2Rl
LnJlZ2lzdGVyUG9pbnRlcigpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzYw
MywxOCArMzYwMSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IGdsb2JhbE9iamVj
dCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIAot
ICAgICAgICBHUFJSZWcgZ2xvYmFsT2JqZWN0UmVnID0gZ2xvYmFsT2JqZWN0LmdwcigpOwotICAg
ICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0KLSAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Io
bm9kZS5jb2RlT3JpZ2luKSksIGdsb2JhbE9iamVjdFJlZyk7Ci0KLSAgICAgICAgd3JpdGVCYXJy
aWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwg
bm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcp
OwotCi0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ2xvYmFs
T2JqZWN0UmVnLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRj
aFJlZyk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6
YWRkcmVzc0Zvckdsb2JhbFZhcihzY3JhdGNoUmVnLCBub2RlLnZhck51bWJlcigpKSk7CisgICAg
ICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFycmllciht
X2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUu
Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIG5v
ZGUucmVnaXN0ZXJQb2ludGVyKCkpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZp
c2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogCisgICAgICAgIHN0YXRpYyBib29sIGlzV3JpdGVC
YXJyaWVyRW5hYmxlZCgpOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiwgSlNWYWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqLCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNh
cmRGb3IoSlNDZWxsKik7CkBAIC0yODIsNiArMjgzLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCktPnNldE1hcmtlZChjZWxsKTsKICAgICB9
CiAKKyAgICBpbmxpbmUgYm9vbCBIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKQorICAgIHsK
KyNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAg
ICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisg
ICAgfQorCiAjaWYgRU5BQkxFKEdHQykKICAgICBpbmxpbmUgdWludDhfdCogSGVhcDo6YWRkcmVz
c09mQ2FyZEZvcihKU0NlbGwqIGNlbGwpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxMTk1MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTQzLDcgKzE1NDMsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpl
eGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgZm9yIChTY29wZUNoYWluTm9kZSogbm9kZSA9IHNjb3Bl
Q2hhaW47IDsgbm9kZSA9IG5vZGUtPm5leHQuZ2V0KCkpIHsKICAgICAgICAgQVNTRVJUKG5vZGUp
OwogICAgICAgICBpZiAobm9kZS0+b2JqZWN0LT5pc1ZhcmlhYmxlT2JqZWN0KCkgJiYgIW5vZGUt
Pm9iamVjdC0+aXNTdGF0aWNTY29wZU9iamVjdCgpKSB7Ci0gICAgICAgICAgICB2YXJpYWJsZU9i
amVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4obm9kZS0+b2JqZWN0LmdldCgpKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihu
b2RlLT5vYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CkBAIC0yODYwLDMwICsyODYwLDI4IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVj
dXRlKEV4ZWMKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KICAgICBERUZJTkVf
T1BDT0RFKG9wX2dldF9nbG9iYWxfdmFyKSB7Ci0gICAgICAgIC8qIGdldF9nbG9iYWxfdmFyIGRz
dChyKSBnbG9iYWxPYmplY3QoYykgaW5kZXgobikKKyAgICAgICAgLyogZ2V0X2dsb2JhbF92YXIg
ZHN0KHIpIGdsb2JhbE9iamVjdChjKSByZWdpc3RlclBvaW50ZXIobikKIAogICAgICAgICAgICBH
ZXRzIHRoZSBnbG9iYWwgdmFyIGF0IGdsb2JhbCBzbG90IGluZGV4IGFuZCBwbGFjZXMgaXQgaW4g
cmVnaXN0ZXIgZHN0LgogICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCk7Ci0gICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAg
ICAgIGludCBpbmRleCA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gdlBDWzJdLnUucmVnaXN0ZXJQb2ludGVyOwogCi0g
ICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gc2NvcGUtPnJlZ2lzdGVyQXQoaW5k
ZXgpLmdldCgpOworICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHJlZ2lzdGVy
UG9pbnRlci0+Z2V0KCk7CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2dldF9nbG9i
YWxfdmFyKTsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KICAgICBERUZJTkVf
T1BDT0RFKG9wX3B1dF9nbG9iYWxfdmFyKSB7Ci0gICAgICAgIC8qIHB1dF9nbG9iYWxfdmFyIGds
b2JhbE9iamVjdChjKSBpbmRleChuKSB2YWx1ZShyKQorICAgICAgICAvKiBwdXRfZ2xvYmFsX3Zh
ciBnbG9iYWxPYmplY3QoYykgcmVnaXN0ZXJQb2ludGVyKG4pIHZhbHVlKHIpCiAgICAgICAgICAK
ICAgICAgICAgICAgUHV0cyB2YWx1ZSBpbnRvIGdsb2JhbCBzbG90IGluZGV4LgogICAgICAgICAg
Ki8KICAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKICAgICAgICAgQVNTRVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgpKTsKLSAgICAgICAg
aW50IGluZGV4ID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMV0udS5yZWdpc3RlclBvaW50ZXI7CiAgICAgICAg
IGludCB2YWx1ZSA9IHZQQ1syXS51Lm9wZXJhbmQ7CiAgICAgICAgIAotICAgICAgICBzY29wZS0+
cmVnaXN0ZXJBdChpbmRleCkuc2V0KCpnbG9iYWxEYXRhLCBzY29wZSwgY2FsbEZyYW1lLT5yKHZh
bHVlKS5qc1ZhbHVlKCkpOworICAgICAgICByZWdpc3RlclBvaW50ZXItPnNldCgqZ2xvYmFsRGF0
YSwgc2NvcGUsIGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKICAgICAgICAgdlBDICs9
IE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNU
SU9OKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYwLDEzICsxMDYwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRf
dmFyKEluc3RydWMKIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5pc0dsb2Jh
bE9iamVjdCgpKTsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotCi0gICAgbG9hZFB0cigmZ2xvYmFsT2JqZWN0LT5tX3JlZ2lzdGVycywgcmVnVDIpOwor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVyOwogCi0gICAgZW1pdExvYWQoaW5kZXgsIHJlZ1Qx
LCByZWdUMCwgcmVnVDIpOworICAgIGxvYWQzMihyZWdpc3RlclBvaW50ZXItPnRhZ1BvaW50ZXIo
KSwgcmVnVDEpOworICAgIGxvYWQzMihyZWdpc3RlclBvaW50ZXItPnBheWxvYWRQb2ludGVyKCks
IHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5H
VEgob3BfZ2V0X2dsb2JhbF92YXIpLCBkc3QsIHJlZ1QxLCByZWdUMCk7CkBAIC0xMDc0LDE4ICsx
MDcxLDIxIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWMKIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogCiAgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIHJl
Z1QyKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMSwgcmVnVDMs
IFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsK
KyAgICAKKyAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QyKTsKKyAgICAgICAgCisgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMSwgcmVnVDMsIFNob3VsZEZp
bHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICB9CiAK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVn
aXN0ZXJzKCkpLCByZWdUMik7Ci0gICAgZW1pdFN0b3JlKGluZGV4LCByZWdUMSwgcmVnVDAsIHJl
Z1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCByZWdpc3RlclBvaW50ZXItPnRhZ1BvaW50ZXIoKSk7
CisgICAgc3RvcmUzMihyZWdUMCwgcmVnaXN0ZXJQb2ludGVyLT5wYXlsb2FkUG9pbnRlcigpKTsK
ICAgICBtYXAobV9ieXRlY29kZU9mZnNldCArIE9QQ09ERV9MRU5HVEgob3BfcHV0X2dsb2JhbF92
YXIpLCB2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDExOTUzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmgiCisjaW5j
bHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKQEAgLTEwMTAs
OSArMTAxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9zY29wZWRfdmFyKEluc3RydWMKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgbG9hZFB0cigmZ2xvYmFsT2JqZWN0LT5tX3JlZ2lz
dGVycywgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpLCByZWdUMCk7CisgICAgbG9hZFB0
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50ZXIsIHJlZ1QwKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KQEAgLTEwMjIsMTEgKzEwMjEsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIoSW5zdHJ1YwogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJl
Z1QwKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMSk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lz
dGVycygpKSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGVt
aXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlcklt
bWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKKyAgICAKKyAgICBzdG9y
ZVB0cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKTsKKyAg
ICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpCisgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMs
IFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsKIH0KIAogdm9pZCBKSVQ6OnJlc2V0UGF0
Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZv
KiBzdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxMTk1MzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMTA0MSwxMyArMTA0MSwxMCBAQCBfbGxpbnRfb3BfcHV0X3Njb3Bl
ZF92YXI6CiAKIF9sbGludF9vcF9nZXRfZ2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlvbigp
Ci0gICAgbG9hZGkgOFtQQ10sIHQxCisgICAgbG9hZHAgOFtQQ10sIHQwCiAgICAgbG9hZGkgNFtQ
Q10sIHQzCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCi0gICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fcmVn
aXN0ZXJzW3QwXSwgdDAKLSAgICBsb2FkaSBUYWdPZmZzZXRbdDAsIHQxLCA4XSwgdDIKLSAgICBs
b2FkaSBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0sIHQxCisgICAgbG9hZGkgVGFnT2Zmc2V0W3Qw
XSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QwXSwgdDEKICAgICBzdG9yZWkgdDIsIFRh
Z09mZnNldFtjZnIsIHQzLCA4XQogICAgIHN0b3JlaSB0MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQz
LCA4XQogICAgIGxvYWRpIDEyW1BDXSwgdDMKQEAgLTEwNTgsMTQgKzEwNTUsMTEgQEAgX2xsaW50
X29wX2dldF9nbG9iYWxfdmFyOgogX2xsaW50X29wX3B1dF9nbG9iYWxfdmFyOgogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDEKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBs
b2FkcCBKU0dsb2JhbE9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAorICAgIGxvYWRpIDRbUENd
LCB0MAogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKLSAgICBsb2FkaSA0
W1BDXSwgdDEKICAgICB3cml0ZUJhcnJpZXIodDIsIHQzKQotICAgIHN0b3JlaSB0MiwgVGFnT2Zm
c2V0W3QwLCB0MSwgOF0KLSAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQor
ICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwXQorICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNl
dFt0MF0KICAgICBkaXNwYXRjaCgzKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxMTk1
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtODk1LDI4ICs4OTUsMjIgQEAgX2xsaW50X29wX3B1dF9z
Y29wZWRfdmFyOgogCiBfbGxpbnRfb3BfZ2V0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRp
b24oKQotICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MQorICAgIGxvYWRwIDE2W1BCLCBQQywg
OF0sIHQwCiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDMKLSAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAg
ICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAotICAgIGxvYWRwIFt0
MCwgdDEsIDhdLCB0MgotICAgIHN0b3JlcCB0MiwgW2NmciwgdDMsIDhdCi0gICAgbG9hZHAgMjRb
UEIsIFBDLCA4XSwgdDMKLSAgICB2YWx1ZVByb2ZpbGUodDIsIHQzKQorICAgIGxvYWRwIFt0MF0s
IHQxCisgICAgc3RvcmVwIHQxLCBbY2ZyLCB0MywgOF0KKyAgICBsb2FkcCAyNFtQQiwgUEMsIDhd
LCB0MAorICAgIHZhbHVlUHJvZmlsZSh0MSwgdDApCiAgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxp
bnRfb3BfcHV0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpcyAx
NltQQiwgUEMsIDhdLCB0MQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRw
IENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2Jq
ZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCisgICAgbG9hZHAgOFtQQiwgUEMsIDhdLCB0MAogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQotICAgIGxvYWRpcyA4W1BCLCBQQywgOF0s
IHQxCiAgICAgd3JpdGVCYXJyaWVyKHQyKQotICAgIHN0b3JlcCB0MiwgW3QwLCB0MSwgOF0KKyAg
ICBzdG9yZXAgdDIsIFt0MF0KICAgICBkaXNwYXRjaCgzKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEx
OTUzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
Y29uc3QgQ2xhc3NJbmZvIEpTR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3Qi
LCAmSlNWYXJpYWJsZU9iamVjdDo6c19pbmZvLCAwLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRh
YmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTR2xvYmFsT2JqZWN0KSB9OworY29uc3QgQ2xhc3NJ
bmZvIEpTR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6c19pbmZvLCAwLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxl
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTR2xvYmFsT2JqZWN0KSB9OwogCiBjb25zdCBHbG9iYWxP
YmplY3RNZXRob2RUYWJsZSBKU0dsb2JhbE9iamVjdDo6c19nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSA9IHsgJmFsbG93c0FjY2Vzc0Zyb20sICZzdXBwb3J0c1Byb2ZpbGluZywgJnN1cHBvcnRzUmlj
aFNvdXJjZUluZm8sICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsICZqYXZhU2NyaXB0RXhwZXJpbWVu
dHNFbmFibGVkIH07CiAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBFCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUp
IHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0gICAg
aWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QuaXNTdHJpY3RNb2RlKCkpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIEpTVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAK
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMTU4LDEyICsxNTgsMTIgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKUwogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBBU1NFUlQoIUhlYXA6
OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVj
dCkpOwogCi0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKKyAg
ICBpZiAoc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyh0aGlzT2JqZWN0LCBleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQogICAgICAgICByZXR1
cm47CiAKICAgICBKU1ZhbHVlIHZhbHVlQmVmb3JlID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4
ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIGlmICghdmFs
dWVCZWZvcmUpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZUFmdGVyID0gdGhpc09iamVjdC0+Z2V0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKHZh
bHVlQWZ0ZXIpCkBAIC0xNzYsNyArMTc2LDcgQEAgYm9vbCBKU0dsb2JhbE9iamVjdDo6ZGVmaW5l
T3duUHJvcGVydHkoSgogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
R2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAvLyBz
aWxlbnRseSBpZ25vcmUgYXR0ZW1wdHMgdG8gYWRkIGFjY2Vzc29ycyBhbGlhc2luZyB2YXJzLgot
ICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYgdGhpc09iamVjdC0+
c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZGVzY3JpcHRvci5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gQmFzZTo6
ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yLCBzaG91bGRUaHJvdyk7CiB9CkBAIC0zNDUsNyArMzQ1LDcgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7CiAgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3Mg
JiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNl
dHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZv
KCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKICAgICB2aXNpdElm
TmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX2dsb2JhbFNjb3BlQ2hhaW4pOwogICAgIHZp
c2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1fbWV0aG9kQ2FsbER1bW15KTsKQEAg
LTM5MywxNyArMzkzLDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bAogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1fcmVnRXhwU3RydWN0
dXJlKTsKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX3N0cmluZ09i
amVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+
bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKLQotICAgIGlmICh0aGlzT2JqZWN0LT5tX3Jl
Z2lzdGVyQXJyYXkpIHsKLSAgICAgICAgLy8gT3V0c2lkZSB0aGUgZXhlY3V0aW9uIG9mIGdsb2Jh
bCBjb2RlLCB3aGVuIG91ciB2YXJpYWJsZXMgYXJlIHRvcm4gb2ZmLAotICAgICAgICAvLyB3ZSBj
YW4gbWFyayB0aGUgdG9ybi1vZmYgYXJyYXkuCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5nZXQoKSwgdGhpc09iamVjdC0+bV9yZWdpc3Rl
ckFycmF5U2l6ZSk7Ci0gICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycykgewot
ICAgICAgICAvLyBEdXJpbmcgZXhlY3V0aW9uIG9mIGdsb2JhbCBjb2RlLCB3aGVuIG91ciB2YXJp
YWJsZXMgYXJlIGluIHRoZSByZWdpc3RlciBmaWxlLAotICAgICAgICAvLyB0aGUgc3ltYm9sIHRh
YmxlIHRlbGxzIHVzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGVyZSBhcmUsIGFuZCByZWdpc3RlcnMK
LSAgICAgICAgLy8gcG9pbnRzIHRvIHdoZXJlIHRoZXkgZW5kLCBhbmQgdGhlIHJlZ2lzdGVycyB1
c2VkIGZvciBleGVjdXRpb24gYmVnaW4uCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRo
aXNPYmplY3QtPm1fcmVnaXN0ZXJzIC0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5zaXplKCks
IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuc2l6ZSgpKTsKLSAgICB9CiB9CiAKIEV4ZWNTdGF0
ZSogSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKQpAQCAtNDExLDI2ICs0MDAsOSBAQCBFeGVj
U3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKICAgICByZXR1cm4gQ2FsbEZyYW1l
OjpjcmVhdGUobV9nbG9iYWxDYWxsRnJhbWUgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNpemVSZWdpc3RlcnMoc2l6ZV90
IG5ld1NpemUpCi17Ci0gICAgLy8gUHJldmlvdXMgZHVwbGljYXRlIHN5bWJvbHMgbWF5IGhhdmUg
Y3JlYXRlZCBzcGFyZSBjYXBhY2l0eSBpbiBtX3JlZ2lzdGVyQXJyYXkuCi0gICAgaWYgKG5ld1Np
emUgPD0gbV9yZWdpc3RlckFycmF5U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90
IG9sZFNpemUgPSBtX3JlZ2lzdGVyQXJyYXlTaXplOwotICAgIE93bkFycmF5UHRyPFdyaXRlQmFy
cmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJh
cnJpZXI8VW5rbm93bj5bbmV3U2l6ZV0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xk
U2l6ZTsgKytpKQotICAgICAgICByZWdpc3RlckFycmF5W2ldLnNldChnbG9iYWxEYXRhKCksIHRo
aXMsIG1fcmVnaXN0ZXJBcnJheVtpXS5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG9sZFNp
emU7IGkgPCBuZXdTaXplOyArK2kpCi0gICAgICAgIHJlZ2lzdGVyQXJyYXlbaV0uc2V0VW5kZWZp
bmVkKCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHJlZ2lzdGVy
QXJyYXkuZ2V0KCk7Ci0gICAgc2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheS5y
ZWxlYXNlKCksIG5ld1NpemUpOwotfQotCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNH
bG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFscywgaW50IGNvdW50KQogewotICAgIHJl
c2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZSgpLnNpemUoKSArIGNvdW50KTsKKyAgICBhZGRSZWdp
c3RlcnMoY291bnQpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyYgZ2xvYmFsID0gZ2xvYmFsc1tpXTsKQEAgLTQ0Niwx
NyArNDE4LDE3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZFN0YXRpY0dsb2JhbHMoR2wKIGJv
b2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4oY2VsbCk7Ci0gICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU1ZhcmlhYmxlT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJs
ZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFt
ZSwgc2xvdCk7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSwgc2xvdCk7CiB9CiAKIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBKU0ds
b2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7
Ci0gICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU1ZhcmlhYmxlT2JqZWN0Pihl
eGVjLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0
b3I8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhlY1N0YXRlOjpnbG9iYWxPYmpl
Y3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0
KHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRo
aXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CiB9CiAKIHZvaWQgSlNHbG9iYWxP
YmplY3Q6OmNsZWFyUmFyZURhdGEoSlNDZWxsKiBjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxMTk1MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsVGhpcy5oIgotI2luY2x1ZGUgIkpT
VmFyaWFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1i
ZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKQEAgLTc0LDcgKzc0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJs
ZWRGdW5jdGlvblB0ciBqYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkOwogICAgIH07CiAKLSAg
ICBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1ZhcmlhYmxlT2JqZWN0IHsKKyAgICBj
bGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsK
ICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPE9wYXF1ZUpTV2Vh
a09iamVjdE1hcD4gPiBXZWFrTWFwU2V0OwogCkBAIC05MCw3ICs5MCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgcHJvdGVjdGVkOgogCi0gICAgICAgIHNpemVfdCBtX3JlZ2lzdGVyQXJyYXlT
aXplOwogICAgICAgICBSZWdpc3RlciBtX2dsb2JhbENhbGxGcmFtZVtSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemVdOwogCiAgICAgICAgIFdyaXRlQmFycmllcjxTY29wZUNoYWluTm9k
ZT4gbV9nbG9iYWxTY29wZUNoYWluOwpAQCAtMTY0LDcgKzE2Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAgICAgICAgIAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU1Zh
cmlhYmxlT2JqZWN0IEJhc2U7CisgICAgICAgIHR5cGVkZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdCBCYXNlOwogCiAgICAgICAgIHN0YXRpYyBKU0dsb2JhbE9iamVjdCogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIHsKQEAg
LTE3Nyw4ICsxNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlID0gMCkKLSAgICAgICAgICAgIDogSlNWYXJpYWJsZU9iamVjdChnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlLCAwKQotICAgICAgICAgICAgLCBtX3Jl
Z2lzdGVyQXJyYXlTaXplKDApCisgICAgICAgICAgICA6IEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSkKICAgICAgICAgICAgICwg
bV9nbG9iYWxTY29wZUNoYWluKCkKICAgICAgICAgICAgICwgbV93ZWFrUmFuZG9tKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgKyAxLjApKSkKICAgICAgICAgICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQpA
QCAtMzA4LDggKzMwNiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHNldEV2YWxF
bmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2V2YWxFbmFibGVkID0gZW5hYmxlZDsgfQogICAgICAg
ICBib29sIGV2YWxFbmFibGVkKCkgeyByZXR1cm4gbV9ldmFsRW5hYmxlZDsgfQogCi0gICAgICAg
IHZvaWQgcmVzaXplUmVnaXN0ZXJzKHNpemVfdCBuZXdTaXplKTsKLQogICAgICAgICB2b2lkIHJl
c2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYsIEpTVmFsdWUgcHJvdG90eXBlKTsKIAogICAgICAg
ICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSBjb25zdCB7IHJldHVybiAqSGVhcDo6aGVhcCh0
aGlzKS0+Z2xvYmFsRGF0YSgpOyB9CkBAIC0zMzQsNyArMzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIGRvdWJsZSB3ZWFrUmFuZG9tTnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9t
LmdldCgpOyB9CiAgICAgcHJvdGVjdGVkOgogCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNWYXJpYWJsZU9i
amVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0
Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgc3RydWN0IEdsb2JhbFByb3BlcnR5
SW5mbyB7CiAgICAgICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oY29uc3QgSWRlbnRpZmllciYg
aSwgSlNWYWx1ZSB2LCB1bnNpZ25lZCBhKQpAQCAtMzU5LDcgKzM1NSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgY3JlYXRlVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKik7CiAK
LSAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3Rl
cnMsIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5
LCBzaXplX3QgY291bnQpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBj
bGVhclJhcmVEYXRhKEpTQ2VsbCopOwogICAgIH07CiAKQEAgLTM3MSwxOSArMzY2LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oYXNP
YmplY3QodmFsdWUpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBKU0dsb2JhbE9iamVjdDo6
c2V0UmVnaXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNzT3duQXJy
YXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50
KQotICAgIHsKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdDo6c2V0UmVnaXN0ZXJzKHJlZ2lzdGVy
cywgcmVnaXN0ZXJBcnJheSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJBcnJheVNpemUgPSBjb3VudDsK
LSAgICB9Ci0KICAgICBpbmxpbmUgYm9vbCBKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlG
b3JXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAg
ewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgaWYgKEpTVmFyaWFibGVPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQor
ICAgICAgICBpZiAoSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgYm9vbCBzbG90SXNXcml0ZWFibGU7Ci0gICAgICAgIHJldHVybiBzeW1ib2xU
YWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QsIHNsb3RJc1dyaXRlYWJsZSk7CisgICAgICAgIHJl
dHVybiBzeW1ib2xUYWJsZUdldCh0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHNsb3RJc1dyaXRl
YWJsZSk7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgSlNHbG9iYWxPYmplY3Q6OnN5bWJvbFRh
YmxlSGFzUHJvcGVydHkoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbnQgSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCogcmVnaXN0ZXJBZGRyZXNzKQoreworICAg
IGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCZt
X3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3MpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIENSQVNIKCk7Cit9CisKK2ludCBKU1NlZ21l
bnRlZFZhcmlhYmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9B
ZGQpCit7CisgICAgQVNTRVJUKG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgPj0gMCk7CisgICAgCisg
ICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVycy5zaXplKCk7CisgICAgbV9yZWdpc3RlcnMu
Z3JvdyhvbGRTaXplICsgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQ7IGktLTspCisgICAgICAgIG1fcmVnaXN0
ZXJzW29sZFNpemUgKyBpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOwor
ICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNpemUpOworfQorCit2b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7Cisg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBD
T01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkp
OworICAgIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgc2xv
dFZpc2l0b3IpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNPYmplY3QtPm1fcmVn
aXN0ZXJzLnNpemUoKTsgaS0tOykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3JlZ2lzdGVyc1tpXSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0X2gKKyNkZWZpbmUg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdF9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTU3ltYm9sVGFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2lu
Y2x1ZGUgIlN5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5j
bHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgUmVnaXN0ZXI7CisKKy8vIFRoaXMgaXMg
YSBtb3N0bHkgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgSlNWYXJpYWJsZU9iamVjdCwgZXhjZXB0
IHRoYXQgaXQgcHJlc2VydmVzCisvLyB0aGUgaW52YXJpYW50IHRoYXQgYWZ0ZXIgYSB2YXJpYWJs
ZSBpcyBjcmVhdGVkLCBpdHMgYWRkcmVzcyBpbiBtZW1vcnkgd2lsbCBub3QgY2hhbmdlCisvLyBz
byBsb25nIGFzIHRoZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IGlzIGFsaXZlLiBUaGlzIGFs
bG93cyBvcHRpbWl6YXRpb25zIGJhc2VkCisvLyBvbiBnZXR0aW5nIHRoZSBhZGRyZXNzIG9mIHRo
ZSB2YXJpYWJsZSBhbmQgcmVtZW1iZXJpbmcgaXQuIEFzIHdlbGwsIHVubGlrZSBhCisvLyBKU1Zh
cmlhYmxlT2JqZWN0LCB0aGlzIHdpbGwgbWFuYWdlIHRoZSBtZW1vcnkgZm9yIHRoZSByZWdpc3Rl
cnMgaXRzZWxmIGFuZCBuZWl0aGVyCisvLyByZXF1aXJlcyBub3IgYWxsb3dzIGZvciB0aGUgc3Vi
Y2xhc3NlcyB0byBtYW5hZ2UgdGhhdCBtZW1vcnkuIEZpbmFsbHksCisvLyBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0IGhhcyBpdHMgb3duIEdDIHRyYWNpbmcgZnVuY3Rpb25hbGl0eSwgc2luY2Ug
aXQga25vd3MgdGhlCisvLyBleGFjdCBkaW1lbnNpb25zIG9mIHRoZSB2YXJpYWJsZXMgYXJyYXkg
YXQgYWxsIHRpbWVzLgorCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IDogcHVibGlj
IEpTU3ltYm9sVGFibGVPYmplY3QgeworICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworcHVibGljOgorICAgIHR5cGVkZWYgSlNT
eW1ib2xUYWJsZU9iamVjdCBCYXNlOworCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiByZWdp
c3RlckF0KGludCBpbmRleCkgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CisgICAgCisg
ICAgLy8gVGhpcyBpcyBhIHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNoIHNlYXJjaGVzIHRoZSByZWdp
c3RlciBiYW5rIHRvIGZpbmQgdGhlIGluZGV4CisgICAgLy8gZ2l2ZW4gYSBwb2ludGVyLiBJdCB3
aWxsIENSQVNIKCkgaWYgaXQgZG9lcyBub3QgZmluZCB0aGUgcmVnaXN0ZXIuIE9ubHkgdXNlIHRo
aXMKKyAgICAvLyBpbiBkZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2RlIGR1bXBpbmcpLgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIGludCBmaW5kUmVnaXN0ZXJJbmRleCh2b2lkKik7CisgICAgCisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KFdyaXRl
QmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAgIHsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIGZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlcik7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRlcjsKKyAgICB9CisgICAgCisgICAgLy8g
QWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywgaW5pdGlhbGl6ZXMgdGhlbSB0
byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCisgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBv
bmUgYWRkZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGFkZFJlZ2lzdGVycyhpbnQgbnVt
YmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCitwcm90ZWN0ZWQ6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IEpTU3ltYm9sVGFibGVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOworCisgICAg
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgICAgIDogSlNT
eW1ib2xUYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsIHN5bWJvbFRhYmxlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIH0KKworICAgIFNlZ21lbnRlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4sIDE2PiBt
X3JlZ2lzdGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk1MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTMgKzY2LDEzIEBAIHZvaWQgSlNTdGF0aWNTY29wZU9i
amVjdDo6cHV0KEpTQ2VsbCogY2UKICAgICAgICAgLy8gYSBwb2ludGVyIGNvbXBhcmUuCiAgICAg
ICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICBib29sIGlzV3JpdGFibGUgPSB0cnVlOwot
ICAgICAgICB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QsIGlz
V3JpdGFibGUpOworICAgICAgICBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QsIGlzV3JpdGFibGUpOwogICAgICAgICBpZiAoIWlzV3JpdGFibGUpIHsKICAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQotICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkKKyAgICBpZiAoc3ltYm9sVGFi
bGVQdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmlj
dE1vZGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXQoSlNDZWxs
KiBjZQogdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBKU1N0YXRpY1Njb3BlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihvYmplY3QpOwot
ICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODksNyArODksNyBAQCB2b2lkIEpTU3Rh
dGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1CiAKIGJvb2wgSlNTdGF0aWNTY29wZU9iamVj
dDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBqc0Nh
c3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGNlbGwpLT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5h
bWUsIHNsb3QpOworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldChqc0Nhc3Q8SlNTdGF0aWNTY29w
ZU9iamVjdCo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3lt
Ym9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTeW1ib2xUYWJsZU9iamVjdC5oIgorCisjaW5j
bHVkZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXku
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+
KGNlbGwpLT5KU1N5bWJvbFRhYmxlT2JqZWN0Ojp+SlNTeW1ib2xUYWJsZU9iamVjdCgpOworfQor
Citib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEpTU3lt
Ym9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+
KGNlbGwpOworICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSk7Cit9CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBKU1N5bWJvbFRhYmxlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihvYmplY3QpOwor
ICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLmVuZCgpOworICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
dGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1v
ZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCisgICAgICAgICAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOworICAgIH0KKyAgICAK
KyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpwdXREaXJl
Y3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBKU1N5bWJv
bFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3Mp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpIHsK
KyAgICBjYXNlIEdsb2JhbE9iamVjdFR5cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBKU0dsb2JhbE9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFt
aWNDaGVja3MpOworICAgIGNhc2UgQWN0aXZhdGlvbk9iamVjdFR5cGU6CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBKU0FjdGl2YXRpb24qPih0aGlzKS0+aXNEeW5hbWljU2NvcGUo
cmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICBjYXNlIFN0YXRpY1Njb3BlT2JqZWN0VHlwZToK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3RhdGljU2NvcGVPYmplY3QqPih0
aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9s
VGFibGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SlNTeW1ib2xUYWJsZU9iamVjdF9oCisjZGVmaW5lIEpTU3ltYm9sVGFibGVPYmplY3RfaAorCisj
aW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKKyNp
bmNsdWRlICJTeW1ib2xUYWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNTeW1i
b2xUYWJsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUoKSBjb25zdCB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQorICAgIAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAg
c3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09i
amVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcyk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiwgRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOworICAgIAorICAgIGJv
b2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdDsKKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNOb25GaW5hbE9iamVjdDo6U3RydWN0dXJl
RmxhZ3M7CisgICAgCisgICAgSlNTeW1ib2xUYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisg
ICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCisgICAgICAg
ICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgIHsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgICAgIEFTU0VSVChtX3N5
bWJvbFRhYmxlKTsKKyAgICB9CisgICAgCisgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUg
Ym9vbCBzeW1ib2xUYWJsZUdldCgKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3RlckF0KGVu
dHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVH
ZXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoCisgICAgICAgIG9iamVj
dC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRl
cygpIHwgRG9udERlbGV0ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAor
ICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgYm9vbCYgc2xvdElzV3JpdGVhYmxlKQorewor
ICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuaW5saW5l
R2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChlbnRyeS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNsb3Quc2V0VmFsdWUob2JqZWN0LT5yZWdpc3Rl
ckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50
cnkuaXNSZWFkT25seSgpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKKyAg
ICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAgIGJvb2wgc2hvdWxkVGhyb3cp
Cit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwor
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcChvYmplY3QpKTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsK
KyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
ZW50cnkuaXNSZWFkT25seSgpKSB7CisgICAgICAgIGlmIChzaG91bGRUaHJvdykKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVF
cnJvcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBvYmplY3QtPnJlZ2lzdGVy
QXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5
cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKAorICAgIFN5bWJv
bFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKK3sKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CisgICAgCisgICAgU3ltYm9sVGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKKyAgICBpZiAoaXRlciA9PSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXIt
PnNlY29uZDsKKyAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKKyAgICBlbnRyeS5zZXRBdHRy
aWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRl
eCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNTeW1ib2xUYWJsZU9iamVjdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFi
bGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk1MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksMTIgKzI5LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKLSNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKLSNpbmNsdWRlICJQ
cm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgotCiBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKQEAgLTQyLDU3ICszNiw0IEBAIHZvaWQgSlNWYXJpYWJsZU9iamVjdDo6ZGVzdHJveShK
U0NlbGwqIGMKICAgICBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY2VsbCktPkpTVmFy
aWFibGVPYmplY3Q6On5KU1ZhcmlhYmxlT2JqZWN0KCk7CiB9CiAKLWJvb2wgSlNWYXJpYWJsZU9i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7Ci0gICAgaWYgKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCkuY29udGFpbnMocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHko
dGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLX0KLQotdm9pZCBKU1ZhcmlhYmxlT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQotewotICAgIEpTVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJs
ZU9iamVjdCo+KG9iamVjdCk7Ci0gICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCk7Ci0gICAgZm9yIChTeW1ib2xUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIShpdC0+c2Vjb25kLmdldEF0dHJpYnV0ZXMo
KSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSkKLSAg
ICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgaXQtPmZpcnN0Lmdl
dCgpKSk7Ci0gICAgfQotICAgIAotICAgIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotfQotCi1ib29sIEpTVmFyaWFi
bGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0g
ICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwgZW50cnkuZ2V0QXR0cmlidXRl
cygpIHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQpCi17
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgSlNWYXJpYWJsZU9iamVjdDo6
aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdAotewotICAg
IHN3aXRjaCAoc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7Ci0gICAgY2FzZSBHbG9i
YWxPYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNHbG9iYWxP
YmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKLSAg
ICBjYXNlIEFjdGl2YXRpb25PYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgSlNBY3RpdmF0aW9uKj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1p
Y0NoZWNrcyk7Ci0gICAgY2FzZSBTdGF0aWNTY29wZU9iamVjdFR5cGU6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBKU1N0YXRpY1Njb3BlT2JqZWN0Kj4odGhpcyktPmlzRHluYW1p
Y1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxMTk1MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgSlNWYXJpYWJsZU9i
amVjdF9oCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3ltYm9sVGFibGVP
YmplY3QuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgi
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC00MSw0MCArNDIsMjUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGNsYXNzIFJl
Z2lzdGVyOwogCi0gICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKKyAgICBjbGFzcyBKU1ZhcmlhYmxlT2JqZWN0IDogcHVibGljIEpTU3ltYm9sVGFi
bGVPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUoKSBjb25zdCB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQotCi0gICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0KLSAgICAgICAgc3RhdGlj
IE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0VmlydHVhbChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7
Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHko
SlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKLSAgICAgICAgCi0gICAg
ICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25z
dDsKKyAgICAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKICAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVy
czsgfQogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVnaXN0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTVmFyaWFibGVPYmplY3QsIG1fcmVnaXN0ZXJzKTsgfQogCi0gICAg
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFZhcmlhYmxlT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKLSAgICAgICAgfQotICAgICAgICAKKyAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTTm9uRmluYWxPYmplY3Q6OlN0cnVjdHVyZUZs
YWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU1N5
bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgICAgICBKU1ZhcmlhYmxlT2Jq
ZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKLSAgICAgICAgICAgIDog
SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAsIG1f
c3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgICAgICAgICA6IEpTU3ltYm9sVGFibGVPYmpl
Y3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzeW1ib2xUYWJsZSkKICAgICAgICAgICAgICwgbV9y
ZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihyZWdpc3Rl
cnMpKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTgyLDc2ICs2OCwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3ltYm9sVGFibGUpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gc2l6ZW9mKFJlZ2lz
dGVyKSwgUmVnaXN0ZXJfc2hvdWxkX2JlX3NhbWVfc2l6ZV9hc19Xcml0ZUJhcnJpZXIpOwogICAg
ICAgICB9CiAKICAgICAgICAgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+
IGNvcHlSZWdpc3RlckFycmF5KEpTR2xvYmFsRGF0YSYsIFdyaXRlQmFycmllcjxVbmtub3duPiog
c3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFydHMpOwogICAgICAgICB2b2lk
IHNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFy
cmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkpOwogCi0gICAgICAg
IGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVhYmxlKTsKLSAgICAgICAgYm9v
bCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMo
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KTsKLQotICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsgLy8gTWFwcyBuYW1lIC0+
IG9mZnNldCBmcm9tICJyIiBpbiByZWdpc3RlciBmaWxlLgogICAgICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAg
ICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IG1fcmVnaXN0ZXJBcnJheTsg
Ly8gSW5kZXBlbmRlbnQgY29weSBvZiByZWdpc3RlcnMsIHVzZWQgd2hlbiBhIHZhcmlhYmxlIG9i
amVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJlZ2lzdGVyIGZpbGUuCiAgICAg
fTsKIAotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLSAgICB7Ci0gICAg
ICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewot
ICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdl
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1i
b2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKLSAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkg
ZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgp
KTsKLSAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRW
YWx1ZShyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKLSAgICAgICAgICAgIHNs
b3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5s
aW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xv
YmFsRGF0YSgpOwotICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwotCi0gICAgICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpKTsKLSAgICAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKSB7Ci0gICAgICAgICAgICBpZiAo
c2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGds
b2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmli
dXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0gICAgewotICAgICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOwotCi0gICAgICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFi
bGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgICAgICBpZiAoaXRlciA9
PSBzeW1ib2xUYWJsZSgpLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKLSAgICAgICAgQVNTRVJU
KCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRl
cyk7Ci0gICAgICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEs
IHRoaXMsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCiAgICAgaW5saW5l
IFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBKU1ZhcmlhYmxlT2JqZWN0
Ojpjb3B5UmVnaXN0ZXJBcnJheShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFdyaXRlQmFycmll
cjxVbmtub3duPiogc3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFydHMpCiAg
ICAgewogICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3Rl
ckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25vd24+W2NvdW50XSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAko
cmV2aXNpb24gMTE5NTMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVC
YXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiB1LnNsb3Q7CiAgICAgfQogICAgIAorICAgIGludDMyX3QqIHRhZ1BvaW50ZXIo
KSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPigmbV92YWx1
ZSktPmFzQml0cy50YWc7IH0KKyAgICBpbnQzMl90KiBwYXlsb2FkUG9pbnRlcigpIHsgcmV0dXJu
ICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KCZtX3ZhbHVlKS0+YXNCaXRz
LnBheWxvYWQ7IH0KKyAgICAKICAgICB0eXBlZGVmIEpTVmFsdWUgKFdyaXRlQmFycmllckJhc2U6
OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBl
KigpIGNvbnN0IHsgcmV0dXJuIGdldCgpID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJv
b2xUeXBlKj4oMSkgOiAwOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAh
Z2V0KCk7IH0gCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146115</attachid>
            <date>2012-06-06 14:46:02 -0700</date>
            <delta_ts>2012-06-06 15:22:34 -0700</delta_ts>
            <desc>almost ready</desc>
            <filename>globalobj_patch_11.diff</filename>
            <type>text/plain</type>
            <size>91092</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBA
QAorMjAxMi0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2ggYW5kIEdlb2Zm
cmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRlZCB0
byBhY2Nlc3MgYSBnbG9iYWwgdmFyaWFibGUsIHlvdSdkIGZpcnN0IGhhdmUKKyAgICAgICAgdG8g
bG9hZCB0aGUgcmVnaXN0ZXIgYXJyYXkgZnJvbSB0aGUgYXBwcm9wcmlhdGUgZ2xvYmFsIG9iamVj
dCBhbmQgdGhlbgorICAgICAgICBlaXRoZXIgbG9hZCBvciBzdG9yZSBhdCBhbiBvZmZzZXQgdG8g
dGhlIHJlZ2lzdGVyIGFycmF5LiBUaGlzIGlzIGJlY2F1c2UKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QgaW5oZXJpdGVkIGZyb20gSlNWYXJpYWJsZU9iamVjdCwgYW5kIEpTVmFyaWFibGVPYmplY3Qg
aXMKKyAgICAgICAgZGVzaWduZWQgd2l0aCB0aGUgcGVzc2ltaXN0aWMgYXNzdW1wdGlvbiB0aGF0
IGl0cyByZWdpc3RlciBhcnJheSBtYXkKKyAgICAgICAgcG9pbnQgaW50byB0aGUgY2FsbCBzdGFj
ay4gVGhpcyBpcyBuZXZlciB0aGUgY2FzZSBmb3IgZ2xvYmFsIG9iamVjdHMuCisgICAgICAgIEhl
bmNlLCBldmVuIHRob3VnaCB0aGUgZ2xvYmFsIG9iamVjdCBtYXkgYWRkIG1vcmUgcmVnaXN0ZXJz
IGF0IGFueSB0aW1lLAorICAgICAgICBpdCBkb2VzIG5vdCBuZWVkIHRvIHN0b3JlIHRoZW0gaW4g
YSBjb250aWd1b3VzIGFycmF5LiBJdCBjYW4gdXNlIGEKKyAgICAgICAgU2VnbWVudGVkVmVjdG9y
IG9yIHNpbWlsYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBnbG9i
YWwgb2JqZWN0cyBhbmQgdmFyaWFibGUgb2JqZWN0cyBhcyBmb2xsb3dzOgorICAgICAgICAKKyAg
ICAgICAgLSBUaGUgZnVuY3Rpb25hbGl0eSB0byB0cmFjayB2YXJpYWJsZXMgaW4gYW4gaW5kZXhh
YmxlIGFycmF5IHVzaW5nIGEKKyAgICAgICAgICBTeW1ib2xUYWJsZSB0byBtYXAgbmFtZXMgdG8g
aW5kaWNlcyBpcyBtb3ZlZCBpbnRvIEpTU3ltYm9sVGFibGVPYmplY3QsCisgICAgICAgICAgd2hp
Y2ggaXMgbm93IGEgc3VwZXJ0eXBlIG9mIEpTVmFyaWFibGVPYmplY3QuIEpTVmFyaWFibGVPYmpl
Y3QgaXMgbm93CisgICAgICAgICAganVzdCBhIGhvbGRlciBmb3IgYSByZWdpc3RlcnMgYXJyYXkg
YW5kIGltcGxlbWVudHMgdGhlIHJlZ2lzdGVyQXQoKQorICAgICAgICAgIG1ldGhvZCB0aGF0IGlz
IGxlZnQgYWJzdHJhY3QgaW4gSlNTeW1ib2xUYWJsZU9iamVjdC4gQmVjYXVzZSBhbGwgdXNlcnMK
KyAgICAgICAgICBvZiBKU1ZhcmlhYmxlT2JqZWN0IGtub3cgd2hldGhlciB0aGV5IGFyZSBhIEpT
U3RhdGljU2NvcGVPYmplY3QsCisgICAgICAgICAgSlNBY3RpdmF0aW9uLCBvciBKU0dsb2JhbE9i
amVjdCwgdGhpcyAiYWJzdHJhY3QiIG1ldGhvZCBpcyBub3QgdmlydHVhbDsKKyAgICAgICAgICBp
bnN0ZWFkIHRoZSB1dGlsaXR5IG1ldGhvZHMgdGhhdCB3b3VsZCBjYWxsIHJlZ2lzdGVyQXQoKSBh
cmUgbm93CisgICAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSB5b3UgdG8g
a25vdyBzdGF0aWNhbGx5IHdoYXQgc3VidHlwZSBvZgorICAgICAgICAgIEpTU3ltYm9sVGFibGVP
YmplY3QgeW91J3JlIHVzaW5nIChKU1ZhcmlhYmxlT2JqZWN0IG9yIHNvbWV0aGluZyBlbHNlKSwK
KyAgICAgICAgICBzbyB0aGF0IHJlZ2lzdGVyQXQoKSBjYW4gYmUgc3RhdGljYWxseSBib3VuZC4K
KyAgICAgICAgCisgICAgICAgIC0gQSBuZXcgY2xhc3MgaXMgYWRkZWQgY2FsbGVkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QsIHdoaWNoIG9ubHkKKyAgICAgICAgICBkaWZmZXJzIGZyb20gSlNW
YXJpYWJsZU9iamVjdCBpbiBob3cgaXQgYWxsb2NhdGVzIHJlZ2lzdGVycy4gSXQgdXNlcyBhCisg
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yIGluc3RlYWQgb2YgbWFudWFsbHkgbWFuYWdpbmcgYSBw
b2ludGVyIHRvIGEgY29udGlndW91cworICAgICAgICAgIHNsYWIgb2YgcmVnaXN0ZXJzLiBUaGlz
IGNoYW5nZXMgdGhlIGludGVyZmFjZSBzb21ld2hhdDsgZm9yIGV4YW1wbGUKKyAgICAgICAgICB3
aXRoIEpTVmFyaWFibGVPYmplY3QgaWYgeW91IHdhbnRlZCB0byBhZGQgYSByZWdpc3RlciB5b3Ug
aGFkIHRvIGRvCisgICAgICAgICAgaXQgeW91cnNlbGYgc2luY2UgdGhlIEpTVmFyaWFibGVPYmpl
Y3QgZGlkbid0IGtub3cgaG93IHRoZSByZWdpc3RlcnMKKyAgICAgICAgICBhcnJheSBvdWdodCB0
byBiZSBhbGxvY2F0ZWQuIFdpdGggSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB5b3UgY2FuCisg
ICAgICAgICAganVzdCBjYWxsIGFkZFJlZ2lzdGVycygpLiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IHByZXNlcnZlcyB0aGUKKyAgICAgICAgICBpbnZhcmlhbnQgdGhhdCBvbmNlIHlvdSBnZXQg
YSBwb2ludGVyIGludG8gYSByZWdpc3RlciwgdGhhdCBwb2ludGVyCisgICAgICAgICAgd2lsbCBj
b250aW51ZSB0byBiZSB2YWxpZCBzbyBsb25nIGFzIHRoZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IGlzCisgICAgICAgICAgYWxpdmUuIFRoaXMgYWxsb3dzIHRoZSBKSVRzIGFuZCBpbnRlcnBy
ZXRlcnMgdG8gc2tpcCB0aGUgZXh0cmEgbG9hZC4KKyAgICAgICAgCisgICAgICAgIC0gSlNHbG9i
YWxPYmplY3Qgbm93IGluaGVyaXRzIGZyb20gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC4gRm9y
IG5vdworICAgICAgICAgIChhbmQgcG9zc2libHkgZm9yZXZlcikgaXQgaXMgdGhlIG9ubHkgc3Vi
dHlwZSBvZiB0aGlzIG5ldyBjbGFzcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGJ5dGVjb2Rl
IGZvcm1hdCBpcyBjaGFuZ2VkIHNvIHRoYXQgZ2V0X2dsb2JhbF92YXIgYW5kCisgICAgICAgICAg
cHV0X2dsb2JhbF92YXIgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGRpcmVjdGx5IHJh
dGhlciB0aGFuCisgICAgICAgICAgaGF2aW5nIGFuIGluZGV4LiBBIGNvbnZlbmllbmNlIG1ldGhv
ZCBpcyBwcm92aWRlZCBpbgorICAgICAgICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgdG8g
Z2V0IHRoZSBpbmRleCBnaXZlbiBhIGEgcG9pbnRlciwgd2hpY2ggaXMKKyAgICAgICAgICB1c2Vk
IGZvciBhc3NlcnRpb25zIGFuZCBkZWJ1ZyBkdW1wcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
YXBwZWFycyB0byBiZSBhIDElIGFjcm9zcyB0aGUgYm9hcmQgd2luLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3Ry
dWN0aW9uLmg6CisgICAgICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3RydWN0
aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVyKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxh
c3RVbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoUmVzb2x2ZVJlc3VsdCk6
CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxPYmplY3RGb3IpOgor
ICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzVmFyTnVtYmVyKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1JlZ2lzdGVyUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cmVnaXN0ZXJQb2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xv
YmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0
ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0ZXJB
dCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFzc2VydFJlZ2lz
dGVySXNJblRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6
OnB1dCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJv
eSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZSk6CisgICAg
ICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJv
bFRhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVP
YmplY3Q6OkpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlR2V0KToK
KyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTVmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxl
T2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1dy
aXRlQmFycmllci5oOgorCiAyMDEyLTA2LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNv
bT4KIAogICAgICAgICBFbnN1cmUgY29uc2lzdGVudCBvcmRlciBvZiBldmFsdWF0aW9uIGluIExM
SW50IHNsb3cgcGF0aHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4NiwxMSBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvSlNPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNw
cAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKKyAgICBydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3BwCiAgICAgcnVudGltZS9KU1N0cmluZ0pv
aW5lci5jcHAKKyAgICBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCiAgICAgcnVudGlt
ZS9KU1ZhbHVlLmNwcAogICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKICAgICBydW50
aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdCdWlsZGVyLmggXApAQCAtNTA4LDYgKzUxMCw4IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSm9pbmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTQsOSArMTk0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTT05PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKKyAgICBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIFwKICAgICBy
dW50aW1lL0pTU3RyaW5nLmNwcCBcCiAgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAgXAor
ICAgIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYWx1
ZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTE5NjA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3NCw2ICs4NzQsMTQg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTdGF0aWNTY29wZU9iamVjdC5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgpAQCAtODk4LDYgKzkwNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxK
U1N5bWJvbFRhYmxlT2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNUeXBlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExOTYwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDEwIEBACiAJCTBGN0IyOTRCMTRDM0NE
MkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYw
MjAwMDQ3MkE5IC8qIERGR0J5dGVDb2RlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZH
Q29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdE
IC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwICovOyB9OworCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyogSlNTeW1i
b2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkxOUQx
MDE1N0YzMzI5MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwRTE1N0YzMzI3
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi87IH07CisJCTBGOTE5
RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwRjE1N0YzMzI3
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
Y3BwICovOyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0
MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAv
KiBHZXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAq
LzsgfTsKQEAgLTgyOCw2ICs4MzIsMTAgQEAKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRo
ID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkx
OUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMEYxNTdGMzMyNzAw
NEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0
dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbExpbmtTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NDE0Q0E3REMxMDA4
NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMy
OTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTM0LDYgKzE5NDIsOCBAQAogCQkJCUE3Rjk5MzVEMEZENzMyNTEwMEEw
QjJEMCAvKiBKU09OT2JqZWN0LmggKi8sCiAJCQkJQTcyN0ZGNjYwREEzMDUzQjAwRTU0OEQ3IC8q
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwICovLAogCQkJCUE3MjdGRjY1MERBMzA1M0IwMEU1
NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggKi8sCisJCQkJMEY5MTlEMEUxNTdGMzMy
NzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovLAorCQkJCTBGOTE5
RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8sCiAJ
CQkJQTdFNDJDMTkwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwICov
LAogCQkJCUE3RTQyQzE4MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0Lmgg
Ki8sCiAJCQkJQkMwMkU5QjYwRTE4NDJGQTAwMEY5Mjk3IC8qIEpTU3RyaW5nLmNwcCAqLywKQEAg
LTE5NDEsNiArMTk1MSw4IEBACiAJCQkJODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3Ry
aW5nQnVpbGRlci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5jcHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggKi8sCisJCQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwICovLAorCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlw
ZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8s
CiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTVmFsdWUuY3BwICovLApAQCAtMjY1
Nyw2ICsyNjY5LDggQEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0Mg
LyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGOTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTMyMjksNiArMzI0Myw4IEBACiAJCQkJMEZE
ODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYxNjAxNUQxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1Qjcx
IC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjkxOUQwQzE1
N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjkxOUQxMDE1N0YzMzI5MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIzLDE1ICs5
MjMsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAg
ICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsKICAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGluZGV4ID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBnZXRfZ2xvYmFsX3Zhclx0ICVz
LCAlZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpbmRleCk7
CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgr
K2l0KS0+dS5yZWdpc3RlclBvaW50ZXI7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBnZXRf
Z2xvYmFsX3Zhclx0ICVzLCBnJWQoJXApXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCksIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBv
aW50ZXIpLCByZWdpc3RlclBvaW50ZXIpOwogICAgICAgICAgICAgaXQrKzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKLSAg
ICAgICAgICAgIGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQ
b2ludGVyOwogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJbJTRkXSBwdXRfZ2xvYmFsX3Zhclx0ICVkLCAlc1xuIiwgbG9jYXRpb24s
IGluZGV4LCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBkYXRh
TG9nKCJbJTRkXSBwdXRfZ2xvYmFsX3Zhclx0IGclZCglcCksICVzXG4iLCBsb2NhdGlvbiwgbV9n
bG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlciksIHJlZ2lzdGVy
UG9pbnRlciwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6IHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAx
MTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBJbnN0cnVjdGlvbihMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSB7IHUuY2FsbExp
bmtJbmZvID0gY2FsbExpbmtJbmZvOyB9CiAgICAgICAgIAogICAgICAgICBJbnN0cnVjdGlvbihW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5wcm9maWxlID0gcHJvZmlsZTsgfQorICAgICAgICAK
KyAgICAgICAgSW5zdHJ1Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50
ZXIpIHsgdS5yZWdpc3RlclBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KIAogICAgICAgICB1
bmlvbiB7CiAgICAgICAgICAgICBPcGNvZGUgb3Bjb2RlOwpAQCAtMTk4LDYgKzIwMCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IHN0
cnVjdHVyZUNoYWluOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+IGpzQ2Vs
bDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyOwog
ICAgICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYzsKICAgICAg
ICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTE5NjA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMTEgQEAgdm9pZCBSZXNvbHZlUmVz
dWx0OjpjaGVja1ZhbGlkaXR5KCkKIH0KICNlbmRpZgogCitXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnJlZ2lzdGVyQXQoaW5kZXgo
KSk7Cit9CisKIHN0YXRpYyBib29sIHNfZHVtcHNHZW5lcmF0ZWRDb2RlID0gZmFsc2U7CiAKIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2Vu
ZXJhdGVkQ29kZSkKQEAgLTI4MCw3ICsyODUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoUHJvCiAgICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2YXJTdGFjay5zaXplKCkg
KyBmdW5jdGlvblN0YWNrLnNpemUoKTsKICAgICBpZiAoIW5ld0dsb2JhbHMpCiAgICAgICAgIHJl
dHVybjsKLSAgICBnbG9iYWxPYmplY3QtPnJlc2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZS0+c2l6
ZSgpICsgbmV3R2xvYmFscyk7CisgICAgZ2xvYmFsT2JqZWN0LT5hZGRSZWdpc3RlcnMobmV3R2xv
YmFscyk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0
YWNrW2ldOwpAQCAtNjc5LDYgKzY4NCwxNCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRy
aWV2ZUxhc3RVbmFyCiAgICAgc3JjSW5kZXggPSBpbnN0cnVjdGlvbnMoKS5hdChzaXplIC0gMSku
dS5vcGVyYW5kOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RVbmFy
eU9wKFdyaXRlQmFycmllcjxVbmtub3duPiomIGRzdFBvaW50ZXIsIGludCYgc3JjSW5kZXgpCit7
CisgICAgQVNTRVJUKGluc3RydWN0aW9ucygpLnNpemUoKSA+PSAzKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBkc3RQb2ludGVyID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoc2l6ZSAtIDIpLnUucmVnaXN0ZXJQb2ludGVyOworICAgIHNyY0luZGV4ID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKK30KKwogdm9pZCBBTFdBWVNfSU5MSU5F
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXdpbmRCaW5hcnlPcCgpCiB7CiAgICAgQVNTRVJUKGluc3Ry
dWN0aW9ucygpLnNpemUoKSA+PSA0KTsKQEAgLTExNzgsNyArMTE5MSw3IEBAIFJlc29sdmVSZXN1
bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29s
dmVSZXN1bHQ6OkR5bmFtaWNGbGFnOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAg
ICAgIAotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBq
c0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIEpTU3ltYm9s
VGFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxl
T2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgp
KTsKIAogICAgICAgICAvLyBGb3VuZCB0aGUgcHJvcGVydHkKQEAgLTEyNDMsNyArMTI1Niw3IEBA
IFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICAgICAgSlNPYmpl
Y3QqIGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOwogICAgICAgICBpZiAoIWN1cnJlbnRTY29w
ZS0+aXNWYXJpYWJsZU9iamVjdCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEpT
VmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxl
T2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKKyAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogY3Vy
cmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjdXJyZW50
U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxl
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAo
ZW50cnkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDYsMTYgKzE0NTks
MTYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdAogICAgIGNhc2Ug
UmVzb2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2JhbDoKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJl
YWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAgICAgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX3B1
dF9nbG9iYWxfdmFyKSB7Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXg7CisgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGRzdFBvaW50ZXI7CiAgICAgICAgICAgICBpbnQgc3JjSW5k
ZXg7Ci0gICAgICAgICAgICByZXRyaWV2ZUxhc3RVbmFyeU9wKGRzdEluZGV4LCBzcmNJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoZHN0SW5kZXggPT0gcmVzb2x2ZVJlc3VsdC5pbmRleCgpICYmIHNy
Y0luZGV4ID09IGRzdC0+aW5kZXgoKSkKKyAgICAgICAgICAgIHJldHJpZXZlTGFzdFVuYXJ5T3Ao
ZHN0UG9pbnRlciwgc3JjSW5kZXgpOworICAgICAgICAgICAgaWYgKGRzdFBvaW50ZXIgPT0gcmVz
b2x2ZVJlc3VsdC5yZWdpc3RlclBvaW50ZXIoKSAmJiBzcmNJbmRleCA9PSBkc3QtPmluZGV4KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQogCiAgICAgICAgIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2dsb2JhbF92YXIpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVSZXN1bHQuaW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9pbnRlcigpKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gZHN0OwogCkBAIC0xNDgzLDcg
KzE0OTYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0CiAgICAg
Y2FzZSBSZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgogICAgIGNhc2UgUmVzb2x2ZVJlc3Vs
dDo6UmVhZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9nbG9i
YWxfdmFyKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuaW5k
ZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LnJlZ2lz
dGVyUG9pbnRlcigpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRl
eCgpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw2ICsxOTcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaW50IGluZGV4KCkgY29uc3QgeyBBU1NFUlQgKGlzSW5kZXhlZCgpIHx8
IGlzUmVnaXN0ZXIoKSk7IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAgIHNpemVfdCBkZXB0aCgp
IGNvbnN0IHsgQVNTRVJUKGlzU2NvcGVkKCkpOyByZXR1cm4gbV9kZXB0aDsgfQogICAgICAgICBK
U09iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyBBU1NFUlQoaXNHbG9iYWwoKSk7IEFTU0VS
VChtX2dsb2JhbE9iamVjdCk7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcigpIGNvbnN0OwogCiAgICAgICAgIGJv
b2wgaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIFJlZ2lzdGVyRmxhZzsgfQog
ICAgICAgICBib29sIGlzRHluYW1pYygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIER5bmFtaWNG
bGFnOyB9CkBAIC01NDEsNiArNTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZhbHVl
UHJvZmlsZSogZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRy
aWV2ZUxhc3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMy
SW5kZXgpOwogICAgICAgICB2b2lkIHJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwg
aW50JiBzcmNJbmRleCk7CisgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChXcml0ZUJh
cnJpZXI8VW5rbm93bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0luZGV4KTsKICAgICAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJld2luZEJpbmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUg
dm9pZCByZXdpbmRVbmFyeU9wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDIxICsxMTUsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0Zvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICog
c2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yR2xv
YmFsVmFyKEdQUlJlZyBnbG9iYWwsIGludDMyX3QgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEFkZHJlc3MoZ2xvYmFsLCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yR2xvYmFsVmFyKEdQUlJlZyBnbG9iYWws
IGludDMyX3QgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoZ2xvYmFs
LCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfQotCiAgICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1
YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjE2LDE0ICsyMjE2LDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewogICAgICAg
ICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggZ2V0R2xvYmFsVmFyID0gYWRkVG9HcmFwaChH
ZXRHbG9iYWxWYXIsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgT3BJ
bmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRHbG9iYWxWYXIgPSBh
ZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgIEdldEdsb2JhbFZhciwKKyAgICAgICAgICAgICAg
ICBPcEluZm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
c3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LnJlZ2lz
dGVyUG9pbnRlcikpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0R2xvYmFsVmFy
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9nbG9iYWxfdmFyKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAg
ICAgICAgICAgUHV0R2xvYmFsVmFyLAorICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRo
aXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCisgICAg
ICAgICAgICAgICAgdmFsdWUpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2Jh
bF92YXIpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE4ICsxOTQsMTggQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgTm9kZUluZGV4IGdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1i
ZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNv
ZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdp
c3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtMjE3LDcgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVs
aW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0yMjYsMTIgKzIyNiwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgIGlm
IChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIApAQCAtOTgyLDEzICs5ODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
RmluYWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBi
dXQgd2UgY2FuIHN0aWxsCiAgICAgICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBz
b21lIHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQuCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5v
ZGUudmFyTnVtYmVyKCksIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICAgICAgaWYgKG1fZml4
cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUu
dmFyTnVtYmVyKCksIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KSkpOworICAgICAgICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9k
ZS5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiwxMyBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgIGRhdGFMb2coIiVzdmFyJXUi
LCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKICAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChub2RlLmhhc1JlZ2lzdGVyUG9pbnRlcigp
KSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiJXNnbG9iYWwldSglcCkiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLAorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbiktPmZpbmRSZWdpc3RlckluZGV4KG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLAorICAg
ICAgICAgICAgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOworICAgIH0KICAgICBpZiAobm9kZS5oYXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgZGF0
YUxvZygiJXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmll
ck51bWJlcigpLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSkudXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDExOTYwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtMzEwLDYgKzMxMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIAorICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbik7CisgICAgfQorICAg
IAogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3
ICs0MjEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0
R2xvYmFsVmFyIHx8IG9wKCkgPT0gR2V0U2NvcGVkVmFyIHx8IG9wKCkgPT0gUHV0U2NvcGVkVmFy
OworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRTY29wZWRWYXIgfHwgb3AoKSA9PSBQdXRTY29w
ZWRWYXI7CiAgICAgfQogCiAgICAgdW5zaWduZWQgdmFyTnVtYmVyKCkKQEAgLTQyOSw2ICs0Mjks
MTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoaGFzVmFyTnVtYmVyKCkpOwogICAg
ICAgICByZXR1cm4gbV9vcEluZm87CiAgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVnaXN0ZXJQ
b2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBv
cCgpID09IFB1dEdsb2JhbFZhcjsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CisgICAgfQogCiAgICAgYm9vbCBo
YXNTY29wZUNoYWluRGVwdGgoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE5NjA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMzU2NCwz
MyArMzU2NSwzMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0VGFnKHRoaXMpOwogCi0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKGNvbnN0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kio+KGdsb2JhbE9iamVj
dC0+YWRkcmVzc09mUmVnaXN0ZXJzKCkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvckdsb2JhbFZhcihyZXN1bHQuZ3ByKCksIG5vZGUudmFy
TnVtYmVyKCkpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwgbm9kZS52YXJOdW1iZXIoKSks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLnJl
Z2lzdGVyUG9pbnRlcigpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3By
KCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5
bG9hZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1
bHQoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFs
VmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRoaXMpOwotICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBnbG9iYWxP
YmplY3RSZWcgPSBnbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgZ2xv
YmFsT2JqZWN0UmVnKTsKLQotICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLnRhZ0dQUigpLCBub2RlLmNoaWxkMSgpLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgIGlmIChIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUudGFnR1BSKCksIG5vZGUuY2hpbGQxKCks
IFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgfQog
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0UmVnLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaFJl
Zyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjp0
YWdGb3JHbG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1iZXIoKSkpOwotICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3JH
bG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAvLyBGSVhN
RTogaWYgd2UgaGFwcGVuIHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYg
d2UgaGFwcGVuIHRvIGhhdmUKKyAgICAgICAgLy8gYSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBv
cHRpbWl6YXRpb24gd291bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2ludGVyIGludG8KKyAg
ICAgICAgLy8gYSByZWdpc3RlciBhbmQgdGhlbiBkbyBhIHplcm8gb2Zmc2V0IHN0b3JlIGZvbGxv
d2VkIGJ5IGEgZm91ci1vZmZzZXQgc3RvcmUgKG9yCisgICAgICAgIC8vIHZpY2UtdmVyc2EgZGVw
ZW5kaW5nIG9uIGVuZGlhbm5lc3MpLgorICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQ
UigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQb2ludGVyKCkpOworICAgICAgICBtX2pp
dC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKS0+cGF5
bG9hZFBvaW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5
Myw5ICszNTkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoZ2xv
YmFsT2JqZWN0LT5hZGRyZXNzT2ZSZWdpc3RlcnMoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvckdsb2JhbFZhcihyZXN1bHQuZ3By
KCksIG5vZGUudmFyTnVtYmVyKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7
CkBAIC0zNjAzLDE4ICszNjAxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgZ2xv
YmFsT2JqZWN0KHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAg
ICAgICAgCi0gICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RSZWcgPSBnbG9iYWxPYmplY3QuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9i
amVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0UmVnKTsKLQotICAgICAgICB3
cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVl
LmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2Ny
YXRjaFJlZyk7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhnbG9iYWxPYmplY3RSZWcsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkp
LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHNjcmF0Y2hSZWcsIG5vZGUudmFyTnVtYmVyKCkp
KTsKKyAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIo
KSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hS
ZWcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5n
cHIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHN0
YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAgc3RhdGljIGJvb2wg
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmll
cihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdWludDhfdCogYWRk
cmVzc09mQ2FyZEZvcihKU0NlbGwqKTsKQEAgLTI4Miw2ICsyODMsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+c2V0TWFya2VkKGNlbGwp
OwogICAgIH0KIAorICAgIGlubGluZSBib29sIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
CisgICAgeworI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKyAgICB9CisKICNpZiBFTkFCTEUoR0dDKQogICAgIGlubGluZSB1aW50OF90KiBIZWFw
OjphZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCogY2VsbCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlKiBub2Rl
ID0gc2NvcGVDaGFpbjsgOyBub2RlID0gbm9kZS0+bmV4dC5nZXQoKSkgewogICAgICAgICBBU1NF
UlQobm9kZSk7CiAgICAgICAgIGlmIChub2RlLT5vYmplY3QtPmlzVmFyaWFibGVPYmplY3QoKSAm
JiAhbm9kZS0+b2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHZh
cmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihub2RlLT5vYmplY3QuZ2V0
KCkpOworICAgICAgICAgICAgdmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9i
amVjdCo+KG5vZGUtPm9iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTI4NjAsMzAgKzI4NjAsMjggQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQogICAg
IERFRklORV9PUENPREUob3BfZ2V0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgLyogZ2V0X2dsb2Jh
bF92YXIgZHN0KHIpIGdsb2JhbE9iamVjdChjKSBpbmRleChuKQorICAgICAgICAvKiBnZXRfZ2xv
YmFsX3ZhciBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHJlZ2lzdGVyUG9pbnRlcihuKQogCiAgICAg
ICAgICAgIEdldHMgdGhlIGdsb2JhbCB2YXIgYXQgZ2xvYmFsIHNsb3QgaW5kZXggYW5kIHBsYWNl
cyBpdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgQVNTRVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgp
KTsKLSAgICAgICAgaW50IGluZGV4ID0gdlBDWzJdLnUub3BlcmFuZDsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMl0udS5yZWdpc3RlclBvaW50
ZXI7CiAKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBzY29wZS0+cmVnaXN0
ZXJBdChpbmRleCkuZ2V0KCk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
cmVnaXN0ZXJQb2ludGVyLT5nZXQoKTsKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2dsb2JhbF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQogICAg
IERFRklORV9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgLyogcHV0X2dsb2Jh
bF92YXIgZ2xvYmFsT2JqZWN0KGMpIGluZGV4KG4pIHZhbHVlKHIpCisgICAgICAgIC8qIHB1dF9n
bG9iYWxfdmFyIGdsb2JhbE9iamVjdChjKSByZWdpc3RlclBvaW50ZXIobikgdmFsdWUocikKICAg
ICAgICAgIAogICAgICAgICAgICBQdXRzIHZhbHVlIGludG8gZ2xvYmFsIHNsb3QgaW5kZXguCiAg
ICAgICAgICAqLwogICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwogICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkpOwot
ICAgICAgICBpbnQgaW5kZXggPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IHZQQ1sxXS51LnJlZ2lzdGVyUG9pbnRlcjsK
ICAgICAgICAgaW50IHZhbHVlID0gdlBDWzJdLnUub3BlcmFuZDsKICAgICAgICAgCi0gICAgICAg
IHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KS5zZXQoKmdsb2JhbERhdGEsIHNjb3BlLCBjYWxsRnJh
bWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7CisgICAgICAgIHJlZ2lzdGVyUG9pbnRlci0+c2V0KCpn
bG9iYWxEYXRhLCBzY29wZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwogICAgICAg
ICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgpAQCAt
MTA2MCwxMyArMTA2MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0
cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3Qo
KSk7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQot
ICAgIGxvYWRQdHIoJmdsb2JhbE9iamVjdC0+bV9yZWdpc3RlcnMsIHJlZ1QyKTsKKyAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51LnJlZ2lzdGVyUG9pbnRlcjsKIAotICAgIGVtaXRMb2FkKGluZGV4LCByZWdUMSwgcmVnVDAs
IHJlZ1QyKTsKKyAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT50YWdQb2ludGVyKCksIHJlZ1Qx
KTsKKyAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT5wYXlsb2FkUG9pbnRlcigpLCByZWdUMCk7
CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dl
dF9nbG9iYWxfdmFyKSwgZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtMTA3NCwxOCArMTA3MiwyMSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51LnJlZ2lzdGVyUG9pbnRlcjsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7Ci0K
LSAgICBlbWl0V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBTaG91bGRG
aWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgCisg
ICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7CisgICAgICAgIAorICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgfQogCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygp
KSwgcmVnVDIpOwotICAgIGVtaXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7Cisg
ICAgc3RvcmUzMihyZWdUMSwgcmVnaXN0ZXJQb2ludGVyLT50YWdQb2ludGVyKCkpOworICAgIHN0
b3JlMzIocmVnVDAsIHJlZ2lzdGVyUG9pbnRlci0+cGF5bG9hZFBvaW50ZXIoKSk7CiAgICAgbWFw
KG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKSwgdmFs
dWUsIHJlZ1QxLCByZWdUMCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpT
VmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCkBAIC0xMDEwLDkgKzEwMTEs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjCiAKIHZvaWQgSklU
OjplbWl0X29wX2dldF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwotICAgIGxvYWRQdHIoJmdsb2JhbE9iamVjdC0+bV9yZWdpc3RlcnMsIHJl
Z1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOworICAgIGxvYWRQdHIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUucmVnaXN0ZXJQb2ludGVyLCByZWdUMCk7CiAgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CkBAIC0xMDIyLDExICsxMDIxLDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKEluc3RydWMKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7Ci0K
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMSwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSks
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICBlbWl0V3JpdGVC
YXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVz
LCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgCisgICAgc3RvcmVQdHIocmVn
VDAsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJlZ2lzdGVyUG9pbnRlcik7CisgICAgaWYgKEhl
YXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKQorICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGds
b2JhbE9iamVjdCwgcmVnVDAsIHJlZ1QyLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBXcml0ZUJh
cnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CiB9CiAKIHZvaWQgSklUOjpyZXNldFBhdGNoR2V0QnlJ
ZChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTEwNDEsMTMgKzEwNDEsMTAgQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFyOgog
CiBfbGxpbnRfb3BfZ2V0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxv
YWRpIDhbUENdLCB0MQorICAgIGxvYWRwIDhbUENdLCB0MAogICAgIGxvYWRpIDRbUENdLCB0Mwot
ICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9i
YWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3JlZ2lzdGVyc1t0
MF0sIHQwCi0gICAgbG9hZGkgVGFnT2Zmc2V0W3QwLCB0MSwgOF0sIHQyCi0gICAgbG9hZGkgUGF5
bG9hZE9mZnNldFt0MCwgdDEsIDhdLCB0MQorICAgIGxvYWRpIFRhZ09mZnNldFt0MF0sIHQyCisg
ICAgbG9hZGkgUGF5bG9hZE9mZnNldFt0MF0sIHQxCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRb
Y2ZyLCB0MywgOF0KICAgICBzdG9yZWkgdDEsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MywgOF0KICAg
ICBsb2FkaSAxMltQQ10sIHQzCkBAIC0xMDU4LDE0ICsxMDU1LDExIEBAIF9sbGludF9vcF9nZXRf
Z2xvYmFsX3ZhcjoKIF9sbGludF9vcF9wdXRfZ2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlv
bigpCiAgICAgbG9hZGkgOFtQQ10sIHQxCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0g
ICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCi0gICAgbG9hZHAgSlNH
bG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKKyAgICBsb2FkaSA0W1BDXSwgdDAKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCi0gICAgbG9hZGkgNFtQQ10sIHQx
CiAgICAgd3JpdGVCYXJyaWVyKHQyLCB0MykKLSAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFt0MCwg
dDEsIDhdCi0gICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KKyAgICBzdG9y
ZWkgdDIsIFRhZ09mZnNldFt0MF0KKyAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbdDBdCiAg
ICAgZGlzcGF0Y2goMykKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTE5NjA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTg5NSwyOCArODk1LDIyIEBAIF9sbGludF9vcF9wdXRfc2NvcGVkX3Zh
cjoKIAogX2xsaW50X29wX2dldF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAg
ICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDEKKyAgICBsb2FkcCAxNltQQiwgUEMsIDhdLCB0MAog
ICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQzCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQw
Ci0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCi0gICAgbG9hZHAg
SlNHbG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKLSAgICBsb2FkcCBbdDAsIHQxLCA4
XSwgdDIKLSAgICBzdG9yZXAgdDIsIFtjZnIsIHQzLCA4XQotICAgIGxvYWRwIDI0W1BCLCBQQywg
OF0sIHQzCi0gICAgdmFsdWVQcm9maWxlKHQyLCB0MykKKyAgICBsb2FkcCBbdDBdLCB0MQorICAg
IHN0b3JlcCB0MSwgW2NmciwgdDMsIDhdCisgICAgbG9hZHAgMjRbUEIsIFBDLCA4XSwgdDAKKyAg
ICB2YWx1ZVByb2ZpbGUodDEsIHQwKQogICAgIGRpc3BhdGNoKDQpCiAKIAogX2xsaW50X29wX3B1
dF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaXMgMTZbUEIsIFBD
LCA4XSwgdDEKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9y
ZWdpc3RlcnNbdDBdLCB0MAorICAgIGxvYWRwIDhbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHQxLCB0MikKLSAgICBsb2FkaXMgOFtQQiwgUEMsIDhdLCB0MQogICAg
IHdyaXRlQmFycmllcih0MikKLSAgICBzdG9yZXAgdDIsIFt0MCwgdDEsIDhdCisgICAgc3RvcmVw
IHQyLCBbdDBdCiAgICAgZGlzcGF0Y2goMykKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENs
YXNzSW5mbyBKU0dsb2JhbE9iamVjdDo6c19pbmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkpTVmFy
aWFibGVPYmplY3Q6OnNfaW5mbywgMCwgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZSwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU0dsb2JhbE9iamVjdCkgfTsKK2NvbnN0IENsYXNzSW5mbyBKU0ds
b2JhbE9iamVjdDo6c19pbmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3Q6OnNfaW5mbywgMCwgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZSwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0dsb2JhbE9iamVjdCkgfTsKIAogY29uc3QgR2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUgSlNHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7ICZh
bGxvd3NBY2Nlc3NGcm9tLCAmc3VwcG9ydHNQcm9maWxpbmcsICZzdXBwb3J0c1JpY2hTb3VyY2VJ
bmZvLCAmc2hvdWxkSW50ZXJydXB0U2NyaXB0LCAmamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxl
ZCB9OwogCkBAIC0xNDgsOSArMTQ4LDkgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cHV0KEpTQ2Vs
bCogY2VsbCwgRQogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xv
YmFsT2JqZWN0Kj4oY2VsbCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAotICAgIGlmICh0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpKSkKKyAgICBpZiAoc3ltYm9sVGFibGVQdXQodGhpc09iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCiB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKQEAgLTE1OCwxMiArMTU4LDEyIEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OnB1dERpcmVjdFZpcnR1YWwoSlMKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0dsb2JhbE9iamVjdCo+KG9iamVjdCk7CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsKIAot
ICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCisgICAgaWYgKHN5
bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwgZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSlNWYWx1ZSB2YWx1ZUJlZm9yZSA9IHRoaXNPYmplY3QtPmdldERpcmVjdChleGVjLT5nbG9i
YWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAg
SlNWYXJpYWJsZU9iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICBpZiAoIXZhbHVlQmVmb3Jl
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWVBZnRlciA9IHRoaXNPYmplY3QtPmdldERpcmVjdChl
eGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIGlmICh2YWx1ZUFmdGVy
KQpAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3Bl
cnR5KEoKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9i
amVjdCo+KG9iamVjdCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgLy8gc2lsZW50bHkg
aWdub3JlIGF0dGVtcHRzIHRvIGFkZCBhY2Nlc3NvcnMgYWxpYXNpbmcgdmFycy4KLSAgICBpZiAo
ZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSAmJiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93
blByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgc2hv
dWxkVGhyb3cpOwogfQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsICZzX2luZm8pOwogICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxh
Zyk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0gICAgSlNWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgdmlzaXRJZk5lZWRlZCh2
aXNpdG9yLCAmdGhpc09iamVjdC0+bV9nbG9iYWxTY29wZUNoYWluKTsKICAgICB2aXNpdElmTmVl
ZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX21ldGhvZENhbGxEdW1teSk7CkBAIC0zOTMsMTcg
KzM5Myw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWwKICAgICB2
aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX3JlZ0V4cFN0cnVjdHVyZSk7CiAg
ICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV9zdHJpbmdPYmplY3RTdHJ1
Y3R1cmUpOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3QtPm1faW50ZXJu
YWxGdW5jdGlvblN0cnVjdHVyZSk7Ci0KLSAgICBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlckFy
cmF5KSB7Ci0gICAgICAgIC8vIE91dHNpZGUgdGhlIGV4ZWN1dGlvbiBvZiBnbG9iYWwgY29kZSwg
d2hlbiBvdXIgdmFyaWFibGVzIGFyZSB0b3JuIG9mZiwKLSAgICAgICAgLy8gd2UgY2FuIG1hcmsg
dGhlIHRvcm4tb2ZmIGFycmF5LgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2Jq
ZWN0LT5tX3JlZ2lzdGVyQXJyYXkuZ2V0KCksIHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheVNp
emUpOwotICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9yZWdpc3RlcnMpIHsKLSAgICAgICAg
Ly8gRHVyaW5nIGV4ZWN1dGlvbiBvZiBnbG9iYWwgY29kZSwgd2hlbiBvdXIgdmFyaWFibGVzIGFy
ZSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwKLSAgICAgICAgLy8gdGhlIHN5bWJvbCB0YWJsZSB0ZWxs
cyB1cyBob3cgbWFueSB2YXJpYWJsZXMgdGhlcmUgYXJlLCBhbmQgcmVnaXN0ZXJzCi0gICAgICAg
IC8vIHBvaW50cyB0byB3aGVyZSB0aGV5IGVuZCwgYW5kIHRoZSByZWdpc3RlcnMgdXNlZCBmb3Ig
ZXhlY3V0aW9uIGJlZ2luLgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0
LT5tX3JlZ2lzdGVycyAtIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuc2l6ZSgpLCB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLnNpemUoKSk7Ci0gICAgfQogfQogCiBFeGVjU3RhdGUqIEpTR2xv
YmFsT2JqZWN0OjpnbG9iYWxFeGVjKCkKQEAgLTQxMSwyNiArNDAwLDkgQEAgRXhlY1N0YXRlKiBK
U0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpCiAgICAgcmV0dXJuIENhbGxGcmFtZTo6Y3JlYXRl
KG1fZ2xvYmFsQ2FsbEZyYW1lICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsK
IH0KIAotdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzaXplUmVnaXN0ZXJzKHNpemVfdCBuZXdTaXpl
KQotewotICAgIC8vIFByZXZpb3VzIGR1cGxpY2F0ZSBzeW1ib2xzIG1heSBoYXZlIGNyZWF0ZWQg
c3BhcmUgY2FwYWNpdHkgaW4gbV9yZWdpc3RlckFycmF5LgotICAgIGlmIChuZXdTaXplIDw9IG1f
cmVnaXN0ZXJBcnJheVNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBvbGRTaXpl
ID0gbV9yZWdpc3RlckFycmF5U2l6ZTsKLSAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5r
bm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVu
a25vd24+W25ld1NpemVdKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9sZFNpemU7ICsr
aSkKLSAgICAgICAgcmVnaXN0ZXJBcnJheVtpXS5zZXQoZ2xvYmFsRGF0YSgpLCB0aGlzLCBtX3Jl
Z2lzdGVyQXJyYXlbaV0uZ2V0KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwg
bmV3U2l6ZTsgKytpKQotICAgICAgICByZWdpc3RlckFycmF5W2ldLnNldFVuZGVmaW5lZCgpOwot
Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMgPSByZWdpc3RlckFycmF5Lmdl
dCgpOwotICAgIHNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lzdGVyQXJyYXkucmVsZWFzZSgp
LCBuZXdTaXplKTsKLX0KLQogdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhH
bG9iYWxQcm9wZXJ0eUluZm8qIGdsb2JhbHMsIGludCBjb3VudCkKIHsKLSAgICByZXNpemVSZWdp
c3RlcnMoc3ltYm9sVGFibGUoKS5zaXplKCkgKyBjb3VudCk7CisgICAgYWRkUmVnaXN0ZXJzKGNv
dW50KTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8mIGdsb2JhbCA9IGdsb2JhbHNbaV07CkBAIC00NDYsMTcgKzQxOCwx
NyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsCiBib29sIEpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAg
ICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNl
bGwpOwotICAgIGlmIChnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNWYXJpYWJsZU9iamVjdD4oZXhl
YywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KSkKKyAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUoZXhlYyks
IHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogfQogCiBib29sIEpTR2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwotICAgIGlm
IChnZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhl
Y1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSkKKyAgICBpZiAoZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUo
ZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpj
bGVhclJhcmVEYXRhKEpTQ2VsbCogY2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0dsb2Jh
bERhdGEuaCIKICNpbmNsdWRlICJKU0dsb2JhbFRoaXMuaCIKLSNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiCiAjaW5jbHVkZSAiTnVtYmVyUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCkBAIC03NCw3ICs3NCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBKYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkRnVuY3Rp
b25QdHIgamF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZDsKICAgICB9OwogCi0gICAgY2xhc3Mg
SlNHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNWYXJpYWJsZU9iamVjdCB7CisgICAgY2xhc3MgSlNH
bG9iYWxPYmplY3QgOiBwdWJsaWMgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB7CiAgICAgcHJp
dmF0ZToKICAgICAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxPcGFxdWVKU1dlYWtPYmplY3RN
YXA+ID4gV2Vha01hcFNldDsKIApAQCAtOTAsNyArOTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHByb3RlY3RlZDoKIAotICAgICAgICBzaXplX3QgbV9yZWdpc3RlckFycmF5U2l6ZTsKICAg
ICAgICAgUmVnaXN0ZXIgbV9nbG9iYWxDYWxsRnJhbWVbUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplXTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG1fZ2xv
YmFsU2NvcGVDaGFpbjsKQEAgLTE2NCw3ICsxNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgfQogICAgICAgICAKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgSlNWYXJpYWJsZU9i
amVjdCBCYXNlOworICAgICAgICB0eXBlZGVmIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgQmFz
ZTsKIAogICAgICAgICBzdGF0aWMgSlNHbG9iYWxPYmplY3QqIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICB7CkBAIC0xNzcsOCAr
MTc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGV4cGxp
Y2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSA9IDApCi0gICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSwgMCkKLSAgICAgICAgICAgICwgbV9yZWdpc3RlckFy
cmF5U2l6ZSgwKQorICAgICAgICAgICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAsIG1fZ2xvYmFs
U2NvcGVDaGFpbigpCiAgICAgICAgICAgICAsIG1fd2Vha1JhbmRvbShzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpICsgMS4wKSkpCiAgICAgICAgICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKQEAgLTMwOCw4
ICszMDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRFdmFsRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9ldmFsRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICAgICAgYm9vbCBl
dmFsRW5hYmxlZCgpIHsgcmV0dXJuIG1fZXZhbEVuYWJsZWQ7IH0KIAotICAgICAgICB2b2lkIHJl
c2l6ZVJlZ2lzdGVycyhzaXplX3QgbmV3U2l6ZSk7Ci0KICAgICAgICAgdm9pZCByZXNldFByb3Rv
dHlwZShKU0dsb2JhbERhdGEmLCBKU1ZhbHVlIHByb3RvdHlwZSk7CiAKICAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKCkgY29uc3QgeyByZXR1cm4gKkhlYXA6OmhlYXAodGhpcyktPmds
b2JhbERhdGEoKTsgfQpAQCAtMzM0LDcgKzMzMCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBkb3VibGUgd2Vha1JhbmRvbU51bWJlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXQoKTsg
fQogICAgIHByb3RlY3RlZDoKIAotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTVmFyaWFibGVPYmplY3Q6OlN0
cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgICAgIHN0cnVjdCBHbG9iYWxQcm9wZXJ0eUluZm8gewog
ICAgICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKGNvbnN0IElkZW50aWZpZXImIGksIEpTVmFs
dWUgdiwgdW5zaWduZWQgYSkKQEAgLTM1OSw3ICszNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICB2b2lkIGNyZWF0ZVRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSopOwogCi0gICAgICAg
IHZvaWQgc2V0UmVnaXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJzLCBQYXNz
T3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSwgc2l6ZV90
IGNvdW50KTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2xlYXJSYXJl
RGF0YShKU0NlbGwqKTsKICAgICB9OwogCkBAIC0zNzEsMTkgKzM2NiwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGFzT2JqZWN0KHZh
bHVlKSk7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnNldFJlZ2lz
dGVycyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdy
aXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCkKLSAgICB7
Ci0gICAgICAgIEpTVmFyaWFibGVPYmplY3Q6OnNldFJlZ2lzdGVycyhyZWdpc3RlcnMsIHJlZ2lz
dGVyQXJyYXkpOwotICAgICAgICBtX3JlZ2lzdGVyQXJyYXlTaXplID0gY291bnQ7Ci0gICAgfQot
CiAgICAgaW5saW5lIGJvb2wgSlNHbG9iYWxPYmplY3Q6Omhhc093blByb3BlcnR5Rm9yV3JpdGUo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogICAgIHsKICAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIGlmIChKU1ZhcmlhYmxlT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAg
aWYgKEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGJvb2wgc2xvdElzV3JpdGVhYmxlOwotICAgICAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90LCBzbG90SXNXcml0ZWFibGUpOworICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGVHZXQodGhpcywgcHJvcGVydHlOYW1lLCBzbG90LCBzbG90SXNXcml0ZWFibGUpOwog
ICAgIH0KIAogICAgIGlubGluZSBib29sIEpTR2xvYmFsT2JqZWN0OjpzeW1ib2xUYWJsZUhhc1By
b3BlcnR5KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW50IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6
OmZpbmRSZWdpc3RlckluZGV4KHZvaWQqIHJlZ2lzdGVyQWRkcmVzcykKK3sKKyAgICBmb3IgKGlu
dCBpID0gbV9yZWdpc3RlcnMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICgmbV9yZWdpc3Rl
cnNbaV0gIT0gcmVnaXN0ZXJBZGRyZXNzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHJldHVybiBpOworICAgIH0KKyAgICBDUkFTSCgpOworfQorCitpbnQgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6YWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQorewor
ICAgIEFTU0VSVChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOworICAgIAorICAgIHNpemVf
dCBvbGRTaXplID0gbV9yZWdpc3RlcnMuc2l6ZSgpOworICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xk
U2l6ZSArIG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkg
PSBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQorICAgICAgICBtX3JlZ2lzdGVyc1tvbGRT
aXplICsgaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKK30KKwordm9pZCBKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHNsb3RWaXNpdG9yKQoreworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBK
U1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9y
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycy5z
aXplKCk7IGktLTspCisgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9y
ZWdpc3RlcnNbaV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdF9oCisjZGVmaW5lIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3RfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJK
U1N5bWJvbFRhYmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJT
eW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFJlZ2lzdGVyOworCisvLyBUaGlzIGlzIGEgbW9zdGx5
IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIEpTVmFyaWFibGVPYmplY3QsIGV4Y2VwdCB0aGF0IGl0
IHByZXNlcnZlcworLy8gdGhlIGludmFyaWFudCB0aGF0IGFmdGVyIGEgdmFyaWFibGUgaXMgY3Jl
YXRlZCwgaXRzIGFkZHJlc3MgaW4gbWVtb3J5IHdpbGwgbm90IGNoYW5nZQorLy8gc28gbG9uZyBh
cyB0aGUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBpcyBhbGl2ZS4gVGhpcyBhbGxvd3Mgb3B0
aW1pemF0aW9ucyBiYXNlZAorLy8gb24gZ2V0dGluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdmFyaWFi
bGUgYW5kIHJlbWVtYmVyaW5nIGl0LiBBcyB3ZWxsLCB1bmxpa2UgYQorLy8gSlNWYXJpYWJsZU9i
amVjdCwgdGhpcyB3aWxsIG1hbmFnZSB0aGUgbWVtb3J5IGZvciB0aGUgcmVnaXN0ZXJzIGl0c2Vs
ZiBhbmQgbmVpdGhlcgorLy8gcmVxdWlyZXMgbm9yIGFsbG93cyBmb3IgdGhlIHN1YmNsYXNzZXMg
dG8gbWFuYWdlIHRoYXQgbWVtb3J5LiBGaW5hbGx5LAorLy8gSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdCBoYXMgaXRzIG93biBHQyB0cmFjaW5nIGZ1bmN0aW9uYWxpdHksIHNpbmNlIGl0IGtub3dz
IHRoZQorLy8gZXhhY3QgZGltZW5zaW9ucyBvZiB0aGUgdmFyaWFibGVzIGFycmF5IGF0IGFsbCB0
aW1lcy4KKworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU1N5bWJv
bFRhYmxlT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTU3ltYm9sVGFi
bGVPYmplY3QgQmFzZTsKKworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChp
bnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgYSBzbG93IG1ldGhvZCBjYWxsLCB3aGljaCBzZWFyY2hlcyB0aGUgcmVnaXN0ZXIgYmFu
ayB0byBmaW5kIHRoZSBpbmRleAorICAgIC8vIGdpdmVuIGEgcG9pbnRlci4gSXQgd2lsbCBDUkFT
SCgpIGlmIGl0IGRvZXMgbm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBPbmx5IHVzZSB0aGlzCisgICAg
Ly8gaW4gZGVidWcgY29kZSAobGlrZSBieXRlY29kZSBkdW1waW5nKS4KKyAgICBKU19FWFBPUlRf
UFJJVkFURSBpbnQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOworICAgIAorICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09iamVjdChXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50ZXIpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CisgICAgfQorICAgIAorICAgIC8vIEFkZHMgbnVt
YmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxpemVzIHRoZW0gdG8gVW5kZWZp
bmVkLCBhbmQgcmV0dXJucworICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFkZGVk
LgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVn
aXN0ZXJzVG9BZGQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworcHJvdGVjdGVkOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgICAgICA6IEpTU3ltYm9sVGFi
bGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisg
ICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICB9CisK
KyAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+LCAxNj4gbV9yZWdpc3Rl
cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDEzICs2NiwxMyBAQCB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1
dChKU0NlbGwqIGNlCiAgICAgICAgIC8vIGEgcG9pbnRlciBjb21wYXJlLgogICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYm9vbCBpc1dyaXRhYmxlID0gdHJ1ZTsKLSAgICAgICAg
dGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90LCBpc1dyaXRhYmxl
KTsKKyAgICAgICAgc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
LCBpc1dyaXRhYmxlKTsKICAgICAgICAgaWYgKCFpc1dyaXRhYmxlKSB7CiAgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXQoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCisgICAgaWYgKHN5bWJvbFRhYmxlUHV0KHRo
aXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04
MSw3ICs4MSw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEpTQ2VsbCogY2UKIHZv
aWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgSlNTdGF0aWNTY29wZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAo
dGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhleGVjLT5nbG9iYWxEYXRh
KCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQorICAgIGlmIChzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBKU1N0YXRpY1Njb3Bl
T2JqZWN0OjpwdXREaXJlY3RWaXJ0dQogCiBib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICByZXR1cm4ganNDYXN0PEpTU3Rh
dGljU2NvcGVPYmplY3QqPihjZWxsKS0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90
KTsKKyAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQoanNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3Qq
PihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTU3ltYm9sVGFibGVPYmplY3QuaCIKKworI2luY2x1ZGUgIkpT
QWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNT
dGF0aWNTY29wZU9iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKS0+
SlNTeW1ib2xUYWJsZU9iamVjdDo6fkpTU3ltYm9sVGFibGVPYmplY3QoKTsKK30KKworYm9vbCBK
U1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBKU1N5bWJvbFRhYmxl
T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjZWxsKTsK
KyAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5jb250YWlucyhwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOworfQor
Cit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4ob2JqZWN0KTsKKyAgICBTeW1i
b2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5l
bmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmpl
Y3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlm
ICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICB9CisgICAgCisgICAgSlNP
YmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7Cit9CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6cHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgSlNTeW1ib2xUYWJsZU9i
amVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSBjb25zdAor
eworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxPYmplY3RUeXBlOgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNH
bG9iYWxPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tz
KTsKKyAgICBjYXNlIEFjdGl2YXRpb25PYmplY3RUeXBlOgorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNBY3RpdmF0aW9uKj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVz
RHluYW1pY0NoZWNrcyk7CisgICAgY2FzZSBTdGF0aWNTY29wZU9iamVjdFR5cGU6CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0YXRpY1Njb3BlT2JqZWN0Kj4odGhpcyktPmlz
RHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTU3ltYm9s
VGFibGVPYmplY3RfaAorI2RlZmluZSBKU1N5bWJvbFRhYmxlT2JqZWN0X2gKKworI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCisjaW5jbHVkZSAi
U3ltYm9sVGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTU3ltYm9sVGFibGVP
YmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
KCkgY29uc3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBO
T19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwor
ICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCosIEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAgICAKKyAgICBib29sIGlzRHlu
YW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CisgICAgCitwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTTm9uRmluYWxPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
ICAgIAorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAgICAgICA6
IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fc3lt
Ym9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBBU1NFUlQobV9zeW1ib2xUYWJs
ZSk7CisgICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3lt
Ym9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAorICAg
IFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAgICAgICBvYmplY3QtPnJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERv
bnREZWxldGUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1i
b2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKKyAgICBTeW1i
b2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90LAorICAgIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKK3sKKyAgICBTeW1i
b2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdC0+cmVnaXN0ZXJBdChlbnRy
eS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdElzV3JpdGVhYmxlID0gIWVudHJ5LmlzUmVh
ZE9ubHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9s
VGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCisgICAgU3ltYm9s
VGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBib29sIHNob3VsZFRocm93KQoreworICAg
IEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
b2JqZWN0KSk7CisgICAgCisgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG9iamVjdC0+c3lt
Ym9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYg
KGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVudHJ5Lmlz
UmVhZE9ubHkoKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5
LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZhbHVlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5s
aW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcygKKyAgICBTeW1ib2xUYWJsZU9i
amVjdFR5cGUqIG9iamVjdCwgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLAorICAgIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7
CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKG9iamVjdCkpOworICAgIAorICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVy
ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7
CisgICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7
CisgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CisgICAgZW50cnkuc2V0QXR0cmlidXRlcyhh
dHRyaWJ1dGVzKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0
KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTU3ltYm9sVGFibGVPYmplY3RfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0
LmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEyICsy
OSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5o
IgogCi0jaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3Qu
aCIKLSNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCi0jaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKLQogbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgSlNWYXJpYWJsZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBA
IC00Miw1NyArMzYsNCBAQCB2b2lkIEpTVmFyaWFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBj
CiAgICAgc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwpLT5KU1ZhcmlhYmxlT2Jq
ZWN0Ojp+SlNWYXJpYWJsZU9iamVjdCgpOwogfQogCi1ib29sIEpTVmFyaWFibGVPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQotewotICAgIEpTVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci19Ci0KLXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKLXsKLSAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3Qq
PihvYmplY3QpOwotICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0aGlzT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwotICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkgJiBEb250
RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQoKSkpOwot
ICAgIH0KLSAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotYm9vbCBKU1ZhcmlhYmxlT2JqZWN0
OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHN5bWJv
bFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmICgh
ZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKHJlZ2lz
dGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSB8IERv
bnREZWxldGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkKQotewotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEpTVmFyaWFibGVPYmplY3Q6OmlzRHluYW1p
Y1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewotICAgIGNhc2UgR2xvYmFsT2JqZWN0
VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTR2xvYmFsT2JqZWN0Kj4o
dGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAgY2FzZSBB
Y3RpdmF0aW9uT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpT
QWN0aXZhdGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3Mp
OwotICAgIGNhc2UgU3RhdGljU2NvcGVPYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSlNTdGF0aWNTY29wZU9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShy
ZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEpTVmFyaWFibGVPYmplY3RfaAog
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N5bWJvbFRhYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNDEsNDAgKzQyLDI1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBjbGFzcyBSZWdpc3RlcjsK
IAotICAgIGNsYXNzIEpTVmFyaWFibGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CisgICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU1N5bWJvbFRhYmxlT2JqZWN0
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgY29u
c3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KLQotICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAgICAgIHN0YXRpYyBOT19SRVRV
Uk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotCi0gICAg
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAgICAgIAotICAgICAgICBib29s
IGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CisgICAg
ICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCiAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
aXN0ZXJzW2luZGV4XTsgfQogCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogY29uc3Qg
KiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAmbV9yZWdpc3RlcnM7IH0KICAg
ICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1ZhcmlhYmxlT2JqZWN0LCBtX3JlZ2lzdGVycyk7IH0KIAotICAgICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhWYXJpYWJsZU9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKICAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBKU05vbkZpbmFsT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNTeW1ib2xUYWJs
ZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgSlNWYXJpYWJsZU9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCi0gICAgICAgICAgICA6IEpTTm9uRmlu
YWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICAgICAgICAgLCBtX3N5bWJvbFRh
YmxlKHN5bWJvbFRhYmxlKQorICAgICAgICAgICAgOiBKU1N5bWJvbFRhYmxlT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSwgc3ltYm9sVGFibGUpCiAgICAgICAgICAgICAsIG1fcmVnaXN0ZXJz
KHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4ocmVnaXN0ZXJzKSkKICAg
ICAgICAgewogICAgICAgICB9CkBAIC04Miw3NiArNjgsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAg
ICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3N5bWJvbFRhYmxlKTsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHNpemVvZihSZWdpc3RlciksIFJl
Z2lzdGVyX3Nob3VsZF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJyaWVyKTsKICAgICAgICAgfQog
CiAgICAgICAgIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBjb3B5UmVn
aXN0ZXJBcnJheShKU0dsb2JhbERhdGEmLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHNyYywgc2l6
ZV90IGNvdW50LCBzaXplX3QgY2FsbGZyYW1lU3RhcnRzKTsKICAgICAgICAgdm9pZCBzZXRSZWdp
c3RlcnMoV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NPd25BcnJheVB0cjxX
cml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5KTsKIAotICAgICAgICBib29sIHN5
bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7Ci0gICAgICAgIGJvb2wgc3ltYm9s
VGFibGVQdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKEpTR2xvYmFs
RGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0KLSAg
ICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7IC8vIE1hcHMgbmFtZSAtPiBvZmZzZXQg
ZnJvbSAiciIgaW4gcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBtX3JlZ2lzdGVyczsgLy8gInIiIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgICAgICBPd25B
cnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBtX3JlZ2lzdGVyQXJyYXk7IC8vIEluZGVw
ZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2YXJpYWJsZSBvYmplY3QgY29w
aWVzIGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBmaWxlLgogICAgIH07CiAKLSAg
ICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0gICAgewotICAgICAgICBTeW1i
b2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIHNsb3Quc2V0VmFsdWUocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVH
ZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBib29sJiBz
bG90SXNXcml0ZWFibGUpCi0gICAgewotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0g
c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAg
ICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUocmVn
aXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7Ci0gICAgICAgICAgICBzbG90SXNXcml0
ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29s
IEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKLSAg
ICB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEo
KTsKLSAgICAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKLQotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5
ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0g
ICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRo
cm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRh
LCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlubGlu
ZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFIZWFw
OjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsK
LQotICAgICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlKCkuZmlu
ZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gc3ltYm9s
VGFibGUoKS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU3ltYm9s
VGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVCghZW50cnku
aXNOdWxsKCkpOwotICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAg
ICAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIGlubGluZSBQYXNzT3du
QXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gSlNWYXJpYWJsZU9iamVjdDo6Y29weVJl
Z2lzdGVyQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHNyYywgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FsbGZyYW1lU3RhcnRzKQogICAgIHsKICAg
ICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJBcnJheSA9
IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPltjb3VudF0pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHJldmlzaW9u
IDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gdS5zbG90OwogICAgIH0KICAgICAKKyAgICBpbnQzMl90KiB0YWdQb2ludGVyKCkgeyByZXR1
cm4gJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4oJm1fdmFsdWUpLT5hc0Jp
dHMudGFnOyB9CisgICAgaW50MzJfdCogcGF5bG9hZFBvaW50ZXIoKSB7IHJldHVybiAmYml0d2lz
ZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPigmbV92YWx1ZSktPmFzQml0cy5wYXlsb2Fk
OyB9CisgICAgCiAgICAgdHlwZWRlZiBKU1ZhbHVlIChXcml0ZUJhcnJpZXJCYXNlOjoqVW5zcGVj
aWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25z
dCB7IHJldHVybiBnZXQoKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+
KDEpIDogMDsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgpOyB9
IApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjA3KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDYtMDYgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHbG9iYWwgb2JqZWN0IHZhcmlh
YmxlIGFjY2Vzc2VzIHNob3VsZCBub3QgcmVxdWlyZSBhbiBleHRyYSBsb2FkCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODM4NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoIGFuZCBHZW9mZnJleSBHYXJlbi4KKworICAgICAg
ICBVcGRhdGVkIEpTRE9NV2luZG93QmFzZS5jcHAgdG8gdXNlIHRoZSBuZXcgc3ltYm9sIHRhYmxl
IEFQSS4gdGhpcy0+c3ltYm9sVGFibGVGb28oLi4uKQorICAgICAgICBiZWNvbWVzIHN5bWJvbFRh
YmxlRm9vKHRoaXMsIC4uLikuCisgICAgICAgICAgICAgICAgCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6
OnVwZGF0ZURvY3VtZW50KToKKwogMjAxMi0wNi0wNiAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogUmVuYW1lIElEQkZhY3RvcnkuZ2V0RGF0
YWJhc2VOYW1lcygpIHRvIHdlYmtpdEdldERhdGFiYXNlTmFtZXMoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAxMTk2
MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjp1cGRh
dGVEb2N1bWVudCgpCiB7CiAgICAgQVNTRVJUKG1faW1wbC0+ZG9jdW1lbnQoKSk7CiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsRXhlYygpOwotICAgIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJp
YnV0ZXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsICJkb2N1bWVudCIpLCB0
b0pTKGV4ZWMsIHRoaXMsIG1faW1wbC0+ZG9jdW1lbnQoKSksIERvbnREZWxldGUgfCBSZWFkT25s
eSk7CisgICAgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyh0aGlzLCBleGVjLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoZXhlYywgImRvY3VtZW50IiksIHRvSlMoZXhlYywgdGhpcywgbV9p
bXBsLT5kb2N1bWVudCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKIH0KIAogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogSlNET01XaW5kb3dCYXNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QK
</data>
<flag name="commit-queue"
          id="153371"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146124</attachid>
            <date>2012-06-06 15:22:34 -0700</date>
            <delta_ts>2012-06-06 16:50:59 -0700</delta_ts>
            <desc>with mac build fixes</desc>
            <filename>globalobj_patch_12.diff</filename>
            <type>text/plain</type>
            <size>91395</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBA
QAorMjAxMi0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2ggYW5kIEdlb2Zm
cmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRlZCB0
byBhY2Nlc3MgYSBnbG9iYWwgdmFyaWFibGUsIHlvdSdkIGZpcnN0IGhhdmUKKyAgICAgICAgdG8g
bG9hZCB0aGUgcmVnaXN0ZXIgYXJyYXkgZnJvbSB0aGUgYXBwcm9wcmlhdGUgZ2xvYmFsIG9iamVj
dCBhbmQgdGhlbgorICAgICAgICBlaXRoZXIgbG9hZCBvciBzdG9yZSBhdCBhbiBvZmZzZXQgdG8g
dGhlIHJlZ2lzdGVyIGFycmF5LiBUaGlzIGlzIGJlY2F1c2UKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QgaW5oZXJpdGVkIGZyb20gSlNWYXJpYWJsZU9iamVjdCwgYW5kIEpTVmFyaWFibGVPYmplY3Qg
aXMKKyAgICAgICAgZGVzaWduZWQgd2l0aCB0aGUgcGVzc2ltaXN0aWMgYXNzdW1wdGlvbiB0aGF0
IGl0cyByZWdpc3RlciBhcnJheSBtYXkKKyAgICAgICAgcG9pbnQgaW50byB0aGUgY2FsbCBzdGFj
ay4gVGhpcyBpcyBuZXZlciB0aGUgY2FzZSBmb3IgZ2xvYmFsIG9iamVjdHMuCisgICAgICAgIEhl
bmNlLCBldmVuIHRob3VnaCB0aGUgZ2xvYmFsIG9iamVjdCBtYXkgYWRkIG1vcmUgcmVnaXN0ZXJz
IGF0IGFueSB0aW1lLAorICAgICAgICBpdCBkb2VzIG5vdCBuZWVkIHRvIHN0b3JlIHRoZW0gaW4g
YSBjb250aWd1b3VzIGFycmF5LiBJdCBjYW4gdXNlIGEKKyAgICAgICAgU2VnbWVudGVkVmVjdG9y
IG9yIHNpbWlsYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBnbG9i
YWwgb2JqZWN0cyBhbmQgdmFyaWFibGUgb2JqZWN0cyBhcyBmb2xsb3dzOgorICAgICAgICAKKyAg
ICAgICAgLSBUaGUgZnVuY3Rpb25hbGl0eSB0byB0cmFjayB2YXJpYWJsZXMgaW4gYW4gaW5kZXhh
YmxlIGFycmF5IHVzaW5nIGEKKyAgICAgICAgICBTeW1ib2xUYWJsZSB0byBtYXAgbmFtZXMgdG8g
aW5kaWNlcyBpcyBtb3ZlZCBpbnRvIEpTU3ltYm9sVGFibGVPYmplY3QsCisgICAgICAgICAgd2hp
Y2ggaXMgbm93IGEgc3VwZXJ0eXBlIG9mIEpTVmFyaWFibGVPYmplY3QuIEpTVmFyaWFibGVPYmpl
Y3QgaXMgbm93CisgICAgICAgICAganVzdCBhIGhvbGRlciBmb3IgYSByZWdpc3RlcnMgYXJyYXkg
YW5kIGltcGxlbWVudHMgdGhlIHJlZ2lzdGVyQXQoKQorICAgICAgICAgIG1ldGhvZCB0aGF0IGlz
IGxlZnQgYWJzdHJhY3QgaW4gSlNTeW1ib2xUYWJsZU9iamVjdC4gQmVjYXVzZSBhbGwgdXNlcnMK
KyAgICAgICAgICBvZiBKU1ZhcmlhYmxlT2JqZWN0IGtub3cgd2hldGhlciB0aGV5IGFyZSBhIEpT
U3RhdGljU2NvcGVPYmplY3QsCisgICAgICAgICAgSlNBY3RpdmF0aW9uLCBvciBKU0dsb2JhbE9i
amVjdCwgdGhpcyAiYWJzdHJhY3QiIG1ldGhvZCBpcyBub3QgdmlydHVhbDsKKyAgICAgICAgICBp
bnN0ZWFkIHRoZSB1dGlsaXR5IG1ldGhvZHMgdGhhdCB3b3VsZCBjYWxsIHJlZ2lzdGVyQXQoKSBh
cmUgbm93CisgICAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSB5b3UgdG8g
a25vdyBzdGF0aWNhbGx5IHdoYXQgc3VidHlwZSBvZgorICAgICAgICAgIEpTU3ltYm9sVGFibGVP
YmplY3QgeW91J3JlIHVzaW5nIChKU1ZhcmlhYmxlT2JqZWN0IG9yIHNvbWV0aGluZyBlbHNlKSwK
KyAgICAgICAgICBzbyB0aGF0IHJlZ2lzdGVyQXQoKSBjYW4gYmUgc3RhdGljYWxseSBib3VuZC4K
KyAgICAgICAgCisgICAgICAgIC0gQSBuZXcgY2xhc3MgaXMgYWRkZWQgY2FsbGVkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QsIHdoaWNoIG9ubHkKKyAgICAgICAgICBkaWZmZXJzIGZyb20gSlNW
YXJpYWJsZU9iamVjdCBpbiBob3cgaXQgYWxsb2NhdGVzIHJlZ2lzdGVycy4gSXQgdXNlcyBhCisg
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yIGluc3RlYWQgb2YgbWFudWFsbHkgbWFuYWdpbmcgYSBw
b2ludGVyIHRvIGEgY29udGlndW91cworICAgICAgICAgIHNsYWIgb2YgcmVnaXN0ZXJzLiBUaGlz
IGNoYW5nZXMgdGhlIGludGVyZmFjZSBzb21ld2hhdDsgZm9yIGV4YW1wbGUKKyAgICAgICAgICB3
aXRoIEpTVmFyaWFibGVPYmplY3QgaWYgeW91IHdhbnRlZCB0byBhZGQgYSByZWdpc3RlciB5b3Ug
aGFkIHRvIGRvCisgICAgICAgICAgaXQgeW91cnNlbGYgc2luY2UgdGhlIEpTVmFyaWFibGVPYmpl
Y3QgZGlkbid0IGtub3cgaG93IHRoZSByZWdpc3RlcnMKKyAgICAgICAgICBhcnJheSBvdWdodCB0
byBiZSBhbGxvY2F0ZWQuIFdpdGggSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB5b3UgY2FuCisg
ICAgICAgICAganVzdCBjYWxsIGFkZFJlZ2lzdGVycygpLiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IHByZXNlcnZlcyB0aGUKKyAgICAgICAgICBpbnZhcmlhbnQgdGhhdCBvbmNlIHlvdSBnZXQg
YSBwb2ludGVyIGludG8gYSByZWdpc3RlciwgdGhhdCBwb2ludGVyCisgICAgICAgICAgd2lsbCBj
b250aW51ZSB0byBiZSB2YWxpZCBzbyBsb25nIGFzIHRoZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IGlzCisgICAgICAgICAgYWxpdmUuIFRoaXMgYWxsb3dzIHRoZSBKSVRzIGFuZCBpbnRlcnBy
ZXRlcnMgdG8gc2tpcCB0aGUgZXh0cmEgbG9hZC4KKyAgICAgICAgCisgICAgICAgIC0gSlNHbG9i
YWxPYmplY3Qgbm93IGluaGVyaXRzIGZyb20gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC4gRm9y
IG5vdworICAgICAgICAgIChhbmQgcG9zc2libHkgZm9yZXZlcikgaXQgaXMgdGhlIG9ubHkgc3Vi
dHlwZSBvZiB0aGlzIG5ldyBjbGFzcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGJ5dGVjb2Rl
IGZvcm1hdCBpcyBjaGFuZ2VkIHNvIHRoYXQgZ2V0X2dsb2JhbF92YXIgYW5kCisgICAgICAgICAg
cHV0X2dsb2JhbF92YXIgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGRpcmVjdGx5IHJh
dGhlciB0aGFuCisgICAgICAgICAgaGF2aW5nIGFuIGluZGV4LiBBIGNvbnZlbmllbmNlIG1ldGhv
ZCBpcyBwcm92aWRlZCBpbgorICAgICAgICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgdG8g
Z2V0IHRoZSBpbmRleCBnaXZlbiBhIGEgcG9pbnRlciwgd2hpY2ggaXMKKyAgICAgICAgICB1c2Vk
IGZvciBhc3NlcnRpb25zIGFuZCBkZWJ1ZyBkdW1wcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
YXBwZWFycyB0byBiZSBhIDElIGFjcm9zcyB0aGUgYm9hcmQgd2luLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3Ry
dWN0aW9uLmg6CisgICAgICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3RydWN0
aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVyKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxh
c3RVbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoUmVzb2x2ZVJlc3VsdCk6
CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxPYmplY3RGb3IpOgor
ICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzVmFyTnVtYmVyKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1JlZ2lzdGVyUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cmVnaXN0ZXJQb2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xv
YmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0
ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0ZXJB
dCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFzc2VydFJlZ2lz
dGVySXNJblRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6
OnB1dCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJv
eSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZSk6CisgICAg
ICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJv
bFRhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVP
YmplY3Q6OkpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlR2V0KToK
KyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTVmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxl
T2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1dy
aXRlQmFycmllci5oOgorCiAyMDEyLTA2LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNv
bT4KIAogICAgICAgICBFbnN1cmUgY29uc2lzdGVudCBvcmRlciBvZiBldmFsdWF0aW9uIGluIExM
SW50IHNsb3cgcGF0aHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4NiwxMSBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvSlNPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNw
cAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKKyAgICBydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3BwCiAgICAgcnVudGltZS9KU1N0cmluZ0pv
aW5lci5jcHAKKyAgICBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCiAgICAgcnVudGlt
ZS9KU1ZhbHVlLmNwcAogICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKICAgICBydW50
aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdCdWlsZGVyLmggXApAQCAtNTA4LDYgKzUxMCw4IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSm9pbmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTQsOSArMTk0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTT05PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKKyAgICBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIFwKICAgICBy
dW50aW1lL0pTU3RyaW5nLmNwcCBcCiAgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAgXAor
ICAgIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYWx1
ZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gMTE5NjA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTg3NCw2ICs4NzQsMTQg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNTdGF0aWNTY29wZU9iamVjdC5jcHAiCiAJCQkJPgogCQkJ
PC9GaWxlPgpAQCAtODk4LDYgKzkwNiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxK
U1N5bWJvbFRhYmxlT2JqZWN0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNUeXBlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExOTYwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDEwIEBACiAJCTBGN0IyOTRCMTRDM0NE
MkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjdCMjk0QzE0QzNDRDQzMDA3QzNEQjEgLyogREZHQnl0ZUNvZGVDYWNoZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0MxNDZCRTYw
MjAwMDQ3MkE5IC8qIERGR0J5dGVDb2RlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZH
Q29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdE
IC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwICovOyB9OworCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyogSlNTeW1i
b2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkxOUQx
MDE1N0YzMzI5MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwRTE1N0YzMzI3
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi87IH07CisJCTBGOTE5
RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwRjE1N0YzMzI3
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
Y3BwICovOyB9OwogCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk0
MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTMzMjlGMTRDQTdEQ0EwMDg1RjNDNiAv
KiBHZXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAq
LzsgfTsKQEAgLTgyOCw2ICs4MzIsMTAgQEAKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjdCMjk0ODE0QzNDRDIzMDA3QzNEQjEgLyogREZHQ0NhbGxIZWxwZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NDYWxsSGVscGVycy5oOyBwYXRo
ID0gZGZnL0RGR0NDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkx
OUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MTlEMEYxNTdGMzMyNzAw
NEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0
dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbExpbmtTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NDE0Q0E3REMxMDA4
NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FsbExpbmtTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMy
OTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTM0LDYgKzE5NDIsOCBAQAogCQkJCUE3Rjk5MzVEMEZENzMyNTEwMEEw
QjJEMCAvKiBKU09OT2JqZWN0LmggKi8sCiAJCQkJQTcyN0ZGNjYwREEzMDUzQjAwRTU0OEQ3IC8q
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwICovLAogCQkJCUE3MjdGRjY1MERBMzA1M0IwMEU1
NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggKi8sCisJCQkJMEY5MTlEMEUxNTdGMzMy
NzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwICovLAorCQkJCTBGOTE5
RDBGMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi8sCiAJ
CQkJQTdFNDJDMTkwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3RhdGljU2NvcGVPYmplY3QuY3BwICov
LAogCQkJCUE3RTQyQzE4MEUzOTM4ODMwMDY1QTU0NCAvKiBKU1N0YXRpY1Njb3BlT2JqZWN0Lmgg
Ki8sCiAJCQkJQkMwMkU5QjYwRTE4NDJGQTAwMEY5Mjk3IC8qIEpTU3RyaW5nLmNwcCAqLywKQEAg
LTE5NDEsNiArMTk1MSw4IEBACiAJCQkJODZFODU1MzgxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3Ry
aW5nQnVpbGRlci5oICovLAogCQkJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5jcHAgKi8sCiAJCQkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggKi8sCisJCQkJMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwICovLAorCQkJCTBGOTE5RDBBMTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJv
bFRhYmxlT2JqZWN0LmggKi8sCiAJCQkJMTRBQkI0NTQwOTlDMkEwRjAwRTJBMjRGIC8qIEpTVHlw
ZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8s
CiAJCQkJRjY5MkE4ODcwMjU1NTk3RDAxRkY2MEY3IC8qIEpTVmFsdWUuY3BwICovLApAQCAtMjY1
Nyw2ICsyNjY5LDggQEAKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgxQUQzMTU0RkI0RjAwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE2MDE1RTE1NjE5OEM5MDBDMjU4N0Mg
LyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY5MTlEMEQxNTdFRTBBMjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGOTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTMyMjksNiArMzI0Myw4IEBACiAJCQkJMEZE
ODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYxNjAxNUQxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1Qjcx
IC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjkxOUQwQzE1
N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjkxOUQxMDE1N0YzMzI5MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIzLDE1ICs5
MjMsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAg
ICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsKICAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGluZGV4ID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBnZXRfZ2xvYmFsX3Zhclx0ICVz
LCAlZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCBpbmRleCk7
CisgICAgICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgr
K2l0KS0+dS5yZWdpc3RlclBvaW50ZXI7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBnZXRf
Z2xvYmFsX3Zhclx0ICVzLCBnJWQoJXApXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCksIG1fZ2xvYmFsT2JqZWN0LT5maW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBv
aW50ZXIpLCByZWdpc3RlclBvaW50ZXIpOwogICAgICAgICAgICAgaXQrKzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKLSAg
ICAgICAgICAgIGludCBpbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSAoKytpdCktPnUucmVnaXN0ZXJQ
b2ludGVyOwogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBkYXRhTG9nKCJbJTRkXSBwdXRfZ2xvYmFsX3Zhclx0ICVkLCAlc1xuIiwgbG9jYXRpb24s
IGluZGV4LCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CisgICAgICAgICAgICBkYXRh
TG9nKCJbJTRkXSBwdXRfZ2xvYmFsX3Zhclx0IGclZCglcCksICVzXG4iLCBsb2NhdGlvbiwgbV9n
bG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJlZ2lzdGVyUG9pbnRlciksIHJlZ2lzdGVy
UG9pbnRlciwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6IHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAx
MTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBJbnN0cnVjdGlvbihMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKSB7IHUuY2FsbExp
bmtJbmZvID0gY2FsbExpbmtJbmZvOyB9CiAgICAgICAgIAogICAgICAgICBJbnN0cnVjdGlvbihW
YWx1ZVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5wcm9maWxlID0gcHJvZmlsZTsgfQorICAgICAgICAK
KyAgICAgICAgSW5zdHJ1Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50
ZXIpIHsgdS5yZWdpc3RlclBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KIAogICAgICAgICB1
bmlvbiB7CiAgICAgICAgICAgICBPcGNvZGUgb3Bjb2RlOwpAQCAtMTk4LDYgKzIwMCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlQ2hhaW4+IHN0
cnVjdHVyZUNoYWluOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+IGpzQ2Vs
bDsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyOwog
ICAgICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYzsKICAgICAg
ICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTE5NjA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsMTEgQEAgdm9pZCBSZXNvbHZlUmVz
dWx0OjpjaGVja1ZhbGlkaXR5KCkKIH0KICNlbmRpZgogCitXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IFJlc29sdmVSZXN1bHQ6OnJlZ2lzdGVyUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnJlZ2lzdGVyQXQoaW5kZXgo
KSk7Cit9CisKIHN0YXRpYyBib29sIHNfZHVtcHNHZW5lcmF0ZWRDb2RlID0gZmFsc2U7CiAKIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2Vu
ZXJhdGVkQ29kZSkKQEAgLTI4MCw3ICsyODUsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoUHJvCiAgICAgc2l6ZV90IG5ld0dsb2JhbHMgPSB2YXJTdGFjay5zaXplKCkg
KyBmdW5jdGlvblN0YWNrLnNpemUoKTsKICAgICBpZiAoIW5ld0dsb2JhbHMpCiAgICAgICAgIHJl
dHVybjsKLSAgICBnbG9iYWxPYmplY3QtPnJlc2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZS0+c2l6
ZSgpICsgbmV3R2xvYmFscyk7CisgICAgZ2xvYmFsT2JqZWN0LT5hZGRSZWdpc3RlcnMobmV3R2xv
YmFscyk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0
YWNrW2ldOwpAQCAtNjc5LDYgKzY4NCwxNCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRy
aWV2ZUxhc3RVbmFyCiAgICAgc3JjSW5kZXggPSBpbnN0cnVjdGlvbnMoKS5hdChzaXplIC0gMSku
dS5vcGVyYW5kOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RVbmFy
eU9wKFdyaXRlQmFycmllcjxVbmtub3duPiomIGRzdFBvaW50ZXIsIGludCYgc3JjSW5kZXgpCit7
CisgICAgQVNTRVJUKGluc3RydWN0aW9ucygpLnNpemUoKSA+PSAzKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKyAgICBkc3RQb2ludGVyID0gaW5zdHJ1Y3Rpb25z
KCkuYXQoc2l6ZSAtIDIpLnUucmVnaXN0ZXJQb2ludGVyOworICAgIHNyY0luZGV4ID0gaW5zdHJ1
Y3Rpb25zKCkuYXQoc2l6ZSAtIDEpLnUub3BlcmFuZDsKK30KKwogdm9pZCBBTFdBWVNfSU5MSU5F
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXdpbmRCaW5hcnlPcCgpCiB7CiAgICAgQVNTRVJUKGluc3Ry
dWN0aW9ucygpLnNpemUoKSA+PSA0KTsKQEAgLTExNzgsNyArMTE5MSw3IEBAIFJlc29sdmVSZXN1
bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICAgICAgICAgIGZsYWdzIHw9IFJlc29s
dmVSZXN1bHQ6OkR5bmFtaWNGbGFnOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gICAg
ICAgIAotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBq
c0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGN1cnJlbnRTY29wZSk7CisgICAgICAgIEpTU3ltYm9s
VGFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxl
T2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+c3ltYm9sVGFibGUoKS5nZXQocHJvcGVydHkuaW1wbCgp
KTsKIAogICAgICAgICAvLyBGb3VuZCB0aGUgcHJvcGVydHkKQEAgLTEyNDMsNyArMTI1Niw3IEBA
IFJlc29sdmVSZXN1bHQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUKICAgICAgICAgSlNPYmpl
Y3QqIGN1cnJlbnRTY29wZSA9IGl0ZXItPmdldCgpOwogICAgICAgICBpZiAoIWN1cnJlbnRTY29w
ZS0+aXNWYXJpYWJsZU9iamVjdCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEpT
VmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxl
T2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKKyAgICAgICAgSlNTeW1ib2xUYWJsZU9iamVjdCogY3Vy
cmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVPYmplY3QqPihjdXJyZW50
U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gY3VycmVudFZhcmlhYmxl
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0eS5pbXBsKCkpOwogICAgICAgICBpZiAo
ZW50cnkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE0NDYsMTYgKzE0NTks
MTYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRTdAogICAgIGNhc2Ug
UmVzb2x2ZVJlc3VsdDo6SW5kZXhlZEdsb2JhbDoKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OlJl
YWRPbmx5SW5kZXhlZEdsb2JhbDoKICAgICAgICAgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX3B1
dF9nbG9iYWxfdmFyKSB7Ci0gICAgICAgICAgICBpbnQgZHN0SW5kZXg7CisgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIGRzdFBvaW50ZXI7CiAgICAgICAgICAgICBpbnQgc3JjSW5k
ZXg7Ci0gICAgICAgICAgICByZXRyaWV2ZUxhc3RVbmFyeU9wKGRzdEluZGV4LCBzcmNJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoZHN0SW5kZXggPT0gcmVzb2x2ZVJlc3VsdC5pbmRleCgpICYmIHNy
Y0luZGV4ID09IGRzdC0+aW5kZXgoKSkKKyAgICAgICAgICAgIHJldHJpZXZlTGFzdFVuYXJ5T3Ao
ZHN0UG9pbnRlciwgc3JjSW5kZXgpOworICAgICAgICAgICAgaWYgKGRzdFBvaW50ZXIgPT0gcmVz
b2x2ZVJlc3VsdC5yZWdpc3RlclBvaW50ZXIoKSAmJiBzcmNJbmRleCA9PSBkc3QtPmluZGV4KCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgfQogCiAgICAgICAgIHByb2Zp
bGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2dsb2JhbF92YXIpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHJlc29sdmVSZXN1bHQuaW5kZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChyZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9pbnRlcigpKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwogICAgICAgICByZXR1cm4gZHN0OwogCkBAIC0xNDgzLDcg
KzE0OTYsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFN0CiAgICAg
Y2FzZSBSZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgogICAgIGNhc2UgUmVzb2x2ZVJlc3Vs
dDo6UmVhZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9nbG9i
YWxfdmFyKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQuaW5k
ZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlUmVzdWx0LnJlZ2lz
dGVyUG9pbnRlcigpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHZhbHVlLT5pbmRl
eCgpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw2ICsxOTcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaW50IGluZGV4KCkgY29uc3QgeyBBU1NFUlQgKGlzSW5kZXhlZCgpIHx8
IGlzUmVnaXN0ZXIoKSk7IHJldHVybiBtX2luZGV4OyB9CiAgICAgICAgIHNpemVfdCBkZXB0aCgp
IGNvbnN0IHsgQVNTRVJUKGlzU2NvcGVkKCkpOyByZXR1cm4gbV9kZXB0aDsgfQogICAgICAgICBK
U09iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyBBU1NFUlQoaXNHbG9iYWwoKSk7IEFTU0VS
VChtX2dsb2JhbE9iamVjdCk7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQorICAgICAgICBXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcigpIGNvbnN0OwogCiAgICAgICAgIGJv
b2wgaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIFJlZ2lzdGVyRmxhZzsgfQog
ICAgICAgICBib29sIGlzRHluYW1pYygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAmIER5bmFtaWNG
bGFnOyB9CkBAIC01NDEsNiArNTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZhbHVl
UHJvZmlsZSogZW1pdFByb2ZpbGVkT3Bjb2RlKE9wY29kZUlEKTsKICAgICAgICAgdm9pZCByZXRy
aWV2ZUxhc3RCaW5hcnlPcChpbnQmIGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMy
SW5kZXgpOwogICAgICAgICB2b2lkIHJldHJpZXZlTGFzdFVuYXJ5T3AoaW50JiBkc3RJbmRleCwg
aW50JiBzcmNJbmRleCk7CisgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChXcml0ZUJh
cnJpZXI8VW5rbm93bj4qJiBkc3RQb2ludGVyLCBpbnQmIHNyY0luZGV4KTsKICAgICAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJld2luZEJpbmFyeU9wKCk7CiAgICAgICAgIEFMV0FZU19JTkxJTkUg
dm9pZCByZXdpbmRVbmFyeU9wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDIxICsxMTUsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IEFkZHJlc3MgYWRkcmVzc0Zvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICog
c2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yR2xv
YmFsVmFyKEdQUlJlZyBnbG9iYWwsIGludDMyX3QgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEFkZHJlc3MoZ2xvYmFsLCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yR2xvYmFsVmFyKEdQUlJlZyBnbG9iYWws
IGludDMyX3QgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoZ2xvYmFs
LCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7Ci0gICAgfQotCiAgICAgc3RhdGljIEFk
ZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZpcnR1
YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjE2LDE0ICsyMjE2LDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewogICAgICAg
ICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggZ2V0R2xvYmFsVmFyID0gYWRkVG9HcmFwaChH
ZXRHbG9iYWxWYXIsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgT3BJ
bmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRHbG9iYWxWYXIgPSBh
ZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgIEdldEdsb2JhbFZhciwKKyAgICAgICAgICAgICAg
ICBPcEluZm8obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5h
c3NlcnRSZWdpc3RlcklzSW5UaGlzT2JqZWN0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LnJlZ2lz
dGVyUG9pbnRlcikpLAorICAgICAgICAgICAgICAgIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0R2xvYmFsVmFy
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9nbG9iYWxfdmFyKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKICAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCksIHZhbHVlKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoCisgICAgICAg
ICAgICAgICAgUHV0R2xvYmFsVmFyLAorICAgICAgICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRo
aXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzFdLnUucmVnaXN0ZXJQb2ludGVyKSksCisgICAg
ICAgICAgICAgICAgdmFsdWUpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2Jh
bF92YXIpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE4ICsxOTQsMTggQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUlu
ZGV4IGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgTm9kZUluZGV4IGdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CiAgICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3Ao
KSkgewogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1i
ZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNv
ZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yZWdp
c3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgpAQCAtMjE3LDcgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVs
aW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlciwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0yMjYsMTIgKzIyNiwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkp
IHsKICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgIGlm
IChub2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIApAQCAtOTgyLDEzICs5ODIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
RmluYWxseSBoYW5kbGUgaGVhcCBhY2Nlc3Nlcy4gVGhlc2UgYXJlIG5vdCBxdWl0ZSBwdXJlLCBi
dXQgd2UgY2FuIHN0aWxsCiAgICAgICAgIC8vIG9wdGltaXplIHRoZW0gcHJvdmlkZWQgdGhhdCBz
b21lIHN1YnRsZSBjb25kaXRpb25zIGFyZSBtZXQuCiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5v
ZGUudmFyTnVtYmVyKCksIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSkpOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0
aW9uKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICAgICAgaWYgKG1fZml4
cG9pbnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGVsaW1pbmF0ZShnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKG5vZGUu
dmFyTnVtYmVyKCksIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KSkpOworICAgICAgICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9k
ZS5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiwxMyBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgICAgIGRhdGFMb2coIiVzdmFyJXUi
LCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnZhck51bWJlcigpKTsKICAgICAgICAgaGFz
UHJpbnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChub2RlLmhhc1JlZ2lzdGVyUG9pbnRlcigp
KSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiJXNnbG9iYWwldSglcCkiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLAorICAgICAgICAgICAgZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29k
ZU9yaWdpbiktPmZpbmRSZWdpc3RlckluZGV4KG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLAorICAg
ICAgICAgICAgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOworICAgIH0KICAgICBpZiAobm9kZS5oYXNJZGVudGlmaWVyKCkpIHsKICAgICAgICAgZGF0
YUxvZygiJXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmll
ck51bWJlcigpLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSkudXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDExOTYwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtMzEwLDYgKzMxMCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIAorICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbik7CisgICAgfQorICAg
IAogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lKQogICAgIHsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3
ICs0MjEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFsVmFyIHx8IG9wKCkgPT0gUHV0
R2xvYmFsVmFyIHx8IG9wKCkgPT0gR2V0U2NvcGVkVmFyIHx8IG9wKCkgPT0gUHV0U2NvcGVkVmFy
OworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRTY29wZWRWYXIgfHwgb3AoKSA9PSBQdXRTY29w
ZWRWYXI7CiAgICAgfQogCiAgICAgdW5zaWduZWQgdmFyTnVtYmVyKCkKQEAgLTQyOSw2ICs0Mjks
MTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoaGFzVmFyTnVtYmVyKCkpOwogICAg
ICAgICByZXR1cm4gbV9vcEluZm87CiAgICAgfQorICAgIAorICAgIGJvb2wgaGFzUmVnaXN0ZXJQ
b2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldEdsb2JhbFZhciB8fCBv
cCgpID09IFB1dEdsb2JhbFZhcjsKKyAgICB9CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CisgICAgfQogCiAgICAgYm9vbCBo
YXNTY29wZUNoYWluRGVwdGgoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE5NjA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMzU2NCwz
MyArMzU2NSwzMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0VGFnKHRoaXMpOwogCi0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKGNvbnN0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kio+KGdsb2JhbE9iamVj
dC0+YWRkcmVzc09mUmVnaXN0ZXJzKCkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvckdsb2JhbFZhcihyZXN1bHQuZ3ByKCksIG5vZGUudmFy
TnVtYmVyKCkpLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwgbm9kZS52YXJOdW1iZXIoKSks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihub2RlLnJl
Z2lzdGVyUG9pbnRlcigpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3By
KCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5
bG9hZC5ncHIoKSwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogCi0gICAgICAgIGpzVmFsdWVSZXN1
bHQoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0R2xvYmFs
VmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICBHUFJUZW1wb3JhcnkgZ2xvYmFsT2JqZWN0KHRoaXMpOwotICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgCi0gICAgICAgIEdQUlJlZyBnbG9iYWxP
YmplY3RSZWcgPSBnbG9iYWxPYmplY3QuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgZ2xv
YmFsT2JqZWN0UmVnKTsKLQotICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVlLnRhZ0dQUigpLCBub2RlLmNoaWxkMSgpLCBXcml0
ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7CisgICAgICAgIGlmIChIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3By
KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUudGFnR1BSKCksIG5vZGUuY2hpbGQxKCks
IFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgfQog
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZ2xvYmFsT2Jq
ZWN0UmVnLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgc2NyYXRjaFJl
Zyk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjp0
YWdGb3JHbG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1iZXIoKSkpOwotICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3JH
bG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAvLyBGSVhN
RTogaWYgd2UgaGFwcGVuIHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYg
d2UgaGFwcGVuIHRvIGhhdmUKKyAgICAgICAgLy8gYSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBv
cHRpbWl6YXRpb24gd291bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2ludGVyIGludG8KKyAg
ICAgICAgLy8gYSByZWdpc3RlciBhbmQgdGhlbiBkbyBhIHplcm8gb2Zmc2V0IHN0b3JlIGZvbGxv
d2VkIGJ5IGEgZm91ci1vZmZzZXQgc3RvcmUgKG9yCisgICAgICAgIC8vIHZpY2UtdmVyc2EgZGVw
ZW5kaW5nIG9uIGVuZGlhbm5lc3MpLgorICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQ
UigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpLT50YWdQb2ludGVyKCkpOworICAgICAgICBtX2pp
dC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKS0+cGF5
bG9hZFBvaW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU5
Myw5ICszNTkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAgIG1faml0LmxvYWRQdHIoZ2xv
YmFsT2JqZWN0LT5hZGRyZXNzT2ZSZWdpc3RlcnMoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvckdsb2JhbFZhcihyZXN1bHQuZ3By
KCksIG5vZGUudmFyTnVtYmVyKCkpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKG5vZGUucmVnaXN0ZXJQb2ludGVyKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7
CkBAIC0zNjAzLDE4ICszNjAxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgZ2xv
YmFsT2JqZWN0KHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAg
ICAgICAgCi0gICAgICAgIEdQUlJlZyBnbG9iYWxPYmplY3RSZWcgPSBnbG9iYWxPYmplY3QuZ3By
KCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLQotICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9i
amVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgZ2xvYmFsT2JqZWN0UmVnKTsKLQotICAgICAgICB3
cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZhbHVl
LmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2Ny
YXRjaFJlZyk7Ci0KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhnbG9iYWxPYmplY3RSZWcsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkp
LCBzY3JhdGNoUmVnKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHNjcmF0Y2hSZWcsIG5vZGUudmFyTnVtYmVyKCkp
KTsKKyAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIo
KSwgbm9kZS5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hS
ZWcpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5n
cHIoKSwgbm9kZS5yZWdpc3RlclBvaW50ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAgICAgICAgIHN0
YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKKyAgICAgICAgc3RhdGljIGJvb2wg
aXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmll
cihjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJy
aWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdWludDhfdCogYWRk
cmVzc09mQ2FyZEZvcihKU0NlbGwqKTsKQEAgLTI4Miw2ICsyODMsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+c2V0TWFya2VkKGNlbGwp
OwogICAgIH0KIAorICAgIGlubGluZSBib29sIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
CisgICAgeworI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKKyAgICB9CisKICNpZiBFTkFCTEUoR0dDKQogICAgIGlubGluZSB1aW50OF90KiBIZWFw
OjphZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCogY2VsbCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNyArMTU0Myw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBmb3IgKFNjb3BlQ2hhaW5Ob2RlKiBub2Rl
ID0gc2NvcGVDaGFpbjsgOyBub2RlID0gbm9kZS0+bmV4dC5nZXQoKSkgewogICAgICAgICBBU1NF
UlQobm9kZSk7CiAgICAgICAgIGlmIChub2RlLT5vYmplY3QtPmlzVmFyaWFibGVPYmplY3QoKSAm
JiAhbm9kZS0+b2JqZWN0LT5pc1N0YXRpY1Njb3BlT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHZh
cmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTVmFyaWFibGVPYmplY3QqPihub2RlLT5vYmplY3QuZ2V0
KCkpOworICAgICAgICAgICAgdmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9i
amVjdCo+KG5vZGUtPm9iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTI4NjAsMzAgKzI4NjAsMjggQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJp
dmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQogICAg
IERFRklORV9PUENPREUob3BfZ2V0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgLyogZ2V0X2dsb2Jh
bF92YXIgZHN0KHIpIGdsb2JhbE9iamVjdChjKSBpbmRleChuKQorICAgICAgICAvKiBnZXRfZ2xv
YmFsX3ZhciBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIHJlZ2lzdGVyUG9pbnRlcihuKQogCiAgICAg
ICAgICAgIEdldHMgdGhlIGdsb2JhbCB2YXIgYXQgZ2xvYmFsIHNsb3QgaW5kZXggYW5kIHBsYWNl
cyBpdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICAqLwogICAgICAgICBpbnQgZHN0ID0gdlBD
WzFdLnUub3BlcmFuZDsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNjb3BlID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgQVNTRVJUKHNjb3BlLT5pc0dsb2JhbE9iamVjdCgp
KTsKLSAgICAgICAgaW50IGluZGV4ID0gdlBDWzJdLnUub3BlcmFuZDsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIgPSB2UENbMl0udS5yZWdpc3RlclBvaW50
ZXI7CiAKLSAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBzY29wZS0+cmVnaXN0
ZXJBdChpbmRleCkuZ2V0KCk7CisgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0g
cmVnaXN0ZXJQb2ludGVyLT5nZXQoKTsKICAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2dsb2JhbF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQogICAg
IERFRklORV9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgLyogcHV0X2dsb2Jh
bF92YXIgZ2xvYmFsT2JqZWN0KGMpIGluZGV4KG4pIHZhbHVlKHIpCisgICAgICAgIC8qIHB1dF9n
bG9iYWxfdmFyIGdsb2JhbE9iamVjdChjKSByZWdpc3RlclBvaW50ZXIobikgdmFsdWUocikKICAg
ICAgICAgIAogICAgICAgICAgICBQdXRzIHZhbHVlIGludG8gZ2xvYmFsIHNsb3QgaW5kZXguCiAg
ICAgICAgICAqLwogICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBjb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpOwogICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFsT2JqZWN0KCkpOwot
ICAgICAgICBpbnQgaW5kZXggPSB2UENbMV0udS5vcGVyYW5kOworICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IHZQQ1sxXS51LnJlZ2lzdGVyUG9pbnRlcjsK
ICAgICAgICAgaW50IHZhbHVlID0gdlBDWzJdLnUub3BlcmFuZDsKICAgICAgICAgCi0gICAgICAg
IHNjb3BlLT5yZWdpc3RlckF0KGluZGV4KS5zZXQoKmdsb2JhbERhdGEsIHNjb3BlLCBjYWxsRnJh
bWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7CisgICAgICAgIHJlZ2lzdGVyUG9pbnRlci0+c2V0KCpn
bG9iYWxEYXRhLCBzY29wZSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwogICAgICAg
ICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIE5FWFRf
SU5TVFJVQ1RJT04oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMyBAQAogI2luY2x1ZGUgIkpJVC5oIgogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJK
SVRJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTVmFy
aWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVwYXRj
aEJ1ZmZlci5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKQEAgLTEwNjAsMTMgKzEwNjEsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Njb3BlZF92YXIoSW5zdHJ1Ywogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwot
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QtPmlzR2xvYmFsT2JqZWN0KCkpOwotICAgIGludCBpbmRl
eCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBsb2FkUHRyKCZnbG9i
YWxPYmplY3QtPm1fcmVnaXN0ZXJzLCByZWdUMik7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiByZWdpc3RlclBvaW50ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5yZWdpc3RlclBvaW50
ZXI7CiAKLSAgICBlbWl0TG9hZChpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CisgICAgbG9h
ZDMyKHJlZ2lzdGVyUG9pbnRlci0+dGFnUG9pbnRlcigpLCByZWdUMSk7CisgICAgbG9hZDMyKHJl
Z2lzdGVyUG9pbnRlci0+cGF5bG9hZFBvaW50ZXIoKSwgcmVnVDApOwogICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIG1h
cChtX2J5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfZ2xvYmFsX3ZhciksIGRz
dCwgcmVnVDEsIHJlZ1QwKTsKQEAgLTEwNzQsMTggKzEwNzIsMjEgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2dsb2JhbF92YXIoSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFs
X3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBpbmRleCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiByZWdpc3RlclBvaW50ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBv
aW50ZXI7CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgcmVnVDIpOwotCi0gICAgZW1pdFdyaXRlQmFy
cmllcihnbG9iYWxPYmplY3QsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywg
V3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MpOworICAgIAorICAgIGlmIChIZWFwOjppc1dy
aXRlQmFycmllckVuYWJsZWQoKSkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZ2xvYmFs
T2JqZWN0KSwgcmVnVDIpOworICAgICAgICAKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9i
YWxPYmplY3QsIHJlZ1QxLCByZWdUMywgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJy
aWVyRm9yVmFyaWFibGVBY2Nlc3MpOworICAgIH0KIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdpc3RlcnMoKSksIHJlZ1QyKTsKLSAgICBl
bWl0U3RvcmUoaW5kZXgsIHJlZ1QxLCByZWdUMCwgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDEs
IHJlZ2lzdGVyUG9pbnRlci0+dGFnUG9pbnRlcigpKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCByZWdp
c3RlclBvaW50ZXItPnBheWxvYWRQb2ludGVyKCkpOwogICAgIG1hcChtX2J5dGVjb2RlT2Zmc2V0
ICsgT1BDT0RFX0xFTkdUSChvcF9wdXRfZ2xvYmFsX3ZhciksIHZhbHVlLCByZWdUMSwgcmVnVDAp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCwxMyBA
QAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgiCiAj
aW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUg
IlJlc3VsdFR5cGUuaCIKQEAgLTEwMTAsOSArMTAxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zY29wZWRfdmFyKEluc3RydWMKIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2dsb2JhbF92YXIo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgbG9hZFB0
cigmZ2xvYmFsT2JqZWN0LT5tX3JlZ2lzdGVycywgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCAqIHNpemVvZihSZWdpc3Rl
cikpLCByZWdUMCk7CisgICAgbG9hZFB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5yZWdpc3Rl
clBvaW50ZXIsIHJlZ1QwKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0K
QEAgLTEwMjIsMTEgKzEwMjEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dsb2JhbF92YXIo
SW5zdHJ1YwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihn
bG9iYWxPYmplY3QpLCByZWdUMSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Zhcmlh
YmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDEpOwotICAgIHN0b3JlUHRyKHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kICogc2l6
ZW9mKFJlZ2lzdGVyKSkpOwotICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdU
MCwgcmVnVDIsIFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxl
QWNjZXNzKTsKKyAgICAKKyAgICBzdG9yZVB0cihyZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzFd
LnUucmVnaXN0ZXJQb2ludGVyKTsKKyAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVk
KCkpCisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoZ2xvYmFsT2JqZWN0LCByZWdUMCwgcmVnVDIs
IFNob3VsZEZpbHRlckltbWVkaWF0ZXMsIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzKTsK
IH0KIAogdm9pZCBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTA0MSwxMyArMTA0MSwx
MCBAQCBfbGxpbnRfb3BfcHV0X3Njb3BlZF92YXI6CiAKIF9sbGludF9vcF9nZXRfZ2xvYmFsX3Zh
cjoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGkgOFtQQ10sIHQxCisgICAgbG9hZHAg
OFtQQ10sIHQwCiAgICAgbG9hZGkgNFtQQ10sIHQzCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCi0gICAgbG9h
ZHAgSlNHbG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAKLSAgICBsb2FkaSBUYWdPZmZz
ZXRbdDAsIHQxLCA4XSwgdDIKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0sIHQx
CisgICAgbG9hZGkgVGFnT2Zmc2V0W3QwXSwgdDIKKyAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W3Qw
XSwgdDEKICAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQzLCA4XQogICAgIHN0b3JlaSB0
MSwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQogICAgIGxvYWRpIDEyW1BDXSwgdDMKQEAgLTEw
NTgsMTQgKzEwNTUsMTEgQEAgX2xsaW50X29wX2dldF9nbG9iYWxfdmFyOgogX2xsaW50X29wX3B1
dF9nbG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDEK
LSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xv
YmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9yZWdpc3RlcnNb
dDBdLCB0MAorICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
dDEsIHQyLCB0MykKLSAgICBsb2FkaSA0W1BDXSwgdDEKICAgICB3cml0ZUJhcnJpZXIodDIsIHQz
KQotICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwLCB0MSwgOF0KLSAgICBzdG9yZWkgdDMsIFBh
eWxvYWRPZmZzZXRbdDAsIHQxLCA4XQorICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W3QwXQorICAg
IHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFt0MF0KICAgICBkaXNwYXRjaCgzKQogCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtODk1LDI4ICs4
OTUsMjIgQEAgX2xsaW50X29wX3B1dF9zY29wZWRfdmFyOgogCiBfbGxpbnRfb3BfZ2V0X2dsb2Jh
bF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0
MQorICAgIGxvYWRwIDE2W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwg
dDMKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
Z2xvYmFsT2JqZWN0W3QwXSwgdDAKLSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9yZWdpc3Rl
cnNbdDBdLCB0MAotICAgIGxvYWRwIFt0MCwgdDEsIDhdLCB0MgotICAgIHN0b3JlcCB0MiwgW2Nm
ciwgdDMsIDhdCi0gICAgbG9hZHAgMjRbUEIsIFBDLCA4XSwgdDMKLSAgICB2YWx1ZVByb2ZpbGUo
dDIsIHQzKQorICAgIGxvYWRwIFt0MF0sIHQxCisgICAgc3RvcmVwIHQxLCBbY2ZyLCB0MywgOF0K
KyAgICBsb2FkcCAyNFtQQiwgUEMsIDhdLCB0MAorICAgIHZhbHVlUHJvZmlsZSh0MSwgdDApCiAg
ICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRfb3BfcHV0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MQotICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0
MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3JlZ2lzdGVyc1t0MF0sIHQwCisgICAgbG9h
ZHAgOFtQQiwgUEMsIDhdLCB0MAogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQot
ICAgIGxvYWRpcyA4W1BCLCBQQywgOF0sIHQxCiAgICAgd3JpdGVCYXJyaWVyKHQyKQotICAgIHN0
b3JlcCB0MiwgW3QwLCB0MSwgOF0KKyAgICBzdG9yZXAgdDIsIFt0MF0KICAgICBkaXNwYXRjaCgz
KQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEpTR2xvYmFsT2JqZWN0Ojpz
X2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmSlNWYXJpYWJsZU9iamVjdDo6c19pbmZvLCAwLCBF
eGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTR2xvYmFs
T2JqZWN0KSB9OworY29uc3QgQ2xhc3NJbmZvIEpTR2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJH
bG9iYWxPYmplY3QiLCAmSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6c19pbmZvLCAwLCBFeGVj
U3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTR2xvYmFsT2Jq
ZWN0KSB9OwogCiBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0dsb2JhbE9iamVjdDo6
c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsgJmFsbG93c0FjY2Vzc0Zyb20sICZzdXBwb3J0
c1Byb2ZpbGluZywgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sICZzaG91bGRJbnRlcnJ1cHRTY3Jp
cHQsICZqYXZhU2NyaXB0RXhwZXJpbWVudHNFbmFibGVkIH07CiAKQEAgLTE0OCw5ICsxNDgsOSBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFCiAgICAgSlNHbG9iYWxP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAodGhpc09iamVjdCkpOwogCi0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlUHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKQorICAgIGlmIChz
eW1ib2xUYWJsZVB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LmlzU3RyaWN0TW9kZSgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIEpTVmFyaWFibGVPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dERpcmVjdFZp
cnR1YWwoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMTU4LDEy
ICsxNTgsMTIgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cHV0RGlyZWN0VmlydHVhbChKUwogICAg
IEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2Jq
ZWN0KTsKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUp
ID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwogCi0gICAgaWYgKHRoaXNPYmplY3QtPnN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhdHRyaWJ1dGVzKSkKKyAgICBpZiAoc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyh0aGlzT2JqZWN0LCBleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHJpYnV0ZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU1ZhbHVlIHZhbHVlQmVmb3JlID0g
dGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0OjpwdXQodGhp
c09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOwogICAgIGlmICghdmFsdWVCZWZvcmUpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZUFmdGVyID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVy
dHlOYW1lKTsKICAgICAgICAgaWYgKHZhbHVlQWZ0ZXIpCkBAIC0xNzYsNyArMTc2LDcgQEAgYm9v
bCBKU0dsb2JhbE9iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSgogICAgIEpTR2xvYmFsT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdDsKICAgICAvLyBzaWxlbnRseSBpZ25vcmUgYXR0ZW1wdHMgdG8gYWRkIGFj
Y2Vzc29ycyBhbGlhc2luZyB2YXJzLgotICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNj
cmlwdG9yKCkgJiYgdGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90
KSkKKyAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpICYmIHN5bWJvbFRh
YmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkodGhpc09iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7CiB9CkBAIC0zNDUsNyAr
MzQ1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CiAgICAgQ09NUElM
RV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKICAgICBBU1NFUlQodGhpc09iamVj
dC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLSAg
ICBKU1ZhcmlhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CiAKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX2ds
b2JhbFNjb3BlQ2hhaW4pOwogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmplY3Qt
Pm1fbWV0aG9kQ2FsbER1bW15KTsKQEAgLTM5MywxNyArMzkzLDYgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRo
aXNPYmplY3QtPm1fcmVnRXhwU3RydWN0dXJlKTsKICAgICB2aXNpdElmTmVlZGVkKHZpc2l0b3Is
ICZ0aGlzT2JqZWN0LT5tX3N0cmluZ09iamVjdFN0cnVjdHVyZSk7CiAgICAgdmlzaXRJZk5lZWRl
ZCh2aXNpdG9yLCAmdGhpc09iamVjdC0+bV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJlKTsKLQot
ICAgIGlmICh0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXkpIHsKLSAgICAgICAgLy8gT3V0c2lk
ZSB0aGUgZXhlY3V0aW9uIG9mIGdsb2JhbCBjb2RlLCB3aGVuIG91ciB2YXJpYWJsZXMgYXJlIHRv
cm4gb2ZmLAotICAgICAgICAvLyB3ZSBjYW4gbWFyayB0aGUgdG9ybi1vZmYgYXJyYXkuCi0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheS5nZXQo
KSwgdGhpc09iamVjdC0+bV9yZWdpc3RlckFycmF5U2l6ZSk7Ci0gICAgfSBlbHNlIGlmICh0aGlz
T2JqZWN0LT5tX3JlZ2lzdGVycykgewotICAgICAgICAvLyBEdXJpbmcgZXhlY3V0aW9uIG9mIGds
b2JhbCBjb2RlLCB3aGVuIG91ciB2YXJpYWJsZXMgYXJlIGluIHRoZSByZWdpc3RlciBmaWxlLAot
ICAgICAgICAvLyB0aGUgc3ltYm9sIHRhYmxlIHRlbGxzIHVzIGhvdyBtYW55IHZhcmlhYmxlcyB0
aGVyZSBhcmUsIGFuZCByZWdpc3RlcnMKLSAgICAgICAgLy8gcG9pbnRzIHRvIHdoZXJlIHRoZXkg
ZW5kLCBhbmQgdGhlIHJlZ2lzdGVycyB1c2VkIGZvciBleGVjdXRpb24gYmVnaW4uCi0gICAgICAg
IHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzIC0gdGhpc09iamVj
dC0+c3ltYm9sVGFibGUoKS5zaXplKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuc2l6ZSgp
KTsKLSAgICB9CiB9CiAKIEV4ZWNTdGF0ZSogSlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKQpA
QCAtNDExLDI2ICs0MDAsOSBAQCBFeGVjU3RhdGUqIEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVj
KCkKICAgICByZXR1cm4gQ2FsbEZyYW1lOjpjcmVhdGUobV9nbG9iYWxDYWxsRnJhbWUgKyBSZWdp
c3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpOwogfQogCi12b2lkIEpTR2xvYmFsT2JqZWN0
OjpyZXNpemVSZWdpc3RlcnMoc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgLy8gUHJldmlvdXMgZHVw
bGljYXRlIHN5bWJvbHMgbWF5IGhhdmUgY3JlYXRlZCBzcGFyZSBjYXBhY2l0eSBpbiBtX3JlZ2lz
dGVyQXJyYXkuCi0gICAgaWYgKG5ld1NpemUgPD0gbV9yZWdpc3RlckFycmF5U2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG9sZFNpemUgPSBtX3JlZ2lzdGVyQXJyYXlTaXplOwot
ICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXkgPSBh
ZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bbmV3U2l6ZV0pOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2xkU2l6ZTsgKytpKQotICAgICAgICByZWdpc3RlckFycmF5
W2ldLnNldChnbG9iYWxEYXRhKCksIHRoaXMsIG1fcmVnaXN0ZXJBcnJheVtpXS5nZXQoKSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyArK2kpCi0gICAgICAgIHJl
Z2lzdGVyQXJyYXlbaV0uc2V0VW5kZWZpbmVkKCk7Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHJlZ2lzdGVycyA9IHJlZ2lzdGVyQXJyYXkuZ2V0KCk7Ci0gICAgc2V0UmVnaXN0ZXJzKHJl
Z2lzdGVycywgcmVnaXN0ZXJBcnJheS5yZWxlYXNlKCksIG5ld1NpemUpOwotfQotCiB2b2lkIEpT
R2xvYmFsT2JqZWN0OjphZGRTdGF0aWNHbG9iYWxzKEdsb2JhbFByb3BlcnR5SW5mbyogZ2xvYmFs
cywgaW50IGNvdW50KQogewotICAgIHJlc2l6ZVJlZ2lzdGVycyhzeW1ib2xUYWJsZSgpLnNpemUo
KSArIGNvdW50KTsKKyAgICBhZGRSZWdpc3RlcnMoY291bnQpOwogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyYgZ2xvYmFs
ID0gZ2xvYmFsc1tpXTsKQEAgLTQ0NiwxNyArNDE4LDE3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OmFkZFN0YXRpY0dsb2JhbHMoR2wKIGJvb2wgSlNHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCk7Ci0gICAgaWYgKGdldFN0YXRpY0Z1
bmN0aW9uU2xvdDxKU1ZhcmlhYmxlT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVj
dFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgIGlmIChn
ZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdD4oZXhlYywgRXhl
Y1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgcmV0dXJuIHN5bWJvbFRhYmxl
R2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKIGJvb2wgSlNHbG9iYWxP
YmplY3Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKIHsKICAgICBKU0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0dsb2JhbE9iamVjdCo+KG9iamVjdCk7Ci0gICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uRGVzY3Jp
cHRvcjxKU1ZhcmlhYmxlT2JqZWN0PihleGVjLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxl
KGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQorICAgIGlmIChn
ZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdD4oZXhl
YywgRXhlY1N0YXRlOjpnbG9iYWxPYmplY3RUYWJsZShleGVjKSwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHRo
aXNPYmplY3QtPnN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7CisgICAg
cmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRv
cik7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmNsZWFyUmFyZURhdGEoSlNDZWxsKiBjZWxs
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsVGhpcy5oIgotI2luY2x1ZGUgIkpTVmFyaWFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNXZWFrT2JqZWN0TWFwUmVmSW50
ZXJuYWwuaCIKICNpbmNsdWRlICJOdW1iZXJQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTdHJpbmdQ
cm90b3R5cGUuaCIKQEAgLTc0LDcgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEph
dmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWRGdW5jdGlvblB0ciBqYXZhU2NyaXB0RXhwZXJpbWVu
dHNFbmFibGVkOwogICAgIH07CiAKLSAgICBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBK
U1ZhcmlhYmxlT2JqZWN0IHsKKyAgICBjbGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0IHsKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhh
c2hTZXQ8UmVmUHRyPE9wYXF1ZUpTV2Vha09iamVjdE1hcD4gPiBXZWFrTWFwU2V0OwogCkBAIC05
MCw3ICs5MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogCi0gICAgICAg
IHNpemVfdCBtX3JlZ2lzdGVyQXJyYXlTaXplOwogICAgICAgICBSZWdpc3RlciBtX2dsb2JhbENh
bGxGcmFtZVtSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemVdOwogCiAgICAgICAgIFdy
aXRlQmFycmllcjxTY29wZUNoYWluTm9kZT4gbV9nbG9iYWxTY29wZUNoYWluOwpAQCAtMTY0LDcg
KzE2Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgIHB1Ymxp
YzoKLSAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CisgICAgICAgIHR5cGVk
ZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBCYXNlOwogCiAgICAgICAgIHN0YXRpYyBKU0ds
b2JhbE9iamVjdCogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiAgICAgICAgIHsKQEAgLTE3Nyw4ICsxNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gMCkKLSAgICAgICAgICAg
IDogSlNWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxl
LCAwKQotICAgICAgICAgICAgLCBtX3JlZ2lzdGVyQXJyYXlTaXplKDApCisgICAgICAgICAgICA6
IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1i
b2xUYWJsZSkKICAgICAgICAgICAgICwgbV9nbG9iYWxTY29wZUNoYWluKCkKICAgICAgICAgICAg
ICwgbV93ZWFrUmFuZG9tKHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKICAgICAgICAgICAg
ICwgbV9ldmFsRW5hYmxlZCh0cnVlKQpAQCAtMzA4LDggKzMwNiw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIHNldEV2YWxFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2V2YWxFbmFi
bGVkID0gZW5hYmxlZDsgfQogICAgICAgICBib29sIGV2YWxFbmFibGVkKCkgeyByZXR1cm4gbV9l
dmFsRW5hYmxlZDsgfQogCi0gICAgICAgIHZvaWQgcmVzaXplUmVnaXN0ZXJzKHNpemVfdCBuZXdT
aXplKTsKLQogICAgICAgICB2b2lkIHJlc2V0UHJvdG90eXBlKEpTR2xvYmFsRGF0YSYsIEpTVmFs
dWUgcHJvdG90eXBlKTsKIAogICAgICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEoKSBjb25z
dCB7IHJldHVybiAqSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpOyB9CkBAIC0zMzQsNyAr
MzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGRvdWJsZSB3ZWFrUmFuZG9tTnVtYmVy
KCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9CiAgICAgcHJvdGVjdGVkOgogCi0gICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgSlNWYXJpYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdCB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5h
bWVzIHwgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAg
ICAgc3RydWN0IEdsb2JhbFByb3BlcnR5SW5mbyB7CiAgICAgICAgICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8oY29uc3QgSWRlbnRpZmllciYgaSwgSlNWYWx1ZSB2LCB1bnNpZ25lZCBhKQpAQCAtMzU5
LDcgKzM1NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgY3JlYXRlVGhyb3dU
eXBlRXJyb3IoRXhlY1N0YXRlKik7CiAKLSAgICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiByZWdpc3RlckFycmF5LCBzaXplX3QgY291bnQpOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjbGVhclJhcmVEYXRhKEpTQ2VsbCopOwogICAgIH07CiAK
QEAgLTM3MSwxOSArMzY2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4ganND
YXN0PEpTR2xvYmFsT2JqZWN0Kj4oYXNPYmplY3QodmFsdWUpKTsKICAgICB9CiAKLSAgICBpbmxp
bmUgdm9pZCBKU0dsb2JhbE9iamVjdDo6c2V0UmVnaXN0ZXJzKFdyaXRlQmFycmllcjxVbmtub3du
PiogcmVnaXN0ZXJzLCBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVn
aXN0ZXJBcnJheSwgc2l6ZV90IGNvdW50KQotICAgIHsKLSAgICAgICAgSlNWYXJpYWJsZU9iamVj
dDo6c2V0UmVnaXN0ZXJzKHJlZ2lzdGVycywgcmVnaXN0ZXJBcnJheSk7Ci0gICAgICAgIG1fcmVn
aXN0ZXJBcnJheVNpemUgPSBjb3VudDsKLSAgICB9Ci0KICAgICBpbmxpbmUgYm9vbCBKU0dsb2Jh
bE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgewogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAg
ICAgICAgaWYgKEpTVmFyaWFibGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICBpZiAoSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgYm9vbCBzbG90SXNXcml0ZWFibGU7
Ci0gICAgICAgIHJldHVybiBzeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QsIHNsb3RJ
c1dyaXRlYWJsZSk7CisgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZUdldCh0aGlzLCBwcm9wZXJ0
eU5hbWUsIHNsb3QsIHNsb3RJc1dyaXRlYWJsZSk7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wg
SlNHbG9iYWxPYmplY3Q6OnN5bWJvbFRhYmxlSGFzUHJvcGVydHkoUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitpbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluZFJlZ2lzdGVySW5kZXgodm9pZCog
cmVnaXN0ZXJBZGRyZXNzKQoreworICAgIGZvciAoaW50IGkgPSBtX3JlZ2lzdGVycy5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgaWYgKCZtX3JlZ2lzdGVyc1tpXSAhPSByZWdpc3RlckFkZHJlc3Mp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIENS
QVNIKCk7CisgICAgcmV0dXJuIC0xOworfQorCitpbnQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dDo6YWRkUmVnaXN0ZXJzKGludCBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkKQoreworICAgIEFTU0VS
VChudW1iZXJPZlJlZ2lzdGVyc1RvQWRkID49IDApOworICAgIAorICAgIHNpemVfdCBvbGRTaXpl
ID0gbV9yZWdpc3RlcnMuc2l6ZSgpOworICAgIG1fcmVnaXN0ZXJzLmdyb3cob2xkU2l6ZSArIG51
bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBudW1iZXJP
ZlJlZ2lzdGVyc1RvQWRkOyBpLS07KQorICAgICAgICBtX3JlZ2lzdGVyc1tvbGRTaXplICsgaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcihqc1VuZGVmaW5lZCgpKTsKKyAgICAKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihvbGRTaXplKTsKK30KKwordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKQoreworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9BU1NFUlQoU3Ry
dWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJl
KCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBKU1N5bWJvbFRh
YmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9yKTsKKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVycy5zaXplKCk7IGkt
LTspCisgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9yZWdpc3RlcnNb
aV0pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdF9oCisjZGVmaW5lIEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3RfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N5bWJvbFRh
YmxlT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJTeW1ib2xUYWJs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50
ZWRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIFJlZ2lzdGVyOworCisv
LyBUaGlzIGlzIGEgbW9zdGx5IGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIEpTVmFyaWFibGVPYmpl
Y3QsIGV4Y2VwdCB0aGF0IGl0IHByZXNlcnZlcworLy8gdGhlIGludmFyaWFudCB0aGF0IGFmdGVy
IGEgdmFyaWFibGUgaXMgY3JlYXRlZCwgaXRzIGFkZHJlc3MgaW4gbWVtb3J5IHdpbGwgbm90IGNo
YW5nZQorLy8gc28gbG9uZyBhcyB0aGUgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBpcyBhbGl2
ZS4gVGhpcyBhbGxvd3Mgb3B0aW1pemF0aW9ucyBiYXNlZAorLy8gb24gZ2V0dGluZyB0aGUgYWRk
cmVzcyBvZiB0aGUgdmFyaWFibGUgYW5kIHJlbWVtYmVyaW5nIGl0LiBBcyB3ZWxsLCB1bmxpa2Ug
YQorLy8gSlNWYXJpYWJsZU9iamVjdCwgdGhpcyB3aWxsIG1hbmFnZSB0aGUgbWVtb3J5IGZvciB0
aGUgcmVnaXN0ZXJzIGl0c2VsZiBhbmQgbmVpdGhlcgorLy8gcmVxdWlyZXMgbm9yIGFsbG93cyBm
b3IgdGhlIHN1YmNsYXNzZXMgdG8gbWFuYWdlIHRoYXQgbWVtb3J5LiBGaW5hbGx5LAorLy8gSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdCBoYXMgaXRzIG93biBHQyB0cmFjaW5nIGZ1bmN0aW9uYWxp
dHksIHNpbmNlIGl0IGtub3dzIHRoZQorLy8gZXhhY3QgZGltZW5zaW9ucyBvZiB0aGUgdmFyaWFi
bGVzIGFycmF5IGF0IGFsbCB0aW1lcy4KKworY2xhc3MgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dCA6IHB1YmxpYyBKU1N5bWJvbFRhYmxlT2JqZWN0IHsKKyAgICBmcmllbmQgY2xhc3MgSklUOwor
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CisKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIEpTU3ltYm9sVGFibGVPYmplY3QgQmFzZTsKKworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsg
fQorICAgIAorICAgIC8vIFRoaXMgaXMgYSBzbG93IG1ldGhvZCBjYWxsLCB3aGljaCBzZWFyY2hl
cyB0aGUgcmVnaXN0ZXIgYmFuayB0byBmaW5kIHRoZSBpbmRleAorICAgIC8vIGdpdmVuIGEgcG9p
bnRlci4gSXQgd2lsbCBDUkFTSCgpIGlmIGl0IGRvZXMgbm90IGZpbmQgdGhlIHJlZ2lzdGVyLiBP
bmx5IHVzZSB0aGlzCisgICAgLy8gaW4gZGVidWcgY29kZSAobGlrZSBieXRlY29kZSBkdW1waW5n
KS4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBpbnQgZmluZFJlZ2lzdGVySW5kZXgodm9pZCopOwor
ICAgIAorICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYXNzZXJ0UmVnaXN0ZXJJc0luVGhpc09i
amVjdChXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKKyAgICB7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBmaW5kUmVnaXN0ZXJJbmRleChyZWdpc3RlclBvaW50
ZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZWdpc3RlclBvaW50ZXI7CisgICAgfQorICAg
IAorICAgIC8vIEFkZHMgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCByZWdpc3RlcnMsIGluaXRpYWxp
emVzIHRoZW0gdG8gVW5kZWZpbmVkLCBhbmQgcmV0dXJucworICAgIC8vIHRoZSBpbmRleCBvZiB0
aGUgZmlyc3Qgb25lIGFkZGVkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBhZGRSZWdpc3Rl
cnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFn
czsKKworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQorICAg
ICAgICA6IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzeW1ib2xU
YWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICB9CisKKyAgICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+LCAxNj4gbV9yZWdpc3RlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkocmV2aXNp
b24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29w
ZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEzICs2NiwxMyBAQCB2b2lkIEpTU3Rh
dGljU2NvcGVPYmplY3Q6OnB1dChKU0NlbGwqIGNlCiAgICAgICAgIC8vIGEgcG9pbnRlciBjb21w
YXJlLgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgYm9vbCBpc1dyaXRhYmxl
ID0gdHJ1ZTsKLSAgICAgICAgdGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1l
LCBzbG90LCBpc1dyaXRhYmxlKTsKKyAgICAgICAgc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90LCBpc1dyaXRhYmxlKTsKICAgICAgICAgaWYgKCFpc1dyaXRhYmxl
KSB7CiAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBT
dHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCisgICAgaWYg
KHN5bWJvbFRhYmxlUHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QuaXNTdHJpY3RNb2RlKCkpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6
cHV0KEpTQ2VsbCogY2UKIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0RGlyZWN0VmlydHVh
bChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgSlNTdGF0
aWNTY29wZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4o
b2JqZWN0KTsKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQor
ICAgIGlmIChzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmds
b2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTg5LDcgKzg5LDcgQEAg
dm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dQogCiBib29sIEpTU3RhdGlj
U2NvcGVPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBy
ZXR1cm4ganNDYXN0PEpTU3RhdGljU2NvcGVPYmplY3QqPihjZWxsKS0+c3ltYm9sVGFibGVHZXQo
cHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQoanNDYXN0PEpT
U3RhdGljU2NvcGVPYmplY3QqPihjZWxsKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU3ltYm9sVGFibGVPYmplY3Qu
aCIKKworI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCisjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgorI2luY2x1ZGUgIlByb3BlcnR5
TmFtZUFycmF5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIEpTU3ltYm9sVGFibGVPYmpl
Y3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PEpTU3ltYm9sVGFi
bGVPYmplY3QqPihjZWxsKS0+SlNTeW1ib2xUYWJsZU9iamVjdDo6fkpTU3ltYm9sVGFibGVPYmpl
Y3QoKTsKK30KKworYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sK
KyAgICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFi
bGVPYmplY3QqPihjZWxsKTsKKyAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5jb250
YWlucyhwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOworfQorCit2b2lkIEpTU3ltYm9sVGFibGVPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgSlNTeW1i
b2xUYWJsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N5bWJvbFRhYmxlT2JqZWN0Kj4o
b2JqZWN0KTsKKyAgICBTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdGhpc09iamVj
dC0+c3ltYm9sVGFibGUoKS5lbmQoKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVy
YXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0QXR0cmlidXRlcygpICYgRG9udEVu
dW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+Zmlyc3QuZ2V0KCkpKTsKKyAg
ICB9CisgICAgCisgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVj
dDo6cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgdW5zaWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jv
b2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5h
bWljQ2hlY2tzKSBjb25zdAoreworICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPnR5cGVJbmZvKCku
dHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxPYmplY3RUeXBlOgorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgSlNHbG9iYWxPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVx
dWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICBjYXNlIEFjdGl2YXRpb25PYmplY3RUeXBlOgorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNBY3RpdmF0aW9uKj4odGhpcyktPmlzRHlu
YW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7CisgICAgY2FzZSBTdGF0aWNTY29wZU9i
amVjdFR5cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0YXRpY1Njb3Bl
T2JqZWN0Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEpTU3ltYm9sVGFibGVPYmplY3RfaAorI2RlZmluZSBKU1N5bWJvbFRhYmxlT2Jq
ZWN0X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlw
dG9yLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTU3ltYm9sVGFibGVPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgCisgICAgU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KKyAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwor
ICAgIAorICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZp
cnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29s
IGRlbGV0ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKKyAg
ICAKKyAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykg
Y29uc3Q7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTTm9uRmluYWxPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworICAgIAorICAgIEpTU3ltYm9sVGFibGVPYmplY3QoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3ltYm9sVGFibGUqIHN5bWJv
bFRhYmxlKQorICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KQorICAgICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAg
ICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgICAgICBB
U1NFUlQobV9zeW1ib2xUYWJsZSk7CisgICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxlKiBtX3N5
bWJvbFRhYmxlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBl
PgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBl
KiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlu
bGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVjdC0+cmVn
aXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29sIHN5
bWJvbFRhYmxlR2V0KAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7Cisg
ICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVH
ZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKAorICAg
ICAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZUdldCgKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LAorICAgIGJvb2wmIHNsb3RJc1dyaXRl
YWJsZSkKK3sKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnku
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzbG90LnNldFZhbHVlKG9iamVj
dC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7CisgICAgc2xvdElzV3JpdGVh
YmxlID0gIWVudHJ5LmlzUmVhZE9ubHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFi
bGVQdXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwKKyAgICBib29sIHNo
b3VsZFRocm93KQoreworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CisgICAgCisgICAgU3ltYm9sVGFibGVFbnRyeSBl
bnRyeSA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSk7CisgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkgeworICAgICAgICBpZiAoc2hvdWxkVGhyb3cp
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9w
ZXJ0eVdyaXRlRXJyb3IpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb2JqZWN0
LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChnbG9iYWxEYXRhLCBvYmplY3QsIHZh
bHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFi
bGVPYmplY3RUeXBlPgoraW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcygK
KyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLAorICAgIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCit7CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOworICAgIAorICAgIFN5bWJvbFRh
YmxlOjppdGVyYXRvciBpdGVyID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmZpbmQocHJvcGVydHlO
YW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gb2JqZWN0LT5zeW1ib2xUYWJsZSgp
LmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50
cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CisgICAgZW50
cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9iamVjdCwgdmFsdWUpOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTU3ltYm9sVGFi
bGVPYmplY3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDEyICsyOSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNWYXJpYWJsZU9iamVjdC5oIgogCi0jaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCi0jaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCi0j
aW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0
b3IuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgSlNWYXJpYWJsZU9iamVjdDo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCkBAIC00Miw1NyArMzYsNCBAQCB2b2lkIEpTVmFyaWFibGVPYmplY3Q6
OmRlc3Ryb3koSlNDZWxsKiBjCiAgICAgc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNl
bGwpLT5KU1ZhcmlhYmxlT2JqZWN0Ojp+SlNWYXJpYWJsZU9iamVjdCgpOwogfQogCi1ib29sIEpT
VmFyaWFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEpTVmFyaWFibGVPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwpOwotICAgIGlmICh0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1l
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0
ZVByb3BlcnR5KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci19Ci0KLXZvaWQgSlNW
YXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKLXsKLSAgICBKU1ZhcmlhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVmFyaWFibGVPYmplY3QqPihvYmplY3QpOwotICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVy
YXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOwotICAgIGZvciAoU3lt
Ym9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRB
dHRyaWJ1dGVzKCkgJiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVy
dGllcykpCi0gICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0
LT5maXJzdC5nZXQoKSkpOwotICAgIH0KLSAgICAKLSAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KLQotYm9v
bCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCi17Ci0gICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IHN5bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNO
YW1lKCkpOwotICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgZGVzY3JpcHRvci5z
ZXREZXNjcmlwdG9yKHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuZ2V0KCksIGVudHJ5Lmdl
dEF0dHJpYnV0ZXMoKSB8IERvbnREZWxldGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEpTVmFyaWFibGVPYmplY3Q6OnB1dERpcmVj
dFZpcnR1YWwoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1ib29sIEpTVmFyaWFi
bGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29u
c3QKLXsKLSAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSkgewotICAg
IGNhc2UgR2xvYmFsT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IEpTR2xvYmFsT2JqZWN0Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0No
ZWNrcyk7Ci0gICAgY2FzZSBBY3RpdmF0aW9uT2JqZWN0VHlwZToKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IEpTQWN0aXZhdGlvbio+KHRoaXMpLT5pc0R5bmFtaWNTY29wZShyZXF1
aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGNhc2UgU3RhdGljU2NvcGVPYmplY3RUeXBlOgotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdGF0aWNTY29wZU9iamVjdCo+KHRoaXMp
LT5pc0R5bmFtaWNTY29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkocmV2aXNpb24g
MTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEpT
VmFyaWFibGVPYmplY3RfaAogCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N5
bWJvbFRhYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXIuaCIKICNpbmNsdWRlICJTeW1i
b2xUYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtNDEsNDAgKzQyLDI1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAg
ICBjbGFzcyBSZWdpc3RlcjsKIAotICAgIGNsYXNzIEpTVmFyaWFibGVPYmplY3QgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CisgICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBK
U1N5bWJvbFRhYmxlT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHB1YmxpYzoKLSAgICAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7Ci0KLSAgICAgICAgU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KLQotICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotCi0gICAg
ICAgIHN0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVCB2b2lkIHB1dERpcmVjdFZpcnR1YWwo
SlNPYmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpOwotCi0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlbGV0
ZVByb3BlcnR5KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7Ci0gICAg
ICAgIAotICAgICAgICBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0No
ZWNrcykgY29uc3Q7CisgICAgICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwog
CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgcmVnaXN0ZXJBdChpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzW2luZGV4XTsgfQogCiAgICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogY29uc3QgKiBhZGRyZXNzT2ZSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiAm
bV9yZWdpc3RlcnM7IH0KICAgICAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZlJlZ2lzdGVycygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1ZhcmlhYmxlT2JqZWN0LCBtX3JlZ2lzdGVycyk7
IH0KIAotICAgICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhWYXJpYWJsZU9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0gICAgICAgIH0KLSAgICAgICAg
CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CisKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IE92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBKU05vbkZpbmFsT2JqZWN0OjpT
dHJ1Y3R1cmVGbGFnczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gSlNTeW1ib2xUYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICAgICAgSlNW
YXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCi0gICAg
ICAgICAgICA6IEpTTm9uRmluYWxPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKQotICAgICAg
ICAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQorICAgICAgICAgICAgOiBKU1N5bWJv
bFRhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgc3ltYm9sVGFibGUpCiAgICAgICAg
ICAgICAsIG1fcmVnaXN0ZXJzKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+
Kj4ocmVnaXN0ZXJzKSkKICAgICAgICAgewogICAgICAgICB9CkBAIC04Miw3NiArNjgsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKLSAgICAgICAgICAgIEFTU0VSVChtX3N5bWJvbFRhYmxlKTsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pID09IHNp
emVvZihSZWdpc3RlciksIFJlZ2lzdGVyX3Nob3VsZF9iZV9zYW1lX3NpemVfYXNfV3JpdGVCYXJy
aWVyKTsKICAgICAgICAgfQogCiAgICAgICAgIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiBjb3B5UmVnaXN0ZXJBcnJheShKU0dsb2JhbERhdGEmLCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHNyYywgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FsbGZyYW1lU3RhcnRzKTsKICAg
ICAgICAgdm9pZCBzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlcnMs
IFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiByZWdpc3RlckFycmF5KTsK
IAotICAgICAgICBib29sIHN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZUdl
dChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7Ci0g
ICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhB
dHRyaWJ1dGVzKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7Ci0KLSAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7IC8vIE1h
cHMgbmFtZSAtPiBvZmZzZXQgZnJvbSAiciIgaW4gcmVnaXN0ZXIgZmlsZS4KICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBtX3JlZ2lzdGVyczsgLy8gInIiIGluIHRoZSByZWdpc3RlciBm
aWxlLgogICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4gPiBtX3JlZ2lz
dGVyQXJyYXk7IC8vIEluZGVwZW5kZW50IGNvcHkgb2YgcmVnaXN0ZXJzLCB1c2VkIHdoZW4gYSB2
YXJpYWJsZSBvYmplY3QgY29waWVzIGl0cyByZWdpc3RlcnMgb3V0IG9mIHRoZSByZWdpc3RlciBm
aWxlLgogICAgIH07CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhcmlhYmxlT2JqZWN0OjpzeW1ib2xU
YWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi0g
ICAgewotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxp
bmVHZXQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNO
dWxsKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUocmVnaXN0ZXJBdChlbnRyeS5nZXRJ
bmRleCgpKS5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9i
amVjdDo6c3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90LCBib29sJiBzbG90SXNXcml0ZWFibGUpCi0gICAgewotICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSk7Ci0gICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSk7Ci0gICAg
ICAgICAgICBzbG90SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0KEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8
fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKLQotICAgICAgICBTeW1i
b2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSk7Ci0gICAgICAgIGlmIChlbnRyeS5pc051bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSkgewotICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93KQotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlUHV0
V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBI
ZWFwOjpoZWFwKHRoaXMpKTsKLQotICAgICAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9
IHN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAg
aWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUoKS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7Ci0gICAg
ICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpOwotICAgICAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldChn
bG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQog
ICAgIGlubGluZSBQYXNzT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gSlNWYXJp
YWJsZU9iamVjdDo6Y29weVJlZ2lzdGVyQXJyYXkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHNyYywgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FsbGZyYW1l
U3RhcnRzKQogICAgIHsKICAgICAgICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+
ID4gcmVnaXN0ZXJBcnJheSA9IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3du
Pltjb3VudF0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVC
YXJyaWVyLmgJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1dyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNiArMTc3LDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdS5zbG90OwogICAgIH0KICAgICAKKyAgICBpbnQzMl90KiB0
YWdQb2ludGVyKCkgeyByZXR1cm4gJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
Kj4oJm1fdmFsdWUpLT5hc0JpdHMudGFnOyB9CisgICAgaW50MzJfdCogcGF5bG9hZFBvaW50ZXIo
KSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPigmbV92YWx1
ZSktPmFzQml0cy5wYXlsb2FkOyB9CisgICAgCiAgICAgdHlwZWRlZiBKU1ZhbHVlIChXcml0ZUJh
cnJpZXJCYXNlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgb3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSooKSBjb25zdCB7IHJldHVybiBnZXQoKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5z
cGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWdldCgpOyB9IApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjA3KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTItMDYtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBH
bG9iYWwgb2JqZWN0IHZhcmlhYmxlIGFjY2Vzc2VzIHNob3VsZCBub3QgcmVxdWlyZSBhbiBleHRy
YSBsb2FkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
ODM4NQorCisgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoIGFuZCBHZW9mZnJl
eSBHYXJlbi4KKworICAgICAgICBVcGRhdGVkIEpTRE9NV2luZG93QmFzZS5jcHAgdG8gdXNlIHRo
ZSBuZXcgc3ltYm9sIHRhYmxlIEFQSS4gdGhpcy0+c3ltYm9sVGFibGVGb28oLi4uKQorICAgICAg
ICBiZWNvbWVzIHN5bWJvbFRhYmxlRm9vKHRoaXMsIC4uLikuCisgICAgICAgICAgICAgICAgCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvd0Jhc2U6OnVwZGF0ZURvY3VtZW50KToKKwogMjAxMi0wNi0wNiAgSm9zaHVh
IEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogUmVuYW1l
IElEQkZhY3RvcnkuZ2V0RGF0YWJhc2VOYW1lcygpIHRvIHdlYmtpdEdldERhdGFiYXNlTmFtZXMo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2Uu
Y3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgSlNE
T01XaW5kb3dCYXNlOjp1cGRhdGVEb2N1bWVudCgpCiB7CiAgICAgQVNTRVJUKG1faW1wbC0+ZG9j
dW1lbnQoKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsRXhlYygpOwotICAgIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4
ZWMsICJkb2N1bWVudCIpLCB0b0pTKGV4ZWMsIHRoaXMsIG1faW1wbC0+ZG9jdW1lbnQoKSksIERv
bnREZWxldGUgfCBSZWFkT25seSk7CisgICAgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyh0
aGlzLCBleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgImRvY3VtZW50IiksIHRv
SlMoZXhlYywgdGhpcywgbV9pbXBsLT5kb2N1bWVudCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
KTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNET01XaW5kb3dCYXNlOjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QK
</data>
<flag name="commit-queue"
          id="153390"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146144</attachid>
            <date>2012-06-06 16:50:59 -0700</date>
            <delta_ts>2012-06-06 16:50:59 -0700</delta_ts>
            <desc>trying to make windows green</desc>
            <filename>globalobj_patch_13.diff</filename>
            <type>text/plain</type>
            <size>93284</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MSBA
QAorMjAxMi0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJlIGFuIGV4
dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2ggYW5kIEdlb2Zm
cmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRlZCB0
byBhY2Nlc3MgYSBnbG9iYWwgdmFyaWFibGUsIHlvdSdkIGZpcnN0IGhhdmUKKyAgICAgICAgdG8g
bG9hZCB0aGUgcmVnaXN0ZXIgYXJyYXkgZnJvbSB0aGUgYXBwcm9wcmlhdGUgZ2xvYmFsIG9iamVj
dCBhbmQgdGhlbgorICAgICAgICBlaXRoZXIgbG9hZCBvciBzdG9yZSBhdCBhbiBvZmZzZXQgdG8g
dGhlIHJlZ2lzdGVyIGFycmF5LiBUaGlzIGlzIGJlY2F1c2UKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QgaW5oZXJpdGVkIGZyb20gSlNWYXJpYWJsZU9iamVjdCwgYW5kIEpTVmFyaWFibGVPYmplY3Qg
aXMKKyAgICAgICAgZGVzaWduZWQgd2l0aCB0aGUgcGVzc2ltaXN0aWMgYXNzdW1wdGlvbiB0aGF0
IGl0cyByZWdpc3RlciBhcnJheSBtYXkKKyAgICAgICAgcG9pbnQgaW50byB0aGUgY2FsbCBzdGFj
ay4gVGhpcyBpcyBuZXZlciB0aGUgY2FzZSBmb3IgZ2xvYmFsIG9iamVjdHMuCisgICAgICAgIEhl
bmNlLCBldmVuIHRob3VnaCB0aGUgZ2xvYmFsIG9iamVjdCBtYXkgYWRkIG1vcmUgcmVnaXN0ZXJz
IGF0IGFueSB0aW1lLAorICAgICAgICBpdCBkb2VzIG5vdCBuZWVkIHRvIHN0b3JlIHRoZW0gaW4g
YSBjb250aWd1b3VzIGFycmF5LiBJdCBjYW4gdXNlIGEKKyAgICAgICAgU2VnbWVudGVkVmVjdG9y
IG9yIHNpbWlsYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyBnbG9i
YWwgb2JqZWN0cyBhbmQgdmFyaWFibGUgb2JqZWN0cyBhcyBmb2xsb3dzOgorICAgICAgICAKKyAg
ICAgICAgLSBUaGUgZnVuY3Rpb25hbGl0eSB0byB0cmFjayB2YXJpYWJsZXMgaW4gYW4gaW5kZXhh
YmxlIGFycmF5IHVzaW5nIGEKKyAgICAgICAgICBTeW1ib2xUYWJsZSB0byBtYXAgbmFtZXMgdG8g
aW5kaWNlcyBpcyBtb3ZlZCBpbnRvIEpTU3ltYm9sVGFibGVPYmplY3QsCisgICAgICAgICAgd2hp
Y2ggaXMgbm93IGEgc3VwZXJ0eXBlIG9mIEpTVmFyaWFibGVPYmplY3QuIEpTVmFyaWFibGVPYmpl
Y3QgaXMgbm93CisgICAgICAgICAganVzdCBhIGhvbGRlciBmb3IgYSByZWdpc3RlcnMgYXJyYXkg
YW5kIGltcGxlbWVudHMgdGhlIHJlZ2lzdGVyQXQoKQorICAgICAgICAgIG1ldGhvZCB0aGF0IGlz
IGxlZnQgYWJzdHJhY3QgaW4gSlNTeW1ib2xUYWJsZU9iamVjdC4gQmVjYXVzZSBhbGwgdXNlcnMK
KyAgICAgICAgICBvZiBKU1ZhcmlhYmxlT2JqZWN0IGtub3cgd2hldGhlciB0aGV5IGFyZSBhIEpT
U3RhdGljU2NvcGVPYmplY3QsCisgICAgICAgICAgSlNBY3RpdmF0aW9uLCBvciBKU0dsb2JhbE9i
amVjdCwgdGhpcyAiYWJzdHJhY3QiIG1ldGhvZCBpcyBub3QgdmlydHVhbDsKKyAgICAgICAgICBp
bnN0ZWFkIHRoZSB1dGlsaXR5IG1ldGhvZHMgdGhhdCB3b3VsZCBjYWxsIHJlZ2lzdGVyQXQoKSBh
cmUgbm93CisgICAgICAgICAgdGVtcGxhdGUgZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSB5b3UgdG8g
a25vdyBzdGF0aWNhbGx5IHdoYXQgc3VidHlwZSBvZgorICAgICAgICAgIEpTU3ltYm9sVGFibGVP
YmplY3QgeW91J3JlIHVzaW5nIChKU1ZhcmlhYmxlT2JqZWN0IG9yIHNvbWV0aGluZyBlbHNlKSwK
KyAgICAgICAgICBzbyB0aGF0IHJlZ2lzdGVyQXQoKSBjYW4gYmUgc3RhdGljYWxseSBib3VuZC4K
KyAgICAgICAgCisgICAgICAgIC0gQSBuZXcgY2xhc3MgaXMgYWRkZWQgY2FsbGVkIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QsIHdoaWNoIG9ubHkKKyAgICAgICAgICBkaWZmZXJzIGZyb20gSlNW
YXJpYWJsZU9iamVjdCBpbiBob3cgaXQgYWxsb2NhdGVzIHJlZ2lzdGVycy4gSXQgdXNlcyBhCisg
ICAgICAgICAgU2VnbWVudGVkVmVjdG9yIGluc3RlYWQgb2YgbWFudWFsbHkgbWFuYWdpbmcgYSBw
b2ludGVyIHRvIGEgY29udGlndW91cworICAgICAgICAgIHNsYWIgb2YgcmVnaXN0ZXJzLiBUaGlz
IGNoYW5nZXMgdGhlIGludGVyZmFjZSBzb21ld2hhdDsgZm9yIGV4YW1wbGUKKyAgICAgICAgICB3
aXRoIEpTVmFyaWFibGVPYmplY3QgaWYgeW91IHdhbnRlZCB0byBhZGQgYSByZWdpc3RlciB5b3Ug
aGFkIHRvIGRvCisgICAgICAgICAgaXQgeW91cnNlbGYgc2luY2UgdGhlIEpTVmFyaWFibGVPYmpl
Y3QgZGlkbid0IGtub3cgaG93IHRoZSByZWdpc3RlcnMKKyAgICAgICAgICBhcnJheSBvdWdodCB0
byBiZSBhbGxvY2F0ZWQuIFdpdGggSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCB5b3UgY2FuCisg
ICAgICAgICAganVzdCBjYWxsIGFkZFJlZ2lzdGVycygpLiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IHByZXNlcnZlcyB0aGUKKyAgICAgICAgICBpbnZhcmlhbnQgdGhhdCBvbmNlIHlvdSBnZXQg
YSBwb2ludGVyIGludG8gYSByZWdpc3RlciwgdGhhdCBwb2ludGVyCisgICAgICAgICAgd2lsbCBj
b250aW51ZSB0byBiZSB2YWxpZCBzbyBsb25nIGFzIHRoZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0IGlzCisgICAgICAgICAgYWxpdmUuIFRoaXMgYWxsb3dzIHRoZSBKSVRzIGFuZCBpbnRlcnBy
ZXRlcnMgdG8gc2tpcCB0aGUgZXh0cmEgbG9hZC4KKyAgICAgICAgCisgICAgICAgIC0gSlNHbG9i
YWxPYmplY3Qgbm93IGluaGVyaXRzIGZyb20gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC4gRm9y
IG5vdworICAgICAgICAgIChhbmQgcG9zc2libHkgZm9yZXZlcikgaXQgaXMgdGhlIG9ubHkgc3Vi
dHlwZSBvZiB0aGlzIG5ldyBjbGFzcy4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIGJ5dGVjb2Rl
IGZvcm1hdCBpcyBjaGFuZ2VkIHNvIHRoYXQgZ2V0X2dsb2JhbF92YXIgYW5kCisgICAgICAgICAg
cHV0X2dsb2JhbF92YXIgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIGRpcmVjdGx5IHJh
dGhlciB0aGFuCisgICAgICAgICAgaGF2aW5nIGFuIGluZGV4LiBBIGNvbnZlbmllbmNlIG1ldGhv
ZCBpcyBwcm92aWRlZCBpbgorICAgICAgICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgdG8g
Z2V0IHRoZSBpbmRleCBnaXZlbiBhIGEgcG9pbnRlciwgd2hpY2ggaXMKKyAgICAgICAgICB1c2Vk
IGZvciBhc3NlcnRpb25zIGFuZCBkZWJ1ZyBkdW1wcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
YXBwZWFycyB0byBiZSBhIDElIGFjcm9zcyB0aGUgYm9hcmQgd2luLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3Ry
dWN0aW9uLmg6CisgICAgICAgIChJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6Okluc3RydWN0
aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVyKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxh
c3RVbmFyeU9wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmUpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNvbnN0RGVjbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0U3RhdGljVmFyKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRTdGF0aWNWYXIpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoUmVzb2x2ZVJlc3VsdCk6
CisgICAgICAgIChCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oOgorICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnbG9iYWxPYmplY3RGb3IpOgor
ICAgICAgICAoR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzVmFyTnVtYmVyKToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1JlZ2lzdGVyUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cmVnaXN0ZXJQb2ludGVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
IChIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9nbG9iYWxfdmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9nbG9iYWxfdmFyKToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZ2xv
YmFsX3Zhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2xvYmFsX3Zhcik6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OnB1dCk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyk6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0Lmg6CisgICAgICAgIChKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpKU0dsb2JhbE9iamVjdDo6aGFzT3duUHJvcGVydHlGb3JXcml0ZSk6CisgICAgICAgICog
cnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0MpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0
ZXJJbmRleCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFkZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6cmVnaXN0ZXJB
dCk6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OmFzc2VydFJlZ2lz
dGVySXNJblRoaXNPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0OjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6
OnB1dCk6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1
YWwpOgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6ZGVzdHJv
eSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1YWwpOgor
ICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZSk6CisgICAg
ICAgICogcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJv
bFRhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkpTU3ltYm9sVGFibGVP
YmplY3Q6OkpTU3ltYm9sVGFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlR2V0KToK
KyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3Qu
aDoKKyAgICAgICAgKEpTVmFyaWFibGVPYmplY3QpOgorICAgICAgICAoSlNDOjpKU1ZhcmlhYmxl
T2JqZWN0OjpKU1ZhcmlhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVj
dDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL1dy
aXRlQmFycmllci5oOgorCiAyMDEyLTA2LTA2ICBBbmR5IFdpbmdvICA8d2luZ29AaWdhbGlhLmNv
bT4KIAogICAgICAgICBFbnN1cmUgY29uc2lzdGVudCBvcmRlciBvZiBldmFsdWF0aW9uIGluIExM
SW50IHNsb3cgcGF0aHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4NiwxMSBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvSlNPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU09OT2JqZWN0LmNw
cAogICAgIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKKyAgICBydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCiAgICAgcnVudGltZS9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmNwcAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3BwCiAgICAgcnVudGltZS9KU1N0cmluZ0pv
aW5lci5jcHAKKyAgICBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCiAgICAgcnVudGlt
ZS9KU1ZhbHVlLmNwcAogICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKICAgICBydW50
aW1lL0pTV3JhcHBlck9iamVjdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTAxLDYgKzUwMSw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTdHJpbmdCdWlsZGVyLmggXApAQCAtNTA4LDYgKzUxMCw4IEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nSm9pbmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZUluZm8uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNWYWx1ZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTQsOSArMTk0LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL0pTT05PYmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwIFwKKyAgICBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwIFwKICAgICBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIFwKICAgICBy
dW50aW1lL0pTU3RyaW5nLmNwcCBcCiAgICAgcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAgXAor
ICAgIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYWx1
ZS5jcHAgXAogICAgIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAgXAogICAgIHJ1bnRpbWUv
SlNXcmFwcGVyT2JqZWN0LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBFWFBPUlRT
CiAgICAgP2RlbGV0ZU93bmVkUHRyQFdURkBAWUFYUEFVSEZPTlRfX0BAQFoKICAgICA/ZGVsZXRl
T3duZWRQdHJAV1RGQEBZQVhQQVVIUkdOX19AQEBaCiAgICAgP2RlbGV0ZVByb3BlcnR5QEpTT2Jq
ZWN0QEpTQ0BAU0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVAMkBA
WgotICAgID9kZWxldGVQcm9wZXJ0eUBKU1ZhcmlhYmxlT2JqZWN0QEpTQ0BAU0FfTlBBVkpTQ2Vs
bEAyQFBBVkV4ZWNTdGF0ZUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgorICAgID9kZWxldGVQcm9wZXJ0
eUBKU1N5bWJvbFRhYmxlT2JqZWN0QEpTQ0BAU0FfTlBBVkpTQ2VsbEAyQFBBVkV4ZWNTdGF0ZUAy
QFZQcm9wZXJ0eU5hbWVAMkBAWgogICAgID9kZWxldGVQcm9wZXJ0eUJ5SW5kZXhASlNPYmplY3RA
SlNDQEBTQV9OUEFWSlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJASUBaCiAgICAgP2RlbGV0ZVRhYmxl
QEhhc2hUYWJsZUBKU0NAQFFCRVhYWgogICAgID9kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb25A
U3RydWN0dXJlQEpTQ0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQFZQcm9wZXJ0eU5hbWVAMkBAWgpA
QCAtMTk0LDcgKzE5NCw3IEBAIEVYUE9SVFMKICAgICA/Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
QEpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FfTlBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAVlBy
b3BlcnR5TmFtZUAyQEFBVlByb3BlcnR5RGVzY3JpcHRvckAyQEBaCiAgICAgP2dldE93blByb3Bl
cnR5RGVzY3JpcHRvckBKU09iamVjdEBKU0NAQFNBX05QQVYxMkBQQVZFeGVjU3RhdGVAMkBWUHJv
cGVydHlOYW1lQDJAQUFWUHJvcGVydHlEZXNjcmlwdG9yQDJAQFoKICAgICA/Z2V0T3duUHJvcGVy
dHlOYW1lc0BKU09iamVjdEBKU0NAQFNBWFBBVjEyQFBBVkV4ZWNTdGF0ZUAyQEFBVlByb3BlcnR5
TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVAMkBAWgotICAgID9nZXRPd25Qcm9wZXJ0eU5h
bWVzQEpTVmFyaWFibGVPYmplY3RASlNDQEBTQVhQQVZKU09iamVjdEAyQFBBVkV4ZWNTdGF0ZUAy
QEFBVlByb3BlcnR5TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVAMkBAWgorICAgID9nZXRP
d25Qcm9wZXJ0eU5hbWVzQEpTU3ltYm9sVGFibGVPYmplY3RASlNDQEBTQVhQQVZKU09iamVjdEAy
QFBBVkV4ZWNTdGF0ZUAyQEFBVlByb3BlcnR5TmFtZUFycmF5QDJAVzRFbnVtZXJhdGlvbk1vZGVA
MkBAWgogICAgID9nZXRPd25Qcm9wZXJ0eVNsb3RASlNHbG9iYWxPYmplY3RASlNDQEBTQV9OUEFW
SlNDZWxsQDJAUEFWRXhlY1N0YXRlQDJAVlByb3BlcnR5TmFtZUAyQEFBVlByb3BlcnR5U2xvdEAy
QEBaCiAgICAgP2dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhASlNBcnJheUBKU0NAQFNBX05QQVZK
U0NlbGxAMkBQQVZFeGVjU3RhdGVAMkBJQUFWUHJvcGVydHlTbG90QDJAQFoKICAgICA/Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleEBKU09iamVjdEBKU0NAQFNBX05QQVZKU0NlbGxAMkBQQVZFeGVj
U3RhdGVAMkBJQUFWUHJvcGVydHlTbG90QDJAQFoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiAxMTk2
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtODc0LDYg
Kzg3NCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxydW50aW1lXEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIgorCQkJCT4KKwkJ
CTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTU2Vn
bWVudGVkVmFyaWFibGVPYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1N0YXRpY1Njb3BlT2JqZWN0LmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CkBAIC04OTgsNiArOTA2LDE0IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KIAkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuY3Bw
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxy
dW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU1R5cGUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE5NjA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsMTAgQEAKIAkJMEY3QjI5
NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8q
IERGR0NhcGFiaWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGN0IyOTRDMTRDM0NENDMwMDdDM0RCMSAvKiBERkdCeXRlQ29kZUNhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVGMDhD
QzE0NkJFNjAyMDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RC
MSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQzA5NzdFMTQ2OUVCQzQwMENGMjQ0MiAvKiBERkdDb21tb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjkxOUQwQzE1N0VFMDlG
MDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07CisJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAv
KiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBF
MTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsK
KwkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBG
MTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUQxNENBN0RD
MzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5jcHAgKi87IH07CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUYxNENBN0RDQTAw
ODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0
dXMuY3BwICovOyB9OwpAQCAtODI4LDYgKzgzMiwxMCBAQAogCQkwRjc3MDA4RTE0MDJGREQ2MDA3
OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3
MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGN0IyOTQ4MTRDM0NEMjMwMDdDM0RCMSAvKiBERkdDQ2FsbEhl
bHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0NhbGxIZWxwZXJz
Lmg7IHBhdGggPSBkZmcvREZHQ0NhbGxIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmpl
Y3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkxOUQwQTE1N0VFMDlEMDA0
QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkxOUQwRjE1
N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxs
TGlua1N0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxs
TGlua1N0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk0MTRD
QTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MzQsNiArMTk0Miw4IEBACiAJCQkJQTdGOTkzNUQwRkQ3
MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCAqLywKIAkJCQlBNzI3RkY2NjBEQTMwNTNCMDBF
NTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgKi8sCiAJCQkJQTcyN0ZGNjUwREEz
MDUzQjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCAqLywKKwkJCQkwRjkxOUQw
RTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi8sCisJ
CQkJMEY5MTlEMEYxNTdGMzMyNzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aCAqLywKIAkJCQlBN0U0MkMxOTBFMzkzODgzMDA2NUE1NDQgLyogSlNTdGF0aWNTY29wZU9iamVj
dC5jcHAgKi8sCiAJCQkJQTdFNDJDMTgwRTM5Mzg4MzAwNjVBNTQ0IC8qIEpTU3RhdGljU2NvcGVP
YmplY3QuaCAqLywKIAkJCQlCQzAyRTlCNjBFMTg0MkZBMDAwRjkyOTcgLyogSlNTdHJpbmcuY3Bw
ICovLApAQCAtMTk0MSw2ICsxOTUxLDggQEAKIAkJCQk4NkU4NTUzODExMUI5OTY4MDAxQUY1MUUg
LyogSlNTdHJpbmdCdWlsZGVyLmggKi8sCiAJCQkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8q
IEpTU3RyaW5nSm9pbmVyLmNwcCAqLywKIAkJCQkyNjAwQjVBNTE1MkJBQUE3MDA5MUVFNUYgLyog
SlNTdHJpbmdKb2luZXIuaCAqLywKKwkJCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgKi8sCisJCQkJMEY5MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8q
IEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLywKIAkJCQkxNEFCQjQ1NDA5OUMyQTBGMDBFMkEyNEYg
LyogSlNUeXBlLmggKi8sCiAJCQkJNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8qIEpTVHlwZUlu
Zm8uaCAqLywKIAkJCQlGNjkyQTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogSlNWYWx1ZS5jcHAgKi8s
CkBAIC0yNjU3LDYgKzI2NjksOCBAQAogCQkJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODFBRDMxNTRGQjRGMDAwOTgzRTcy
IC8qIERGR0RvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTYwMTVFMTU2MTk4Qzkw
MEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzIyOSw2ICszMjQzLDggQEAK
IAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1NzU0NEE5
MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
OTE5RDBDMTU3RUUwOUYwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MjMsMTUgKzkyMywxNSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNv
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewogICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSAo
KytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIGdldF9nbG9iYWxf
dmFyXHQgJXMsICVkXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCks
IGluZGV4KTsKKyAgICAgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2lu
dGVyID0gKCsraXQpLT51LnJlZ2lzdGVyUG9pbnRlcjsKKyAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIGdldF9nbG9iYWxfdmFyXHQgJXMsIGclZCglcClcbiIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUoZXhlYywgcjApLmRhdGEoKSwgbV9nbG9iYWxPYmplY3QtPmZpbmRSZWdpc3RlckluZGV4KHJl
Z2lzdGVyUG9pbnRlciksIHJlZ2lzdGVyUG9pbnRlcik7CiAgICAgICAgICAgICBpdCsrOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3Zh
cjogewotICAgICAgICAgICAgaW50IGluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9ICgrK2l0KS0+dS5y
ZWdpc3RlclBvaW50ZXI7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGRhdGFMb2coIlslNGRdIHB1dF9nbG9iYWxfdmFyXHQgJWQsICVzXG4iLCBs
b2NhdGlvbiwgaW5kZXgsIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGRhdGFMb2coIlslNGRdIHB1dF9nbG9iYWxfdmFyXHQgZyVkKCVwKSwgJXNcbiIsIGxvY2F0
aW9uLCBtX2dsb2JhbE9iamVjdC0+ZmluZFJlZ2lzdGVySW5kZXgocmVnaXN0ZXJQb2ludGVyKSwg
cmVnaXN0ZXJQb2ludGVyLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmRhdGEoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZTogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJl
dmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIEluc3RydWN0aW9uKExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pIHsg
dS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87IH0KICAgICAgICAgCiAgICAgICAgIEluc3Ry
dWN0aW9uKFZhbHVlUHJvZmlsZSogcHJvZmlsZSkgeyB1LnByb2ZpbGUgPSBwcm9maWxlOyB9Cisg
ICAgICAgIAorICAgICAgICBJbnN0cnVjdGlvbihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lz
dGVyUG9pbnRlcikgeyB1LnJlZ2lzdGVyUG9pbnRlciA9IHJlZ2lzdGVyUG9pbnRlcjsgfQogCiAg
ICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIE9wY29kZSBvcGNvZGU7CkBAIC0xOTgsNiArMjAw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVj
dHVyZT4gc3RydWN0dXJlOwogICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVD
aGFpbj4gc3RydWN0dXJlQ2hhaW47CiAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2Vs
bD4ganNDZWxsOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBv
aW50ZXI7CiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXJGdW5j
OwogICAgICAgICAgICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKICAgICAgICAg
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSwxMSBAQCB2b2lkIFJl
c29sdmVSZXN1bHQ6OmNoZWNrVmFsaWRpdHkoKQogfQogI2VuZGlmCiAKK1dyaXRlQmFycmllcjxV
bmtub3duPiogUmVzb2x2ZVJlc3VsdDo6cmVnaXN0ZXJQb2ludGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gJmpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+cmVnaXN0ZXJB
dChpbmRleCgpKTsKK30KKwogc3RhdGljIGJvb2wgc19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxz
ZTsKIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wg
ZHVtcHNHZW5lcmF0ZWRDb2RlKQpAQCAtMjgwLDcgKzI4NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihQcm8KICAgICBzaXplX3QgbmV3R2xvYmFscyA9IHZhclN0YWNr
LnNpemUoKSArIGZ1bmN0aW9uU3RhY2suc2l6ZSgpOwogICAgIGlmICghbmV3R2xvYmFscykKICAg
ICAgICAgcmV0dXJuOwotICAgIGdsb2JhbE9iamVjdC0+cmVzaXplUmVnaXN0ZXJzKHN5bWJvbFRh
YmxlLT5zaXplKCkgKyBuZXdHbG9iYWxzKTsKKyAgICBnbG9iYWxPYmplY3QtPmFkZFJlZ2lzdGVy
cyhuZXdHbG9iYWxzKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25TdGFj
ay5zaXplKCk7ICsraSkgewogICAgICAgICBGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbiA9IGZ1
bmN0aW9uU3RhY2tbaV07CkBAIC02NzksNiArNjg0LDE0IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OnJldHJpZXZlTGFzdFVuYXIKICAgICBzcmNJbmRleCA9IGluc3RydWN0aW9ucygpLmF0KHNp
emUgLSAxKS51Lm9wZXJhbmQ7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZl
TGFzdFVuYXJ5T3AoV3JpdGVCYXJyaWVyPFVua25vd24+KiYgZHN0UG9pbnRlciwgaW50JiBzcmNJ
bmRleCkKK3sKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDMpOworICAgIHNp
emVfdCBzaXplID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworICAgIGRzdFBvaW50ZXIgPSBpbnN0
cnVjdGlvbnMoKS5hdChzaXplIC0gMikudS5yZWdpc3RlclBvaW50ZXI7CisgICAgc3JjSW5kZXgg
PSBpbnN0cnVjdGlvbnMoKS5hdChzaXplIC0gMSkudS5vcGVyYW5kOworfQorCiB2b2lkIEFMV0FZ
U19JTkxJTkUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJld2luZEJpbmFyeU9wKCkKIHsKICAgICBBU1NF
UlQoaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDQpOwpAQCAtMTE3OCw3ICsxMTkxLDcgQEAgUmVz
b2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZQogICAgICAgICAgICAgZmxhZ3Mg
fD0gUmVzb2x2ZVJlc3VsdDo6RHluYW1pY0ZsYWc7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfSAgICAgICAgCi0gICAgICAgIEpTVmFyaWFibGVPYmplY3QqIGN1cnJlbnRWYXJpYWJsZU9i
amVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY3VycmVudFNjb3BlKTsKKyAgICAgICAg
SlNTeW1ib2xUYWJsZU9iamVjdCogY3VycmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpTU3lt
Ym9sVGFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmdldChwcm9wZXJ0
eS5pbXBsKCkpOwogCiAgICAgICAgIC8vIEZvdW5kIHRoZSBwcm9wZXJ0eQpAQCAtMTI0Myw3ICsx
MjU2LDcgQEAgUmVzb2x2ZVJlc3VsdCBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZQogICAgICAg
ICBKU09iamVjdCogY3VycmVudFNjb3BlID0gaXRlci0+Z2V0KCk7CiAgICAgICAgIGlmICghY3Vy
cmVudFNjb3BlLT5pc1ZhcmlhYmxlT2JqZWN0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgSlNWYXJpYWJsZU9iamVjdCogY3VycmVudFZhcmlhYmxlT2JqZWN0ID0ganNDYXN0PEpT
VmFyaWFibGVPYmplY3QqPihjdXJyZW50U2NvcGUpOworICAgICAgICBKU1N5bWJvbFRhYmxlT2Jq
ZWN0KiBjdXJyZW50VmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVjdCo+
KGN1cnJlbnRTY29wZSk7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBjdXJyZW50
VmFyaWFibGVPYmplY3QtPnN5bWJvbFRhYmxlKCkuZ2V0KHByb3BlcnR5LmltcGwoKSk7CiAgICAg
ICAgIGlmIChlbnRyeS5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTQ0Niwx
NiArMTQ1OSwxNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFN0CiAg
ICAgY2FzZSBSZXNvbHZlUmVzdWx0OjpJbmRleGVkR2xvYmFsOgogICAgIGNhc2UgUmVzb2x2ZVJl
c3VsdDo6UmVhZE9ubHlJbmRleGVkR2xvYmFsOgogICAgICAgICBpZiAobV9sYXN0T3Bjb2RlSUQg
PT0gb3BfcHV0X2dsb2JhbF92YXIpIHsKLSAgICAgICAgICAgIGludCBkc3RJbmRleDsKKyAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZHN0UG9pbnRlcjsKICAgICAgICAgICAgIGlu
dCBzcmNJbmRleDsKLSAgICAgICAgICAgIHJldHJpZXZlTGFzdFVuYXJ5T3AoZHN0SW5kZXgsIHNy
Y0luZGV4KTsKLSAgICAgICAgICAgIGlmIChkc3RJbmRleCA9PSByZXNvbHZlUmVzdWx0LmluZGV4
KCkgJiYgc3JjSW5kZXggPT0gZHN0LT5pbmRleCgpKQorICAgICAgICAgICAgcmV0cmlldmVMYXN0
VW5hcnlPcChkc3RQb2ludGVyLCBzcmNJbmRleCk7CisgICAgICAgICAgICBpZiAoZHN0UG9pbnRl
ciA9PSByZXNvbHZlUmVzdWx0LnJlZ2lzdGVyUG9pbnRlcigpICYmIHNyY0luZGV4ID09IGRzdC0+
aW5kZXgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICB9CiAKICAgICAg
ICAgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZ2xvYmFsX3Zhcik7CiAgICAg
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJlc3VsdC5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHJlc29sdmVSZXN1bHQucmVnaXN0ZXJQb2ludGVyKCkpOwogICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAKQEAg
LTE0ODMsNyArMTQ5Niw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
U3QKICAgICBjYXNlIFJlc29sdmVSZXN1bHQ6OkluZGV4ZWRHbG9iYWw6CiAgICAgY2FzZSBSZXNv
bHZlUmVzdWx0OjpSZWFkT25seUluZGV4ZWRHbG9iYWw6CiAgICAgICAgIGVtaXRPcGNvZGUob3Bf
cHV0X2dsb2JhbF92YXIpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVJl
c3VsdC5pbmRleCgpKTsKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVSZXN1
bHQucmVnaXN0ZXJQb2ludGVyKCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFs
dWUtPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDYgKzE5Nyw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgaW5kZXgoKSBjb25zdCB7IEFTU0VSVCAoaXNJbmRl
eGVkKCkgfHwgaXNSZWdpc3RlcigpKTsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAgICAgc2l6ZV90
IGRlcHRoKCkgY29uc3QgeyBBU1NFUlQoaXNTY29wZWQoKSk7IHJldHVybiBtX2RlcHRoOyB9CiAg
ICAgICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IEFTU0VSVChpc0dsb2JhbCgp
KTsgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CisgICAg
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKCkgY29uc3Q7CiAKICAg
ICAgICAgYm9vbCBpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYgUmVnaXN0ZXJG
bGFnOyB9CiAgICAgICAgIGJvb2wgaXNEeW5hbWljKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICYg
RHluYW1pY0ZsYWc7IH0KQEAgLTU0MSw2ICs1NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgVmFsdWVQcm9maWxlKiBlbWl0UHJvZmlsZWRPcGNvZGUoT3Bjb2RlSUQpOwogICAgICAgICB2
b2lkIHJldHJpZXZlTGFzdEJpbmFyeU9wKGludCYgZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBp
bnQmIHNyYzJJbmRleCk7CiAgICAgICAgIHZvaWQgcmV0cmlldmVMYXN0VW5hcnlPcChpbnQmIGRz
dEluZGV4LCBpbnQmIHNyY0luZGV4KTsKKyAgICAgICAgdm9pZCByZXRyaWV2ZUxhc3RVbmFyeU9w
KFdyaXRlQmFycmllcjxVbmtub3duPiomIGRzdFBvaW50ZXIsIGludCYgc3JjSW5kZXgpOwogICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3aW5kQmluYXJ5T3AoKTsKICAgICAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHJld2luZFVuYXJ5T3AoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxMTk2MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsMjEgKzExNSw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yR2xvYmFsVmFyKEdQUlJlZyBnbG9iYWwsIGludDMy
X3QgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoZ2xvYmFsLCB2YXJO
dW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWRkcmVzcyB0
YWdGb3JHbG9iYWxWYXIoR1BSUmVnIGdsb2JhbCwgaW50MzJfdCB2YXJOdW1iZXIpCi0gICAgewot
ICAgICAgICByZXR1cm4gQWRkcmVzcyhnbG9iYWwsIHZhck51bWJlciAqIHNpemVvZihSZWdpc3Rl
cikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OwotICAgIH0KLQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3JHbG9iYWxWYXIoR1BSUmVn
IGdsb2JhbCwgaW50MzJfdCB2YXJOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gQWRkcmVz
cyhnbG9iYWwsIHZhck51bWJlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9Ci0KICAgICBz
dGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIp
CiAgICAgewogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgdmlydHVhbFJlZ2lzdGVyICogc2l6ZW9mKFJlZ2lzdGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTE5
NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMTYsMTQgKzIyMTYsMjAgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFyOiB7
CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRHbG9iYWxWYXIgPSBhZGRU
b0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpLCBPcEluZm8ocHJlZGljdGlvbikpOworICAgICAgICAgICAgTm9kZUluZGV4IGdldEdsb2Jh
bFZhciA9IGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgR2V0R2xvYmFsVmFyLAorICAgICAg
ICAgICAgICAgIE9wSW5mbyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPmFzc2VydFJlZ2lzdGVySXNJblRoaXNPYmplY3QoY3VycmVudEluc3RydWN0aW9uWzJd
LnUucmVnaXN0ZXJQb2ludGVyKSksCisgICAgICAgICAgICAgICAgT3BJbmZvKHByZWRpY3Rpb24p
KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRH
bG9iYWxWYXIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2dsb2JhbF92YXIpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewogICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaCgK
KyAgICAgICAgICAgICAgICBQdXRHbG9iYWxWYXIsCisgICAgICAgICAgICAgICAgT3BJbmZvKG1f
aW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXNzZXJ0UmVnaXN0
ZXJJc0luVGhpc09iamVjdChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIp
KSwKKyAgICAgICAgICAgICAgICB2YWx1ZSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTggKzE5
NCwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAg
ICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlciwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmds
b2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LnZhck51bWJlcigpID09IHZhck51bWJlciAmJiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9y
KG5vZGUuY29kZU9yaWdpbikgPT0gZ2xvYmFsT2JqZWN0KQorICAgICAgICAgICAgICAgIGlmIChu
b2RlLnJlZ2lzdGVyUG9pbnRlcigpID09IHJlZ2lzdGVyUG9pbnRlcikKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCkuaW5kZXgoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMTcsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGdsb2JhbFZh
clN0b3JlRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQorICAgIE5vZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKFdyaXRl
QmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5vZGVJbmRl
eCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTIyNiwxMiArMjI2LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgewogICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUucmVnaXN0ZXJQb2ludGVyKCkgPT0gcmVnaXN0ZXJQb2ludGVyKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5yZWdpc3RlclBvaW50ZXIoKSA9PSByZWdpc3RlclBvaW50ZXIp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCkBAIC05ODIsMTMgKzk4MiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFwIGFjY2Vzc2VzLiBUaGVzZSBhcmUgbm90IHF1aXRl
IHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKICAgICAgICAgLy8gb3B0aW1pemUgdGhlbSBwcm92aWRl
ZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlvbnMgYXJlIG1ldC4KICAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWlu
YXRpb24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2Fk
RWxpbWluYXRpb24obm9kZS5yZWdpc3RlclBvaW50ZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgICAgICBp
ZiAobV9maXhwb2ludFN0YXRlID09IEZpeHBvaW50Tm90Q29udmVyZ2VkKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRp
b24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNv
ZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5h
dGlvbihub2RlLnJlZ2lzdGVyUG9pbnRlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDEzIEBA
IHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICAgICAgZGF0YUxvZygi
JXN2YXIldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudmFyTnVtYmVyKCkpOwogICAg
ICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKG5vZGUuaGFzUmVnaXN0ZXJQ
b2ludGVyKCkpIHsKKyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICIlc2dsb2JhbCV1KCVw
KSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsCisgICAgICAgICAgICBnbG9iYWxPYmplY3RGb3Io
bm9kZS5jb2RlT3JpZ2luKS0+ZmluZFJlZ2lzdGVySW5kZXgobm9kZS5yZWdpc3RlclBvaW50ZXIo
KSksCisgICAgICAgICAgICBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKKyAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CisgICAgfQogICAgIGlmIChub2RlLmhhc0lkZW50aWZpZXIoKSkgewogICAg
ICAgICBkYXRhTG9nKCIlc2lkJXV7JXN9IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCksIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKG5vZGUuaWRlbnRpZmll
ck51bWJlcigpKS51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTAsNiArMzEwLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX3N0
cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgeworICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKTsKKyAg
ICB9CisgICAgCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGVGb3IoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTk2MDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIxLDcgKzQyMSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1Zhck51
bWJlcigpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRHbG9iYWxWYXIgfHwgb3Ao
KSA9PSBQdXRHbG9iYWxWYXIgfHwgb3AoKSA9PSBHZXRTY29wZWRWYXIgfHwgb3AoKSA9PSBQdXRT
Y29wZWRWYXI7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldFNjb3BlZFZhciB8fCBvcCgpID09
IFB1dFNjb3BlZFZhcjsKICAgICB9CiAKICAgICB1bnNpZ25lZCB2YXJOdW1iZXIoKQpAQCAtNDI5
LDYgKzQyOSwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VSVChoYXNWYXJOdW1iZXIo
KSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNS
ZWdpc3RlclBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gR2V0R2xvYmFs
VmFyIHx8IG9wKCkgPT0gUHV0R2xvYmFsVmFyOworICAgIH0KKyAgICAKKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKKyAgICB9CiAKICAg
ICBib29sIGhhc1Njb3BlQ2hhaW5EZXB0aCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKICNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpT
VmFyaWFibGVPYmplY3QuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBA
IC0zNTY0LDMzICszNTY1LDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEdsb2JhbFZhcjogewotICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbik7Ci0gICAg
ICAgIG1faml0LmxvYWRQdHIoY29uc3RfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qKj4oZ2xv
YmFsT2JqZWN0LT5hZGRyZXNzT2ZSZWdpc3RlcnMoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yR2xvYmFsVmFyKHJlc3VsdC5ncHIoKSwg
bm9kZS52YXJOdW1iZXIoKSksIHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3JHbG9iYWxWYXIocmVzdWx0LmdwcigpLCBub2RlLnZhck51
bWJlcigpKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KG5vZGUucmVnaXN0ZXJQb2ludGVyKCkpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWQuZ3ByKCksIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3Vs
dFRhZy5ncHIoKSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZXN1bHRQYXlsb2FkLmdwcigpLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAKLSAgICAgICAganNW
YWx1ZVJlc3VsdChzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBnbG9iYWxPYmplY3QodGhpcyk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVn
IGdsb2JhbE9iamVjdFJlZyA9IGdsb2JhbE9iamVjdC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNj
cmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotCi0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdp
bikpLCBnbG9iYWxPYmplY3RSZWcpOwotCi0gICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSwgdmFsdWUudGFnR1BSKCksIG5vZGUuY2hpbGQx
KCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
aWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0
Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLCB2YWx1ZS50YWdHUFIoKSwgbm9kZS5j
aGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOworICAg
ICAgICB9CiAKLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhn
bG9iYWxPYmplY3RSZWcsIEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCBz
Y3JhdGNoUmVnKTsKLSAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS50YWdHUFIoKSwgSklUQ29t
cGlsZXI6OnRhZ0Zvckdsb2JhbFZhcihzY3JhdGNoUmVnLCBub2RlLnZhck51bWJlcigpKSk7Ci0g
ICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5
bG9hZEZvckdsb2JhbFZhcihzY3JhdGNoUmVnLCBub2RlLnZhck51bWJlcigpKSk7CisgICAgICAg
IC8vIEZJWE1FOiBpZiB3ZSBoYXBwZW4gdG8gaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyIC0gYW5kIF9P
TkxZXyBpZiB3ZSBoYXBwZW4gdG8gaGF2ZQorICAgICAgICAvLyBhIHNwYXJlIHJlZ2lzdGVyIC0g
YSBnb29kIG9wdGltaXphdGlvbiB3b3VsZCBiZSB0byBwdXQgdGhlIHJlZ2lzdGVyIHBvaW50ZXIg
aW50bworICAgICAgICAvLyBhIHJlZ2lzdGVyIGFuZCB0aGVuIGRvIGEgemVybyBvZmZzZXQgc3Rv
cmUgZm9sbG93ZWQgYnkgYSBmb3VyLW9mZnNldCBzdG9yZSAob3IKKyAgICAgICAgLy8gdmljZS12
ZXJzYSBkZXBlbmRpbmcgb24gZW5kaWFubmVzcykuCisgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWUudGFnR1BSKCksIG5vZGUucmVnaXN0ZXJQb2ludGVyKCktPnRhZ1BvaW50ZXIoKSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWUucGF5bG9hZEdQUigpLCBub2RlLnJlZ2lzdGVyUG9pbnRl
cigpLT5wYXlsb2FkUG9pbnRlcigpKTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTkzLDkgKzM1OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKIAotICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKTsKLSAgICAgICAgbV9qaXQubG9h
ZFB0cihnbG9iYWxPYmplY3QtPmFkZHJlc3NPZlJlZ2lzdGVycygpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yR2xvYmFsVmFyKHJl
c3VsdC5ncHIoKSwgbm9kZS52YXJOdW1iZXIoKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1f
aml0LmxvYWRQdHIobm9kZS5yZWdpc3RlclBvaW50ZXIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKQEAgLTM2MDMsMTggKzM2MDEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSBnbG9iYWxPYmplY3QodGhpcyk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIGdsb2JhbE9iamVjdFJlZyA9IGdsb2JhbE9i
amVjdC5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwot
Ci0gICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpLCBnbG9iYWxPYmplY3RSZWcpOwotCi0g
ICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KSwgdmFsdWUuZ3ByKCksIG5vZGUuY2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNj
ZXNzLCBzY3JhdGNoUmVnKTsKLQotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGdsb2JhbE9iamVjdFJlZywgSlNWYXJpYWJsZU9iamVjdDo6b2Zmc2V0T2ZSZWdp
c3RlcnMoKSksIHNjcmF0Y2hSZWcpOwotICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIo
KSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3JHbG9iYWxWYXIoc2NyYXRjaFJlZywgbm9kZS52YXJO
dW1iZXIoKSkpOworICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbiksIHZh
bHVlLmdwcigpLCBub2RlLmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywg
c2NyYXRjaFJlZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlLmdwcigpLCBub2RlLnJlZ2lzdGVyUG9pbnRlcigpKTsKIAogICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBzdGF0aWMgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAg
ICAgICAgc3RhdGljIHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKIAorICAgICAgICBzdGF0
aWMgYm9vbCBpc1dyaXRlQmFycmllckVuYWJsZWQoKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3Jp
dGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgICAgICBzdGF0aWMgdm9pZCB3
cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB1aW50
OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCopOwpAQCAtMjgyLDYgKzI4MywxNSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpLT5zZXRNYXJr
ZWQoY2VsbCk7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkKKyAgICB7CisjaWYgRU5BQkxFKEdHQykgfHwgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorICAgIH0KKwogI2lmIEVOQUJMRShHR0MpCiAgICAgaW5saW5lIHVpbnQ4
X3QqIEhlYXA6OmFkZHJlc3NPZkNhcmRGb3IoSlNDZWxsKiBjZWxsKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
cmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0Myw3ICsxNTQzLDcgQEAgSlNWYWx1
ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIGZvciAoU2NvcGVDaGFpbk5v
ZGUqIG5vZGUgPSBzY29wZUNoYWluOyA7IG5vZGUgPSBub2RlLT5uZXh0LmdldCgpKSB7CiAgICAg
ICAgIEFTU0VSVChub2RlKTsKICAgICAgICAgaWYgKG5vZGUtPm9iamVjdC0+aXNWYXJpYWJsZU9i
amVjdCgpICYmICFub2RlLT5vYmplY3QtPmlzU3RhdGljU2NvcGVPYmplY3QoKSkgewotICAgICAg
ICAgICAgdmFyaWFibGVPYmplY3QgPSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KG5vZGUtPm9i
amVjdC5nZXQoKSk7CisgICAgICAgICAgICB2YXJpYWJsZU9iamVjdCA9IGpzQ2FzdDxKU1N5bWJv
bFRhYmxlT2JqZWN0Kj4obm9kZS0+b2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjg2MCwzMCArMjg2MCwyOCBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAg
ICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9nZXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAvKiBn
ZXRfZ2xvYmFsX3ZhciBkc3QocikgZ2xvYmFsT2JqZWN0KGMpIGluZGV4KG4pCisgICAgICAgIC8q
IGdldF9nbG9iYWxfdmFyIGRzdChyKSBnbG9iYWxPYmplY3QoYykgcmVnaXN0ZXJQb2ludGVyKG4p
CiAKICAgICAgICAgICAgR2V0cyB0aGUgZ2xvYmFsIHZhciBhdCBnbG9iYWwgc2xvdCBpbmRleCBh
bmQgcGxhY2VzIGl0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgICovCiAgICAgICAgIGludCBk
c3QgPSB2UENbMV0udS5vcGVyYW5kOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogc2NvcGUgPSBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBBU1NFUlQoc2NvcGUtPmlzR2xvYmFs
T2JqZWN0KCkpOwotICAgICAgICBpbnQgaW5kZXggPSB2UENbMl0udS5vcGVyYW5kOworICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IHZQQ1syXS51LnJlZ2lz
dGVyUG9pbnRlcjsKIAotICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoZHN0KSA9IHNjb3Bl
LT5yZWdpc3RlckF0KGluZGV4KS5nZXQoKTsKKyAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRS
KGRzdCkgPSByZWdpc3RlclBvaW50ZXItPmdldCgpOwogICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9nZXRfZ2xvYmFsX3Zhcik7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAg
ICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9wdXRfZ2xvYmFsX3ZhcikgewotICAgICAgICAvKiBw
dXRfZ2xvYmFsX3ZhciBnbG9iYWxPYmplY3QoYykgaW5kZXgobikgdmFsdWUocikKKyAgICAgICAg
LyogcHV0X2dsb2JhbF92YXIgZ2xvYmFsT2JqZWN0KGMpIHJlZ2lzdGVyUG9pbnRlcihuKSB2YWx1
ZShyKQogICAgICAgICAgCiAgICAgICAgICAgIFB1dHMgdmFsdWUgaW50byBnbG9iYWwgc2xvdCBp
bmRleC4KICAgICAgICAgICovCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBzY29wZSA9IGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIEFTU0VSVChzY29wZS0+aXNHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgICAgIGludCBpbmRleCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CisgICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyID0gdlBDWzFdLnUucmVnaXN0ZXJQ
b2ludGVyOwogICAgICAgICBpbnQgdmFsdWUgPSB2UENbMl0udS5vcGVyYW5kOwogICAgICAgICAK
LSAgICAgICAgc2NvcGUtPnJlZ2lzdGVyQXQoaW5kZXgpLnNldCgqZ2xvYmFsRGF0YSwgc2NvcGUs
IGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKKyAgICAgICAgcmVnaXN0ZXJQb2ludGVy
LT5zZXQoKmdsb2JhbERhdGEsIHNjb3BlLCBjYWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7
CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKTsKICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTE5
NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDEzIEBACiAjaW5jbHVkZSAiSklULmgi
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVk
ZSAiSlNWYXJpYWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgpAQCAtMTA2MCwxMyAr
MTA2MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2NvcGVkX3ZhcihJbnN0cnVjCiB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgQVNTRVJUKGdsb2JhbE9iamVjdC0+aXNHbG9iYWxPYmplY3QoKSk7Ci0gICAg
aW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGxvYWRQ
dHIoJmdsb2JhbE9iamVjdC0+bV9yZWdpc3RlcnMsIHJlZ1QyKTsKKyAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LnJlZ2lz
dGVyUG9pbnRlcjsKIAotICAgIGVtaXRMb2FkKGluZGV4LCByZWdUMSwgcmVnVDAsIHJlZ1QyKTsK
KyAgICBsb2FkMzIocmVnaXN0ZXJQb2ludGVyLT50YWdQb2ludGVyKCksIHJlZ1QxKTsKKyAgICBs
b2FkMzIocmVnaXN0ZXJQb2ludGVyLT5wYXlsb2FkUG9pbnRlcigpLCByZWdUMCk7CiAgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CiAgICAgbWFwKG1fYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX2dldF9nbG9iYWxf
dmFyKSwgZHN0LCByZWdUMSwgcmVnVDApOwpAQCAtMTA3NCwxOCArMTA3MiwyMSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZ2xvYmFsX3ZhcihJbnN0cnVjCiAKIHZvaWQgSklUOjplbWl0X29wX3B1
dF9nbG9iYWxfdmFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50
IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LnJl
Z2lzdGVyUG9pbnRlcjsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCByZWdUMik7Ci0KLSAgICBlbWl0
V3JpdGVCYXJyaWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1l
ZGlhdGVzLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgCisgICAgaWYgKEhl
YXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QpLCByZWdUMik7CisgICAgICAgIAorICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGdsb2JhbE9iamVjdCwgcmVnVDEsIHJlZ1QzLCBTaG91bGRGaWx0ZXJJbW1lZGlhdGVzLCBX
cml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcyk7CisgICAgfQogCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QyLCBKU1ZhcmlhYmxlT2JqZWN0OjpvZmZzZXRPZlJlZ2lzdGVycygpKSwgcmVnVDIp
OwotICAgIGVtaXRTdG9yZShpbmRleCwgcmVnVDEsIHJlZ1QwLCByZWdUMik7CisgICAgc3RvcmUz
MihyZWdUMSwgcmVnaXN0ZXJQb2ludGVyLT50YWdQb2ludGVyKCkpOworICAgIHN0b3JlMzIocmVn
VDAsIHJlZ2lzdGVyUG9pbnRlci0+cGF5bG9hZFBvaW50ZXIoKSk7CiAgICAgbWFwKG1fYnl0ZWNv
ZGVPZmZzZXQgKyBPUENPREVfTEVOR1RIKG9wX3B1dF9nbG9iYWxfdmFyKSwgdmFsdWUsIHJlZ1Qx
LCByZWdUMCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIg
KzMwLDEzIEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVElubGluZU1ldGhv
ZHMuaCIKICNpbmNsdWRlICJKSVRTdHViQ2FsbC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
IgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUmVzdWx0VHlwZS5oIgpAQCAtMTAxMCw5ICsxMDExLDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3Njb3BlZF92YXIoSW5zdHJ1YwogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZ2xv
YmFsX3ZhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEpTVmFyaWFi
bGVPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICBsb2FkUHRyKCZnbG9iYWxPYmplY3QtPm1fcmVnaXN0ZXJzLCByZWdUMCk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kICogc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
LnJlZ2lzdGVyUG9pbnRlciwgcmVnVDApOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsK
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwogfQpAQCAtMTAyMiwxMSArMTAyMSwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2xv
YmFsX3ZhcihJbnN0cnVjCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOwotCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKGdsb2JhbE9iamVjdCksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTVmFyaWFibGVPYmplY3Q6Om9mZnNldE9mUmVnaXN0ZXJzKCkpLCByZWdUMSk7Ci0gICAgc3Rv
cmVQdHIocmVnVDAsIEFkZHJlc3MocmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmpl
Y3QsIHJlZ1QwLCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9y
VmFyaWFibGVBY2Nlc3MpOworICAgIAorICAgIHN0b3JlUHRyKHJlZ1QwLCBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5yZWdpc3RlclBvaW50ZXIpOworICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihnbG9iYWxPYmplY3QsIHJlZ1Qw
LCByZWdUMiwgU2hvdWxkRmlsdGVySW1tZWRpYXRlcywgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVB
Y2Nlc3MpOwogfQogCiB2b2lkIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQxLDEz
ICsxMDQxLDEwIEBAIF9sbGludF9vcF9wdXRfc2NvcGVkX3ZhcjoKIAogX2xsaW50X29wX2dldF9n
bG9iYWxfdmFyOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkaSA4W1BDXSwgdDEKKyAg
ICBsb2FkcCA4W1BDXSwgdDAKICAgICBsb2FkaSA0W1BDXSwgdDMKLSAgICBsb2FkcCBDb2RlQmxv
Y2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAK
LSAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9yZWdpc3RlcnNbdDBdLCB0MAotICAgIGxvYWRp
IFRhZ09mZnNldFt0MCwgdDEsIDhdLCB0MgotICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbdDAsIHQx
LCA4XSwgdDEKKyAgICBsb2FkaSBUYWdPZmZzZXRbdDBdLCB0MgorICAgIGxvYWRpIFBheWxvYWRP
ZmZzZXRbdDBdLCB0MQogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDMsIDhdCiAgICAg
c3RvcmVpIHQxLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdCiAgICAgbG9hZGkgMTJbUENdLCB0
MwpAQCAtMTA1OCwxNCArMTA1NSwxMSBAQCBfbGxpbnRfb3BfZ2V0X2dsb2JhbF92YXI6CiBfbGxp
bnRfb3BfcHV0X2dsb2JhbF92YXI6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpIDhb
UENdLCB0MQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9j
azo6bV9nbG9iYWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3Jl
Z2lzdGVyc1t0MF0sIHQwCisgICAgbG9hZGkgNFtQQ10sIHQwCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MSwgdDIsIHQzKQotICAgIGxvYWRpIDRbUENdLCB0MQogICAgIHdyaXRlQmFycmll
cih0MiwgdDMpCi0gICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbdDAsIHQxLCA4XQotICAgIHN0b3Jl
aSB0MywgUGF5bG9hZE9mZnNldFt0MCwgdDEsIDhdCisgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRb
dDBdCisgICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W3QwXQogICAgIGRpc3BhdGNoKDMpCiAK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04
OTUsMjggKzg5NSwyMiBAQCBfbGxpbnRfb3BfcHV0X3Njb3BlZF92YXI6CiAKIF9sbGludF9vcF9n
ZXRfZ2xvYmFsX3ZhcjoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGlzIDE2W1BCLCBQ
QywgOF0sIHQxCisgICAgbG9hZHAgMTZbUEIsIFBDLCA4XSwgdDAKICAgICBsb2FkaXMgOFtQQiwg
UEMsIDhdLCB0MwotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVC
bG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0MAotICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0Ojpt
X3JlZ2lzdGVyc1t0MF0sIHQwCi0gICAgbG9hZHAgW3QwLCB0MSwgOF0sIHQyCi0gICAgc3RvcmVw
IHQyLCBbY2ZyLCB0MywgOF0KLSAgICBsb2FkcCAyNFtQQiwgUEMsIDhdLCB0MwotICAgIHZhbHVl
UHJvZmlsZSh0MiwgdDMpCisgICAgbG9hZHAgW3QwXSwgdDEKKyAgICBzdG9yZXAgdDEsIFtjZnIs
IHQzLCA4XQorICAgIGxvYWRwIDI0W1BCLCBQQywgOF0sIHQwCisgICAgdmFsdWVQcm9maWxlKHQx
LCB0MCkKICAgICBkaXNwYXRjaCg0KQogCiAKIF9sbGludF9vcF9wdXRfZ2xvYmFsX3ZhcjoKICAg
ICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzIDE2W1BCLCBQQywgOF0sIHQxCi0gICAgbG9h
ZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVj
dFt0MF0sIHQwCi0gICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fcmVnaXN0ZXJzW3QwXSwgdDAK
KyAgICBsb2FkcCA4W1BCLCBQQywgOF0sIHQwCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MSwgdDIpCi0gICAgbG9hZGlzIDhbUEIsIFBDLCA4XSwgdDEKICAgICB3cml0ZUJhcnJpZXIodDIp
Ci0gICAgc3RvcmVwIHQyLCBbdDAsIHQxLCA4XQorICAgIHN0b3JlcCB0MiwgW3QwXQogICAgIGRp
c3BhdGNoKDMpCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gSlNHbG9iYWxP
YmplY3Q6OnNfaW5mbyA9IHsgIkdsb2JhbE9iamVjdCIsICZKU1ZhcmlhYmxlT2JqZWN0OjpzX2lu
Zm8sIDAsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNHbG9iYWxPYmplY3QpIH07Citjb25zdCBDbGFzc0luZm8gSlNHbG9iYWxPYmplY3Q6OnNfaW5m
byA9IHsgIkdsb2JhbE9iamVjdCIsICZKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpzX2luZm8s
IDAsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2JqZWN0VGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNH
bG9iYWxPYmplY3QpIH07CiAKIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTR2xvYmFs
T2JqZWN0OjpzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0geyAmYWxsb3dzQWNjZXNzRnJvbSwg
JnN1cHBvcnRzUHJvZmlsaW5nLCAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywgJnNob3VsZEludGVy
cnVwdFNjcmlwdCwgJmphdmFTY3JpcHRFeHBlcmltZW50c0VuYWJsZWQgfTsKIApAQCAtMTQ4LDkg
KzE0OCw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEUKICAgICBK
U0dsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0dsb2JhbE9iamVjdCo+KGNlbGwp
OwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0g
SGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+c3ltYm9sVGFi
bGVQdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCisg
ICAgaWYgKHN5bWJvbFRhYmxlUHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgSlNWYXJpYWJs
ZU9iamVjdDo6cHV0KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qp
OworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6cHV0
RGlyZWN0VmlydHVhbChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCkBA
IC0xNTgsMTIgKzE1OCwxMiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFs
KEpTCiAgICAgSlNHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmpl
Y3QqPihvYmplY3QpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVh
cCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7CiAKLSAgICBpZiAodGhpc09iamVj
dC0+c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhleGVjLT5nbG9iYWxEYXRhKCksIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMpKQorICAgIGlmIChzeW1ib2xUYWJsZVB1dFdpdGhB
dHRyaWJ1dGVzKHRoaXNPYmplY3QsIGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgYXR0cmlidXRlcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTVmFsdWUgdmFsdWVC
ZWZvcmUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0
eU5hbWUpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90OwotICAgIEpTVmFyaWFibGVPYmplY3Q6
OnB1dCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpwdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiAgICAgaWYgKCF2YWx1ZUJlZm9yZSkgewogICAgICAgICBKU1Zh
bHVlIHZhbHVlQWZ0ZXIgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAodmFsdWVBZnRlcikKQEAgLTE3Niw3ICsxNzYs
NyBAQCBib29sIEpTR2xvYmFsT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKCiAgICAgSlNHbG9i
YWxPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwog
ICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgIC8vIHNpbGVudGx5IGlnbm9yZSBhdHRlbXB0cyB0
byBhZGQgYWNjZXNzb3JzIGFsaWFzaW5nIHZhcnMuCi0gICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSAmJiB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9wZXJ0eU5h
bWUsIHNsb3QpKQorICAgIGlmIChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkgJiYg
c3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eSh0aGlzT2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKIH0KQEAg
LTM0NSw3ICszNDUsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKICAg
ICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4s
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOwogICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOwotICAgIEpTVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIHZpc2l0SWZOZWVkZWQodmlzaXRvciwgJnRoaXNPYmpl
Y3QtPm1fZ2xvYmFsU2NvcGVDaGFpbik7CiAgICAgdmlzaXRJZk5lZWRlZCh2aXNpdG9yLCAmdGhp
c09iamVjdC0+bV9tZXRob2RDYWxsRHVtbXkpOwpAQCAtMzkzLDE3ICszOTMsNiBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRJZk5lZWRlZCh2aXNp
dG9yLCAmdGhpc09iamVjdC0+bV9yZWdFeHBTdHJ1Y3R1cmUpOwogICAgIHZpc2l0SWZOZWVkZWQo
dmlzaXRvciwgJnRoaXNPYmplY3QtPm1fc3RyaW5nT2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNp
dElmTmVlZGVkKHZpc2l0b3IsICZ0aGlzT2JqZWN0LT5tX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1
cmUpOwotCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJBcnJheSkgewotICAgICAgICAv
LyBPdXRzaWRlIHRoZSBleGVjdXRpb24gb2YgZ2xvYmFsIGNvZGUsIHdoZW4gb3VyIHZhcmlhYmxl
cyBhcmUgdG9ybiBvZmYsCi0gICAgICAgIC8vIHdlIGNhbiBtYXJrIHRoZSB0b3JuLW9mZiBhcnJh
eS4KLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9yZWdpc3RlckFy
cmF5LmdldCgpLCB0aGlzT2JqZWN0LT5tX3JlZ2lzdGVyQXJyYXlTaXplKTsKLSAgICB9IGVsc2Ug
aWYgKHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzKSB7Ci0gICAgICAgIC8vIER1cmluZyBleGVjdXRp
b24gb2YgZ2xvYmFsIGNvZGUsIHdoZW4gb3VyIHZhcmlhYmxlcyBhcmUgaW4gdGhlIHJlZ2lzdGVy
IGZpbGUsCi0gICAgICAgIC8vIHRoZSBzeW1ib2wgdGFibGUgdGVsbHMgdXMgaG93IG1hbnkgdmFy
aWFibGVzIHRoZXJlIGFyZSwgYW5kIHJlZ2lzdGVycwotICAgICAgICAvLyBwb2ludHMgdG8gd2hl
cmUgdGhleSBlbmQsIGFuZCB0aGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGV4ZWN1dGlvbiBiZWdpbi4K
LSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9yZWdpc3RlcnMgLSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLnNpemUoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS5zaXplKCkpOwotICAgIH0KIH0KIAogRXhlY1N0YXRlKiBKU0dsb2JhbE9iamVjdDo6Z2xvYmFs
RXhlYygpCkBAIC00MTEsMjYgKzQwMCw5IEBAIEV4ZWNTdGF0ZSogSlNHbG9iYWxPYmplY3Q6Omds
b2JhbEV4ZWMoKQogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShtX2dsb2JhbENhbGxGcmFt
ZSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiB9CiAKLXZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2l6ZVJlZ2lzdGVycyhzaXplX3QgbmV3U2l6ZSkKLXsKLSAgICAvLyBQcmV2
aW91cyBkdXBsaWNhdGUgc3ltYm9scyBtYXkgaGF2ZSBjcmVhdGVkIHNwYXJlIGNhcGFjaXR5IGlu
IG1fcmVnaXN0ZXJBcnJheS4KLSAgICBpZiAobmV3U2l6ZSA8PSBtX3JlZ2lzdGVyQXJyYXlTaXpl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fcmVnaXN0ZXJBcnJh
eVNpemU7Ci0gICAgT3duQXJyYXlQdHI8V3JpdGVCYXJyaWVyPFVua25vd24+ID4gcmVnaXN0ZXJB
cnJheSA9IGFkb3B0QXJyYXlQdHIobmV3IFdyaXRlQmFycmllcjxVbmtub3duPltuZXdTaXplXSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGRTaXplOyArK2kpCi0gICAgICAgIHJlZ2lz
dGVyQXJyYXlbaV0uc2V0KGdsb2JhbERhdGEoKSwgdGhpcywgbV9yZWdpc3RlckFycmF5W2ldLmdl
dCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG5ld1NpemU7ICsraSkKLSAg
ICAgICAgcmVnaXN0ZXJBcnJheVtpXS5zZXRVbmRlZmluZWQoKTsKLQotICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiogcmVnaXN0ZXJzID0gcmVnaXN0ZXJBcnJheS5nZXQoKTsKLSAgICBzZXRSZWdp
c3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5LnJlbGVhc2UoKSwgbmV3U2l6ZSk7Ci19Ci0K
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZFN0YXRpY0dsb2JhbHMoR2xvYmFsUHJvcGVydHlJbmZv
KiBnbG9iYWxzLCBpbnQgY291bnQpCiB7Ci0gICAgcmVzaXplUmVnaXN0ZXJzKHN5bWJvbFRhYmxl
KCkuc2l6ZSgpICsgY291bnQpOworICAgIGFkZFJlZ2lzdGVycyhjb3VudCk7CiAKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
JiBnbG9iYWwgPSBnbG9iYWxzW2ldOwpAQCAtNDQ2LDE3ICs0MTgsMTcgQEAgdm9pZCBKU0dsb2Jh
bE9iamVjdDo6YWRkU3RhdGljR2xvYmFscyhHbAogYm9vbCBKU0dsb2JhbE9iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNHbG9iYWxPYmplY3Qq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKTsKLSAgICBpZiAoZ2V0
U3RhdGljRnVuY3Rpb25TbG90PEpTVmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xv
YmFsT2JqZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisg
ICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Pihl
eGVjLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gdGhpc09i
amVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gc3lt
Ym9sVGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAogYm9vbCBK
U0dsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKLSAgICBpZiAoZ2V0U3RhdGljRnVuY3Rp
b25EZXNjcmlwdG9yPEpTVmFyaWFibGVPYmplY3Q+KGV4ZWMsIEV4ZWNTdGF0ZTo6Z2xvYmFsT2Jq
ZWN0VGFibGUoZXhlYyksIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCisg
ICAgaWYgKGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6Omdsb2JhbE9iamVjdFRhYmxlKGV4ZWMpLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBy
ZXR1cm4gdGhpc09iamVjdC0+c3ltYm9sVGFibGVHZXQocHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
KTsKKyAgICByZXR1cm4gc3ltYm9sVGFibGVHZXQodGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBk
ZXNjcmlwdG9yKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdDo6Y2xlYXJSYXJlRGF0YShKU0Nl
bGwqIGNlbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAK
ICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxUaGlzLmgiCi0jaW5jbHVkZSAiSlNWYXJpYWJsZU9iamVjdC5oIgorI2luY2x1
ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1dlYWtPYmplY3RN
YXBSZWZJbnRlcm5hbC5oIgogI2luY2x1ZGUgIk51bWJlclByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IlN0cmluZ1Byb3RvdHlwZS5oIgpAQCAtNzQsNyArNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgSmF2YVNjcmlwdEV4cGVyaW1lbnRzRW5hYmxlZEZ1bmN0aW9uUHRyIGphdmFTY3JpcHRF
eHBlcmltZW50c0VuYWJsZWQ7CiAgICAgfTsKIAotICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDog
cHVibGljIEpTVmFyaWFibGVPYmplY3QgeworICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0IDogcHVi
bGljIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QgewogICAgIHByaXZhdGU6CiAgICAgICAgIHR5
cGVkZWYgSGFzaFNldDxSZWZQdHI8T3BhcXVlSlNXZWFrT2JqZWN0TWFwPiA+IFdlYWtNYXBTZXQ7
CiAKQEAgLTkwLDcgKzkwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcm90ZWN0ZWQ6CiAK
LSAgICAgICAgc2l6ZV90IG1fcmVnaXN0ZXJBcnJheVNpemU7CiAgICAgICAgIFJlZ2lzdGVyIG1f
Z2xvYmFsQ2FsbEZyYW1lW1JlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZV07CiAKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFNjb3BlQ2hhaW5Ob2RlPiBtX2dsb2JhbFNjb3BlQ2hhaW47CkBA
IC0xNjQsNyArMTYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEpTVmFyaWFibGVPYmplY3QgQmFzZTsKKyAgICAg
ICAgdHlwZWRlZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IEJhc2U7CiAKICAgICAgICAgc3Rh
dGljIEpTR2xvYmFsT2JqZWN0KiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgewpAQCAtMTc3LDggKzE3Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVj
dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBH
bG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSAwKQotICAg
ICAgICAgICAgOiBKU1ZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3lt
Ym9sVGFibGUsIDApCi0gICAgICAgICAgICAsIG1fcmVnaXN0ZXJBcnJheVNpemUoMCkKKyAgICAg
ICAgICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
ICZtX3N5bWJvbFRhYmxlKQogICAgICAgICAgICAgLCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQogICAg
ICAgICAgICAgLCBtX3dlYWtSYW5kb20oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJl
cigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQogICAg
ICAgICAgICAgLCBtX2V2YWxFbmFibGVkKHRydWUpCkBAIC0zMDgsOCArMzA2LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0RXZhbEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1f
ZXZhbEVuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgICAgIGJvb2wgZXZhbEVuYWJsZWQoKSB7IHJl
dHVybiBtX2V2YWxFbmFibGVkOyB9CiAKLSAgICAgICAgdm9pZCByZXNpemVSZWdpc3RlcnMoc2l6
ZV90IG5ld1NpemUpOwotCiAgICAgICAgIHZvaWQgcmVzZXRQcm90b3R5cGUoSlNHbG9iYWxEYXRh
JiwgSlNWYWx1ZSBwcm90b3R5cGUpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSgpIGNvbnN0IHsgcmV0dXJuICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7IH0KQEAg
LTMzNCw3ICszMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIHdlYWtSYW5k
b21OdW1iZXIoKSB7IHJldHVybiBtX3dlYWtSYW5kb20uZ2V0KCk7IH0KICAgICBwcm90ZWN0ZWQ6
CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBKU1ZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsK
IAogICAgICAgICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKICAgICAgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyhjb25zdCBJZGVudGlmaWVyJiBpLCBKU1ZhbHVlIHYsIHVuc2lnbmVkIGEp
CkBAIC0zNTksNyArMzU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBjcmVh
dGVUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqKTsKIAotICAgICAgICB2b2lkIHNldFJlZ2lzdGVy
cyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRl
QmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVyQXJyYXksIHNpemVfdCBjb3VudCk7CiAgICAgICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNsZWFyUmFyZURhdGEoSlNDZWxsKik7CiAg
ICAgfTsKIApAQCAtMzcxLDE5ICszNjYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJl
dHVybiBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihhc09iamVjdCh2YWx1ZSkpOwogICAgIH0KIAot
ICAgIGlubGluZSB2b2lkIEpTR2xvYmFsT2JqZWN0OjpzZXRSZWdpc3RlcnMoV3JpdGVCYXJyaWVy
PFVua25vd24+KiByZWdpc3RlcnMsIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4gPiByZWdpc3RlckFycmF5LCBzaXplX3QgY291bnQpCi0gICAgewotICAgICAgICBKU1Zhcmlh
YmxlT2JqZWN0OjpzZXRSZWdpc3RlcnMocmVnaXN0ZXJzLCByZWdpc3RlckFycmF5KTsKLSAgICAg
ICAgbV9yZWdpc3RlckFycmF5U2l6ZSA9IGNvdW50OwotICAgIH0KLQogICAgIGlubGluZSBib29s
IEpTR2xvYmFsT2JqZWN0OjpoYXNPd25Qcm9wZXJ0eUZvcldyaXRlKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICB7CiAgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90OwotICAgICAgICBpZiAoSlNWYXJpYWJsZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXMsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIGlmIChKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBib29sIHNsb3RJc1dy
aXRlYWJsZTsKLSAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHByb3BlcnR5TmFtZSwgc2xv
dCwgc2xvdElzV3JpdGVhYmxlKTsKKyAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxlR2V0KHRoaXMs
IHByb3BlcnR5TmFtZSwgc2xvdCwgc2xvdElzV3JpdGVhYmxlKTsKICAgICB9CiAKICAgICBpbmxp
bmUgYm9vbCBKU0dsb2JhbE9iamVjdDo6c3ltYm9sVGFibGVIYXNQcm9wZXJ0eShQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2ludCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpmaW5kUmVnaXN0ZXJJbmRl
eCh2b2lkKiByZWdpc3RlckFkZHJlc3MpCit7CisgICAgZm9yIChpbnQgaSA9IG1fcmVnaXN0ZXJz
LnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAoJm1fcmVnaXN0ZXJzW2ldICE9IHJlZ2lzdGVy
QWRkcmVzcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm4gaTsKKyAgICB9
CisgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0OjphZGRSZWdpc3RlcnMoaW50IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQpCit7Cisg
ICAgQVNTRVJUKG51bWJlck9mUmVnaXN0ZXJzVG9BZGQgPj0gMCk7CisgICAgCisgICAgc2l6ZV90
IG9sZFNpemUgPSBtX3JlZ2lzdGVycy5zaXplKCk7CisgICAgbV9yZWdpc3RlcnMuZ3JvdyhvbGRT
aXplICsgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9
IG51bWJlck9mUmVnaXN0ZXJzVG9BZGQ7IGktLTspCisgICAgICAgIG1fcmVnaXN0ZXJzW29sZFNp
emUgKyBpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzVW5kZWZpbmVkKCkpOworICAgIAorICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG9sZFNpemUpOworfQorCit2b2lkIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
c2xvdFZpc2l0b3IpCit7CisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FT
U0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEpT
U3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgc2xvdFZpc2l0b3Ip
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHRoaXNPYmplY3QtPm1fcmVnaXN0ZXJzLnNp
emUoKTsgaS0tOykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Jl
Z2lzdGVyc1tpXSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0X2gKKyNkZWZpbmUgSlNTZWdtZW50
ZWRWYXJpYWJsZU9iamVjdF9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpT
U3ltYm9sVGFibGVPYmplY3QuaCIKKyNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIlN5
bWJvbFRhYmxlLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1NlZ21lbnRlZFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgUmVnaXN0
ZXI7CisKKy8vIFRoaXMgaXMgYSBtb3N0bHkgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgSlNWYXJp
YWJsZU9iamVjdCwgZXhjZXB0IHRoYXQgaXQgcHJlc2VydmVzCisvLyB0aGUgaW52YXJpYW50IHRo
YXQgYWZ0ZXIgYSB2YXJpYWJsZSBpcyBjcmVhdGVkLCBpdHMgYWRkcmVzcyBpbiBtZW1vcnkgd2ls
bCBub3QgY2hhbmdlCisvLyBzbyBsb25nIGFzIHRoZSBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
IGlzIGFsaXZlLiBUaGlzIGFsbG93cyBvcHRpbWl6YXRpb25zIGJhc2VkCisvLyBvbiBnZXR0aW5n
IHRoZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBhbmQgcmVtZW1iZXJpbmcgaXQuIEFzIHdlbGws
IHVubGlrZSBhCisvLyBKU1ZhcmlhYmxlT2JqZWN0LCB0aGlzIHdpbGwgbWFuYWdlIHRoZSBtZW1v
cnkgZm9yIHRoZSByZWdpc3RlcnMgaXRzZWxmIGFuZCBuZWl0aGVyCisvLyByZXF1aXJlcyBub3Ig
YWxsb3dzIGZvciB0aGUgc3ViY2xhc3NlcyB0byBtYW5hZ2UgdGhhdCBtZW1vcnkuIEZpbmFsbHks
CisvLyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IGhhcyBpdHMgb3duIEdDIHRyYWNpbmcgZnVu
Y3Rpb25hbGl0eSwgc2luY2UgaXQga25vd3MgdGhlCisvLyBleGFjdCBkaW1lbnNpb25zIG9mIHRo
ZSB2YXJpYWJsZXMgYXJyYXkgYXQgYWxsIHRpbWVzLgorCitjbGFzcyBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0IDogcHVibGljIEpTU3ltYm9sVGFibGVPYmplY3QgeworICAgIGZyaWVuZCBjbGFz
cyBKSVQ7CisgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKworcHVibGlj
OgorICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOworCisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgeyByZXR1cm4gbV9yZWdpc3RlcnNb
aW5kZXhdOyB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhIHNsb3cgbWV0aG9kIGNhbGwsIHdoaWNo
IHNlYXJjaGVzIHRoZSByZWdpc3RlciBiYW5rIHRvIGZpbmQgdGhlIGluZGV4CisgICAgLy8gZ2l2
ZW4gYSBwb2ludGVyLiBJdCB3aWxsIENSQVNIKCkgaWYgaXQgZG9lcyBub3QgZmluZCB0aGUgcmVn
aXN0ZXIuIE9ubHkgdXNlIHRoaXMKKyAgICAvLyBpbiBkZWJ1ZyBjb2RlIChsaWtlIGJ5dGVjb2Rl
IGR1bXBpbmcpLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGludCBmaW5kUmVnaXN0ZXJJbmRleCh2
b2lkKik7CisgICAgCisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhc3NlcnRSZWdpc3Rlcklz
SW5UaGlzT2JqZWN0KFdyaXRlQmFycmllcjxVbmtub3duPiogcmVnaXN0ZXJQb2ludGVyKQorICAg
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGZpbmRSZWdpc3RlckluZGV4KHJlZ2lz
dGVyUG9pbnRlcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlZ2lzdGVyUG9pbnRlcjsKKyAg
ICB9CisgICAgCisgICAgLy8gQWRkcyBudW1iZXJPZlJlZ2lzdGVyc1RvQWRkIHJlZ2lzdGVycywg
aW5pdGlhbGl6ZXMgdGhlbSB0byBVbmRlZmluZWQsIGFuZCByZXR1cm5zCisgICAgLy8gdGhlIGlu
ZGV4IG9mIHRoZSBmaXJzdCBvbmUgYWRkZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgaW50IGFk
ZFJlZ2lzdGVycyhpbnQgbnVtYmVyT2ZSZWdpc3RlcnNUb0FkZCk7CisgICAgCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTU3ltYm9sVGFibGVPYmplY3Q6OlN0cnVj
dHVyZUZsYWdzOworCisgICAgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUpCisgICAgICAgIDogSlNTeW1ib2xUYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUs
IHN5bWJvbFRhYmxlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOworICAgIH0KKworICAgIFNlZ21lbnRlZFZlY3RvcjxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4sIDE2PiBtX3JlZ2lzdGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
YXRpY1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTMgKzY2LDEzIEBAIHZv
aWQgSlNTdGF0aWNTY29wZU9iamVjdDo6cHV0KEpTQ2VsbCogY2UKICAgICAgICAgLy8gYSBwb2lu
dGVyIGNvbXBhcmUuCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICBib29sIGlz
V3JpdGFibGUgPSB0cnVlOwotICAgICAgICB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZUdldChwcm9w
ZXJ0eU5hbWUsIHNsb3QsIGlzV3JpdGFibGUpOworICAgICAgICBzeW1ib2xUYWJsZUdldCh0aGlz
T2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIGlzV3JpdGFibGUpOwogICAgICAgICBpZiAoIWlz
V3JpdGFibGUpIHsKICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9y
KGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZVB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKSkK
KyAgICBpZiAoc3ltYm9sVGFibGVQdXQodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBKU1N0YXRpY1Njb3Bl
T2JqZWN0OjpwdXQoSlNDZWxsKiBjZQogdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXREaXJl
Y3RWaXJ0dWFsKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAg
ICBKU1N0YXRpY1Njb3BlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RhdGljU2NvcGVP
YmplY3QqPihvYmplY3QpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZVB1dFdpdGhB
dHRyaWJ1dGVzKGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmli
dXRlcykpCisgICAgaWYgKHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXModGhpc09iamVjdCwg
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODksNyAr
ODksNyBAQCB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OnB1dERpcmVjdFZpcnR1CiAKIGJvb2wg
SlNTdGF0aWNTY29wZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ewotICAgIHJldHVybiBqc0Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGNlbGwpLT5zeW1ib2xU
YWJsZUdldChwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIHJldHVybiBzeW1ib2xUYWJsZUdldChq
c0Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGNlbGwpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N5bWJvbFRhYmxlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTeW1ib2xUYWJs
ZU9iamVjdC5oIgorCisjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCisjaW5jbHVkZSAi
UHJvcGVydHlOYW1lQXJyYXkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgSlNTeW1ib2xU
YWJsZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8SlNT
eW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpLT5KU1N5bWJvbFRhYmxlT2JqZWN0Ojp+SlNTeW1ib2xU
YWJsZU9iamVjdCgpOworfQorCitib29sIEpTU3ltYm9sVGFibGVPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQoreworICAgIEpTU3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
eW1ib2xUYWJsZU9iamVjdCo+KGNlbGwpOworICAgIGlmICh0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXNPYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK3ZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBKU1N5bWJvbFRhYmxlT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3ltYm9sVGFibGVP
YmplY3QqPihvYmplY3QpOworICAgIFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLmVuZCgpOworICAgIGZvciAoU3ltYm9sVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCEoaXQtPnNlY29uZC5nZXRBdHRyaWJ1dGVzKCkg
JiBEb250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCisgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5maXJzdC5nZXQo
KSkpOworICAgIH0KKyAgICAKKyAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwordm9pZCBKU1N5bWJvbFRh
YmxlT2JqZWN0OjpwdXREaXJlY3RWaXJ0dWFsKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworYm9vbCBKU1N5bWJvbFRhYmxlT2JqZWN0Ojppc0R5bmFtaWNTY29wZShib29sJiByZXF1
aXJlc0R5bmFtaWNDaGVja3MpIGNvbnN0Cit7CisgICAgc3dpdGNoIChzdHJ1Y3R1cmUoKS0+dHlw
ZUluZm8oKS50eXBlKCkpIHsKKyAgICBjYXNlIEdsb2JhbE9iamVjdFR5cGU6CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0dsb2JhbE9iamVjdCo+KHRoaXMpLT5pc0R5bmFtaWNT
Y29wZShyZXF1aXJlc0R5bmFtaWNDaGVja3MpOworICAgIGNhc2UgQWN0aXZhdGlvbk9iamVjdFR5
cGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU0FjdGl2YXRpb24qPih0aGlz
KS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKTsKKyAgICBjYXNlIFN0YXRp
Y1Njb3BlT2JqZWN0VHlwZToKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEpTU3Rh
dGljU2NvcGVPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNEeW5hbWljQ2hl
Y2tzKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJs
ZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSlNTeW1ib2xUYWJsZU9iamVjdF9oCisjZGVmaW5lIEpTU3ltYm9s
VGFibGVPYmplY3RfaAorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eURlc2NyaXB0b3IuaCIKKyNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSlNTeW1ib2xUYWJsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICAKKyAg
ICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiAqbV9zeW1ib2xUYWJs
ZTsgfQorICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7CisgICAgCisgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0
RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1v
ZGUpOworICAgIAorICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWlj
Q2hlY2tzKSBjb25zdDsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNOb25GaW5h
bE9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CisgICAgCisgICAgSlNTeW1ib2xUYWJsZU9iamVjdChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUpCisgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBz
dHJ1Y3R1cmUpCisgICAgICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Cisg
ICAgICAgIEFTU0VSVChtX3N5bWJvbFRhYmxlKTsKKyAgICB9CisgICAgCisgICAgU3ltYm9sVGFi
bGUqIG1fc3ltYm9sVGFibGU7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9i
amVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZUdldCgKKyAgICBTeW1ib2xUYWJsZU9i
amVjdFR5cGUqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQoreworICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5bWJvbFRh
YmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChlbnRy
eS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNsb3Quc2V0VmFsdWUob2Jq
ZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3ltYm9sVGFibGVPYmplY3RUeXBlPgoraW5saW5l
IGJvb2wgc3ltYm9sVGFibGVHZXQoCisgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3Qs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKK3sKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgp
LmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0
b3IoCisgICAgICAgIG9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwg
ZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN5bWJvbFRhYmxlT2JqZWN0VHlwZT4KK2lubGluZSBib29s
IHN5bWJvbFRhYmxlR2V0KAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsCisgICAgYm9vbCYgc2xv
dElzV3JpdGVhYmxlKQoreworICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBvYmplY3QtPnN5
bWJvbFRhYmxlKCkuaW5saW5lR2V0KHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlm
IChlbnRyeS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHNsb3Quc2V0VmFs
dWUob2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgpKTsKKyAgICBzbG90
SXNXcml0ZWFibGUgPSAhZW50cnkuaXNSZWFkT25seSgpOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTeW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBz
eW1ib2xUYWJsZVB1dCgKKyAgICBTeW1ib2xUYWJsZU9iamVjdFR5cGUqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLAorICAg
IGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhl
Yy0+Z2xvYmFsRGF0YSgpOworICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKKyAgICAKKyAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gb2JqZWN0LT5zeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoZW50cnkuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKSB7CisgICAgICAgIGlmIChzaG91
bGRUaHJvdykKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIG9i
amVjdCwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBT
eW1ib2xUYWJsZU9iamVjdFR5cGU+CitpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRy
aWJ1dGVzKAorICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2JqZWN0LCBKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsCisgICAgSlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK3sKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUp
IHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CisgICAgCisgICAg
U3ltYm9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBvYmplY3QtPnN5bWJvbFRhYmxlKCkuZmluZChw
cm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICBpZiAoaXRlciA9PSBvYmplY3QtPnN5bWJv
bFRhYmxlKCkuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTeW1ib2xUYWJsZUVu
dHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsK
KyAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIG9iamVjdC0+cmVnaXN0
ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zZXQoZ2xvYmFsRGF0YSwgb2JqZWN0LCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNT
eW1ib2xUYWJsZU9iamVjdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFyaWFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxMTk2MDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksMTIgKzI5LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIK
LSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTU3RhdGljU2NvcGVPYmpl
Y3QuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUgIlByb3BlcnR5
RGVzY3JpcHRvci5oIgotCiBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBKU1ZhcmlhYmxlT2JqZWN0
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTQyLDU3ICszNiw0IEBAIHZvaWQgSlNWYXJpYWJs
ZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGMKICAgICBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2Jq
ZWN0Kj4oY2VsbCktPkpTVmFyaWFibGVPYmplY3Q6On5KU1ZhcmlhYmxlT2JqZWN0KCk7CiB9CiAK
LWJvb2wgSlNWYXJpYWJsZU9iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSlNWYXJpYWJs
ZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY2VsbCk7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuY29udGFpbnMocHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLX0KLQot
dm9pZCBKU1ZhcmlhYmxlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIEpTVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KG9iamVjdCk7Ci0gICAgU3ltYm9sVGFibGU6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCkuZW5kKCk7Ci0gICAg
Zm9yIChTeW1ib2xUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xU
YWJsZSgpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIShpdC0+c2Vj
b25kLmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtKSB8fCAobW9kZSA9PSBJbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIo
ZXhlYywgaXQtPmZpcnN0LmdldCgpKSk7Ci0gICAgfQotICAgIAotICAgIEpTT2JqZWN0OjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwot
fQotCi1ib29sIEpTVmFyaWFibGVPYmplY3Q6OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBTeW1i
b2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICBkZXNj
cmlwdG9yLnNldERlc2NyaXB0b3IocmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5nZXQoKSwg
ZW50cnkuZ2V0QXR0cmlidXRlcygpIHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSlNWYXJpYWJsZU9iamVjdDo6
cHV0RGlyZWN0VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgdW5zaWduZWQpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wg
SlNWYXJpYWJsZU9iamVjdDo6aXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNEeW5hbWljQ2hl
Y2tzKSBjb25zdAotewotICAgIHN3aXRjaCAoc3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgp
KSB7Ci0gICAgY2FzZSBHbG9iYWxPYmplY3RUeXBlOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgSlNHbG9iYWxPYmplY3QqPih0aGlzKS0+aXNEeW5hbWljU2NvcGUocmVxdWlyZXNE
eW5hbWljQ2hlY2tzKTsKLSAgICBjYXNlIEFjdGl2YXRpb25PYmplY3RUeXBlOgotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNBY3RpdmF0aW9uKj4odGhpcyktPmlzRHluYW1pY1Nj
b3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAgY2FzZSBTdGF0aWNTY29wZU9iamVjdFR5
cGU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBKU1N0YXRpY1Njb3BlT2JqZWN0
Kj4odGhpcyktPmlzRHluYW1pY1Njb3BlKHJlcXVpcmVzRHluYW1pY0NoZWNrcyk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShy
ZXZpc2lvbiAxMTk2MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKICNk
ZWZpbmUgSlNWYXJpYWJsZU9iamVjdF9oCiAKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1
ZGUgIkpTU3ltYm9sVGFibGVPYmplY3QuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1
ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC00MSw0
MCArNDIsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogICAgIGNsYXNzIFJlZ2lzdGVyOwogCi0gICAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICBjbGFzcyBKU1ZhcmlhYmxlT2JqZWN0IDog
cHVibGljIEpTU3ltYm9sVGFibGVPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwog
ICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgcHVibGlj
OgotICAgICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKLQotICAgICAgICBTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQot
Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
Ci0KLSAgICAgICAgc3RhdGljIE5PX1JFVFVSTl9EVUVfVE9fQVNTRVJUIHZvaWQgcHV0RGlyZWN0
VmlydHVhbChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyk7Ci0KLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
KTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoYm9vbCYgcmVxdWlyZXNE
eW5hbWljQ2hlY2tzKSBjb25zdDsKKyAgICAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0
IEJhc2U7CiAKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiByZWdpc3RlckF0KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CiAKICAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsg
cmV0dXJuICZtX3JlZ2lzdGVyczsgfQogICAgICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mUmVn
aXN0ZXJzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTVmFyaWFibGVPYmplY3QsIG1fcmVn
aXN0ZXJzKTsgfQogCi0gICAgICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgcHJvdG90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKFZh
cmlhYmxlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKLSAgICAgICAgfQot
ICAgICAgICAKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKwogICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTTm9uRmluYWxP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU1N5bWJvbFRhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
ICAgICBKU1ZhcmlhYmxlT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSwgUmVnaXN0ZXIqIHJlZ2lzdGVy
cykKLSAgICAgICAgICAgIDogSlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUp
Ci0gICAgICAgICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgICAgICAgICA6
IEpTU3ltYm9sVGFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCBzeW1ib2xUYWJsZSkK
ICAgICAgICAgICAgICwgbV9yZWdpc3RlcnMocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8
VW5rbm93bj4qPihyZWdpc3RlcnMpKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTgyLDc2ICs2
OCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwotICAgICAgICAgICAgQVNTRVJUKG1fc3ltYm9sVGFibGUp
OwogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PikgPT0gc2l6ZW9mKFJlZ2lzdGVyKSwgUmVnaXN0ZXJfc2hvdWxkX2JlX3NhbWVfc2l6ZV9hc19X
cml0ZUJhcnJpZXIpOwogICAgICAgICB9CiAKICAgICAgICAgUGFzc093bkFycmF5UHRyPFdyaXRl
QmFycmllcjxVbmtub3duPiA+IGNvcHlSZWdpc3RlckFycmF5KEpTR2xvYmFsRGF0YSYsIFdyaXRl
QmFycmllcjxVbmtub3duPiogc3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWxsZnJhbWVTdGFy
dHMpOwogICAgICAgICB2b2lkIHNldFJlZ2lzdGVycyhXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHJl
Z2lzdGVycywgUGFzc093bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+IHJlZ2lzdGVy
QXJyYXkpOwogCi0gICAgICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzeW1ib2xUYWJsZUdl
dChQcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgICAgICBib29sIHN5bWJv
bFRhYmxlR2V0KFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElzV3JpdGVh
YmxlKTsKLSAgICAgICAgYm9vbCBzeW1ib2xUYWJsZVB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwotICAgICAgICBib29sIHN5bWJvbFRhYmxl
UHV0V2l0aEF0dHJpYnV0ZXMoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLQotICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJs
ZTsgLy8gTWFwcyBuYW1lIC0+IG9mZnNldCBmcm9tICJyIiBpbiByZWdpc3RlciBmaWxlLgogICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG1fcmVnaXN0ZXJzOyAvLyAiciIgaW4gdGhlIHJl
Z2lzdGVyIGZpbGUuCiAgICAgICAgIE93bkFycmF5UHRyPFdyaXRlQmFycmllcjxVbmtub3duPiA+
IG1fcmVnaXN0ZXJBcnJheTsgLy8gSW5kZXBlbmRlbnQgY29weSBvZiByZWdpc3RlcnMsIHVzZWQg
d2hlbiBhIHZhcmlhYmxlIG9iamVjdCBjb3BpZXMgaXRzIHJlZ2lzdGVycyBvdXQgb2YgdGhlIHJl
Z2lzdGVyIGZpbGUuCiAgICAgfTsKIAotICAgIGlubGluZSBib29sIEpTVmFyaWFibGVPYmplY3Q6
OnN5bWJvbFRhYmxlR2V0KFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKLSAgICB7Ci0gICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJs
ZSgpLmlubGluZUdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKCFl
bnRyeS5pc051bGwoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdpc3RlckF0KGVu
dHJ5LmdldEluZGV4KCkpLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1Zh
cmlhYmxlT2JqZWN0OjpzeW1ib2xUYWJsZUdldChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKLSAgICB7Ci0gICAgICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZShyZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLmdldCgp
KTsKLSAgICAgICAgICAgIHNsb3RJc1dyaXRlYWJsZSA9ICFlbnRyeS5pc1JlYWRPbmx5KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9sVGFibGVQ
dXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBib29sIHNob3VsZFRocm93KQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAo
dmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwotCi0gICAg
ICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBzeW1ib2xUYWJsZSgpLmlubGluZUdldChwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICAgICAgaWYgKGVudHJ5LmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpKSB7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJlZ2lzdGVyQXQoZW50cnku
Z2V0SW5kZXgoKSkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgSlNWYXJpYWJsZU9iamVjdDo6c3ltYm9s
VGFibGVQdXRXaXRoQXR0cmlidXRlcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi0g
ICAgewotICAgICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAodGhpcykpOwotCi0gICAgICAgIFN5bWJvbFRhYmxlOjppdGVyYXRv
ciBpdGVyID0gc3ltYm9sVGFibGUoKS5maW5kKHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwot
ICAgICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZSgpLmVuZCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnNlY29u
ZDsKLSAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGVudHJ5LnNldEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgo
KSkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCiAgICAgaW5saW5lIFBhc3NPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8VW5rbm93bj4g
PiBKU1ZhcmlhYmxlT2JqZWN0Ojpjb3B5UmVnaXN0ZXJBcnJheShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFdyaXRlQmFycmllcjxVbmtub3duPiogc3JjLCBzaXplX3QgY291bnQsIHNpemVfdCBj
YWxsZnJhbWVTdGFydHMpCiAgICAgewogICAgICAgICBPd25BcnJheVB0cjxXcml0ZUJhcnJpZXI8
VW5rbm93bj4gPiByZWdpc3RlckFycmF5ID0gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVy
PFVua25vd24+W2NvdW50XSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
cml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Xcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTE5NjA0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB1LnNsb3Q7CiAgICAgfQogICAgIAorICAgIGlu
dDMyX3QqIHRhZ1BvaW50ZXIoKSB7IHJldHVybiAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IqPigmbV92YWx1ZSktPmFzQml0cy50YWc7IH0KKyAgICBpbnQzMl90KiBwYXlsb2Fk
UG9pbnRlcigpIHsgcmV0dXJuICZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+
KCZtX3ZhbHVlKS0+YXNCaXRzLnBheWxvYWQ7IH0KKyAgICAKICAgICB0eXBlZGVmIEpTVmFsdWUg
KFdyaXRlQmFycmllckJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKICAgICBvcGVyYXRvciBV
bnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpID8gcmVpbnRlcnByZXRf
Y2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CiAgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhZ2V0KCk7IH0gCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTk2
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOCBAQAorMjAxMi0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisg
ICAgICAgIEdsb2JhbCBvYmplY3QgdmFyaWFibGUgYWNjZXNzZXMgc2hvdWxkIG5vdCByZXF1aXJl
IGFuIGV4dHJhIGxvYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg4Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2ggYW5k
IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFVwZGF0ZWQgSlNET01XaW5kb3dCYXNlLmNwcCB0
byB1c2UgdGhlIG5ldyBzeW1ib2wgdGFibGUgQVBJLiB0aGlzLT5zeW1ib2xUYWJsZUZvbyguLi4p
CisgICAgICAgIGJlY29tZXMgc3ltYm9sVGFibGVGb28odGhpcywgLi4uKS4KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2Ugbm8gY2hhbmdlIGluIGJlaGF2aW9y
LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQpOgorCiAyMDEyLTA2LTA2
ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERC
OiBSZW5hbWUgSURCRmFjdG9yeS5nZXREYXRhYmFzZU5hbWVzKCkgdG8gd2Via2l0R2V0RGF0YWJh
c2VOYW1lcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAJKHJldmlzaW9uIDExOTYwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAg
dm9pZCBKU0RPTVdpbmRvd0Jhc2U6OnVwZGF0ZURvY3VtZW50KCkKIHsKICAgICBBU1NFUlQobV9p
bXBsLT5kb2N1bWVudCgpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxFeGVjKCk7Ci0g
ICAgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhleGVjLT5nbG9iYWxEYXRhKCksIElkZW50
aWZpZXIoZXhlYywgImRvY3VtZW50IiksIHRvSlMoZXhlYywgdGhpcywgbV9pbXBsLT5kb2N1bWVu
dCgpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICBzeW1ib2xUYWJsZVB1dFdpdGhBdHRy
aWJ1dGVzKHRoaXMsIGV4ZWMtPmdsb2JhbERhdGEoKSwgSWRlbnRpZmllcihleGVjLCAiZG9jdW1l
bnQiKSwgdG9KUyhleGVjLCB0aGlzLCBtX2ltcGwtPmRvY3VtZW50KCkpLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0RPTVdpbmRvd0Jhc2U6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>