<?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>43453</bug_id>
          
          <creation_ts>2010-08-03 18:16:17 -0700</creation_ts>
          <short_desc>[chromium] The chromium API needs a WebMouseEvent class</short_desc>
          <delta_ts>2010-08-18 15:06:37 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jay Civelli">jcivelli</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fishd</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>259776</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-03 18:16:17 -0700</bug_when>
    <thetext>The WebKit::WebNode event listener API only has a WebMutationEvent.
For autofill related functionalities, we now need a WebMouseEvent class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259781</commentid>
    <comment_count>1</comment_count>
      <attachid>63398</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-03 18:21:19 -0700</bug_when>
    <thetext>Created attachment 63398
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259783</commentid>
    <comment_count>2</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-03 18:22:53 -0700</bug_when>
    <thetext>There is already a WebMouseEvent class defined in WebInputEvent.h used for different purposes.
Not sure what would be a good name for this one, used the really lame WebMouseEvent2 in the first patch :-(
Suggestions welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259785</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 18:27:52 -0700</bug_when>
    <thetext>Attachment 63398 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebMouseEvent2.cpp:102:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/public/WebMouseEvent2.h:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 63 in 5 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>259794</commentid>
    <comment_count>4</comment_count>
      <attachid>63402</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-03 18:38:25 -0700</bug_when>
    <thetext>Created attachment 63402
Fixed style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259919</commentid>
    <comment_count>5</comment_count>
      <attachid>63402</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-04 01:04:17 -0700</bug_when>
    <thetext>Comment on attachment 63402
Fixed style issues

Yeah, WebMouseEvent2 is obviously not going to cut it.  We probably should
rename the subclasses of WebInputEvent.  That way we don&apos;t have to change
our convention of using WebFoo for DOM thingies named Foo.  MouseEvent
should map to WebMouseEvent given that convention.

Maybe inner classes?  WebInputEvent::{Generic,Mouse,Wheel,Keyboard}?  The
downside to such a solution is that it forces the inclusion of WebInputEvent.h
in places that could previously just forward declare it.  We could also
try to do something using a union:

  struct WebInputEvent {
    enum {...} type;
    ... other common fields ...
    union {
      struct {
        ...
      } mouse;
      struct {
        ...
      } wheel;
      struct {
        ...
      } keyboard;
    } data;
  };

Then it would still be valid to forward declare &apos;struct WebInputEvent&apos;.

I need to think about this more, but those are some ideas...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259920</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-04 01:05:08 -0700</bug_when>
    <thetext>You can see this union approach in action here:
http://code.google.com/p/ppapi/source/browse/trunk/c/pp_event.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263963</commentid>
    <comment_count>7</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-12 14:07:20 -0700</bug_when>
    <thetext>I don&apos;t think we can do the union, as the WebTouchEvent contains a WebTouchPoint which has a constructor and that I don&apos;t think it is OK for a union to have a member which has a non default constructor.
I guess we could make WebTouchPoint a struct with no constructor and make sure it is initialized properly were it is used.

May be going with the inner-class would be easier (although it prevents us from forward declaring the events)?

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264582</commentid>
    <comment_count>8</comment_count>
      <attachid>64397</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-13 18:39:42 -0700</bug_when>
    <thetext>Created attachment 64397
Renamed WebEvent to WebDOMEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264623</commentid>
    <comment_count>9</comment_count>
      <attachid>64397</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-13 22:30:40 -0700</bug_when>
    <thetext>Comment on attachment 64397
Renamed WebEvent to WebDOMEvent

Renaming WebEvent to WebDOMEvent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264626</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-13 22:34:41 -0700</bug_when>
    <thetext>Attachment 64397 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebDOMEventListenerPrivate.h:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/EventListenerWrapper.h:44:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebDOMEventListener.cpp:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebDOMEventListenerPrivate.cpp:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/EventListenerWrapper.cpp:37:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 297 in 16 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>264634</commentid>
    <comment_count>11</comment_count>
      <attachid>64408</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-13 23:04:28 -0700</bug_when>
    <thetext>Created attachment 64408
Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264644</commentid>
    <comment_count>12</comment_count>
      <attachid>64410</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-13 23:52:51 -0700</bug_when>
    <thetext>Created attachment 64410
Fixed style. (take 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264645</commentid>
    <comment_count>13</comment_count>
      <attachid>64411</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-14 00:07:40 -0700</bug_when>
    <thetext>Created attachment 64411
Adding missing files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265654</commentid>
    <comment_count>14</comment_count>
      <attachid>64411</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-17 11:12:52 -0700</bug_when>
    <thetext>Comment on attachment 64411
Adding missing files

WebKit/chromium/public/WebNode.h:102
 +      WEBKIT_API void addDOMEventListener(const WebString&amp; eventType, WebDOMEventListener* listener, bool useCapture);
nit: these should just be named add/removeEventListener to match
how they are named in the DOM specification.

WebKit/chromium/src/EventListenerWrapper.h:50
 +  class EventListenerWrapperDOM : public EventListener {
EventListenerWrapperDOM is an awkward name.  can we rename the other
one DeprecatedEventListenerWrapper, and then use EventListenerWrapper?

otherwise, LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265778</commentid>
    <comment_count>15</comment_count>
      <attachid>64635</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-17 14:43:54 -0700</bug_when>
    <thetext>Created attachment 64635
Applied fishd suggested changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265781</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-17 14:46:22 -0700</bug_when>
    <thetext>Attachment 64635 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebDOMEventListenerPrivate.cpp:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebDOMEventListenerPrivate.h:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebEventListenerPrivate.h:46:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/EventListenerWrapper.h:44:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebEventListener.cpp:49:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebDOMEventListener.cpp:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/EventListenerWrapper.cpp:37:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKit/chromium/src/WebEventListenerPrivate.cpp:48:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 317 in 20 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>265786</commentid>
    <comment_count>17</comment_count>
      <attachid>64638</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2010-08-17 15:03:14 -0700</bug_when>
    <thetext>Created attachment 64638
Fixing EOL (sigh...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266267</commentid>
    <comment_count>18</comment_count>
      <attachid>64638</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-18 11:21:52 -0700</bug_when>
    <thetext>Comment on attachment 64638
Fixing EOL (sigh...)

Rejecting patch 64638 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--exit-after-n-failures=1&apos;, &apos;--wait-for-httpd&apos;, &apos;--ignore-tests&apos;, &apos;compositing&apos;, &apos;--quiet&apos;]&quot; exit_code: 1
Last 500 characters of output:
CommitQueue/LayoutTests
Testing 20868 test cases.
media/video-volume.html -&gt; timed out
Sampling process 52835 for 10 seconds with 10 milliseconds of run time between samples
Sampling completed, processing symbols...
Sample analysis of process 52835 written to file /Users/eseidel/Library/Logs/DumpRenderTree/HangReport.txt

Exiting early after 1 failures. 17265 tests run.
902.79s total testing time

17264 test cases (99%) succeeded
1 test case (&lt;1%) timed out
40 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/3742346</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266411</commentid>
    <comment_count>19</comment_count>
      <attachid>64638</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-18 15:06:30 -0700</bug_when>
    <thetext>Comment on attachment 64638
Fixing EOL (sigh...)

Clearing flags on attachment: 64638

Committed r65633: &lt;http://trac.webkit.org/changeset/65633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266412</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-18 15:06:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63398</attachid>
            <date>2010-08-03 18:21:19 -0700</date>
            <delta_ts>2010-08-03 18:38:25 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>mouse_event.patch</filename>
            <type>text/plain</type>
            <size>8425</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDYwOSkKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wOC0wMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgbmV3IGV2ZW50IGNsYXNzIGZvciBt
b3VzZSBldmVudHMgc28gdGhhdCB0aGUgZXZlbnQKKyAgICAgICAgbGlzdGVuZXIgQVBJIGNhbiBi
ZSB1c2VkIHRvIGxpc3RlbiB0byB0aGVtLgorICAgICAgICBOb3RlIHRoYXQgYSBXZWJNb3VzZUV2
ZW50IGNsYXNzIGFscmVhZHkgZXhpc3RzIGluIFdlYklucHV0RXZlbnQuaAorICAgICAgICBzbyB0
aGUgdW5mb3J0dW5hdGUgV2ViTW91c2VFdmVudDIgbmFtZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNDUzIAorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZl
bnQ6OnRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnQ6OnRvQ29uc3QpOgorICAgICAgICAq
IHB1YmxpYy9XZWJNb3VzZUV2ZW50Mi5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViTW91c2VF
dmVudDIuY3BwOiBBZGRlZC4KKwogMjAxMC0wOC0wMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDY0NTA1KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTWltZVJlZ2lzdHJ5LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTW91c2VF
dmVudDIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNdXRhdGlvbkV2ZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTmFtZWROb2RlTWFwLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViTmF2aWdhdGlvblR5cGUuaCcsCkBAIC00MzYsNiArNDM3LDcgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJN
b3VzZUV2ZW50Mi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTXV0YXRpb25FdmVudC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTmFtZWROb2RlTWFwLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkV2ZW50LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkV2
ZW50LmgJKHJldmlzaW9uIDY0NTA1KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSwyMCBAQCBwdWJsaWM6CiAgICAgV2ViRXZl
bnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkV2ZW50PiYpOwogI2VuZGlmCiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHRvKCkKKyAgICB7CisgICAgICAgIFQgcmVzOworICAg
ICAgICByZXMuV2ViRXZlbnQ6OmFzc2lnbigqdGhpcyk7CisgICAgICAgIHJldHVybiByZXM7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCB0b0NvbnN0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIFQgcmVzOworICAgICAgICByZXMuV2ViRXZlbnQ6OmFzc2lnbigqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRl
ZiBXZWJDb3JlOjpFdmVudCBXZWJFdmVudFByaXZhdGU7CiAgICAgdm9pZCBhc3NpZ24oV2ViRXZl
bnRQcml2YXRlKik7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1vdXNlRXZlbnQy
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1vdXNlRXZlbnQy
LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1vdXNlRXZlbnQy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0
aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkN
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8N
CisjaWZuZGVmIFdlYk1vdXNlRXZlbnQyX2gNCisjZGVmaW5lIFdlYk1vdXNlRXZlbnQyX2gNCisN
CisjaW5jbHVkZSAiV2ViRXZlbnQuaCINCisNCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9ODQor
bmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBFdmVudDsgfQ0KKyNlbmRpZg0KKw0KK25hbWVzcGFj
ZSBXZWJLaXQgew0KKw0KK2NsYXNzIFdlYk1vdXNlRXZlbnQyIDogcHVibGljIFdlYkV2ZW50IHsN
CitwdWJsaWM6DQorICAgIFdFQktJVF9BUEkgaW50IHNjcmVlblgoKSBjb25zdDsNCisgICAgV0VC
S0lUX0FQSSBpbnQgc2NyZWVuWSgpIGNvbnN0Ow0KKyAgICBXRUJLSVRfQVBJIGludCBjbGllbnRY
KCkgY29uc3Q7DQorICAgIFdFQktJVF9BUEkgaW50IGNsaWVudFkoKSBjb25zdDsNCisgICAgV0VC
S0lUX0FQSSBpbnQgbGF5ZXJYKCkgY29uc3Q7DQorICAgIFdFQktJVF9BUEkgaW50IGxheWVyWSgp
IGNvbnN0Ow0KKyAgICBXRUJLSVRfQVBJIGludCBvZmZzZXRYKCkgY29uc3Q7DQorICAgIFdFQktJ
VF9BUEkgaW50IG9mZnNldFkoKSBjb25zdDsNCisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVgoKSBj
b25zdDsNCisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVkoKSBjb25zdDsNCisgICAgV0VCS0lUX0FQ
SSBpbnQgeCgpIGNvbnN0Ow0KKyAgICBXRUJLSVRfQVBJIGludCB5KCkgY29uc3Q7DQorDQorICAg
IFdFQktJVF9BUEkgaW50IGJ1dHRvbigpIGNvbnN0Ow0KKyAgICBXRUJLSVRfQVBJIGJvb2wgYnV0
dG9uRG93bigpIGNvbnN0Ow0KK307DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0DQorDQorI2Vu
ZGlmDQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNb3VzZUV2ZW50Mi5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1vdXNlRXZlbnQyLmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTW91c2VFdmVudDIuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJN
b3VzZUV2ZW50Mi5oIgorCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2ludCBXZWJNb3VzZUV2ZW50Mjo6
c2NyZWVuWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCkt
PnNjcmVlblgoKTsKK30KKworaW50IFdlYk1vdXNlRXZlbnQyOjpzY3JlZW5ZKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+c2NyZWVuWSgpOworfQorCitp
bnQgV2ViTW91c2VFdmVudDI6OmNsaWVudFgoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVu
d3JhcDxNb3VzZUV2ZW50PigpLT5jbGllbnRYKCk7Cit9CisKK2ludCBXZWJNb3VzZUV2ZW50Mjo6
Y2xpZW50WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCkt
PmNsaWVudFkoKTsKK30KKworaW50IFdlYk1vdXNlRXZlbnQyOjpsYXllclgoKSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5sYXllclgoKTsKK30KKworaW50
IFdlYk1vdXNlRXZlbnQyOjpsYXllclkoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3Jh
cDxNb3VzZUV2ZW50PigpLT5sYXllclkoKTsKK30KKworaW50IFdlYk1vdXNlRXZlbnQyOjpvZmZz
ZXRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+b2Zm
c2V0WCgpOworfQorCitpbnQgV2ViTW91c2VFdmVudDI6Om9mZnNldFkoKSBjb25zdAoreworICAg
IHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5vZmZzZXRZKCk7Cit9CisKK2ludCBX
ZWJNb3VzZUV2ZW50Mjo6cGFnZVgoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxN
b3VzZUV2ZW50PigpLT5wYWdlWCgpOworfQorCitpbnQgV2ViTW91c2VFdmVudDI6OnBhZ2VZKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+cGFnZVkoKTsK
K30KKworaW50IFdlYk1vdXNlRXZlbnQyOjp4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RV
bndyYXA8TW91c2VFdmVudD4oKS0+eCgpOworfQorCitpbnQgV2ViTW91c2VFdmVudDI6OnkoKSBj
b25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT55KCk7Cit9CisK
K2ludCBXZWJNb3VzZUV2ZW50Mjo6YnV0dG9uKCkgY29uc3QKK3sKKyAgIHJldHVybiBjb25zdFVu
d3JhcDxNb3VzZUV2ZW50PigpLT5idXR0b24oKTsKK30KKworYm9vbCBXZWJNb3VzZUV2ZW50Mjo6
YnV0dG9uRG93bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+
KCktPmJ1dHRvbkRvd24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63402</attachid>
            <date>2010-08-03 18:38:25 -0700</date>
            <delta_ts>2010-08-13 18:39:42 -0700</delta_ts>
            <desc>Fixed style issues</desc>
            <filename>mouse_event.patch</filename>
            <type>text/plain</type>
            <size>8364</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NDYwOSkKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wOC0wMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgbmV3IGV2ZW50IGNsYXNzIGZvciBt
b3VzZSBldmVudHMgc28gdGhhdCB0aGUgZXZlbnQKKyAgICAgICAgbGlzdGVuZXIgQVBJIGNhbiBi
ZSB1c2VkIHRvIGxpc3RlbiB0byB0aGVtLgorICAgICAgICBOb3RlIHRoYXQgYSBXZWJNb3VzZUV2
ZW50IGNsYXNzIGFscmVhZHkgZXhpc3RzIGluIFdlYklucHV0RXZlbnQuaAorICAgICAgICBzbyB0
aGUgdW5mb3J0dW5hdGUgV2ViTW91c2VFdmVudDIgbmFtZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNDUzIAorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViRXZl
bnQ6OnRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnQ6OnRvQ29uc3QpOgorICAgICAgICAq
IHB1YmxpYy9XZWJNb3VzZUV2ZW50Mi5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViTW91c2VF
dmVudDIuY3BwOiBBZGRlZC4KKwogMjAxMC0wOC0wMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDY0NTA1KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTWVzc2FnZVBvcnRDaGFubmVsQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViTWltZVJlZ2lzdHJ5LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTW91c2VF
dmVudDIuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJNdXRhdGlvbkV2ZW50LmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViTmFtZWROb2RlTWFwLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViTmF2aWdhdGlvblR5cGUuaCcsCkBAIC00MzYsNiArNDM3LDcgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYk1lZGlhRWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJNZWRpYVBsYXllckNsaWVudEltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJN
b3VzZUV2ZW50Mi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTXV0YXRpb25FdmVudC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViTmFtZWROb2RlTWFwLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJOb2RlLmNwcCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkV2ZW50LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkV2
ZW50LmgJKHJldmlzaW9uIDY0NTA1KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSwyMCBAQCBwdWJsaWM6CiAgICAgV2ViRXZl
bnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkV2ZW50PiYpOwogI2VuZGlmCiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHRvKCkKKyAgICB7CisgICAgICAgIFQgcmVzOworICAg
ICAgICByZXMuV2ViRXZlbnQ6OmFzc2lnbigqdGhpcyk7CisgICAgICAgIHJldHVybiByZXM7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgVCB0b0NvbnN0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIFQgcmVzOworICAgICAgICByZXMuV2ViRXZlbnQ6OmFzc2lnbigqdGhp
cyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdHlwZWRl
ZiBXZWJDb3JlOjpFdmVudCBXZWJFdmVudFByaXZhdGU7CiAgICAgdm9pZCBhc3NpZ24oV2ViRXZl
bnRQcml2YXRlKik7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1vdXNlRXZlbnQy
LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1vdXNlRXZlbnQy
LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk1vdXNlRXZlbnQy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBXZWJNb3VzZUV2ZW50Ml9oCisj
ZGVmaW5lIFdlYk1vdXNlRXZlbnQyX2gKKworI2luY2x1ZGUgIldlYkV2ZW50LmgiCisKKyNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7IH0K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTW91c2VFdmVudDIgOiBw
dWJsaWMgV2ViRXZlbnQgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgaW50IHNjcmVlblgoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBzY3JlZW5ZKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBpbnQgY2xpZW50WCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IGNsaWVudFkoKSBjb25z
dDsKKyAgICBXRUJLSVRfQVBJIGludCBsYXllclgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGlu
dCBsYXllclkoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBvZmZzZXRYKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBpbnQgb2Zmc2V0WSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHBh
Z2VYKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVkoKSBjb25zdDsKKyAgICBXRUJL
SVRfQVBJIGludCB4KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgeSgpIGNvbnN0OworCisg
ICAgV0VCS0lUX0FQSSBpbnQgYnV0dG9uKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGJ1
dHRvbkRvd24oKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTW91c2VFdmVudDIuY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJNb3VzZUV2ZW50Mi5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk1vdXNlRXZlbnQyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViTW91c2VF
dmVudDIuaCIKKworI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbnQgV2ViTW91c2VFdmVudDI6OnNjcmVl
blgoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5zY3Jl
ZW5YKCk7Cit9CisKK2ludCBXZWJNb3VzZUV2ZW50Mjo6c2NyZWVuWSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnNjcmVlblkoKTsKK30KKworaW50IFdl
Yk1vdXNlRXZlbnQyOjpjbGllbnRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8
TW91c2VFdmVudD4oKS0+Y2xpZW50WCgpOworfQorCitpbnQgV2ViTW91c2VFdmVudDI6OmNsaWVu
dFkoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5jbGll
bnRZKCk7Cit9CisKK2ludCBXZWJNb3VzZUV2ZW50Mjo6bGF5ZXJYKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+bGF5ZXJYKCk7Cit9CisKK2ludCBXZWJN
b3VzZUV2ZW50Mjo6bGF5ZXJZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91
c2VFdmVudD4oKS0+bGF5ZXJZKCk7Cit9CisKK2ludCBXZWJNb3VzZUV2ZW50Mjo6b2Zmc2V0WCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPm9mZnNldFgo
KTsKK30KKworaW50IFdlYk1vdXNlRXZlbnQyOjpvZmZzZXRZKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+b2Zmc2V0WSgpOworfQorCitpbnQgV2ViTW91
c2VFdmVudDI6OnBhZ2VYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VF
dmVudD4oKS0+cGFnZVgoKTsKK30KKworaW50IFdlYk1vdXNlRXZlbnQyOjpwYWdlWSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnBhZ2VZKCk7Cit9CisK
K2ludCBXZWJNb3VzZUV2ZW50Mjo6eCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFw
PE1vdXNlRXZlbnQ+KCktPngoKTsKK30KKworaW50IFdlYk1vdXNlRXZlbnQyOjp5KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+eSgpOworfQorCitpbnQg
V2ViTW91c2VFdmVudDI6OmJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFw
PE1vdXNlRXZlbnQ+KCktPmJ1dHRvbigpOworfQorCitib29sIFdlYk1vdXNlRXZlbnQyOjpidXR0
b25Eb3duKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+
YnV0dG9uRG93bigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="51747"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64397</attachid>
            <date>2010-08-13 18:39:42 -0700</date>
            <delta_ts>2010-08-13 23:04:28 -0700</delta_ts>
            <desc>Renamed WebEvent to WebDOMEvent</desc>
            <filename>dom_event.patch</filename>
            <type>text/plain</type>
            <size>42858</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTM0NSkKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0xMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgdGhlIFdlYkV2ZW50IHRvIFdlYkRP
TUV2ZW50IGFuZCBhZGRpbmcgYSBuZXcgZXZlbnQgY2xhc3MKKyAgICAgICAgZm9yIG1vdXNlIGV2
ZW50cyBzbyB0aGF0IHRoZSBldmVudCBsaXN0ZW5lciBBUEkgY2FuIGJlIHVzZWQgdG8gbGlzdGVu
CisgICAgICAgIHRvIHRoZW0uICBUaGUgcmVuYW1pbmcgaXMgbmVlZGVkIGFzIHRoZXJlIGFscmVh
ZHkgaXMgYSBXZWJNb3VzZUV2ZW50IGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NTMKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRPTUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJE
T01FdmVudExpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01Nb3VzZUV2
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlLmg6CisgICAgICAgICogc3JjL0V2ZW50TGlz
dGVuZXJXcmFwcGVyLmNwcDoKKyAgICAgICAgKiBzcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaDoK
KyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
RE9NRXZlbnRMaXN0ZW5lci5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExpc3Rl
bmVyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NTW91c2VFdmVudC5jcHA6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc0Vs
ZW1lbnROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6YWRkRE9NRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIpOgor
CiAyMDEwLTA4LTEzICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2
aXNpb24gNjUzNDQpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDYgKzEzNCwxMCBAQAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YkNTdHJpbmcuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDdXJzb3JJbmZvLmgnLAor
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9NRXZlbnQuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJET01FdmVudExpc3RlbmVyLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRE9NTW91c2VFdmVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTU11dGF0
aW9uRXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJET01TdHJpbmdMaXN0Lmgn
LAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRGF0YS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkRhdGFiYXNlLmgnLApAQCAtMzc3LDYgKzM4MSwxMiBAQAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViQ1N0cmluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
Q3Vyc29ySW5mby5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnQuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXIuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYkRPTU1vdXNlRXZlbnQuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkRP
TU11dGF0aW9uRXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTVN0cmluZ0xp
c3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGEuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkRhdGFiYXNlLmNwcCcsCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkRPTUV2ZW50LmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkRPTUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRP
TUV2ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJET01FdmVu
dF9oCisjZGVmaW5lIFdlYkRPTUV2ZW50X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2lu
Y2x1ZGUgIldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeyBjbGFzcyBFdmVudDsgfQorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNw
YWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRPTUV2ZW50IHsKK3B1YmxpYzoK
KyAgICBlbnVtIFBoYXNlVHlwZSB7CisgICAgICAgIENhcHR1cmluZ1BoYXNlICAgICA9IDEsCisg
ICAgICAgIEF0VGFyZ2V0ICAgICAgICAgICA9IDIsCisgICAgICAgIEJ1YmJsaW5nUGhhc2UgICAg
ICA9IDMKKyAgICB9OworCisgICAgV2ViRE9NRXZlbnQoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKyAg
ICBXZWJET01FdmVudChjb25zdCBXZWJET01FdmVudCYgZSkgOiBtX3ByaXZhdGUoMCkgeyBhc3Np
Z24oZSk7IH0KKyAgICBXZWJET01FdmVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTUV2ZW50JiBl
KQorICAgIHsKKyAgICAgICAgYXNzaWduKGUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorCisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFz
c2lnbihjb25zdCBXZWJET01FdmVudCYpOworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJl
dHVybiAhbV9wcml2YXRlOyB9CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyB0eXBlKCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSBXZWJOb2RlIHRhcmdldCgpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgV2ViTm9kZSBjdXJyZW50VGFyZ2V0KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJIFBoYXNl
VHlwZSBldmVudFBoYXNlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGJ1YmJsZXMoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0OworCisgICAgV0VC
S0lUX0FQSSBib29sIGlzVUlFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc01v
dXNlRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNNdXRhdGlvbkV2ZW50KCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgYm9vbCBpc1RleHRFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9v
bCBpc0NvbXBvc2l0aW9uRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNEcmFn
RXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNDbGlwYm9hcmRFdmVudCgpIGNv
bnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc01lc3NhZ2VFdmVudCgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wg
aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBp
c092ZXJmbG93RXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNQYWdlVHJhbnNp
dGlvbkV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzUG9wU3RhdGVFdmVudCgp
IGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1Byb2dyZXNzRXZlbnQoKSBjb25zdDsKKyAg
ICBXRUJLSVRfQVBJIGJvb2wgaXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIGJvb2wgaXNXZWJLaXRBbmltYXRpb25FdmVudCgpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgYm9vbCBpc1dlYktpdFRyYW5zaXRpb25FdmVudCgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgYm9vbCBpc0JlZm9yZUxvYWRFdmVudCgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgV2ViRE9NRXZlbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkV2ZW50PiYpOworI2VuZGlmCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHRvKCkK
KyAgICB7CisgICAgICAgIFQgcmVzOworICAgICAgICByZXMuV2ViRE9NRXZlbnQ6OmFzc2lnbigq
dGhpcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3QgVCB0b0NvbnN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIFQgcmVzOworICAg
ICAgICByZXMuV2ViRE9NRXZlbnQ6OmFzc2lnbigqdGhpcyk7CisgICAgICAgIHJldHVybiByZXM7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBXZWJDb3JlOjpFdmVudCBXZWJET01F
dmVudFByaXZhdGU7CisgICAgdm9pZCBhc3NpZ24oV2ViRE9NRXZlbnRQcml2YXRlKik7CisgICAg
V2ViRE9NRXZlbnRQcml2YXRlKiBtX3ByaXZhdGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUKiB1bndyYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX3By
aXZhdGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQqIGNvbnN0
VW53cmFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBU
Kj4obV9wcml2YXRlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTUV2ZW50TGlzdGVuZXIuaA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NRXZlbnRMaXN0ZW5l
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01FdmVudExp
c3RlbmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkRPTUV2ZW50
TGlzdGVuZXJfaAorI2RlZmluZSBXZWJET01FdmVudExpc3RlbmVyX2gKKworI2luY2x1ZGUgIldl
YkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29y
ZSB7IGNsYXNzIE5vZGU7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
RXZlbnRMaXN0ZW5lcldyYXBwZXJET007CitjbGFzcyBXZWJET01FdmVudDsKK2NsYXNzIFdlYkRP
TUV2ZW50TGlzdGVuZXJQcml2YXRlOworY2xhc3MgV2ViTm9kZTsKK2NsYXNzIFdlYlN0cmluZzsK
KworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgV0VCS0lUX0FQSSBX
ZWJET01FdmVudExpc3RlbmVyKCk7CisgICAgV0VCS0lUX0FQSSB2aXJ0dWFsIH5XZWJET01FdmVu
dExpc3RlbmVyKCk7CisKKyAgICAvLyBDYWxsZWQgd2hlbiBhbiBldmVudCBpcyByZWNlaXZlZC4K
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoY29uc3QgV2ViRE9NRXZlbnQmKSA9IDA7CisK
KyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICB2b2lkIG5vdGlmeUV2ZW50TGlzdGVuZXJE
ZWxldGVkKEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKik7CisgICAgRXZlbnRMaXN0ZW5lcldyYXBw
ZXJET00qIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpOworICAgIEV2ZW50TGlz
dGVuZXJXcmFwcGVyRE9NKiBnZXRFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcm
IGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBXZWJDb3JlOjpOb2RlKiBub2RlKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKiBtX3ByaXZhdGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRE9NTW91c2VFdmVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2lmbmRlZiBXZWJET01Nb3VzZUV2ZW50X2gKKyNkZWZpbmUgV2ViRE9NTW91c2VFdmVu
dF9oCisKKyNpbmNsdWRlICJXZWJET01FdmVudC5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEV2ZW50OyB9CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRPTU1vdXNlRXZlbnQgOiBwdWJsaWMgV2ViRE9NRXZl
bnQgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgaW50IHNjcmVlblgoKSBjb25zdDsKKyAgICBX
RUJLSVRfQVBJIGludCBzY3JlZW5ZKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgY2xpZW50
WCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IGNsaWVudFkoKSBjb25zdDsKKyAgICBXRUJL
SVRfQVBJIGludCBsYXllclgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBsYXllclkoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBvZmZzZXRYKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBpbnQgb2Zmc2V0WSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHBhZ2VYKCkgY29uc3Q7
CisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVkoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCB4
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgeSgpIGNvbnN0OworCisgICAgV0VCS0lUX0FQ
SSBpbnQgYnV0dG9uKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGJ1dHRvbkRvd24oKSBj
b25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NTXV0YXRpb25FdmVudC5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50LmgJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTU11dGF0aW9uRXZlbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFdlYkRPTU11dGF0aW9uRXZlbnRfaAorI2RlZmlu
ZSBXZWJET01NdXRhdGlvbkV2ZW50X2gKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7
IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NTXV0YXRpb25F
dmVudCA6IHB1YmxpYyBXZWJET01FdmVudCB7CitwdWJsaWM6CisgICAgZW51bSBBdHRyQ2hhbmdl
VHlwZSB7CisgICAgICAgIE1vZGlmaWNhdGlvbiAgICA9IDEsCisgICAgICAgIEFkZGl0aW9uICAg
ICAgICA9IDIsCisgICAgICAgIFJlbW92YWwgICAgICAgICA9IDMKKyAgICB9OworCisgICAgV0VC
S0lUX0FQSSBXZWJOb2RlIHJlbGF0ZWROb2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJT
dHJpbmcgcHJldlZhbHVlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgbmV3VmFs
dWUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBhdHRyTmFtZSgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgQXR0ckNoYW5nZVR5cGUgYXR0ckNoYW5nZSgpIGNvbnN0OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJOb2RlLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
Yk5vZGUuaAkocmV2aXNpb24gNjUzNDQpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBOb2RlOyB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRE9NRXZlbnRM
aXN0ZW5lcjsKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOwogY2xhc3MgV2ViRG9j
dW1lbnQ7CiBjbGFzcyBXZWJFdmVudExpc3RlbmVyOwogY2xhc3MgV2ViRXZlbnRMaXN0ZW5lclBy
aXZhdGU7CkBAIC05Nyw2ICs5OSw4IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfQVBJIFdlYlN0cmlu
ZyBjcmVhdGVNYXJrdXAoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIGJvb2wgaXNUZXh0Tm9kZSgp
IGNvbnN0OwogICAgIFdFQktJVF9BUEkgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3Q7CisgICAg
V0VCS0lUX0FQSSB2b2lkIGFkZERPTUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVu
dFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwor
ICAgIFdFQktJVF9BUEkgdm9pZCByZW1vdmVET01FdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmlu
ZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0
dXJlKTsKICAgICBXRUJLSVRfQVBJIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJp
bmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3Ry
aW5nJiBldmVudFR5cGUsIFdlYkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1
cmUpOwogICAgIFdFQktJVF9BUEkgdm9pZCBzaW11bGF0ZUNsaWNrKCk7CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmNwcA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuY3BwCShyZXZpc2lvbiA2NTM0
NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsNDMgQEAKICNpbmNsdWRlICJFdmVudC5oIg0KICNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiDQogDQorI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiDQorI2lu
Y2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCINCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCINCiAj
aW5jbHVkZSAiV2ViRXZlbnRMaXN0ZW5lci5oIg0KIA0KIG5hbWVzcGFjZSBXZWJLaXQgew0KIA0K
K0V2ZW50TGlzdGVuZXJXcmFwcGVyRE9NOjpFdmVudExpc3RlbmVyV3JhcHBlckRPTShXZWJET01F
dmVudExpc3RlbmVyKiB3ZWJET01FdmVudExpc3RlbmVyKQ0KKyAgICA6IEV2ZW50TGlzdGVuZXIo
RXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkNCisgICAgLCBtX3dlYkRPTUV2ZW50
TGlzdGVuZXIod2ViRE9NRXZlbnRMaXN0ZW5lcikNCit7DQorfQ0KKw0KK0V2ZW50TGlzdGVuZXJX
cmFwcGVyRE9NOjp+RXZlbnRMaXN0ZW5lcldyYXBwZXJET00oKQ0KK3sNCisgICAgaWYgKG1fd2Vi
RE9NRXZlbnRMaXN0ZW5lcikNCisgICAgICAgIG1fd2ViRE9NRXZlbnRMaXN0ZW5lci0+bm90aWZ5
RXZlbnRMaXN0ZW5lckRlbGV0ZWQodGhpcyk7DQorfQ0KKw0KK2Jvb2wgRXZlbnRMaXN0ZW5lcldy
YXBwZXJET006Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpDQorew0K
KyAgICByZXR1cm4gdGhpcyA9PSAmbGlzdGVuZXI7DQorfQ0KKw0KK3ZvaWQgRXZlbnRMaXN0ZW5l
cldyYXBwZXJET006OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV2ZW50KiBldmVudCkNCit7DQorICAgIGlmICghbV93ZWJET01FdmVudExpc3RlbmVyKQ0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICBXZWJET01FdmVudCB3ZWJET01FdmVudChldmVudCk7DQorICAg
IG1fd2ViRE9NRXZlbnRMaXN0ZW5lci0+aGFuZGxlRXZlbnQod2ViRE9NRXZlbnQpOw0KK30NCisN
Cit2b2lkIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NOjp3ZWJET01FdmVudExpc3RlbmVyRGVsZXRl
ZCgpDQorew0KKyAgICBtX3dlYkRPTUV2ZW50TGlzdGVuZXIgPSAwOw0KK30NCisNCiBFdmVudExp
c3RlbmVyV3JhcHBlcjo6RXZlbnRMaXN0ZW5lcldyYXBwZXIoV2ViRXZlbnRMaXN0ZW5lciogd2Vi
RXZlbnRMaXN0ZW5lcikNCiAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkpTRXZl
bnRMaXN0ZW5lclR5cGUpDQogICAgICwgbV93ZWJFdmVudExpc3RlbmVyKHdlYkV2ZW50TGlzdGVu
ZXIpDQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5o
CShyZXZpc2lvbiA2NTM0NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldy
YXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsMjYgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiANCiBuYW1lc3BhY2UgV2ViS2l0IHsNCiANCitjbGFzcyBXZWJET01FdmVudExp
c3RlbmVyOw0KIGNsYXNzIFdlYkV2ZW50TGlzdGVuZXI7DQogDQorLy8gRklYTUU6IFJlbW92ZSB0
aGUgRXZlbnRMaXN0ZW5lcldyYXBwZXIgY2xhc3MgYmVsb3cgYW5kIHJlbmFtZQ0KKy8vIEV2ZW50
TGlzdGVuZXJXcmFwcGVyRE9NIHRvIEV2ZW50TGlzdGVuZXJXcmFwcGVyIG9uY2UgQ2hyb21pdW0g
c3dpdGNoZWQgdG8NCisvLyB1c2luZyBXZWJET01FdmVudC4NCitjbGFzcyBFdmVudExpc3RlbmVy
V3JhcHBlckRPTSA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsNCitwdWJsaWM6DQorICAgIEV2ZW50
TGlzdGVuZXJXcmFwcGVyRE9NKFdlYkRPTUV2ZW50TGlzdGVuZXIqKTsNCisgICAgfkV2ZW50TGlz
dGVuZXJXcmFwcGVyRE9NKCk7DQorDQorICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEV2ZW50TGlzdGVuZXImKTsNCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOw0KKw0KKyAgICB2b2lkIHdlYkRPTUV2ZW50TGlzdGVu
ZXJEZWxldGVkKCk7DQorDQorcHJpdmF0ZToNCisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lciogbV93
ZWJET01FdmVudExpc3RlbmVyOw0KK307DQorDQogY2xhc3MgRXZlbnRMaXN0ZW5lcldyYXBwZXIg
OiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7DQogcHVibGljOg0KICAgICBFdmVudExpc3RlbmVyV3Jh
cHBlcihXZWJFdmVudExpc3RlbmVyKik7DQpAQCAtNTcsNiArNzUsNyBAQCBwcml2YXRlOgogICAg
IFdlYkV2ZW50TGlzdGVuZXIqIG1fd2ViRXZlbnRMaXN0ZW5lcjsNCiB9Ow0KIA0KKw0KIH0gLy8g
bmFtZXNwYWNlIFdlYktpdA0KIA0KICNlbmRpZg0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRE9NRXZlbnQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
T01FdmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJET01FdmVudFByaXZhdGUgOiBwdWJsaWMgV2ViQ29yZTo6RXZlbnQg
eworfTsKKwordm9pZCBXZWJET01FdmVudDo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30K
Kwordm9pZCBXZWJET01FdmVudDo6YXNzaWduKGNvbnN0IFdlYkRPTUV2ZW50JiBvdGhlcikKK3sK
KyAgICBXZWJET01FdmVudFByaXZhdGUqIHAgPSBjb25zdF9jYXN0PFdlYkRPTUV2ZW50UHJpdmF0
ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAg
IGFzc2lnbihwKTsKK30KKwordm9pZCBXZWJET01FdmVudDo6YXNzaWduKFdlYkRPTUV2ZW50UHJp
dmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxs
ZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAg
bV9wcml2YXRlID0gcDsKK30KKworV2ViRE9NRXZlbnQ6OldlYkRPTUV2ZW50KGNvbnN0IFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpFdmVudD4mIGV2ZW50KQorICAgIDogbV9wcml2YXRlKHN0YXRp
Y19jYXN0PFdlYkRPTUV2ZW50UHJpdmF0ZSo+KGV2ZW50LnJlbGVhc2VSZWYoKSkpCit7Cit9CisK
K1dlYlN0cmluZyBXZWJET01FdmVudDo6dHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJp
dmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dHlwZSgpOworfQorCitXZWJOb2RlIFdlYkRP
TUV2ZW50Ojp0YXJnZXQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJl
dHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+dGFyZ2V0KCktPnRvTm9kZSgpKTsKK30KKworV2ViTm9k
ZSBXZWJET01FdmVudDo6Y3VycmVudFRhcmdldCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJp
dmF0ZSk7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5jdXJyZW50VGFyZ2V0KCktPnRv
Tm9kZSgpKTsKK30KKworV2ViRE9NRXZlbnQ6OlBoYXNlVHlwZSBXZWJET01FdmVudDo6ZXZlbnRQ
aGFzZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkRPTUV2ZW50OjpQaGFzZVR5cGU+KG1fcHJpdmF0ZS0+ZXZlbnRQaGFzZSgpKTsK
K30KKworYm9vbCBXZWJET01FdmVudDo6YnViYmxlcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
cHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YnViYmxlcygpOworfQorCitib29sIFdl
YkRPTUV2ZW50OjpjYW5jZWxhYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5jYW5jZWxhYmxlKCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZl
bnQ6OmlzVUlFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+aXNVSUV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzTW91
c2VFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNNb3VzZUV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzTXV0YXRp
b25FdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNNdXRhdGlvbkV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzS2V5
Ym9hcmRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXNLZXlib2FyZEV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6Omlz
VGV4dEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5pc1RleHRFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc0NvbXBv
c2l0aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzQ29tcG9zaXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50
Ojppc0RyYWdFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+aXNEcmFnRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXND
bGlwYm9hcmRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+aXNDbGlwYm9hcmRFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50
Ojppc01lc3NhZ2VFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNNZXNzYWdlRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVu
dDo6aXNXaGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pc1doZWVsRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6
aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0
ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpOwor
fQorCitib29sIFdlYkRPTUV2ZW50Ojppc092ZXJmbG93RXZlbnQoKSBjb25zdAoreworICAgIEFT
U0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzT3ZlcmZsb3dFdmVudCgp
OworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1BhZ2VUcmFuc2l0aW9uRXZlbnQoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUGFnZVRy
YW5zaXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1BvcFN0YXRlRXZlbnQo
KSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzUG9wU3RhdGVFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1Byb2dyZXNzRXZl
bnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmlzUHJvZ3Jlc3NFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKTsKK30K
KworYm9vbCBXZWJET01FdmVudDo6aXNXZWJLaXRBbmltYXRpb25FdmVudCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNXZWJLaXRBbmlt
YXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1dlYktpdFRyYW5zaXRpb25F
dmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+aXNXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6
aXNCZWZvcmVMb2FkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzQmVmb3JlTG9hZEV2ZW50KCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVy
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NRXZlbnRMaXN0
ZW5lci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50
TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKg0KKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0DQorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAq
IGRpc3RyaWJ1dGlvbi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUw0KKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQN
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZDQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuDQorICovDQorDQorI2luY2x1ZGUgImNvbmZpZy5oIg0KKyNpbmNsdWRlICJXZWJET01FdmVu
dExpc3RlbmVyLmgiDQorDQorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgi
DQorDQorbmFtZXNwYWNlIFdlYktpdCB7DQorDQorV2ViRE9NRXZlbnRMaXN0ZW5lcjo6V2ViRE9N
RXZlbnRMaXN0ZW5lcigpDQorICAgIDogbV9wcml2YXRlKG5ldyBXZWJET01FdmVudExpc3RlbmVy
UHJpdmF0ZSh0aGlzKSkNCit7DQorfQ0KKw0KK1dlYkRPTUV2ZW50TGlzdGVuZXI6On5XZWJET01F
dmVudExpc3RlbmVyKCkNCit7DQorICAgIG1fcHJpdmF0ZS0+d2ViRE9NRXZlbnRMaXN0ZW5lckRl
bGV0ZWQoKTsNCisgICAgZGVsZXRlIG1fcHJpdmF0ZTsNCit9DQorDQordm9pZCBXZWJET01FdmVu
dExpc3RlbmVyOjpub3RpZnlFdmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBl
ckRPTSogd3JhcHBlcikNCit7DQorICAgIG1fcHJpdmF0ZS0+ZXZlbnRMaXN0ZW5lckRlbGV0ZWQo
d3JhcHBlcik7DQorfQ0KKw0KK0V2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBXZWJET01FdmVudExp
c3RlbmVyOjpjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50
VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQ0KK3sNCisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBu
b2RlKTsNCit9DQorDQorRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIFdlYkRPTUV2ZW50TGlzdGVu
ZXI6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBi
b29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpDQorew0KKyAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG5vZGUpOw0KK30N
CisNCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQNCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0K
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaW5j
bHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgi
DQorDQorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFwcGVyLmgiDQorI2luY2x1ZGUgIldlYkRP
TUV2ZW50TGlzdGVuZXIuaCINCisNCituYW1lc3BhY2UgV2ViS2l0IHsNCisNCitXZWJET01FdmVu
dExpc3RlbmVyUHJpdmF0ZTo6V2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUoV2ViRE9NRXZlbnRM
aXN0ZW5lciogd2ViRE9NRXZlbnRMaXN0ZW5lcikNCisgICAgOiBtX3dlYkRPTUV2ZW50TGlzdGVu
ZXIod2ViRE9NRXZlbnRMaXN0ZW5lcikNCit7DQorfQ0KKw0KK1dlYkRPTUV2ZW50TGlzdGVuZXJQ
cml2YXRlOjp+V2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUoKQ0KK3sNCit9DQorDQorRXZlbnRM
aXN0ZW5lcldyYXBwZXJET00qIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpjcmVhdGVFdmVu
dExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0
dXJlLCBOb2RlKiBub2RlKQ0KK3sNCisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIGxpc3Rl
bmVyV3JhcHBlciA9IG5ldyBFdmVudExpc3RlbmVyV3JhcHBlckRPTShtX3dlYkRPTUV2ZW50TGlz
dGVuZXIpOw0KKyAgICBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6TGlzdGVuZXJJbmZvIGxp
c3RlbmVySW5mbyhldmVudFR5cGUsIHVzZUNhcHR1cmUsIGxpc3RlbmVyV3JhcHBlciwgbm9kZSk7
DQorICAgIG1fbGlzdGVuZXJXcmFwcGVycy5hcHBlbmQobGlzdGVuZXJJbmZvKTsNCisgICAgcmV0
dXJuIGxpc3RlbmVyV3JhcHBlcjsNCit9DQorDQorRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIFdl
YkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpnZXRFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBX
ZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQ0KK3sNCisg
ICAgVmVjdG9yPFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25z
dF9pdGVyYXRvciBpdGVyOw0KKyAgICBmb3IgKGl0ZXIgPSBtX2xpc3RlbmVyV3JhcHBlcnMuYmVn
aW4oKTsgaXRlciAhPSBtX2xpc3RlbmVyV3JhcHBlcnMuZW5kKCk7ICsraXRlcikgew0KKyAgICAg
ICAgaWYgKGl0ZXItPm5vZGUgPT0gbm9kZSkNCisgICAgICAgICAgcmV0dXJuIGl0ZXItPmV2ZW50
TGlzdGVuZXJXcmFwcGVyOw0KKyAgICB9DQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOw0KKyAg
ICByZXR1cm4gMDsNCit9DQorDQordm9pZCBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6d2Vi
RE9NRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKQ0KK3sNCisgICAgLy8gTm90aWZpZXMgYWxsIFdlYkRP
TUV2ZW50TGlzdGVuZXJXcmFwcGVycyB0aGF0IHdlIGFyZSBnb2luZyBhd2F5IHNvIHRoZXkgY2Fu
DQorICAgIC8vIGludmFsaWRhdGUgdGhlaXIgcG9pbnRlciB0byB1cy4NCisgICAgVmVjdG9yPFdl
YkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25zdF9pdGVyYXRvciBp
dGVyOw0KKyAgICBmb3IgKGl0ZXIgPSBtX2xpc3RlbmVyV3JhcHBlcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2xpc3RlbmVyV3JhcHBlcnMuZW5kKCk7ICsraXRlcikNCisgICAgICAgIGl0ZXItPmV2ZW50
TGlzdGVuZXJXcmFwcGVyLT53ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOw0KK30NCisNCit2
b2lkIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpldmVudExpc3RlbmVyRGVsZXRlZChFdmVu
dExpc3RlbmVyV3JhcHBlckRPTSogZXZlbnRMaXN0ZW5lcikNCit7DQorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9saXN0ZW5lcldyYXBwZXJzLnNpemUoKTsgKytpKSB7DQorICAgICAgICBp
ZiAobV9saXN0ZW5lcldyYXBwZXJzW2ldLmV2ZW50TGlzdGVuZXJXcmFwcGVyID09IGV2ZW50TGlz
dGVuZXIpIHsNCisgICAgICAgICAgICBtX2xpc3RlbmVyV3JhcHBlcnMucmVtb3ZlKGkpOw0KKyAg
ICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsNCit9DQorDQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0DQpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Lg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUNCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlv
bi4NCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzDQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwNCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQor
DQorI2lmbmRlZiBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZV9oDQorI2RlZmluZSBXZWJET01F
dmVudExpc3RlbmVyUHJpdmF0ZV9oDQorDQorI2luY2x1ZGUgIldlYlN0cmluZy5oIg0KKw0KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+DQorDQorbmFtZXNwYWNlIFdlYkNvcmUgew0KK2NsYXNzIE5v
ZGU7DQorfQ0KKw0KK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOw0KKw0KK25hbWVzcGFjZSBXZWJL
aXQgew0KKw0KK2NsYXNzIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NOw0KK2NsYXNzIFdlYkRPTUV2
ZW50TGlzdGVuZXI7DQorDQorY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUgew0KK3B1
YmxpYzoNCisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUoV2ViRE9NRXZlbnRMaXN0ZW5l
ciogd2ViRE9NRXZlbnRMaXN0ZW5lcik7DQorICAgIH5XZWJET01FdmVudExpc3RlbmVyUHJpdmF0
ZSgpOw0KKw0KKyAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSogY3JlYXRlRXZlbnRMaXN0ZW5l
cldyYXBwZXIoDQorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VD
YXB0dXJlLCBOb2RlKiBub2RlKTsNCisNCisgICAgLy8gR2V0cyB0aGUgTGlzdGVuZXJFdmVudFdy
YXBwZXIgZm9yIGEgc3BlY2lmaWMgbm9kZS4NCisgICAgLy8gVXNlZCBieSBXZWJOb2RlOjpyZW1v
dmVET01FdmVudExpc3RlbmVyKCkuDQorICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBnZXRF
dmVudExpc3RlbmVyV3JhcHBlcigNCisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBl
LCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpOw0KKw0KKyAgICAvLyBDYWxsZWQgYnkgdGhl
IFdlYkRPTUV2ZW50TGlzdGVuZXIgd2hlbiBpdCBpcyBhYm91dCB0byBiZSBkZWxldGVkLg0KKyAg
ICB2b2lkIHdlYkRPTUV2ZW50TGlzdGVuZXJEZWxldGVkKCk7DQorDQorICAgIC8vIENhbGxlZCBi
eSB0aGUgRXZlbnRMaXN0ZW5lcldyYXBwZXIgd2hlbiBpdCBpcyBhYm91dCB0byBiZSBkZWxldGVk
Lg0KKyAgICB2b2lkIGV2ZW50TGlzdGVuZXJEZWxldGVkKEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9N
KiBldmVudExpc3RlbmVyKTsNCisNCisgICAgc3RydWN0IExpc3RlbmVySW5mbyB7DQorICAgICAg
ICBMaXN0ZW5lckluZm8oY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVy
ZSwNCisgICAgICAgICAgICAgICAgICAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSogZXZlbnRM
aXN0ZW5lcldyYXBwZXIsDQorICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSkNCisgICAg
ICAgICAgICA6IGV2ZW50VHlwZShldmVudFR5cGUpDQorICAgICAgICAgICAgLCB1c2VDYXB0dXJl
KHVzZUNhcHR1cmUpDQorICAgICAgICAgICAgLCBldmVudExpc3RlbmVyV3JhcHBlcihldmVudExp
c3RlbmVyV3JhcHBlcikNCisgICAgICAgICAgICAsIG5vZGUobm9kZSkNCisgICAgICAgIHsNCisg
ICAgICAgIH0NCisNCisgICAgICAgIFdlYlN0cmluZyBldmVudFR5cGU7DQorICAgICAgICBib29s
IHVzZUNhcHR1cmU7DQorICAgICAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSogZXZlbnRMaXN0
ZW5lcldyYXBwZXI7DQorICAgICAgICBOb2RlKiBub2RlOw0KKyAgICB9Ow0KKw0KK3ByaXZhdGU6
DQorICAgIFdlYkRPTUV2ZW50TGlzdGVuZXIqIG1fd2ViRE9NRXZlbnRMaXN0ZW5lcjsNCisNCisg
ICAgLy8gV2Uga2VlcCBhIGxpc3Qgb2YgdGhlIHdyYXBwZXIgZm9yIHRoZSBXZWJLaXQgRXZlbnRM
aXN0ZW5lciwgaXQgaXMgbmVlZGVkDQorICAgIC8vIHRvIGltcGxlbWVudCBXZWJOb2RlOjpyZW1v
dmVFdmVudExpc3RlbmVyKCkuDQorICAgIFZlY3RvcjxMaXN0ZW5lckluZm8+IG1fbGlzdGVuZXJX
cmFwcGVyczsNCit9Ow0KKw0KK30gLy8gbmFtZXNwYWNlIFdlYktpdA0KKw0KKyNlbmRpZg0KSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTW91c2VFdmVudC5jcHANCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU1vdXNlRXZlbnQuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01Nb3VzZUV2ZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9N
TW91c2VFdmVudC5oIgorCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2ludCBXZWJET01Nb3VzZUV2ZW50
OjpzY3JlZW5YKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4o
KS0+c2NyZWVuWCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6c2NyZWVuWSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnNjcmVlblkoKTsKK30K
KworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OmNsaWVudFgoKSBjb25zdAoreworICAgIHJldHVybiBj
b25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5jbGllbnRYKCk7Cit9CisKK2ludCBXZWJET01Nb3Vz
ZUV2ZW50OjpjbGllbnRZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VF
dmVudD4oKS0+Y2xpZW50WSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6bGF5ZXJYKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+bGF5ZXJYKCk7
Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50OjpsYXllclkoKSBjb25zdAoreworICAgIHJldHVy
biBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5sYXllclkoKTsKK30KKworaW50IFdlYkRPTU1v
dXNlRXZlbnQ6Om9mZnNldFgoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3Vz
ZUV2ZW50PigpLT5vZmZzZXRYKCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50OjpvZmZzZXRZ
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+b2Zmc2V0
WSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6cGFnZVgoKSBjb25zdAoreworICAgIHJl
dHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5wYWdlWCgpOworfQorCitpbnQgV2ViRE9N
TW91c2VFdmVudDo6cGFnZVkoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3Vz
ZUV2ZW50PigpLT5wYWdlWSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6eCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPngoKTsKK30KKworaW50
IFdlYkRPTU1vdXNlRXZlbnQ6OnkoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxN
b3VzZUV2ZW50PigpLT55KCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50OjpidXR0b24oKSBj
b25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5idXR0b24oKTsK
K30KKworYm9vbCBXZWJET01Nb3VzZUV2ZW50OjpidXR0b25Eb3duKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+YnV0dG9uRG93bigpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTXV0YXRp
b25FdmVudC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU11
dGF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
T01NdXRhdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01NdXRhdGlvbkV2ZW50LmgiCisKKyNpbmNsdWRl
ICJNdXRhdGlvbkV2ZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViTm9kZSBXZWJET01NdXRhdGlvbkV2ZW50OjpyZWxhdGVkTm9kZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYk5vZGUoY29uc3RVbndyYXA8TXV0YXRpb25FdmVudD4o
KS0+cmVsYXRlZE5vZGUoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJET01NdXRhdGlvbkV2ZW50Ojpw
cmV2VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTdHJpbmcoY29uc3RVbndyYXA8TXV0
YXRpb25FdmVudD4oKS0+cHJldlZhbHVlKCkpOworfQorCitXZWJTdHJpbmcgV2ViRE9NTXV0YXRp
b25FdmVudDo6bmV3VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTdHJpbmcoY29uc3RV
bndyYXA8TXV0YXRpb25FdmVudD4oKS0+bmV3VmFsdWUoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJE
T01NdXRhdGlvbkV2ZW50OjphdHRyTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlN0cmlu
Zyhjb25zdFVud3JhcDxNdXRhdGlvbkV2ZW50PigpLT5hdHRyTmFtZSgpKTsKK30KKworV2ViRE9N
TXV0YXRpb25FdmVudDo6QXR0ckNoYW5nZVR5cGUgV2ViRE9NTXV0YXRpb25FdmVudDo6YXR0ckNo
YW5nZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0dHJDaGFuZ2VUeXBlPihj
b25zdFVud3JhcDxNdXRhdGlvbkV2ZW50PigpLT5hdHRyQ2hhbmdlKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCShyZXZpc2lvbiA2
NTM0NCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lcldyYXBwZXIuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudC5oIgorI2luY2x1ZGUg
IldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRMaXN0ZW5lci5oIgpAQCAtMTQ5LDYg
KzE1MSwyNCBAQCBib29sIFdlYk5vZGU6OmlzRWxlbWVudE5vZGUoKSBjb25zdAogICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzRWxlbWVudE5vZGUoKTsKIH0KIAordm9pZCBXZWJOb2RlOjphZGRET01F
dmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIEV2ZW50TGlzdGVuZXJXcmFw
cGVyRE9NKiBsaXN0ZW5lcldyYXBwZXIgPQorICAgICAgICBsaXN0ZW5lci0+Y3JlYXRlRXZlbnRM
aXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBtX3ByaXZhdGUuZ2V0KCkpOwor
ICAgIC8vIFRoZSBsaXN0ZW5lcldyYXBwZXIgaXMgb25seSByZWZlcmVuY2VkIGJ5IHRoZSBhY3R1
YWwgTm9kZS4gIE9uY2UgaXQgZ29lcworICAgIC8vIGF3YXksIHRoZSB3cmFwcGVyIG5vdGlmaWVz
IHRoZSBXZWJFdmVudExpc3RlbmVyIHNvIGl0IGNhbiBjbGVhciBpdHMKKyAgICAvLyBwb2ludGVy
IHRvIGl0LgorICAgIG1fcHJpdmF0ZS0+YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGFkb3B0
UmVmKGxpc3RlbmVyV3JhcHBlciksIHVzZUNhcHR1cmUpOworfQorCit2b2lkIFdlYk5vZGU6OnJl
bW92ZURPTUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgRXZlbnRMaXN0
ZW5lcldyYXBwZXJET00qIGxpc3RlbmVyV3JhcHBlciA9CisgICAgICAgIGxpc3RlbmVyLT5nZXRF
dmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5nZXQo
KSk7CisgICAgbV9wcml2YXRlLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVu
ZXJXcmFwcGVyLCB1c2VDYXB0dXJlKTsKKyAgICAvLyBsaXN0ZW5lcldyYXBwZXIgaXMgbm93IGRl
bGV0ZWQuCit9CisKIHZvaWQgV2ViTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJp
bmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVy
ZSkKIHsKICAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64408</attachid>
            <date>2010-08-13 23:04:28 -0700</date>
            <delta_ts>2010-08-13 23:52:51 -0700</delta_ts>
            <desc>Fixed style.</desc>
            <filename>dom_event.patch</filename>
            <type>text/plain</type>
            <size>42504</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjUzNDUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDgtMTMgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtaW5nIHRoZSBXZWJFdmVudCB0byBXZWJET01F
dmVudCBhbmQgYWRkaW5nIGEgbmV3IGV2ZW50IGNsYXNzCisgICAgICAgIGZvciBtb3VzZSBldmVu
dHMgc28gdGhhdCB0aGUgZXZlbnQgbGlzdGVuZXIgQVBJIGNhbiBiZSB1c2VkIHRvIGxpc3Rlbgor
ICAgICAgICB0byB0aGVtLiAgVGhlIHJlbmFtaW5nIGlzIG5lZWRlZCBhcyB0aGVyZSBhbHJlYWR5
IGlzIGEgV2ViTW91c2VFdmVudCBjbGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzNDUzCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHB1YmxpYy9XZWJET01FdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViRE9N
RXZlbnRMaXN0ZW5lci5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViRE9NTW91c2VFdmVu
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViRE9NTXV0YXRpb25FdmVudC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViTm9kZS5oOgorICAgICAgICAqIHNyYy9FdmVudExpc3Rl
bmVyV3JhcHBlci5jcHA6CisgICAgICAgICogc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmg6Cisg
ICAgICAgICogc3JjL1dlYkRPTUV2ZW50LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkRP
TUV2ZW50TGlzdGVuZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnRMaXN0
ZW5lclByaXZhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnRMaXN0ZW5l
clByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkRPTU1vdXNlRXZlbnQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NTXV0YXRpb25FdmVudC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9XZWJOb2RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6aXNFbGVt
ZW50Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OmFkZERPTUV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjpyZW1vdmVET01FdmVudExpc3RlbmVyKToKKwog
MjAxMC0wOC0xMyAgU2F0aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lv
biA2NTM0NCkKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNiArMTM0LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ1N0
cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkN1cnNvckluZm8uaCcsCisgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJET01FdmVudC5oJywKKyAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkRPTUV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJE
T01Nb3VzZUV2ZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9NTXV0YXRpb25F
dmVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTVN0cmluZ0xpc3QuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEYXRhLmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViRGF0YWJhc2UuaCcsCkBAIC0zNzcsNiArMzgxLDEyIEBACiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDdXJz
b3JJbmZvLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudC5jcHAnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lci5jcHAnLAorICAgICAgICAgICAg
ICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwJywKKyAgICAgICAgICAgICAg
ICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgnLAorICAgICAgICAgICAgICAgICdz
cmMvV2ViRE9NTW91c2VFdmVudC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NTXV0
YXRpb25FdmVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NU3RyaW5nTGlzdC5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViRGF0YWJhc2UuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RE9NRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTUV2
ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTUV2ZW50
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJET01FdmVudF9oCisj
ZGVmaW5lIFdlYkRPTUV2ZW50X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBFdmVudDsgfQorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdU
RiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRPTUV2ZW50IHsKK3B1YmxpYzoKKyAgICBl
bnVtIFBoYXNlVHlwZSB7CisgICAgICAgIENhcHR1cmluZ1BoYXNlICAgICA9IDEsCisgICAgICAg
IEF0VGFyZ2V0ICAgICAgICAgICA9IDIsCisgICAgICAgIEJ1YmJsaW5nUGhhc2UgICAgICA9IDMK
KyAgICB9OworCisgICAgV2ViRE9NRXZlbnQoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKyAgICBXZWJE
T01FdmVudChjb25zdCBXZWJET01FdmVudCYgZSkgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24oZSk7
IH0KKyAgICBXZWJET01FdmVudCYgb3BlcmF0b3I9KGNvbnN0IFdlYkRPTUV2ZW50JiBlKQorICAg
IHsKKyAgICAgICAgYXNzaWduKGUpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihj
b25zdCBXZWJET01FdmVudCYpOworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAh
bV9wcml2YXRlOyB9CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyB0eXBlKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJOb2RlIHRhcmdldCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
Tm9kZSBjdXJyZW50VGFyZ2V0KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJIFBoYXNlVHlwZSBl
dmVudFBoYXNlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGJ1YmJsZXMoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0OworCisgICAgV0VCS0lUX0FQ
SSBib29sIGlzVUlFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc01vdXNlRXZl
bnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNNdXRhdGlvbkV2ZW50KCkgY29uc3Q7
CisgICAgV0VCS0lUX0FQSSBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OworICAgIFdFQktJ
VF9BUEkgYm9vbCBpc1RleHRFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc0Nv
bXBvc2l0aW9uRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNEcmFnRXZlbnQo
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgYm9vbCBpc01lc3NhZ2VFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc092ZXJm
bG93RXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNQYWdlVHJhbnNpdGlvbkV2
ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzUG9wU3RhdGVFdmVudCgpIGNvbnN0
OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1Byb2dyZXNzRXZlbnQoKSBjb25zdDsKKyAgICBXRUJL
SVRfQVBJIGJvb2wgaXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSBjb25zdDsKKyAgICBX
RUJLSVRfQVBJIGJvb2wgaXNXZWJLaXRBbmltYXRpb25FdmVudCgpIGNvbnN0OworICAgIFdFQktJ
VF9BUEkgYm9vbCBpc1dlYktpdFRyYW5zaXRpb25FdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgYm9vbCBpc0JlZm9yZUxvYWRFdmVudCgpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCisgICAgV2ViRE9NRXZlbnQoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkV2
ZW50PiYpOworI2VuZGlmCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIHRvKCkKKyAgICB7
CisgICAgICAgIFQgcmVzOworICAgICAgICByZXMuV2ViRE9NRXZlbnQ6OmFzc2lnbigqdGhpcyk7
CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3QgVCB0b0NvbnN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIFQgcmVzOworICAgICAgICBy
ZXMuV2ViRE9NRXZlbnQ6OmFzc2lnbigqdGhpcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdHlwZWRlZiBXZWJDb3JlOjpFdmVudCBXZWJET01FdmVudFBy
aXZhdGU7CisgICAgdm9pZCBhc3NpZ24oV2ViRE9NRXZlbnRQcml2YXRlKik7CisgICAgV2ViRE9N
RXZlbnRQcml2YXRlKiBtX3ByaXZhdGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiB1
bndyYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihtX3ByaXZhdGUp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQqIGNvbnN0VW53cmFw
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUKj4obV9w
cml2YXRlKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTUV2ZW50TGlzdGVuZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTUV2ZW50TGlzdGVuZXIuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NRXZlbnRMaXN0ZW5lci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJET01FdmVudExpc3RlbmVy
X2gKKyNkZWZpbmUgV2ViRE9NRXZlbnRMaXN0ZW5lcl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24u
aCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFz
cyBOb2RlOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEV2ZW50TGlz
dGVuZXJXcmFwcGVyRE9NOworY2xhc3MgV2ViRE9NRXZlbnQ7CitjbGFzcyBXZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZTsKK2NsYXNzIFdlYk5vZGU7CitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNz
IFdlYkRPTUV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgV2ViRE9NRXZl
bnRMaXN0ZW5lcigpOworICAgIFdFQktJVF9BUEkgdmlydHVhbCB+V2ViRE9NRXZlbnRMaXN0ZW5l
cigpOworCisgICAgLy8gQ2FsbGVkIHdoZW4gYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JikgPSAwOworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBub3RpZnlFdmVudExpc3RlbmVyRGVsZXRlZChF
dmVudExpc3RlbmVyV3JhcHBlckRPTSopOworICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBj
cmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9v
bCB1c2VDYXB0dXJlLCBXZWJDb3JlOjpOb2RlKiBub2RlKTsKKyAgICBFdmVudExpc3RlbmVyV3Jh
cHBlckRPTSogZ2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5
cGUsIGJvb2wgdXNlQ2FwdHVyZSwgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZu
ZGVmIFdlYkRPTU1vdXNlRXZlbnRfaAorI2RlZmluZSBXZWJET01Nb3VzZUV2ZW50X2gKKworI2lu
Y2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVz
cGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgV2ViRE9NTW91c2VFdmVudCA6IHB1YmxpYyBXZWJET01FdmVudCB7CitwdWJs
aWM6CisgICAgV0VCS0lUX0FQSSBpbnQgc2NyZWVuWCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
aW50IHNjcmVlblkoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBjbGllbnRYKCkgY29uc3Q7
CisgICAgV0VCS0lUX0FQSSBpbnQgY2xpZW50WSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50
IGxheWVyWCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IGxheWVyWSgpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgaW50IG9mZnNldFgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBvZmZz
ZXRZKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVgoKSBjb25zdDsKKyAgICBXRUJL
SVRfQVBJIGludCBwYWdlWSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHgoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIGludCB5KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJIGludCBidXR0
b24oKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgYnV0dG9uRG93bigpIGNvbnN0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkRPTU11dGF0aW9uRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisjaWZuZGVmIFdlYkRPTU11dGF0aW9uRXZlbnRfaAorI2RlZmluZSBXZWJET01NdXRh
dGlvbkV2ZW50X2gKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7IH0KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NTXV0YXRpb25FdmVudCA6IHB1Ymxp
YyBXZWJET01FdmVudCB7CitwdWJsaWM6CisgICAgZW51bSBBdHRyQ2hhbmdlVHlwZSB7CisgICAg
ICAgIE1vZGlmaWNhdGlvbiAgICA9IDEsCisgICAgICAgIEFkZGl0aW9uICAgICAgICA9IDIsCisg
ICAgICAgIFJlbW92YWwgICAgICAgICA9IDMKKyAgICB9OworCisgICAgV0VCS0lUX0FQSSBXZWJO
b2RlIHJlbGF0ZWROb2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgcHJldlZh
bHVlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgbmV3VmFsdWUoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBhdHRyTmFtZSgpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgQXR0ckNoYW5nZVR5cGUgYXR0ckNoYW5nZSgpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlLmgJKHJldmlz
aW9uIDY1MzQ0KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsg
fQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFz
cyBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTsKIGNsYXNzIFdlYkRvY3VtZW50OwogY2xhc3Mg
V2ViRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIFdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOwpAQCAtOTcs
NiArOTksOCBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY3JlYXRlTWFya3Vw
KCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSBib29sIGlzVGV4dE5vZGUoKSBjb25zdDsKICAgICBX
RUJLSVRfQVBJIGJvb2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9p
ZCBhZGRET01FdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01F
dmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfQVBJ
IHZvaWQgcmVtb3ZlRE9NRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwg
V2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgV0VC
S0lUX0FQSSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUs
IFdlYkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpOwogICAgIFdFQktJ
VF9BUEkgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBl
LCBXZWJFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKICAgICBXRUJL
SVRfQVBJIHZvaWQgc2ltdWxhdGVDbGljaygpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9F
dmVudExpc3RlbmVyV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHAJKHJldmlzaW9uIDY1MzQ0KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDExICszNCw0MyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgogCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudExpc3Rl
bmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitFdmVudExpc3RlbmVyV3JhcHBlckRPTTo6
RXZlbnRMaXN0ZW5lcldyYXBwZXJET00oV2ViRE9NRXZlbnRMaXN0ZW5lciogd2ViRE9NRXZlbnRM
aXN0ZW5lcikKKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3Rl
bmVyVHlwZSkKKyAgICAsIG1fd2ViRE9NRXZlbnRMaXN0ZW5lcih3ZWJET01FdmVudExpc3RlbmVy
KQoreworfQorCitFdmVudExpc3RlbmVyV3JhcHBlckRPTTo6fkV2ZW50TGlzdGVuZXJXcmFwcGVy
RE9NKCkKK3sKKyAgICBpZiAobV93ZWJET01FdmVudExpc3RlbmVyKQorICAgICAgICBtX3dlYkRP
TUV2ZW50TGlzdGVuZXItPm5vdGlmeUV2ZW50TGlzdGVuZXJEZWxldGVkKHRoaXMpOworfQorCiti
b29sIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NOjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVu
ZXImIGxpc3RlbmVyKQoreworICAgIHJldHVybiB0aGlzID09ICZsaXN0ZW5lcjsKK30KKwordm9p
ZCBFdmVudExpc3RlbmVyV3JhcHBlckRPTTo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV93ZWJET01FdmVudExp
c3RlbmVyKQorICAgICAgICByZXR1cm47CisgICAgV2ViRE9NRXZlbnQgd2ViRE9NRXZlbnQoZXZl
bnQpOworICAgIG1fd2ViRE9NRXZlbnRMaXN0ZW5lci0+aGFuZGxlRXZlbnQod2ViRE9NRXZlbnQp
OworfQorCit2b2lkIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NOjp3ZWJET01FdmVudExpc3RlbmVy
RGVsZXRlZCgpCit7CisgICAgbV93ZWJET01FdmVudExpc3RlbmVyID0gMDsKK30KKwogRXZlbnRM
aXN0ZW5lcldyYXBwZXI6OkV2ZW50TGlzdGVuZXJXcmFwcGVyKFdlYkV2ZW50TGlzdGVuZXIqIHdl
YkV2ZW50TGlzdGVuZXIpCiAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkpTRXZl
bnRMaXN0ZW5lclR5cGUpCiAgICAgLCBtX3dlYkV2ZW50TGlzdGVuZXIod2ViRXZlbnRMaXN0ZW5l
cikKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmgJKHJl
dmlzaW9uIDY1MzQ0KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSwyNiBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7
CiBjbGFzcyBXZWJFdmVudExpc3RlbmVyOwogCisvLyBGSVhNRTogUmVtb3ZlIHRoZSBFdmVudExp
c3RlbmVyV3JhcHBlciBjbGFzcyBiZWxvdyBhbmQgcmVuYW1lCisvLyBFdmVudExpc3RlbmVyV3Jh
cHBlckRPTSB0byBFdmVudExpc3RlbmVyV3JhcHBlciBvbmNlIENocm9taXVtIHN3aXRjaGVkIHRv
CisvLyB1c2luZyBXZWJET01FdmVudC4KK2NsYXNzIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NIDog
cHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVy
RE9NKFdlYkRPTUV2ZW50TGlzdGVuZXIqKTsKKyAgICB+RXZlbnRMaXN0ZW5lcldyYXBwZXJET00o
KTsKKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2
ZW50Kik7CisKKyAgICB2b2lkIHdlYkRPTUV2ZW50TGlzdGVuZXJEZWxldGVkKCk7CisKK3ByaXZh
dGU6CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lciogbV93ZWJET01FdmVudExpc3RlbmVyOworfTsK
KwogY2xhc3MgRXZlbnRMaXN0ZW5lcldyYXBwZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBw
dWJsaWM6CiAgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIoV2ViRXZlbnRMaXN0ZW5lciopOwpAQCAt
NTcsNiArNzUsNyBAQCBwcml2YXRlOgogICAgIFdlYkV2ZW50TGlzdGVuZXIqIG1fd2ViRXZlbnRM
aXN0ZW5lcjsKIH07CiAKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJET01FdmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkRPTUV2ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKworI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJET01FdmVudFByaXZhdGUgOiBwdWJs
aWMgV2ViQ29yZTo6RXZlbnQgeworfTsKKwordm9pZCBXZWJET01FdmVudDo6cmVzZXQoKQorewor
ICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJET01FdmVudDo6YXNzaWduKGNvbnN0IFdlYkRP
TUV2ZW50JiBvdGhlcikKK3sKKyAgICBXZWJET01FdmVudFByaXZhdGUqIHAgPSBjb25zdF9jYXN0
PFdlYkRPTUV2ZW50UHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAg
ICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKwordm9pZCBXZWJET01FdmVudDo6YXNz
aWduKFdlYkRPTUV2ZW50UHJpdmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2Qg
Zm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZh
dGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworV2ViRE9NRXZlbnQ6OldlYkRP
TUV2ZW50KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFdmVudD4mIGV2ZW50KQorICAg
IDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRPTUV2ZW50UHJpdmF0ZSo+KGV2ZW50LnJlbGVh
c2VSZWYoKSkpCit7Cit9CisKK1dlYlN0cmluZyBXZWJET01FdmVudDo6dHlwZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dHlwZSgpOwor
fQorCitXZWJOb2RlIFdlYkRPTUV2ZW50Ojp0YXJnZXQoKSBjb25zdAoreworICAgIEFTU0VSVCht
X3ByaXZhdGUpOworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+dGFyZ2V0KCktPnRvTm9k
ZSgpKTsKK30KKworV2ViTm9kZSBXZWJET01FdmVudDo6Y3VycmVudFRhcmdldCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT5j
dXJyZW50VGFyZ2V0KCktPnRvTm9kZSgpKTsKK30KKworV2ViRE9NRXZlbnQ6OlBoYXNlVHlwZSBX
ZWJET01FdmVudDo6ZXZlbnRQaGFzZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkRPTUV2ZW50OjpQaGFzZVR5cGU+KG1fcHJpdmF0
ZS0+ZXZlbnRQaGFzZSgpKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6YnViYmxlcygpIGNvbnN0
Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YnViYmxl
cygpOworfQorCitib29sIFdlYkRPTUV2ZW50OjpjYW5jZWxhYmxlKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jYW5jZWxhYmxlKCk7Cit9
CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzVUlFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
cHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNVSUV2ZW50KCk7Cit9CisKK2Jvb2wg
V2ViRE9NRXZlbnQ6OmlzTW91c2VFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0
ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNNb3VzZUV2ZW50KCk7Cit9CisKK2Jvb2wgV2Vi
RE9NRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0
ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNNdXRhdGlvbkV2ZW50KCk7Cit9CisKK2Jvb2wg
V2ViRE9NRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJp
dmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNLZXlib2FyZEV2ZW50KCk7Cit9CisKK2Jv
b2wgV2ViRE9NRXZlbnQ6OmlzVGV4dEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2
YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc1RleHRFdmVudCgpOworfQorCitib29sIFdl
YkRPTUV2ZW50Ojppc0NvbXBvc2l0aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3By
aXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQ29tcG9zaXRpb25FdmVudCgpOworfQor
Citib29sIFdlYkRPTUV2ZW50Ojppc0RyYWdFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
cHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNEcmFnRXZlbnQoKTsKK30KKworYm9v
bCBXZWJET01FdmVudDo6aXNDbGlwYm9hcmRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
cHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNDbGlwYm9hcmRFdmVudCgpOworfQor
Citib29sIFdlYkRPTUV2ZW50Ojppc01lc3NhZ2VFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNNZXNzYWdlRXZlbnQoKTsKK30K
KworYm9vbCBXZWJET01FdmVudDo6aXNXaGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc1doZWVsRXZlbnQoKTsKK30KKwor
Ym9vbCBXZWJET01FdmVudDo6aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc092ZXJmbG93RXZlbnQo
KSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzT3ZlcmZsb3dFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1BhZ2VUcmFuc2l0
aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPmlzUGFnZVRyYW5zaXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50
Ojppc1BvcFN0YXRlRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzUG9wU3RhdGVFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2
ZW50Ojppc1Byb2dyZXNzRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzUHJvZ3Jlc3NFdmVudCgpOworfQorCitib29sIFdlYkRP
TUV2ZW50Ojppc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNXZWJLaXRBbmltYXRpb25F
dmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+aXNXZWJLaXRBbmltYXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojpp
c1dlYktpdFRyYW5zaXRpb25FdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKTsKK30KKwor
Ym9vbCBXZWJET01FdmVudDo6aXNCZWZvcmVMb2FkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQmVmb3JlTG9hZEV2ZW50KCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJET01FdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRPTUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJET01FdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisK
KyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViRE9NRXZlbnRMaXN0ZW5lcjo6V2ViRE9NRXZlbnRMaXN0ZW5lcigpCisgICAg
OiBtX3ByaXZhdGUobmV3IFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKHRoaXMpKQoreworfQor
CitXZWJET01FdmVudExpc3RlbmVyOjp+V2ViRE9NRXZlbnRMaXN0ZW5lcigpCit7CisgICAgbV9w
cml2YXRlLT53ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOworICAgIGRlbGV0ZSBtX3ByaXZh
dGU7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnRMaXN0ZW5lcjo6bm90aWZ5RXZlbnRMaXN0ZW5lckRl
bGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIHdyYXBwZXIpCit7CisgICAgbV9wcml2YXRl
LT5ldmVudExpc3RlbmVyRGVsZXRlZCh3cmFwcGVyKTsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBw
ZXJET00qIFdlYkRPTUV2ZW50TGlzdGVuZXI6OmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNv
bnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRU
eXBlLCB1c2VDYXB0dXJlLCBub2RlKTsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIFdl
YkRPTUV2ZW50TGlzdGVuZXI6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmlu
ZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+Z2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJl
LCBub2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgiCisKKyNpbmNsdWRlICJFdmVudExpc3Rl
bmVyV3JhcHBlci5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpXZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZShXZWJET01FdmVudExpc3RlbmVyKiB3ZWJET01FdmVudExpc3RlbmVyKQor
ICAgIDogbV93ZWJET01FdmVudExpc3RlbmVyKHdlYkRPTUV2ZW50TGlzdGVuZXIpCit7Cit9CisK
K1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjp+V2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUo
KQoreworfQorCitFdmVudExpc3RlbmVyV3JhcHBlckRPTSogV2ViRE9NRXZlbnRMaXN0ZW5lclBy
aXZhdGU6OmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgRXZlbnRMaXN0ZW5lcldy
YXBwZXJET00qIGxpc3RlbmVyV3JhcHBlciA9IG5ldyBFdmVudExpc3RlbmVyV3JhcHBlckRPTSht
X3dlYkRPTUV2ZW50TGlzdGVuZXIpOworICAgIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpM
aXN0ZW5lckluZm8gbGlzdGVuZXJJbmZvKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbGlzdGVuZXJX
cmFwcGVyLCBub2RlKTsKKyAgICBtX2xpc3RlbmVyV3JhcHBlcnMuYXBwZW5kKGxpc3RlbmVySW5m
byk7CisgICAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlcjsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBw
ZXJET00qIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpnZXRFdmVudExpc3RlbmVyV3JhcHBl
cihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2Rl
KQoreworICAgIFZlY3RvcjxXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6TGlzdGVuZXJJbmZv
Pjo6Y29uc3RfaXRlcmF0b3IgaXRlcjsKKyAgICBmb3IgKGl0ZXIgPSBtX2xpc3RlbmVyV3JhcHBl
cnMuYmVnaW4oKTsgaXRlciAhPSBtX2xpc3RlbmVyV3JhcHBlcnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBpZiAoaXRlci0+bm9kZSA9PSBub2RlKQorICAgICAgICAgIHJldHVybiBpdGVyLT5l
dmVudExpc3RlbmVyV3JhcHBlcjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6OndlYkRP
TUV2ZW50TGlzdGVuZXJEZWxldGVkKCkKK3sKKyAgICAvLyBOb3RpZmllcyBhbGwgV2ViRE9NRXZl
bnRMaXN0ZW5lcldyYXBwZXJzIHRoYXQgd2UgYXJlIGdvaW5nIGF3YXkgc28gdGhleSBjYW4KKyAg
ICAvLyBpbnZhbGlkYXRlIHRoZWlyIHBvaW50ZXIgdG8gdXMuCisgICAgVmVjdG9yPFdlYkRPTUV2
ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25zdF9pdGVyYXRvciBpdGVyOwor
ICAgIGZvciAoaXRlciA9IG1fbGlzdGVuZXJXcmFwcGVycy5iZWdpbigpOyBpdGVyICE9IG1fbGlz
dGVuZXJXcmFwcGVycy5lbmQoKTsgKytpdGVyKQorICAgICAgICBpdGVyLT5ldmVudExpc3RlbmVy
V3JhcHBlci0+d2ViRE9NRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKTsKK30KKwordm9pZCBXZWJET01F
dmVudExpc3RlbmVyUHJpdmF0ZTo6ZXZlbnRMaXN0ZW5lckRlbGV0ZWQoRXZlbnRMaXN0ZW5lcldy
YXBwZXJET00qIGV2ZW50TGlzdGVuZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2xpc3RlbmVyV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fbGlzdGVuZXJX
cmFwcGVyc1tpXS5ldmVudExpc3RlbmVyV3JhcHBlciA9PSBldmVudExpc3RlbmVyKSB7CisgICAg
ICAgICAgICBtX2xpc3RlbmVyV3JhcHBlcnMucmVtb3ZlKGkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NRXZlbnRM
aXN0ZW5lclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRP
TUV2ZW50TGlzdGVuZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlX2gKKyNkZWZpbmUgV2ViRE9N
RXZlbnRMaXN0ZW5lclByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIE5vZGU7Cit9
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgRXZlbnRMaXN0ZW5lcldyYXBwZXJET007CitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyOwor
CitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViRE9N
RXZlbnRMaXN0ZW5lclByaXZhdGUoV2ViRE9NRXZlbnRMaXN0ZW5lciogd2ViRE9NRXZlbnRMaXN0
ZW5lcik7CisgICAgfldlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKCk7CisKKyAgICBFdmVudExp
c3RlbmVyV3JhcHBlckRPTSogY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoCisgICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpOwor
CisgICAgLy8gR2V0cyB0aGUgTGlzdGVuZXJFdmVudFdyYXBwZXIgZm9yIGEgc3BlY2lmaWMgbm9k
ZS4KKyAgICAvLyBVc2VkIGJ5IFdlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIoKS4KKyAg
ICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSogZ2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoCisgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5v
ZGUpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJET01FdmVudExpc3RlbmVyIHdoZW4gaXQg
aXMgYWJvdXQgdG8gYmUgZGVsZXRlZC4KKyAgICB2b2lkIHdlYkRPTUV2ZW50TGlzdGVuZXJEZWxl
dGVkKCk7CisKKyAgICAvLyBDYWxsZWQgYnkgdGhlIEV2ZW50TGlzdGVuZXJXcmFwcGVyIHdoZW4g
aXQgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZC4KKyAgICB2b2lkIGV2ZW50TGlzdGVuZXJEZWxldGVk
KEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBldmVudExpc3RlbmVyKTsKKworICAgIHN0cnVjdCBM
aXN0ZW5lckluZm8geworICAgICAgICBMaXN0ZW5lckluZm8oY29uc3QgV2ViU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgIEV2ZW50TGlzdGVu
ZXJXcmFwcGVyRE9NKiBldmVudExpc3RlbmVyV3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUpCisgICAgICAgICAgICA6IGV2ZW50VHlwZShldmVudFR5cGUpCisgICAgICAg
ICAgICAsIHVzZUNhcHR1cmUodXNlQ2FwdHVyZSkKKyAgICAgICAgICAgICwgZXZlbnRMaXN0ZW5l
cldyYXBwZXIoZXZlbnRMaXN0ZW5lcldyYXBwZXIpCisgICAgICAgICAgICAsIG5vZGUobm9kZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgV2ViU3RyaW5nIGV2ZW50VHlwZTsKKyAg
ICAgICAgYm9vbCB1c2VDYXB0dXJlOworICAgICAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSog
ZXZlbnRMaXN0ZW5lcldyYXBwZXI7CisgICAgICAgIE5vZGUqIG5vZGU7CisgICAgfTsKKworcHJp
dmF0ZToKKyAgICBXZWJET01FdmVudExpc3RlbmVyKiBtX3dlYkRPTUV2ZW50TGlzdGVuZXI7CisK
KyAgICAvLyBXZSBrZWVwIGEgbGlzdCBvZiB0aGUgd3JhcHBlciBmb3IgdGhlIFdlYktpdCBFdmVu
dExpc3RlbmVyLCBpdCBpcyBuZWVkZWQKKyAgICAvLyB0byBpbXBsZW1lbnQgV2ViTm9kZTo6cmVt
b3ZlRXZlbnRMaXN0ZW5lcigpLgorICAgIFZlY3RvcjxMaXN0ZW5lckluZm8+IG1fbGlzdGVuZXJX
cmFwcGVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJET01Nb3VzZUV2ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTW91c2VFdmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTU1vdXNlRXZl
bnQuaCIKKworI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbnQgV2ViRE9NTW91c2VFdmVudDo6c2NyZWVu
WCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnNjcmVl
blgoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OnNjcmVlblkoKSBjb25zdAoreworICAg
IHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5zY3JlZW5ZKCk7Cit9CisKK2ludCBX
ZWJET01Nb3VzZUV2ZW50OjpjbGllbnRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndy
YXA8TW91c2VFdmVudD4oKS0+Y2xpZW50WCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6
Y2xpZW50WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCkt
PmNsaWVudFkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OmxheWVyWCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmxheWVyWCgpOworfQorCitp
bnQgV2ViRE9NTW91c2VFdmVudDo6bGF5ZXJZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RV
bndyYXA8TW91c2VFdmVudD4oKS0+bGF5ZXJZKCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50
OjpvZmZzZXRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4o
KS0+b2Zmc2V0WCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6b2Zmc2V0WSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPm9mZnNldFkoKTsKK30K
KworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OnBhZ2VYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29u
c3RVbndyYXA8TW91c2VFdmVudD4oKS0+cGFnZVgoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZl
bnQ6OnBhZ2VZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4o
KS0+cGFnZVkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OngoKSBjb25zdAoreworICAg
IHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT54KCk7Cit9CisKK2ludCBXZWJET01N
b3VzZUV2ZW50Ojp5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVu
dD4oKS0+eSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6YnV0dG9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+YnV0dG9uKCk7Cit9CisKK2Jv
b2wgV2ViRE9NTW91c2VFdmVudDo6YnV0dG9uRG93bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNv
bnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmJ1dHRvbkRvd24oKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU11dGF0aW9uRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTXV0YXRpb25FdmVu
dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU11dGF0aW9u
RXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkRPTU11dGF0aW9uRXZlbnQuaCIKKworI2luY2x1ZGUgIk11dGF0aW9u
RXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJOb2RlIFdlYkRPTU11dGF0aW9uRXZlbnQ6OnJlbGF0ZWROb2RlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV2ViTm9kZShjb25zdFVud3JhcDxNdXRhdGlvbkV2ZW50PigpLT5yZWxhdGVk
Tm9kZSgpKTsKK30KKworV2ViU3RyaW5nIFdlYkRPTU11dGF0aW9uRXZlbnQ6OnByZXZWYWx1ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlN0cmluZyhjb25zdFVud3JhcDxNdXRhdGlvbkV2ZW50
PigpLT5wcmV2VmFsdWUoKSk7Cit9CisKK1dlYlN0cmluZyBXZWJET01NdXRhdGlvbkV2ZW50Ojpu
ZXdWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlN0cmluZyhjb25zdFVud3JhcDxNdXRh
dGlvbkV2ZW50PigpLT5uZXdWYWx1ZSgpKTsKK30KKworV2ViU3RyaW5nIFdlYkRPTU11dGF0aW9u
RXZlbnQ6OmF0dHJOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU3RyaW5nKGNvbnN0VW53
cmFwPE11dGF0aW9uRXZlbnQ+KCktPmF0dHJOYW1lKCkpOworfQorCitXZWJET01NdXRhdGlvbkV2
ZW50OjpBdHRyQ2hhbmdlVHlwZSBXZWJET01NdXRhdGlvbkV2ZW50OjphdHRyQ2hhbmdlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXR0ckNoYW5nZVR5cGU+KGNvbnN0VW53cmFw
PE11dGF0aW9uRXZlbnQ+KCktPmF0dHJDaGFuZ2UoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCShyZXZpc2lvbiA2NTM0NCkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDggQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldy
YXBwZXIuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudC5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkV2ZW50
LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRMaXN0ZW5lci5oIgpAQCAtMTQ5LDYgKzE1MSwyNCBAQCBi
b29sIFdlYk5vZGU6OmlzRWxlbWVudE5vZGUoKSBjb25zdAogICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzRWxlbWVudE5vZGUoKTsKIH0KIAordm9pZCBXZWJOb2RlOjphZGRET01FdmVudExpc3RlbmVy
KGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBsaXN0
ZW5lcldyYXBwZXIgPQorICAgICAgICBsaXN0ZW5lci0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBw
ZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBtX3ByaXZhdGUuZ2V0KCkpOworICAgIC8vIFRoZSBs
aXN0ZW5lcldyYXBwZXIgaXMgb25seSByZWZlcmVuY2VkIGJ5IHRoZSBhY3R1YWwgTm9kZS4gIE9u
Y2UgaXQgZ29lcworICAgIC8vIGF3YXksIHRoZSB3cmFwcGVyIG5vdGlmaWVzIHRoZSBXZWJFdmVu
dExpc3RlbmVyIHNvIGl0IGNhbiBjbGVhciBpdHMKKyAgICAvLyBwb2ludGVyIHRvIGl0LgorICAg
IG1fcHJpdmF0ZS0+YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGFkb3B0UmVmKGxpc3RlbmVy
V3JhcHBlciksIHVzZUNhcHR1cmUpOworfQorCit2b2lkIFdlYk5vZGU6OnJlbW92ZURPTUV2ZW50
TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXJE
T00qIGxpc3RlbmVyV3JhcHBlciA9CisgICAgICAgIGxpc3RlbmVyLT5nZXRFdmVudExpc3RlbmVy
V3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9w
cml2YXRlLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXJXcmFwcGVyLCB1
c2VDYXB0dXJlKTsKKyAgICAvLyBsaXN0ZW5lcldyYXBwZXIgaXMgbm93IGRlbGV0ZWQuCit9CisK
IHZvaWQgV2ViTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlw
ZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBF
dmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64410</attachid>
            <date>2010-08-13 23:52:51 -0700</date>
            <delta_ts>2010-08-14 00:07:40 -0700</delta_ts>
            <desc>Fixed style. (take 2)</desc>
            <filename>dom_event.patch</filename>
            <type>text/plain</type>
            <size>17055</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0xMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgdGhlIFdlYkV2ZW50IHRvIFdlYkRP
TUV2ZW50IGFuZCBhZGRpbmcgYSBuZXcgZXZlbnQgY2xhc3MKKyAgICAgICAgZm9yIG1vdXNlIGV2
ZW50cyBzbyB0aGF0IHRoZSBldmVudCBsaXN0ZW5lciBBUEkgY2FuIGJlIHVzZWQgdG8gbGlzdGVu
CisgICAgICAgIHRvIHRoZW0uICBUaGUgcmVuYW1pbmcgaXMgbmVlZGVkIGFzIHRoZXJlIGFscmVh
ZHkgaXMgYSBXZWJNb3VzZUV2ZW50IGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NTMKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRPTUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJE
T01FdmVudExpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01Nb3VzZUV2
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlLmg6CisgICAgICAgICogc3JjL0V2ZW50TGlz
dGVuZXJXcmFwcGVyLmNwcDoKKyAgICAgICAgKiBzcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaDoK
KyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
RE9NRXZlbnRMaXN0ZW5lci5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExpc3Rl
bmVyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NTW91c2VFdmVudC5jcHA6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc0Vs
ZW1lbnROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6YWRkRE9NRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIpOgor
CiAyMDEwLTA4LTA5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
IAogICAgICAgICBTcGVjdWxhdGl2ZSBjaHJvbWl1bSBidWlsZCBmaXggVi4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAJKHJldmlzaW9uIDY1MTI5KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTAgQEAKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJDU3RyaW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ3Vy
c29ySW5mby5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTUV2ZW50LmgnLAorICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9NRXZlbnRMaXN0ZW5lci5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJET01NdXRhdGlvbkV2ZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9N
U3RyaW5nTGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRhdGEuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJEYXRhYmFzZS5oJywKQEAgLTM3Nyw2ICszODEsMTIgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNTdHJpbmcuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkN1cnNvckluZm8uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkRP
TUV2ZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudExpc3RlbmVyLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJET01Nb3VzZUV2ZW50LmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJET01TdHJpbmdMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhYmFzZS5jcHAnLApJbmRleDogV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJOb2RlLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYk5vZGUuaAkocmV2aXNpb24gNjUxMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgeyBjbGFzcyBOb2RlOyB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
RE9NRXZlbnRMaXN0ZW5lcjsKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOwogY2xh
c3MgV2ViRG9jdW1lbnQ7CiBjbGFzcyBXZWJFdmVudExpc3RlbmVyOwogY2xhc3MgV2ViRXZlbnRM
aXN0ZW5lclByaXZhdGU7CkBAIC05Nyw2ICs5OSw4IEBAIHB1YmxpYzoKICAgICBXRUJLSVRfQVBJ
IFdlYlN0cmluZyBjcmVhdGVNYXJrdXAoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIGJvb2wgaXNU
ZXh0Tm9kZSgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFkZERPTUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3Ry
aW5nJiBldmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNh
cHR1cmUpOworICAgIFdFQktJVF9BUEkgdm9pZCByZW1vdmVET01FdmVudExpc3RlbmVyKGNvbnN0
IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9v
bCB1c2VDYXB0dXJlKTsKICAgICBXRUJLSVRfQVBJIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25z
dCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wg
dXNlQ2FwdHVyZSk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29u
c3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUpOwogICAgIFdFQktJVF9BUEkgdm9pZCBzaW11bGF0ZUNsaWNrKCk7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmNwcA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuY3BwCShyZXZp
c2lvbiA2NTEyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICsxLDEwNCBAQAotLyoNCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0gKg0KLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dA0KLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCi0gKiBtZXQ6DQotICoNCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0K
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4NCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlDQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCi0gKiBkaXN0
cmlidXRpb24uDQotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cw0KLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0gKg0KLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMNCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsDQotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQ0KLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQNCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0K
LSAqLw0KLQ0KLSNpbmNsdWRlICJjb25maWcuaCINCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldy
YXBwZXIuaCINCi0NCi0jaW5jbHVkZSAiRXZlbnQuaCINCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIg0KLQ0KLSNpbmNsdWRlICJXZWJFdmVudC5oIg0KLSNpbmNsdWRlICJXZWJFdmVudExpc3Rl
bmVyLmgiDQotDQotbmFtZXNwYWNlIFdlYktpdCB7DQotDQotRXZlbnRMaXN0ZW5lcldyYXBwZXI6
OkV2ZW50TGlzdGVuZXJXcmFwcGVyKFdlYkV2ZW50TGlzdGVuZXIqIHdlYkV2ZW50TGlzdGVuZXIp
DQotICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBl
KQ0KLSAgICAsIG1fd2ViRXZlbnRMaXN0ZW5lcih3ZWJFdmVudExpc3RlbmVyKQ0KLXsNCi19DQot
DQotRXZlbnRMaXN0ZW5lcldyYXBwZXI6On5FdmVudExpc3RlbmVyV3JhcHBlcigpDQotew0KLSAg
ICBpZiAobV93ZWJFdmVudExpc3RlbmVyKQ0KLSAgICAgICAgbV93ZWJFdmVudExpc3RlbmVyLT5u
b3RpZnlFdmVudExpc3RlbmVyRGVsZXRlZCh0aGlzKTsNCi19DQotDQotYm9vbCBFdmVudExpc3Rl
bmVyV3JhcHBlcjo6b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikNCi17
DQotICAgIHJldHVybiB0aGlzID09ICZsaXN0ZW5lcjsNCi19DQotDQotdm9pZCBFdmVudExpc3Rl
bmVyV3JhcHBlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RXZlbnQqIGV2ZW50KQ0KLXsNCi0gICAgaWYgKCFtX3dlYkV2ZW50TGlzdGVuZXIpDQotICAgICAg
ICByZXR1cm47DQotICAgIFdlYkV2ZW50IHdlYkV2ZW50KGV2ZW50KTsNCi0gICAgbV93ZWJFdmVu
dExpc3RlbmVyLT5oYW5kbGVFdmVudCh3ZWJFdmVudCk7DQotfQ0KLQ0KLXZvaWQgRXZlbnRMaXN0
ZW5lcldyYXBwZXI6OndlYkV2ZW50TGlzdGVuZXJEZWxldGVkKCkNCi17DQotICAgIG1fd2ViRXZl
bnRMaXN0ZW5lciA9IDA7DQotfQ0KLQ0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdA0KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldyYXBwZXIuaCIKKworI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorCisjaW5jbHVkZSAiV2ViRE9N
RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJFdmVudExpc3RlbmVyLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitFdmVudExpc3RlbmVyV3JhcHBlckRPTTo6RXZlbnRMaXN0ZW5lcldyYXBwZXJET00o
V2ViRE9NRXZlbnRMaXN0ZW5lciogd2ViRE9NRXZlbnRMaXN0ZW5lcikKKyAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkKKyAgICAsIG1fd2ViRE9N
RXZlbnRMaXN0ZW5lcih3ZWJET01FdmVudExpc3RlbmVyKQoreworfQorCitFdmVudExpc3RlbmVy
V3JhcHBlckRPTTo6fkV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKCkKK3sKKyAgICBpZiAobV93ZWJE
T01FdmVudExpc3RlbmVyKQorICAgICAgICBtX3dlYkRPTUV2ZW50TGlzdGVuZXItPm5vdGlmeUV2
ZW50TGlzdGVuZXJEZWxldGVkKHRoaXMpOworfQorCitib29sIEV2ZW50TGlzdGVuZXJXcmFwcGVy
RE9NOjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQoreworICAgIHJl
dHVybiB0aGlzID09ICZsaXN0ZW5lcjsKK30KKwordm9pZCBFdmVudExpc3RlbmVyV3JhcHBlckRP
TTo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXZlbnQqIGV2
ZW50KQoreworICAgIGlmICghbV93ZWJET01FdmVudExpc3RlbmVyKQorICAgICAgICByZXR1cm47
CisgICAgV2ViRE9NRXZlbnQgd2ViRE9NRXZlbnQoZXZlbnQpOworICAgIG1fd2ViRE9NRXZlbnRM
aXN0ZW5lci0+aGFuZGxlRXZlbnQod2ViRE9NRXZlbnQpOworfQorCit2b2lkIEV2ZW50TGlzdGVu
ZXJXcmFwcGVyRE9NOjp3ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpCit7CisgICAgbV93ZWJE
T01FdmVudExpc3RlbmVyID0gMDsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBwZXI6OkV2ZW50TGlz
dGVuZXJXcmFwcGVyKFdlYkV2ZW50TGlzdGVuZXIqIHdlYkV2ZW50TGlzdGVuZXIpCisgICAgOiBF
dmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBt
X3dlYkV2ZW50TGlzdGVuZXIod2ViRXZlbnRMaXN0ZW5lcikKK3sKK30KKworRXZlbnRMaXN0ZW5l
cldyYXBwZXI6On5FdmVudExpc3RlbmVyV3JhcHBlcigpCit7CisgICAgaWYgKG1fd2ViRXZlbnRM
aXN0ZW5lcikKKyAgICAgICAgbV93ZWJFdmVudExpc3RlbmVyLT5ub3RpZnlFdmVudExpc3RlbmVy
RGVsZXRlZCh0aGlzKTsKK30KKworYm9vbCBFdmVudExpc3RlbmVyV3JhcHBlcjo6b3BlcmF0b3I9
PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICByZXR1cm4gdGhpcyA9PSAm
bGlzdGVuZXI7Cit9CisKK3ZvaWQgRXZlbnRMaXN0ZW5lcldyYXBwZXI6OmhhbmRsZUV2ZW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAo
IW1fd2ViRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkV2ZW50IHdlYkV2
ZW50KGV2ZW50KTsKKyAgICBtX3dlYkV2ZW50TGlzdGVuZXItPmhhbmRsZUV2ZW50KHdlYkV2ZW50
KTsKK30KKwordm9pZCBFdmVudExpc3RlbmVyV3JhcHBlcjo6d2ViRXZlbnRMaXN0ZW5lckRlbGV0
ZWQoKQoreworICAgIG1fd2ViRXZlbnRMaXN0ZW5lciA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5o
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBl
ci5oCShyZXZpc2lvbiA2NTEyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5l
cldyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw4MSBAQAotLyoNCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0gKg0KLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dA0KLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCi0gKiBtZXQ6DQotICoNCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4NCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCi0g
KiBkaXN0cmlidXRpb24uDQotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cw0KLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0gKg0KLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMNCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
DQotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsDQotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQ0KLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLg0KLSAqLw0KLQ0KLSNpZm5kZWYgRXZlbnRMaXN0ZW5lcldyYXBwZXJfaA0KLSNkZWZpbmUg
RXZlbnRMaXN0ZW5lcldyYXBwZXJfaA0KLQ0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiDQot
DQotbmFtZXNwYWNlIFdlYkNvcmUgew0KLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7DQot
fQ0KLQ0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOw0KLQ0KLW5hbWVzcGFjZSBXZWJLaXQgew0K
LQ0KLWNsYXNzIFdlYkV2ZW50TGlzdGVuZXI7DQotDQotY2xhc3MgRXZlbnRMaXN0ZW5lcldyYXBw
ZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7DQotcHVibGljOg0KLSAgICBFdmVudExpc3RlbmVy
V3JhcHBlcihXZWJFdmVudExpc3RlbmVyKik7DQotICAgIH5FdmVudExpc3RlbmVyV3JhcHBlcigp
Ow0KLQ0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJik7
DQotICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RXZlbnQqKTsNCi0NCi0gICAgdm9pZCB3ZWJFdmVudExpc3RlbmVyRGVsZXRlZCgpOw0KLQ0KLXBy
aXZhdGU6DQotICAgIFdlYkV2ZW50TGlzdGVuZXIqIG1fd2ViRXZlbnRMaXN0ZW5lcjsNCi19Ow0K
LQ0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdA0KLQ0KLSNlbmRpZg0KKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50TGlzdGVu
ZXJXcmFwcGVyX2gKKyNkZWZpbmUgRXZlbnRMaXN0ZW5lcldyYXBwZXJfaAorCisjaW5jbHVkZSAi
RXZlbnRMaXN0ZW5lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFzcyBXZWJFdmVudExp
c3RlbmVyOworCisvLyBGSVhNRTogUmVtb3ZlIHRoZSBFdmVudExpc3RlbmVyV3JhcHBlciBjbGFz
cyBiZWxvdyBhbmQgcmVuYW1lCisvLyBFdmVudExpc3RlbmVyV3JhcHBlckRPTSB0byBFdmVudExp
c3RlbmVyV3JhcHBlciBvbmNlIENocm9taXVtIHN3aXRjaGVkIHRvCisvLyB1c2luZyBXZWJET01F
dmVudC4KK2NsYXNzIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NIDogcHVibGljIEV2ZW50TGlzdGVu
ZXIgeworcHVibGljOgorICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKFdlYkRPTUV2ZW50TGlz
dGVuZXIqKTsKKyAgICB+RXZlbnRMaXN0ZW5lcldyYXBwZXJET00oKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50Kik7CisKKyAgICB2b2lk
IHdlYkRPTUV2ZW50TGlzdGVuZXJEZWxldGVkKCk7CisKK3ByaXZhdGU6CisgICAgV2ViRE9NRXZl
bnRMaXN0ZW5lciogbV93ZWJET01FdmVudExpc3RlbmVyOworfTsKKworY2xhc3MgRXZlbnRMaXN0
ZW5lcldyYXBwZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgRXZlbnRM
aXN0ZW5lcldyYXBwZXIoV2ViRXZlbnRMaXN0ZW5lciopOworICAgIH5FdmVudExpc3RlbmVyV3Jh
cHBlcigpOworCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5l
ciYpOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRXZlbnQqKTsKKworICAgIHZvaWQgd2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKTsKKworcHJp
dmF0ZToKKyAgICBXZWJFdmVudExpc3RlbmVyKiBtX3dlYkV2ZW50TGlzdGVuZXI7Cit9OworCisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTm9kZS5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5v
ZGUuY3BwCShyZXZpc2lvbiA2NTEyOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJOb2RlTGlzdC5o
IgogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldyYXBwZXIuaCIKKyNpbmNsdWRlICJXZWJET01F
dmVudC5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRMaXN0
ZW5lci5oIgpAQCAtMTQ5LDYgKzE1MSwyNCBAQCBib29sIFdlYk5vZGU6OmlzRWxlbWVudE5vZGUo
KSBjb25zdAogICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRWxlbWVudE5vZGUoKTsKIH0KIAordm9p
ZCBXZWJOb2RlOjphZGRET01FdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBl
LCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAg
IEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBsaXN0ZW5lcldyYXBwZXIgPQorICAgICAgICBsaXN0
ZW5lci0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBt
X3ByaXZhdGUuZ2V0KCkpOworICAgIC8vIFRoZSBsaXN0ZW5lcldyYXBwZXIgaXMgb25seSByZWZl
cmVuY2VkIGJ5IHRoZSBhY3R1YWwgTm9kZS4gIE9uY2UgaXQgZ29lcworICAgIC8vIGF3YXksIHRo
ZSB3cmFwcGVyIG5vdGlmaWVzIHRoZSBXZWJFdmVudExpc3RlbmVyIHNvIGl0IGNhbiBjbGVhciBp
dHMKKyAgICAvLyBwb2ludGVyIHRvIGl0LgorICAgIG1fcHJpdmF0ZS0+YWRkRXZlbnRMaXN0ZW5l
cihldmVudFR5cGUsIGFkb3B0UmVmKGxpc3RlbmVyV3JhcHBlciksIHVzZUNhcHR1cmUpOworfQor
Cit2b2lkIFdlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBl
dmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
Cit7CisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIGxpc3RlbmVyV3JhcHBlciA9CisgICAg
ICAgIGxpc3RlbmVyLT5nZXRFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1
cmUsIG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5yZW1vdmVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXJXcmFwcGVyLCB1c2VDYXB0dXJlKTsKKyAgICAvLyBsaXN0ZW5l
cldyYXBwZXIgaXMgbm93IGRlbGV0ZWQuCit9CisKIHZvaWQgV2ViTm9kZTo6YWRkRXZlbnRMaXN0
ZW5lcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVu
ZXJXcmFwcGVyID0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64411</attachid>
            <date>2010-08-14 00:07:40 -0700</date>
            <delta_ts>2010-08-17 14:43:54 -0700</delta_ts>
            <desc>Adding missing files</desc>
            <filename>dom_event.patch</filename>
            <type>text/plain</type>
            <size>51625</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTA1MikKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0xMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgdGhlIFdlYkV2ZW50IHRvIFdlYkRP
TUV2ZW50IGFuZCBhZGRpbmcgYSBuZXcgZXZlbnQgY2xhc3MKKyAgICAgICAgZm9yIG1vdXNlIGV2
ZW50cyBzbyB0aGF0IHRoZSBldmVudCBsaXN0ZW5lciBBUEkgY2FuIGJlIHVzZWQgdG8gbGlzdGVu
CisgICAgICAgIHRvIHRoZW0uICBUaGUgcmVuYW1pbmcgaXMgbmVlZGVkIGFzIHRoZXJlIGFscmVh
ZHkgaXMgYSBXZWJNb3VzZUV2ZW50IGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NTMKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRPTUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJE
T01FdmVudExpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01Nb3VzZUV2
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlLmg6CisgICAgICAgICogc3JjL0V2ZW50TGlz
dGVuZXJXcmFwcGVyLmNwcDoKKyAgICAgICAgKiBzcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaDoK
KyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
RE9NRXZlbnRMaXN0ZW5lci5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExpc3Rl
bmVyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NTW91c2VFdmVudC5jcHA6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc0Vs
ZW1lbnROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6YWRkRE9NRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIpOgor
CiAyMDEwLTA4LTA5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
IAogICAgICAgICBTcGVjdWxhdGl2ZSBjaHJvbWl1bSBidWlsZCBmaXggVi4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAJKHJldmlzaW9uIDY1MTI5KQorKysgV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTAgQEAKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJDU3RyaW5nLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ3Vy
c29ySW5mby5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTUV2ZW50LmgnLAorICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9NRXZlbnRMaXN0ZW5lci5oJywKKyAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJET01NdXRhdGlvbkV2ZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViRE9N
U3RyaW5nTGlzdC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRhdGEuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJEYXRhYmFzZS5oJywKQEAgLTM3Nyw2ICszODEsMTIgQEAK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNTdHJpbmcuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkN1cnNvckluZm8uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkRP
TUV2ZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudExpc3RlbmVyLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJET01Nb3VzZUV2ZW50LmNwcCcsCisgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJET01TdHJpbmdMaXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhYmFzZS5jcHAnLApJbmRleDogV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJET01FdmVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJET01FdmVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJET01FdmVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViRE9NRXZlbnRfaAorI2RlZmluZSBXZWJET01FdmVudF9oCisKKyNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJOb2RlLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7IH0KKyNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1Jl
ZlB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJET01FdmVu
dCB7CitwdWJsaWM6CisgICAgZW51bSBQaGFzZVR5cGUgeworICAgICAgICBDYXB0dXJpbmdQaGFz
ZSAgICAgPSAxLAorICAgICAgICBBdFRhcmdldCAgICAgICAgICAgPSAyLAorICAgICAgICBCdWJi
bGluZ1BoYXNlICAgICAgPSAzCisgICAgfTsKKworICAgIFdlYkRPTUV2ZW50KCkgOiBtX3ByaXZh
dGUoMCkgeyB9CisgICAgV2ViRE9NRXZlbnQoY29uc3QgV2ViRE9NRXZlbnQmIGUpIDogbV9wcml2
YXRlKDApIHsgYXNzaWduKGUpOyB9CisgICAgV2ViRE9NRXZlbnQmIG9wZXJhdG9yPShjb25zdCBX
ZWJET01FdmVudCYgZSkKKyAgICB7CisgICAgICAgIGFzc2lnbihlKTsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworICAgIFdFQktJ
VF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViRE9NRXZlbnQmKTsKKworICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgV0VCS0lUX0FQSSBXZWJTdHJp
bmcgdHlwZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViTm9kZSB0YXJnZXQoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgY3VycmVudFRhcmdldCgpIGNvbnN0OworCisgICAgV0VC
S0lUX0FQSSBQaGFzZVR5cGUgZXZlbnRQaGFzZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9v
bCBidWJibGVzKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGNhbmNlbGFibGUoKSBjb25z
dDsKKworICAgIFdFQktJVF9BUEkgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRf
QVBJIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzTXV0
YXRpb25FdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc0tleWJvYXJkRXZlbnQo
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNUZXh0RXZlbnQoKSBjb25zdDsKKyAgICBX
RUJLSVRfQVBJIGJvb2wgaXNDb21wb3NpdGlvbkV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBib29sIGlzRHJhZ0V2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzQ2xpcGJv
YXJkRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNNZXNzYWdlRXZlbnQoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7CisgICAgV0VC
S0lUX0FQSSBib29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdDsKKyAgICBXRUJL
SVRfQVBJIGJvb2wgaXNPdmVyZmxvd0V2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29s
IGlzUGFnZVRyYW5zaXRpb25FdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1Bv
cFN0YXRlRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNQcm9ncmVzc0V2ZW50
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzV2ViS2l0QW5pbWF0aW9uRXZlbnQo
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNCZWZvcmVMb2FkRXZlbnQoKSBjb25zdDsKKwor
I2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkRPTUV2ZW50KGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpFdmVudD4mKTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCB0bygpCisgICAgeworICAgICAgICBUIHJlczsKKyAgICAgICAgcmVzLldlYkRPTUV2
ZW50Ojphc3NpZ24oKnRoaXMpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IFQgdG9Db25zdCgpIGNvbnN0CisgICAgeworICAgICAg
ICBUIHJlczsKKyAgICAgICAgcmVzLldlYkRPTUV2ZW50Ojphc3NpZ24oKnRoaXMpOworICAgICAg
ICByZXR1cm4gcmVzOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHR5cGVkZWYgV2ViQ29yZTo6
RXZlbnQgV2ViRE9NRXZlbnRQcml2YXRlOworICAgIHZvaWQgYXNzaWduKFdlYkRPTUV2ZW50UHJp
dmF0ZSopOworICAgIFdlYkRPTUV2ZW50UHJpdmF0ZSogbV9wcml2YXRlOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCogdW53cmFwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUKj4obV9wcml2YXRlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdCBUKiBjb25zdFVud3JhcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgVCo+KG1fcHJpdmF0ZSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01FdmVu
dExpc3RlbmVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRP
TUV2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRE9NRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJET01FdmVudExpc3RlbmVyX2gKKyNkZWZpbmUgV2ViRE9NRXZlbnRMaXN0ZW5lcl9oCisK
KyNpbmNsdWRlICJXZWJDb21tb24uaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFt
ZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBOb2RlOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NOworY2xhc3MgV2ViRE9NRXZlbnQ7
CitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTsKK2NsYXNzIFdlYk5vZGU7CitjbGFz
cyBXZWJTdHJpbmc7CisKK2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAg
IFdFQktJVF9BUEkgV2ViRE9NRXZlbnRMaXN0ZW5lcigpOworICAgIFdFQktJVF9BUEkgdmlydHVh
bCB+V2ViRE9NRXZlbnRMaXN0ZW5lcigpOworCisgICAgLy8gQ2FsbGVkIHdoZW4gYW4gZXZlbnQg
aXMgcmVjZWl2ZWQuCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KGNvbnN0IFdlYkRPTUV2
ZW50JikgPSAwOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBub3RpZnlF
dmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlckRPTSopOworICAgIEV2ZW50
TGlzdGVuZXJXcmFwcGVyRE9NKiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJT
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBXZWJDb3JlOjpOb2RlKiBub2RlKTsK
KyAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSogZ2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoY29u
c3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgV2ViQ29yZTo6Tm9kZSog
bm9kZSk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0
ZSogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NTW91c2VFdmVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgV2ViRE9NTW91c2VFdmVudF9oCisjZGVmaW5lIFdl
YkRPTU1vdXNlRXZlbnRfaAorCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKworI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBFdmVudDsgfQorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJET01Nb3VzZUV2ZW50IDogcHVi
bGljIFdlYkRPTUV2ZW50IHsKK3B1YmxpYzoKKyAgICBXRUJLSVRfQVBJIGludCBzY3JlZW5YKCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgc2NyZWVuWSgpIGNvbnN0OworICAgIFdFQktJVF9B
UEkgaW50IGNsaWVudFgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBjbGllbnRZKCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgbGF5ZXJYKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBp
bnQgbGF5ZXJZKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgb2Zmc2V0WCgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgaW50IG9mZnNldFkoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBw
YWdlWCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHBhZ2VZKCkgY29uc3Q7CisgICAgV0VC
S0lUX0FQSSBpbnQgeCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHkoKSBjb25zdDsKKwor
ICAgIFdFQktJVF9BUEkgaW50IGJ1dHRvbigpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBi
dXR0b25Eb3duKCkgY29uc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTU11dGF0aW9uRXZlbnQuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NTXV0YXRpb25FdmVudC5o
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01NdXRhdGlvbkV2
ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBXZWJET01NdXRhdGlvbkV2
ZW50X2gKKyNkZWZpbmUgV2ViRE9NTXV0YXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJXZWJET01F
dmVudC5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7
IGNsYXNzIEV2ZW50OyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkRPTU11dGF0aW9uRXZlbnQgOiBwdWJsaWMgV2ViRE9NRXZlbnQgeworcHVibGljOgorICAgIGVu
dW0gQXR0ckNoYW5nZVR5cGUgeworICAgICAgICBNb2RpZmljYXRpb24gICAgPSAxLAorICAgICAg
ICBBZGRpdGlvbiAgICAgICAgPSAyLAorICAgICAgICBSZW1vdmFsICAgICAgICAgPSAzCisgICAg
fTsKKworICAgIFdFQktJVF9BUEkgV2ViTm9kZSByZWxhdGVkTm9kZSgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgV2ViU3RyaW5nIHByZXZWYWx1ZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2Vi
U3RyaW5nIG5ld1ZhbHVlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgYXR0ck5h
bWUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIEF0dHJDaGFuZ2VUeXBlIGF0dHJDaGFuZ2UoKSBj
b25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJOb2RlLmgJKHJldmlzaW9uIDY1MTI5KQorKysgV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsgfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTsK
IGNsYXNzIFdlYkRvY3VtZW50OwogY2xhc3MgV2ViRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIFdlYkV2
ZW50TGlzdGVuZXJQcml2YXRlOwpAQCAtOTcsNiArOTksOCBAQCBwdWJsaWM6CiAgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgY3JlYXRlTWFya3VwKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSBib29s
IGlzVGV4dE5vZGUoKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIGJvb2wgaXNFbGVtZW50Tm9kZSgp
IGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9pZCBhZGRET01FdmVudExpc3RlbmVyKGNvbnN0IFdl
YlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVtb3ZlRE9NRXZlbnRMaXN0ZW5lcihj
b25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIs
IGJvb2wgdXNlQ2FwdHVyZSk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIo
Y29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpOwogICAgIFdFQktJVF9BUEkgdm9pZCByZW1vdmVFdmVudExpc3RlbmVy
KGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwg
Ym9vbCB1c2VDYXB0dXJlKTsKICAgICBXRUJLSVRfQVBJIHZvaWQgc2ltdWxhdGVDbGljaygpOwpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmNwcAko
cmV2aXNpb24gNjUxMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFw
cGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MiArMSwxMDQgQEAKLS8qDQotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotICoNCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQNCi0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQotICogbWV0Og0KLSAqDQotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQNCi0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuDQotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQotICog
ZGlzdHJpYnV0aW9uLg0KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQotICoNCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTDQotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0K
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLA0KLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkNCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4NCi0gKi8NCi0NCi0jaW5jbHVkZSAiY29uZmlnLmgiDQotI2luY2x1ZGUgIkV2ZW50TGlzdGVu
ZXJXcmFwcGVyLmgiDQotDQotI2luY2x1ZGUgIkV2ZW50LmgiDQotI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCINCi0NCi0jaW5jbHVkZSAiV2ViRXZlbnQuaCINCi0jaW5jbHVkZSAiV2ViRXZlbnRM
aXN0ZW5lci5oIg0KLQ0KLW5hbWVzcGFjZSBXZWJLaXQgew0KLQ0KLUV2ZW50TGlzdGVuZXJXcmFw
cGVyOjpFdmVudExpc3RlbmVyV3JhcHBlcihXZWJFdmVudExpc3RlbmVyKiB3ZWJFdmVudExpc3Rl
bmVyKQ0KLSAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVy
VHlwZSkNCi0gICAgLCBtX3dlYkV2ZW50TGlzdGVuZXIod2ViRXZlbnRMaXN0ZW5lcikNCi17DQot
fQ0KLQ0KLUV2ZW50TGlzdGVuZXJXcmFwcGVyOjp+RXZlbnRMaXN0ZW5lcldyYXBwZXIoKQ0KLXsN
Ci0gICAgaWYgKG1fd2ViRXZlbnRMaXN0ZW5lcikNCi0gICAgICAgIG1fd2ViRXZlbnRMaXN0ZW5l
ci0+bm90aWZ5RXZlbnRMaXN0ZW5lckRlbGV0ZWQodGhpcyk7DQotfQ0KLQ0KLWJvb2wgRXZlbnRM
aXN0ZW5lcldyYXBwZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIp
DQotew0KLSAgICByZXR1cm4gdGhpcyA9PSAmbGlzdGVuZXI7DQotfQ0KLQ0KLXZvaWQgRXZlbnRM
aXN0ZW5lcldyYXBwZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEV2ZW50KiBldmVudCkNCi17DQotICAgIGlmICghbV93ZWJFdmVudExpc3RlbmVyKQ0KLSAg
ICAgICAgcmV0dXJuOw0KLSAgICBXZWJFdmVudCB3ZWJFdmVudChldmVudCk7DQotICAgIG1fd2Vi
RXZlbnRMaXN0ZW5lci0+aGFuZGxlRXZlbnQod2ViRXZlbnQpOw0KLX0NCi0NCi12b2lkIEV2ZW50
TGlzdGVuZXJXcmFwcGVyOjp3ZWJFdmVudExpc3RlbmVyRGVsZXRlZCgpDQotew0KLSAgICBtX3dl
YkV2ZW50TGlzdGVuZXIgPSAwOw0KLX0NCi0NCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQNCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFwcGVyLmgiCisKKyNpbmNs
dWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKworI2luY2x1ZGUgIldl
YkRPTUV2ZW50LmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViRXZlbnRMaXN0ZW5lci5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworRXZlbnRMaXN0ZW5lcldyYXBwZXJET006OkV2ZW50TGlzdGVuZXJXcmFwcGVy
RE9NKFdlYkRPTUV2ZW50TGlzdGVuZXIqIHdlYkRPTUV2ZW50TGlzdGVuZXIpCisgICAgOiBFdmVu
dExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lclR5cGUpCisgICAgLCBtX3dl
YkRPTUV2ZW50TGlzdGVuZXIod2ViRE9NRXZlbnRMaXN0ZW5lcikKK3sKK30KKworRXZlbnRMaXN0
ZW5lcldyYXBwZXJET006On5FdmVudExpc3RlbmVyV3JhcHBlckRPTSgpCit7CisgICAgaWYgKG1f
d2ViRE9NRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgbV93ZWJET01FdmVudExpc3RlbmVyLT5ub3Rp
ZnlFdmVudExpc3RlbmVyRGVsZXRlZCh0aGlzKTsKK30KKworYm9vbCBFdmVudExpc3RlbmVyV3Jh
cHBlckRPTTo6b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAg
ICByZXR1cm4gdGhpcyA9PSAmbGlzdGVuZXI7Cit9CisKK3ZvaWQgRXZlbnRMaXN0ZW5lcldyYXBw
ZXJET006OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV2ZW50
KiBldmVudCkKK3sKKyAgICBpZiAoIW1fd2ViRE9NRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgcmV0
dXJuOworICAgIFdlYkRPTUV2ZW50IHdlYkRPTUV2ZW50KGV2ZW50KTsKKyAgICBtX3dlYkRPTUV2
ZW50TGlzdGVuZXItPmhhbmRsZUV2ZW50KHdlYkRPTUV2ZW50KTsKK30KKwordm9pZCBFdmVudExp
c3RlbmVyV3JhcHBlckRPTTo6d2ViRE9NRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKQoreworICAgIG1f
d2ViRE9NRXZlbnRMaXN0ZW5lciA9IDA7Cit9CisKK0V2ZW50TGlzdGVuZXJXcmFwcGVyOjpFdmVu
dExpc3RlbmVyV3JhcHBlcihXZWJFdmVudExpc3RlbmVyKiB3ZWJFdmVudExpc3RlbmVyKQorICAg
IDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlKQorICAg
ICwgbV93ZWJFdmVudExpc3RlbmVyKHdlYkV2ZW50TGlzdGVuZXIpCit7Cit9CisKK0V2ZW50TGlz
dGVuZXJXcmFwcGVyOjp+RXZlbnRMaXN0ZW5lcldyYXBwZXIoKQoreworICAgIGlmIChtX3dlYkV2
ZW50TGlzdGVuZXIpCisgICAgICAgIG1fd2ViRXZlbnRMaXN0ZW5lci0+bm90aWZ5RXZlbnRMaXN0
ZW5lckRlbGV0ZWQodGhpcyk7Cit9CisKK2Jvb2wgRXZlbnRMaXN0ZW5lcldyYXBwZXI6Om9wZXJh
dG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCit7CisgICAgcmV0dXJuIHRoaXMg
PT0gJmxpc3RlbmVyOworfQorCit2b2lkIEV2ZW50TGlzdGVuZXJXcmFwcGVyOjpoYW5kbGVFdmVu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCit7CisgICAg
aWYgKCFtX3dlYkV2ZW50TGlzdGVuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJFdmVudCB3
ZWJFdmVudChldmVudCk7CisgICAgbV93ZWJFdmVudExpc3RlbmVyLT5oYW5kbGVFdmVudCh3ZWJF
dmVudCk7Cit9CisKK3ZvaWQgRXZlbnRMaXN0ZW5lcldyYXBwZXI6OndlYkV2ZW50TGlzdGVuZXJE
ZWxldGVkKCkKK3sKKyAgICBtX3dlYkV2ZW50TGlzdGVuZXIgPSAwOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBw
ZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldy
YXBwZXIuaAkocmV2aXNpb24gNjUxMjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0V2ZW50TGlz
dGVuZXJXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzEsODEgQEAKLS8qDQotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotICoN
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQotICogbWV0Og0KLSAqDQotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQNCi0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuDQotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
DQotICogZGlzdHJpYnV0aW9uLg0KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQotICoNCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTDQotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVA0KLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLA0KLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkNCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4NCi0gKi8NCi0NCi0jaWZuZGVmIEV2ZW50TGlzdGVuZXJXcmFwcGVyX2gNCi0jZGVm
aW5lIEV2ZW50TGlzdGVuZXJXcmFwcGVyX2gNCi0NCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
Ig0KLQ0KLW5hbWVzcGFjZSBXZWJDb3JlIHsNCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
Ow0KLX0NCi0NCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsNCi0NCi1uYW1lc3BhY2UgV2ViS2l0
IHsNCi0NCi1jbGFzcyBXZWJFdmVudExpc3RlbmVyOw0KLQ0KLWNsYXNzIEV2ZW50TGlzdGVuZXJX
cmFwcGVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgew0KLXB1YmxpYzoNCi0gICAgRXZlbnRMaXN0
ZW5lcldyYXBwZXIoV2ViRXZlbnRMaXN0ZW5lciopOw0KLSAgICB+RXZlbnRMaXN0ZW5lcldyYXBw
ZXIoKTsNCi0NCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5l
ciYpOw0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEV2ZW50Kik7DQotDQotICAgIHZvaWQgd2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKTsNCi0N
Ci1wcml2YXRlOg0KLSAgICBXZWJFdmVudExpc3RlbmVyKiBtX3dlYkV2ZW50TGlzdGVuZXI7DQot
fTsNCi0NCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQNCi0NCi0jZW5kaWYNCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFdmVudExp
c3RlbmVyV3JhcHBlcl9oCisjZGVmaW5lIEV2ZW50TGlzdGVuZXJXcmFwcGVyX2gKKworI2luY2x1
ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKK30KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyOworY2xhc3MgV2ViRXZl
bnRMaXN0ZW5lcjsKKworLy8gRklYTUU6IFJlbW92ZSB0aGUgRXZlbnRMaXN0ZW5lcldyYXBwZXIg
Y2xhc3MgYmVsb3cgYW5kIHJlbmFtZQorLy8gRXZlbnRMaXN0ZW5lcldyYXBwZXJET00gdG8gRXZl
bnRMaXN0ZW5lcldyYXBwZXIgb25jZSBDaHJvbWl1bSBzd2l0Y2hlZCB0bworLy8gdXNpbmcgV2Vi
RE9NRXZlbnQuCitjbGFzcyBFdmVudExpc3RlbmVyV3JhcHBlckRPTSA6IHB1YmxpYyBFdmVudExp
c3RlbmVyIHsKK3B1YmxpYzoKKyAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTShXZWJET01FdmVu
dExpc3RlbmVyKik7CisgICAgfkV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJik7CisgICAgdmlydHVhbCB2
b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOworCisgICAg
dm9pZCB3ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOworCitwcml2YXRlOgorICAgIFdlYkRP
TUV2ZW50TGlzdGVuZXIqIG1fd2ViRE9NRXZlbnRMaXN0ZW5lcjsKK307CisKK2NsYXNzIEV2ZW50
TGlzdGVuZXJXcmFwcGVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIEV2
ZW50TGlzdGVuZXJXcmFwcGVyKFdlYkV2ZW50TGlzdGVuZXIqKTsKKyAgICB+RXZlbnRMaXN0ZW5l
cldyYXBwZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlz
dGVuZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEV2ZW50Kik7CisKKyAgICB2b2lkIHdlYkV2ZW50TGlzdGVuZXJEZWxldGVkKCk7CisK
K3ByaXZhdGU6CisgICAgV2ViRXZlbnRMaXN0ZW5lciogbV93ZWJFdmVudExpc3RlbmVyOworfTsK
KworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRPTUV2ZW50LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRE9NRXZlbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJET01FdmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgor
I2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NRXZlbnRQcml2YXRlIDogcHVibGljIFdlYkNvcmU6
OkV2ZW50IHsKK307CisKK3ZvaWQgV2ViRE9NRXZlbnQ6OnJlc2V0KCkKK3sKKyAgICBhc3NpZ24o
MCk7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnQ6OmFzc2lnbihjb25zdCBXZWJET01FdmVudCYgb3Ro
ZXIpCit7CisgICAgV2ViRE9NRXZlbnRQcml2YXRlKiBwID0gY29uc3RfY2FzdDxXZWJET01FdmVu
dFByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYo
KTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnQ6OmFzc2lnbihXZWJET01F
dmVudFByaXZhdGUqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0
aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigp
OworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK1dlYkRPTUV2ZW50OjpXZWJET01FdmVudChjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+JiBldmVudCkKKyAgICA6IG1fcHJpdmF0
ZShzdGF0aWNfY2FzdDxXZWJET01FdmVudFByaXZhdGUqPihldmVudC5yZWxlYXNlUmVmKCkpKQor
eworfQorCitXZWJTdHJpbmcgV2ViRE9NRXZlbnQ6OnR5cGUoKSBjb25zdAoreworICAgIEFTU0VS
VChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnR5cGUoKTsKK30KKworV2ViTm9k
ZSBXZWJET01FdmVudDo6dGFyZ2V0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsK
KyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPnRhcmdldCgpLT50b05vZGUoKSk7Cit9CisK
K1dlYk5vZGUgV2ViRE9NRXZlbnQ6OmN1cnJlbnRUYXJnZXQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX3ByaXZhdGUpOworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+Y3VycmVudFRhcmdl
dCgpLT50b05vZGUoKSk7Cit9CisKK1dlYkRPTUV2ZW50OjpQaGFzZVR5cGUgV2ViRE9NRXZlbnQ6
OmV2ZW50UGhhc2UoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJET01FdmVudDo6UGhhc2VUeXBlPihtX3ByaXZhdGUtPmV2ZW50UGhh
c2UoKSk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmJ1YmJsZXMoKSBjb25zdAoreworICAgIEFT
U0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmJ1YmJsZXMoKTsKK30KKwor
Ym9vbCBXZWJET01FdmVudDo6Y2FuY2VsYWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJp
dmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2FuY2VsYWJsZSgpOworfQorCitib29sIFdl
YkRPTUV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzVUlFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50
Ojppc01vdXNlRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmlzTW91c2VFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50Ojpp
c011dGF0aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmlzTXV0YXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50
Ojppc0tleWJvYXJkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmlzS2V5Ym9hcmRFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2
ZW50Ojppc1RleHRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0RXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6
aXNDb21wb3NpdGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbXBvc2l0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJE
T01FdmVudDo6aXNEcmFnRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRHJhZ0V2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZl
bnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQ2xpcGJvYXJkRXZlbnQoKTsKK30KKworYm9vbCBXZWJE
T01FdmVudDo6aXNNZXNzYWdlRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUp
OworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzTWVzc2FnZUV2ZW50KCk7Cit9CisKK2Jvb2wgV2Vi
RE9NRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9N
RXZlbnQ6OmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVCht
X3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNPdmVyZmxvd0V2ZW50KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc092ZXJmbG93
RXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNQYWdlVHJhbnNpdGlvbkV2ZW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5p
c1BhZ2VUcmFuc2l0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNQb3BTdGF0
ZUV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5pc1BvcFN0YXRlRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNQcm9n
cmVzc0V2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5pc1Byb2dyZXNzRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZh
dGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKSBjb25z
dAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzV2Vi
S2l0QW5pbWF0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNXZWJLaXRUcmFu
c2l0aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9N
RXZlbnQ6OmlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRl
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0JlZm9yZUxvYWRFdmVudCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NRXZlbnRM
aXN0ZW5lci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2
ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
T01FdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisKKyNpbmNsdWRl
ICJXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
V2ViRE9NRXZlbnRMaXN0ZW5lcjo6V2ViRE9NRXZlbnRMaXN0ZW5lcigpCisgICAgOiBtX3ByaXZh
dGUobmV3IFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKHRoaXMpKQoreworfQorCitXZWJET01F
dmVudExpc3RlbmVyOjp+V2ViRE9NRXZlbnRMaXN0ZW5lcigpCit7CisgICAgbV9wcml2YXRlLT53
ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOworICAgIGRlbGV0ZSBtX3ByaXZhdGU7Cit9CisK
K3ZvaWQgV2ViRE9NRXZlbnRMaXN0ZW5lcjo6bm90aWZ5RXZlbnRMaXN0ZW5lckRlbGV0ZWQoRXZl
bnRMaXN0ZW5lcldyYXBwZXJET00qIHdyYXBwZXIpCit7CisgICAgbV9wcml2YXRlLT5ldmVudExp
c3RlbmVyRGVsZXRlZCh3cmFwcGVyKTsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIFdl
YkRPTUV2ZW50TGlzdGVuZXI6OmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0
cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VD
YXB0dXJlLCBub2RlKTsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIFdlYkRPTUV2ZW50
TGlzdGVuZXI6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBub2RlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
RE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCIKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFw
cGVyLmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6OldlYkRPTUV2ZW50TGlzdGVuZXJQ
cml2YXRlKFdlYkRPTUV2ZW50TGlzdGVuZXIqIHdlYkRPTUV2ZW50TGlzdGVuZXIpCisgICAgOiBt
X3dlYkRPTUV2ZW50TGlzdGVuZXIod2ViRE9NRXZlbnRMaXN0ZW5lcikKK3sKK30KKworV2ViRE9N
RXZlbnRMaXN0ZW5lclByaXZhdGU6On5XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSgpCit7Cit9
CisKK0V2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKiBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6
Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJv
b2wgdXNlQ2FwdHVyZSwgTm9kZSogbm9kZSkKK3sKKyAgICBFdmVudExpc3RlbmVyV3JhcHBlckRP
TSogbGlzdGVuZXJXcmFwcGVyID0gbmV3IEV2ZW50TGlzdGVuZXJXcmFwcGVyRE9NKG1fd2ViRE9N
RXZlbnRMaXN0ZW5lcik7CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6Okxpc3RlbmVy
SW5mbyBsaXN0ZW5lckluZm8oZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBsaXN0ZW5lcldyYXBwZXIs
IG5vZGUpOworICAgIG1fbGlzdGVuZXJXcmFwcGVycy5hcHBlbmQobGlzdGVuZXJJbmZvKTsKKyAg
ICByZXR1cm4gbGlzdGVuZXJXcmFwcGVyOworfQorCitFdmVudExpc3RlbmVyV3JhcHBlckRPTSog
V2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0
IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7Cisg
ICAgVmVjdG9yPFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25z
dF9pdGVyYXRvciBpdGVyOworICAgIGZvciAoaXRlciA9IG1fbGlzdGVuZXJXcmFwcGVycy5iZWdp
bigpOyBpdGVyICE9IG1fbGlzdGVuZXJXcmFwcGVycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IGlmIChpdGVyLT5ub2RlID09IG5vZGUpCisgICAgICAgICAgcmV0dXJuIGl0ZXItPmV2ZW50TGlz
dGVuZXJXcmFwcGVyOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6d2ViRE9NRXZlbnRM
aXN0ZW5lckRlbGV0ZWQoKQoreworICAgIC8vIE5vdGlmaWVzIGFsbCBXZWJET01FdmVudExpc3Rl
bmVyV3JhcHBlcnMgdGhhdCB3ZSBhcmUgZ29pbmcgYXdheSBzbyB0aGV5IGNhbgorICAgIC8vIGlu
dmFsaWRhdGUgdGhlaXIgcG9pbnRlciB0byB1cy4KKyAgICBWZWN0b3I8V2ViRE9NRXZlbnRMaXN0
ZW5lclByaXZhdGU6Okxpc3RlbmVySW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7CisgICAgZm9y
IChpdGVyID0gbV9saXN0ZW5lcldyYXBwZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9saXN0ZW5lcldy
YXBwZXJzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmV2ZW50TGlzdGVuZXJXcmFwcGVy
LT53ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOworfQorCit2b2lkIFdlYkRPTUV2ZW50TGlz
dGVuZXJQcml2YXRlOjpldmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlckRP
TSogZXZlbnRMaXN0ZW5lcikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdGVu
ZXJXcmFwcGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9saXN0ZW5lcldyYXBwZXJz
W2ldLmV2ZW50TGlzdGVuZXJXcmFwcGVyID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAg
IG1fbGlzdGVuZXJXcmFwcGVycy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVy
UHJpdmF0ZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVu
dExpc3RlbmVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYkRPTUV2ZW50
TGlzdGVuZXJQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOworfQorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEV2
ZW50TGlzdGVuZXJXcmFwcGVyRE9NOworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsKKworY2xh
c3MgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUgeworcHVibGljOgorICAgIFdlYkRPTUV2ZW50
TGlzdGVuZXJQcml2YXRlKFdlYkRPTUV2ZW50TGlzdGVuZXIqIHdlYkRPTUV2ZW50TGlzdGVuZXIp
OworICAgIH5XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSgpOworCisgICAgRXZlbnRMaXN0ZW5l
cldyYXBwZXJET00qIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKAorICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKTsKKworICAg
IC8vIEdldHMgdGhlIExpc3RlbmVyRXZlbnRXcmFwcGVyIGZvciBhIHNwZWNpZmljIG5vZGUuCisg
ICAgLy8gVXNlZCBieSBXZWJOb2RlOjpyZW1vdmVET01FdmVudExpc3RlbmVyKCkuCisgICAgRXZl
bnRMaXN0ZW5lcldyYXBwZXJET00qIGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKAorICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKTsK
KworICAgIC8vIENhbGxlZCBieSB0aGUgV2ViRE9NRXZlbnRMaXN0ZW5lciB3aGVuIGl0IGlzIGFi
b3V0IHRvIGJlIGRlbGV0ZWQuCisgICAgdm9pZCB3ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgp
OworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBFdmVudExpc3RlbmVyV3JhcHBlciB3aGVuIGl0IGlz
IGFib3V0IHRvIGJlIGRlbGV0ZWQuCisgICAgdm9pZCBldmVudExpc3RlbmVyRGVsZXRlZChFdmVu
dExpc3RlbmVyV3JhcHBlckRPTSogZXZlbnRMaXN0ZW5lcik7CisKKyAgICBzdHJ1Y3QgTGlzdGVu
ZXJJbmZvIHsKKyAgICAgICAgTGlzdGVuZXJJbmZvKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBl
LCBib29sIHVzZUNhcHR1cmUsCisgICAgICAgICAgICAgICAgICAgICBFdmVudExpc3RlbmVyV3Jh
cHBlckRPTSogZXZlbnRMaXN0ZW5lcldyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlKQorICAgICAgICAgICAgOiBldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAgICAg
LCB1c2VDYXB0dXJlKHVzZUNhcHR1cmUpCisgICAgICAgICAgICAsIGV2ZW50TGlzdGVuZXJXcmFw
cGVyKGV2ZW50TGlzdGVuZXJXcmFwcGVyKQorICAgICAgICAgICAgLCBub2RlKG5vZGUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFdlYlN0cmluZyBldmVudFR5cGU7CisgICAgICAg
IGJvb2wgdXNlQ2FwdHVyZTsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXJET00qIGV2ZW50
TGlzdGVuZXJXcmFwcGVyOworICAgICAgICBOb2RlKiBub2RlOworICAgIH07CisKK3ByaXZhdGU6
CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lciogbV93ZWJET01FdmVudExpc3RlbmVyOworCisgICAg
Ly8gV2Uga2VlcCBhIGxpc3Qgb2YgdGhlIHdyYXBwZXIgZm9yIHRoZSBXZWJLaXQgRXZlbnRMaXN0
ZW5lciwgaXQgaXMgbmVlZGVkCisgICAgLy8gdG8gaW1wbGVtZW50IFdlYk5vZGU6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoKS4KKyAgICBWZWN0b3I8TGlzdGVuZXJJbmZvPiBtX2xpc3RlbmVyV3JhcHBl
cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRPTU1vdXNlRXZlbnQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJET01Nb3VzZUV2ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRE9NTW91c2VFdmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTU1vdXNlRXZlbnQu
aCIKKworI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbnQgV2ViRE9NTW91c2VFdmVudDo6c2NyZWVuWCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnNjcmVlblgo
KTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OnNjcmVlblkoKSBjb25zdAoreworICAgIHJl
dHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5zY3JlZW5ZKCk7Cit9CisKK2ludCBXZWJE
T01Nb3VzZUV2ZW50OjpjbGllbnRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8
TW91c2VFdmVudD4oKS0+Y2xpZW50WCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6Y2xp
ZW50WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmNs
aWVudFkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OmxheWVyWCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmxheWVyWCgpOworfQorCitpbnQg
V2ViRE9NTW91c2VFdmVudDo6bGF5ZXJZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndy
YXA8TW91c2VFdmVudD4oKS0+bGF5ZXJZKCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50Ojpv
ZmZzZXRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+
b2Zmc2V0WCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6b2Zmc2V0WSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPm9mZnNldFkoKTsKK30KKwor
aW50IFdlYkRPTU1vdXNlRXZlbnQ6OnBhZ2VYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RV
bndyYXA8TW91c2VFdmVudD4oKS0+cGFnZVgoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6
OnBhZ2VZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+
cGFnZVkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OngoKSBjb25zdAoreworICAgIHJl
dHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT54KCk7Cit9CisKK2ludCBXZWJET01Nb3Vz
ZUV2ZW50Ojp5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4o
KS0+eSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6YnV0dG9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+YnV0dG9uKCk7Cit9CisKK2Jvb2wg
V2ViRE9NTW91c2VFdmVudDo6YnV0dG9uRG93bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
VW53cmFwPE1vdXNlRXZlbnQ+KCktPmJ1dHRvbkRvd24oKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU11dGF0aW9uRXZlbnQuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01NdXRhdGlvbkV2ZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTXV0YXRpb25F
dmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRE9NTXV0YXRpb25FdmVudC5oIgorCisjaW5jbHVkZSAiTXV0YXRpb25F
dmVudC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK1dlYk5vZGUgV2ViRE9NTXV0YXRpb25FdmVudDo6cmVsYXRlZE5vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBXZWJOb2RlKGNvbnN0VW53cmFwPE11dGF0aW9uRXZlbnQ+KCktPnJlbGF0ZWRO
b2RlKCkpOworfQorCitXZWJTdHJpbmcgV2ViRE9NTXV0YXRpb25FdmVudDo6cHJldlZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV2ViU3RyaW5nKGNvbnN0VW53cmFwPE11dGF0aW9uRXZlbnQ+
KCktPnByZXZWYWx1ZSgpKTsKK30KKworV2ViU3RyaW5nIFdlYkRPTU11dGF0aW9uRXZlbnQ6Om5l
d1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU3RyaW5nKGNvbnN0VW53cmFwPE11dGF0
aW9uRXZlbnQ+KCktPm5ld1ZhbHVlKCkpOworfQorCitXZWJTdHJpbmcgV2ViRE9NTXV0YXRpb25F
dmVudDo6YXR0ck5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJTdHJpbmcoY29uc3RVbndy
YXA8TXV0YXRpb25FdmVudD4oKS0+YXR0ck5hbWUoKSk7Cit9CisKK1dlYkRPTU11dGF0aW9uRXZl
bnQ6OkF0dHJDaGFuZ2VUeXBlIFdlYkRPTU11dGF0aW9uRXZlbnQ6OmF0dHJDaGFuZ2UoKSBjb25z
dAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdHRyQ2hhbmdlVHlwZT4oY29uc3RVbndyYXA8
TXV0YXRpb25FdmVudD4oKS0+YXR0ckNoYW5nZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJOb2RlLmNwcAkocmV2aXNpb24gNjUxMjkpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw4IEBACiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKIAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJX
cmFwcGVyLmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJET01FdmVu
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJFdmVu
dC5oIgogI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVuZXIuaCIKQEAgLTE0OSw2ICsxNTEsMjQgQEAg
Ym9vbCBXZWJOb2RlOjppc0VsZW1lbnROb2RlKCkgY29uc3QKICAgICByZXR1cm4gbV9wcml2YXRl
LT5pc0VsZW1lbnROb2RlKCk7CiB9CiAKK3ZvaWQgV2ViTm9kZTo6YWRkRE9NRXZlbnRMaXN0ZW5l
cihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBFdmVudExpc3RlbmVyV3JhcHBlckRPTSogbGlz
dGVuZXJXcmFwcGVyID0KKyAgICAgICAgbGlzdGVuZXItPmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFw
cGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbV9wcml2YXRlLmdldCgpKTsKKyAgICAvLyBUaGUg
bGlzdGVuZXJXcmFwcGVyIGlzIG9ubHkgcmVmZXJlbmNlZCBieSB0aGUgYWN0dWFsIE5vZGUuICBP
bmNlIGl0IGdvZXMKKyAgICAvLyBhd2F5LCB0aGUgd3JhcHBlciBub3RpZmllcyB0aGUgV2ViRXZl
bnRMaXN0ZW5lciBzbyBpdCBjYW4gY2xlYXIgaXRzCisgICAgLy8gcG9pbnRlciB0byBpdC4KKyAg
ICBtX3ByaXZhdGUtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhZG9wdFJlZihsaXN0ZW5l
cldyYXBwZXIpLCB1c2VDYXB0dXJlKTsKK30KKwordm9pZCBXZWJOb2RlOjpyZW1vdmVET01FdmVu
dExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVy
KiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVy
RE9NKiBsaXN0ZW5lcldyYXBwZXIgPQorICAgICAgICBsaXN0ZW5lci0+Z2V0RXZlbnRMaXN0ZW5l
cldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1f
cHJpdmF0ZS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyV3JhcHBlciwg
dXNlQ2FwdHVyZSk7CisgICAgLy8gbGlzdGVuZXJXcmFwcGVyIGlzIG5vdyBkZWxldGVkLgorfQor
CiB2b2lkIFdlYk5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5
cGUsIFdlYkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAg
RXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9Cg==
</data>
<flag name="review"
          id="52972"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64635</attachid>
            <date>2010-08-17 14:43:54 -0700</date>
            <delta_ts>2010-08-17 15:03:14 -0700</delta_ts>
            <desc>Applied fishd suggested changes</desc>
            <filename>mouse_event.patch</filename>
            <type>text/plain</type>
            <size>51345</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0xMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgdGhlIFdlYkV2ZW50IHRvIFdlYkRP
TUV2ZW50IGFuZCBhZGRpbmcgYSBuZXcgZXZlbnQgY2xhc3MKKyAgICAgICAgZm9yIG1vdXNlIGV2
ZW50cyBzbyB0aGF0IHRoZSBldmVudCBsaXN0ZW5lciBBUEkgY2FuIGJlIHVzZWQgdG8gbGlzdGVu
CisgICAgICAgIHRvIHRoZW0uICBUaGUgcmVuYW1pbmcgaXMgbmVlZGVkIGFzIHRoZXJlIGFscmVh
ZHkgaXMgYSBXZWJNb3VzZUV2ZW50IGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NTMKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRPTUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJE
T01FdmVudExpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01Nb3VzZUV2
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlLmg6CisgICAgICAgICogc3JjL0V2ZW50TGlz
dGVuZXJXcmFwcGVyLmNwcDoKKyAgICAgICAgKiBzcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaDoK
KyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
RE9NRXZlbnRMaXN0ZW5lci5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExpc3Rl
bmVyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NTW91c2VFdmVudC5jcHA6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc0Vs
ZW1lbnROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6YWRkRE9NRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIpOgor
CiAyMDEwLTA4LTE3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjU1MTYuCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ1N0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkN1cnNv
ckluZm8uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJET01FdmVudC5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkRPTUV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRE9NTXV0YXRpb25FdmVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTVN0
cmluZ0xpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEYXRhLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViRGF0YWJhc2UuaCcsCkBAIC0zODAsNiArMzg0LDEyIEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01F
dmVudC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lci5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViRE9NTW91c2VFdmVudC5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViRE9NTXV0YXRpb25FdmVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RE9NU3RyaW5nTGlzdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YWJhc2UuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRE9NRXZlbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRE9NRXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRE9NRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkRPTUV2ZW50X2gKKyNkZWZpbmUgV2ViRE9NRXZlbnRfaAorCisjaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEV2ZW50OyB9CisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQ
dHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NRXZlbnQg
eworcHVibGljOgorICAgIGVudW0gUGhhc2VUeXBlIHsKKyAgICAgICAgQ2FwdHVyaW5nUGhhc2Ug
ICAgID0gMSwKKyAgICAgICAgQXRUYXJnZXQgICAgICAgICAgID0gMiwKKyAgICAgICAgQnViYmxp
bmdQaGFzZSAgICAgID0gMworICAgIH07CisKKyAgICBXZWJET01FdmVudCgpIDogbV9wcml2YXRl
KDApIHsgfQorICAgIFdlYkRPTUV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBlKSA6IG1fcHJpdmF0
ZSgwKSB7IGFzc2lnbihlKTsgfQorICAgIFdlYkRPTUV2ZW50JiBvcGVyYXRvcj0oY29uc3QgV2Vi
RE9NRXZlbnQmIGUpCisgICAgeworICAgICAgICBhc3NpZ24oZSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRf
QVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRPTUV2ZW50Jik7CisKKyAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5n
IHR5cGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgdGFyZ2V0KCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJOb2RlIGN1cnJlbnRUYXJnZXQoKSBjb25zdDsKKworICAgIFdFQktJ
VF9BUEkgUGhhc2VUeXBlIGV2ZW50UGhhc2UoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wg
YnViYmxlcygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBjYW5jZWxhYmxlKCkgY29uc3Q7
CisKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc011dGF0
aW9uRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzVGV4dEV2ZW50KCkgY29uc3Q7CisgICAgV0VC
S0lUX0FQSSBib29sIGlzQ29tcG9zaXRpb25FdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
Ym9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc0NsaXBib2Fy
ZEV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzTWVzc2FnZUV2ZW50KCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OworICAgIFdFQktJ
VF9BUEkgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lU
X0FQSSBib29sIGlzT3ZlcmZsb3dFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBp
c1BhZ2VUcmFuc2l0aW9uRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNQb3BT
dGF0ZUV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzUHJvZ3Jlc3NFdmVudCgp
IGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3Q7CisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJET01FdmVudChjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6RXZlbnQ+Jik7CisjZW5kaWYKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgdG8oKQorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5XZWJET01FdmVu
dDo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBUIHRvQ29uc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAg
VCByZXM7CisgICAgICAgIHJlcy5XZWJET01FdmVudDo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAg
cmV0dXJuIHJlczsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIFdlYkNvcmU6OkV2
ZW50IFdlYkRPTUV2ZW50UHJpdmF0ZTsKKyAgICB2b2lkIGFzc2lnbihXZWJET01FdmVudFByaXZh
dGUqKTsKKyAgICBXZWJET01FdmVudFByaXZhdGUqIG1fcHJpdmF0ZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQqIHVud3JhcCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VCo+KG1fcHJpdmF0ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3QgVCogY29uc3RVbndyYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFQqPihtX3ByaXZhdGUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NRXZlbnRM
aXN0ZW5lci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01F
dmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkRPTUV2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViRE9NRXZlbnRMaXN0ZW5lcl9oCisjZGVmaW5lIFdlYkRPTUV2ZW50TGlzdGVuZXJfaAorCisj
aW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVz
cGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBFdmVudExpc3RlbmVyV3JhcHBlcjsKK2NsYXNzIFdlYkRPTUV2ZW50OworY2xh
c3MgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU7CitjbGFzcyBXZWJOb2RlOworY2xhc3MgV2Vi
U3RyaW5nOworCitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBXRUJL
SVRfQVBJIFdlYkRPTUV2ZW50TGlzdGVuZXIoKTsKKyAgICBXRUJLSVRfQVBJIHZpcnR1YWwgfldl
YkRPTUV2ZW50TGlzdGVuZXIoKTsKKworICAgIC8vIENhbGxlZCB3aGVuIGFuIGV2ZW50IGlzIHJl
Y2VpdmVkLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChjb25zdCBXZWJET01FdmVudCYp
ID0gMDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIHZvaWQgbm90aWZ5RXZlbnRM
aXN0ZW5lckRlbGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXIqKTsKKyAgICBFdmVudExpc3RlbmVy
V3JhcHBlciogY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CisgICAgRXZlbnRM
aXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYg
ZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUqIG1fcHJpdmF0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRE9NTW91c2VFdmVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaWZuZGVmIFdlYkRPTU1vdXNlRXZlbnRfaAorI2RlZmluZSBXZWJET01Nb3VzZUV2ZW50
X2gKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7IH0KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NTW91c2VFdmVudCA6IHB1YmxpYyBXZWJET01FdmVu
dCB7CitwdWJsaWM6CisgICAgV0VCS0lUX0FQSSBpbnQgc2NyZWVuWCgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgaW50IHNjcmVlblkoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBjbGllbnRY
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgY2xpZW50WSgpIGNvbnN0OworICAgIFdFQktJ
VF9BUEkgaW50IGxheWVyWCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IGxheWVyWSgpIGNv
bnN0OworICAgIFdFQktJVF9BUEkgaW50IG9mZnNldFgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJ
IGludCBvZmZzZXRZKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVgoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIGludCBwYWdlWSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHgo
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCB5KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJ
IGludCBidXR0b24oKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgYnV0dG9uRG93bigpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50LmgNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTU11dGF0aW9uRXZlbnQuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NTXV0YXRpb25FdmVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgV2ViRE9NTXV0YXRpb25FdmVudF9oCisjZGVmaW5l
IFdlYkRPTU11dGF0aW9uRXZlbnRfaAorCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKworI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBFdmVudDsg
fQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJET01NdXRhdGlvbkV2
ZW50IDogcHVibGljIFdlYkRPTUV2ZW50IHsKK3B1YmxpYzoKKyAgICBlbnVtIEF0dHJDaGFuZ2VU
eXBlIHsKKyAgICAgICAgTW9kaWZpY2F0aW9uICAgID0gMSwKKyAgICAgICAgQWRkaXRpb24gICAg
ICAgID0gMiwKKyAgICAgICAgUmVtb3ZhbCAgICAgICAgID0gMworICAgIH07CisKKyAgICBXRUJL
SVRfQVBJIFdlYk5vZGUgcmVsYXRlZE5vZGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYlN0
cmluZyBwcmV2VmFsdWUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBuZXdWYWx1
ZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGF0dHJOYW1lKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBBdHRyQ2hhbmdlVHlwZSBhdHRyQ2hhbmdlKCkgY29uc3Q7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkV2ZW50TGlzdGVuZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsgfQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotY2xhc3MgRXZlbnRMaXN0ZW5lcldyYXBwZXI7CitjbGFzcyBEZXByZWNhdGVkRXZl
bnRMaXN0ZW5lcldyYXBwZXI7CiBjbGFzcyBXZWJFdmVudDsKIGNsYXNzIFdlYkV2ZW50TGlzdGVu
ZXJQcml2YXRlOwogY2xhc3MgV2ViTm9kZTsKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChjb25zdCBXZWJFdmVudCYpID0gMDsKIAogI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgotICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lckRlbGV0ZWQo
RXZlbnRMaXN0ZW5lcldyYXBwZXIqKTsKLSAgICBFdmVudExpc3RlbmVyV3JhcHBlciogY3JlYXRl
RXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNl
Q2FwdHVyZSwgV2ViQ29yZTo6Tm9kZSogbm9kZSk7Ci0gICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIq
IGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29s
IHVzZUNhcHR1cmUsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpOworICAgIHZvaWQgbm90aWZ5RXZlbnRM
aXN0ZW5lckRlbGV0ZWQoRGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKik7CisgICAgRGVw
cmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihj
b25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBXZWJDb3JlOjpOb2Rl
KiBub2RlKTsKKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlz
dGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUs
IFdlYkNvcmU6Ok5vZGUqIG5vZGUpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYk5vZGUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViTm9kZS5oCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7IGNsYXNzIE5vZGU7IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJET01FdmVudExpc3RlbmVyOworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU7CiBj
bGFzcyBXZWJEb2N1bWVudDsKIGNsYXNzIFdlYkV2ZW50TGlzdGVuZXI7CiBjbGFzcyBXZWJFdmVu
dExpc3RlbmVyUHJpdmF0ZTsKQEAgLTk3LDYgKzk5LDggQEAgcHVibGljOgogICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgYm9vbCBp
c1RleHROb2RlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJp
bmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2Fw
dHVyZSk7CisgICAgV0VCS0lUX0FQSSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2Vi
U3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpOwogICAgIFdFQktJVF9BUEkgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IFdl
YlN0cmluZyYgZXZlbnRUeXBlLCBXZWJFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VD
YXB0dXJlKTsKICAgICBXRUJLSVRfQVBJIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBX
ZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNpbXVsYXRlQ2xpY2soKTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHAJKHJldmlzaW9u
IDY1NTM2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDIxICszNCwyMyBAQAogI2luY2x1ZGUgIkV2ZW50LmgiDQog
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCINCiANCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIN
CisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIg0KICNpbmNsdWRlICJXZWJFdmVudC5o
Ig0KICNpbmNsdWRlICJXZWJFdmVudExpc3RlbmVyLmgiDQogDQogbmFtZXNwYWNlIFdlYktpdCB7
DQogDQotRXZlbnRMaXN0ZW5lcldyYXBwZXI6OkV2ZW50TGlzdGVuZXJXcmFwcGVyKFdlYkV2ZW50
TGlzdGVuZXIqIHdlYkV2ZW50TGlzdGVuZXIpDQorRXZlbnRMaXN0ZW5lcldyYXBwZXI6OkV2ZW50
TGlzdGVuZXJXcmFwcGVyKFdlYkRPTUV2ZW50TGlzdGVuZXIqIHdlYkRPTUV2ZW50TGlzdGVuZXIp
DQogICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBl
KQ0KLSAgICAsIG1fd2ViRXZlbnRMaXN0ZW5lcih3ZWJFdmVudExpc3RlbmVyKQ0KKyAgICAsIG1f
d2ViRE9NRXZlbnRMaXN0ZW5lcih3ZWJET01FdmVudExpc3RlbmVyKQ0KIHsNCiB9DQogDQogRXZl
bnRMaXN0ZW5lcldyYXBwZXI6On5FdmVudExpc3RlbmVyV3JhcHBlcigpDQogew0KLSAgICBpZiAo
bV93ZWJFdmVudExpc3RlbmVyKQ0KLSAgICAgICAgbV93ZWJFdmVudExpc3RlbmVyLT5ub3RpZnlF
dmVudExpc3RlbmVyRGVsZXRlZCh0aGlzKTsNCisgICAgaWYgKG1fd2ViRE9NRXZlbnRMaXN0ZW5l
cikNCisgICAgICAgIG1fd2ViRE9NRXZlbnRMaXN0ZW5lci0+bm90aWZ5RXZlbnRMaXN0ZW5lckRl
bGV0ZWQodGhpcyk7DQogfQ0KIA0KIGJvb2wgRXZlbnRMaXN0ZW5lcldyYXBwZXI6Om9wZXJhdG9y
PT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpDQpAQCAtNTgsMTMgKzYwLDQzIEBAIGJv
b2wgRXZlbnRMaXN0ZW5lcldyYXBwZXI6Om9wZXJhdG9yPT0oY28KIA0KIHZvaWQgRXZlbnRMaXN0
ZW5lcldyYXBwZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV2ZW50KiBldmVudCkNCiB7DQorICAgIGlmICghbV93ZWJET01FdmVudExpc3RlbmVyKQ0KKyAg
ICAgICAgcmV0dXJuOw0KKyAgICBXZWJET01FdmVudCB3ZWJET01FdmVudChldmVudCk7DQorICAg
IG1fd2ViRE9NRXZlbnRMaXN0ZW5lci0+aGFuZGxlRXZlbnQod2ViRE9NRXZlbnQpOw0KK30NCisN
Cit2b2lkIEV2ZW50TGlzdGVuZXJXcmFwcGVyOjp3ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgp
DQorew0KKyAgICBtX3dlYkRPTUV2ZW50TGlzdGVuZXIgPSAwOw0KK30NCisNCitEZXByZWNhdGVk
RXZlbnRMaXN0ZW5lcldyYXBwZXI6OkRlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlcihXZWJF
dmVudExpc3RlbmVyKiB3ZWJFdmVudExpc3RlbmVyKQ0KKyAgICA6IEV2ZW50TGlzdGVuZXIoRXZl
bnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyVHlwZSkNCisgICAgLCBtX3dlYkV2ZW50TGlzdGVu
ZXIod2ViRXZlbnRMaXN0ZW5lcikNCit7DQorfQ0KKw0KK0RlcHJlY2F0ZWRFdmVudExpc3RlbmVy
V3JhcHBlcjo6fkRlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlcigpDQorew0KKyAgICBpZiAo
bV93ZWJFdmVudExpc3RlbmVyKQ0KKyAgICAgICAgbV93ZWJFdmVudExpc3RlbmVyLT5ub3RpZnlF
dmVudExpc3RlbmVyRGVsZXRlZCh0aGlzKTsNCit9DQorDQorYm9vbCBEZXByZWNhdGVkRXZlbnRM
aXN0ZW5lcldyYXBwZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIp
DQorew0KKyAgICByZXR1cm4gdGhpcyA9PSAmbGlzdGVuZXI7DQorfQ0KKw0KK3ZvaWQgRGVwcmVj
YXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpDQorew0KICAgICBpZiAoIW1fd2ViRXZlbnRMaXN0
ZW5lcikNCiAgICAgICAgIHJldHVybjsNCiAgICAgV2ViRXZlbnQgd2ViRXZlbnQoZXZlbnQpOw0K
ICAgICBtX3dlYkV2ZW50TGlzdGVuZXItPmhhbmRsZUV2ZW50KHdlYkV2ZW50KTsNCiB9DQogDQot
dm9pZCBFdmVudExpc3RlbmVyV3JhcHBlcjo6d2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKQ0KK3Zv
aWQgRGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyOjp3ZWJFdmVudExpc3RlbmVyRGVsZXRl
ZCgpDQogew0KICAgICBtX3dlYkV2ZW50TGlzdGVuZXIgPSAwOw0KIH0NCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmgNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL0V2ZW50TGlzdGVuZXJXcmFwcGVyLmgJKHJldmlzaW9uIDY1NTM2KQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwyMiArNDEsNDAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiANCiBuYW1l
c3BhY2UgV2ViS2l0IHsNCiANCitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyOw0KIGNsYXNzIFdl
YkV2ZW50TGlzdGVuZXI7DQogDQorLy8gRklYTUU6IFJlbW92ZSB0aGUgRGVwcmVjYXRlZEV2ZW50
TGlzdGVuZXJXcmFwcGVyIGNsYXNzIGJlbG93IG9uY2UgQ2hyb21pdW0NCisvLyBzd2l0Y2hlZCB0
byB1c2luZyBXZWJET01FdmVudC4NCiBjbGFzcyBFdmVudExpc3RlbmVyV3JhcHBlciA6IHB1Ymxp
YyBFdmVudExpc3RlbmVyIHsNCiBwdWJsaWM6DQotICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyKFdl
YkV2ZW50TGlzdGVuZXIqKTsNCisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIoV2ViRE9NRXZlbnRM
aXN0ZW5lciopOw0KICAgICB+RXZlbnRMaXN0ZW5lcldyYXBwZXIoKTsNCiANCiAgICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYpOw0KICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEV2ZW50Kik7DQogDQorICAg
IHZvaWQgd2ViRE9NRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKTsNCisNCitwcml2YXRlOg0KKyAgICBX
ZWJET01FdmVudExpc3RlbmVyKiBtX3dlYkRPTUV2ZW50TGlzdGVuZXI7DQorfTsNCisNCitjbGFz
cyBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
DQorcHVibGljOg0KKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIoV2ViRXZlbnRM
aXN0ZW5lciopOw0KKyAgICB+RGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKCk7DQorDQor
ICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImKTsNCisgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCop
Ow0KKw0KICAgICB2b2lkIHdlYkV2ZW50TGlzdGVuZXJEZWxldGVkKCk7DQogDQogcHJpdmF0ZToN
CiAgICAgV2ViRXZlbnRMaXN0ZW5lciogbV93ZWJFdmVudExpc3RlbmVyOw0KIH07DQogDQorDQog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0DQogDQogI2VuZGlmDQpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJET01FdmVudC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRPTUV2ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RE9NRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudC5oIgorCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkRPTUV2ZW50UHJpdmF0ZSA6IHB1YmxpYyBXZWJDb3JlOjpF
dmVudCB7Cit9OworCit2b2lkIFdlYkRPTUV2ZW50OjpyZXNldCgpCit7CisgICAgYXNzaWduKDAp
OworfQorCit2b2lkIFdlYkRPTUV2ZW50Ojphc3NpZ24oY29uc3QgV2ViRE9NRXZlbnQmIG90aGVy
KQoreworICAgIFdlYkRPTUV2ZW50UHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViRE9NRXZlbnRQ
cml2YXRlKj4ob3RoZXIubV9wcml2YXRlKTsKKyAgICBpZiAocCkKKyAgICAgICAgcC0+cmVmKCk7
CisgICAgYXNzaWduKHApOworfQorCit2b2lkIFdlYkRPTUV2ZW50Ojphc3NpZ24oV2ViRE9NRXZl
bnRQcml2YXRlKiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhl
IGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsK
KyAgICBtX3ByaXZhdGUgPSBwOworfQorCitXZWJET01FdmVudDo6V2ViRE9NRXZlbnQoY29uc3Qg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkV2ZW50PiYgZXZlbnQpCisgICAgOiBtX3ByaXZhdGUo
c3RhdGljX2Nhc3Q8V2ViRE9NRXZlbnRQcml2YXRlKj4oZXZlbnQucmVsZWFzZVJlZigpKSkKK3sK
K30KKworV2ViU3RyaW5nIFdlYkRPTUV2ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT50eXBlKCk7Cit9CisKK1dlYk5vZGUg
V2ViRE9NRXZlbnQ6OnRhcmdldCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7Cisg
ICAgcmV0dXJuIFdlYk5vZGUobV9wcml2YXRlLT50YXJnZXQoKS0+dG9Ob2RlKCkpOworfQorCitX
ZWJOb2RlIFdlYkRPTUV2ZW50OjpjdXJyZW50VGFyZ2V0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wcml2YXRlKTsKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPmN1cnJlbnRUYXJnZXQo
KS0+dG9Ob2RlKCkpOworfQorCitXZWJET01FdmVudDo6UGhhc2VUeXBlIFdlYkRPTUV2ZW50Ojpl
dmVudFBoYXNlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViRE9NRXZlbnQ6OlBoYXNlVHlwZT4obV9wcml2YXRlLT5ldmVudFBoYXNl
KCkpOworfQorCitib29sIFdlYkRPTUV2ZW50OjpidWJibGVzKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5idWJibGVzKCk7Cit9CisKK2Jv
b2wgV2ViRE9NRXZlbnQ6OmNhbmNlbGFibGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZh
dGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNhbmNlbGFibGUoKTsKK30KKworYm9vbCBXZWJE
T01FdmVudDo6aXNVSUV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc1VJRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6
aXNNb3VzZUV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5pc01vdXNlRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNN
dXRhdGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5pc011dGF0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6
aXNLZXlib2FyZEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pc0tleWJvYXJkRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVu
dDo6aXNUZXh0RXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmlzVGV4dEV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6Omlz
Q29tcG9zaXRpb25FdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNDb21wb3NpdGlvbkV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9N
RXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc0RyYWdFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2ZW50
Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc0NsaXBib2FyZEV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9N
RXZlbnQ6OmlzTWVzc2FnZUV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5pc01lc3NhZ2VFdmVudCgpOworfQorCitib29sIFdlYkRP
TUV2ZW50Ojppc1doZWVsRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzV2hlZWxFdmVudCgpOworfQorCitib29sIFdlYkRPTUV2
ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9w
cml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzT3ZlcmZsb3dFdmVudCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNPdmVyZmxvd0V2
ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzUGFnZVRyYW5zaXRpb25FdmVudCgpIGNv
bnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNQ
YWdlVHJhbnNpdGlvbkV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzUG9wU3RhdGVF
dmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+aXNQb3BTdGF0ZUV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzUHJvZ3Jl
c3NFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNQcm9ncmVzc0V2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRl
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgp
OworfQorCitib29sIFdlYkRPTUV2ZW50Ojppc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc1dlYktp
dEFuaW1hdGlvbkV2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzV2ViS2l0VHJhbnNp
dGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5pc1dlYktpdFRyYW5zaXRpb25FdmVudCgpOworfQorCitib29sIFdlYkRPTUV2
ZW50Ojppc0JlZm9yZUxvYWRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNCZWZvcmVMb2FkRXZlbnQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50TGlz
dGVuZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVu
dExpc3RlbmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9N
RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qDQorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICoN
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQorICogbWV0Og0KKyAqDQorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
DQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4NCisgKi8NCisNCisjaW5jbHVkZSAiY29uZmlnLmgiDQorI2luY2x1ZGUgIldlYkRP
TUV2ZW50TGlzdGVuZXIuaCINCisNCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZh
dGUuaCINCisNCituYW1lc3BhY2UgV2ViS2l0IHsNCisNCitXZWJET01FdmVudExpc3RlbmVyOjpX
ZWJET01FdmVudExpc3RlbmVyKCkNCisgICAgOiBtX3ByaXZhdGUobmV3IFdlYkRPTUV2ZW50TGlz
dGVuZXJQcml2YXRlKHRoaXMpKQ0KK3sNCit9DQorDQorV2ViRE9NRXZlbnRMaXN0ZW5lcjo6fldl
YkRPTUV2ZW50TGlzdGVuZXIoKQ0KK3sNCisgICAgbV9wcml2YXRlLT53ZWJET01FdmVudExpc3Rl
bmVyRGVsZXRlZCgpOw0KKyAgICBkZWxldGUgbV9wcml2YXRlOw0KK30NCisNCit2b2lkIFdlYkRP
TUV2ZW50TGlzdGVuZXI6Om5vdGlmeUV2ZW50TGlzdGVuZXJEZWxldGVkKEV2ZW50TGlzdGVuZXJX
cmFwcGVyKiB3cmFwcGVyKQ0KK3sNCisgICAgbV9wcml2YXRlLT5ldmVudExpc3RlbmVyRGVsZXRl
ZCh3cmFwcGVyKTsNCit9DQorDQorRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdlYkRPTUV2ZW50TGlz
dGVuZXI6OmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpDQorew0KKyAgICByZXR1cm4gbV9wcml2
YXRlLT5jcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG5v
ZGUpOw0KK30NCisNCitFdmVudExpc3RlbmVyV3JhcHBlciogV2ViRE9NRXZlbnRMaXN0ZW5lcjo6
Z2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wg
dXNlQ2FwdHVyZSwgTm9kZSogbm9kZSkNCit7DQorICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEV2
ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbm9kZSk7DQorfQ0KKw0K
K30gLy8gbmFtZXNwYWNlIFdlYktpdA0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9N
RXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4NyBAQAorLyoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKg0KKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUNCisgKiBtZXQ6DQorICoNCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
DQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcg0KKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiBkaXN0cmlidXRpb24uDQorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cw0K
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tDQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVA0K
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUg0KKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsDQorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVA0KKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0KKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQNCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UNCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KKyAqLw0KKw0KKyNpbmNsdWRl
ICJjb25maWcuaCINCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCINCisN
CisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldyYXBwZXIuaCINCisjaW5jbHVkZSAiV2ViRE9NRXZl
bnRMaXN0ZW5lci5oIg0KKw0KK25hbWVzcGFjZSBXZWJLaXQgew0KKw0KK1dlYkRPTUV2ZW50TGlz
dGVuZXJQcml2YXRlOjpXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZShXZWJET01FdmVudExpc3Rl
bmVyKiB3ZWJET01FdmVudExpc3RlbmVyKQ0KKyAgICA6IG1fd2ViRE9NRXZlbnRMaXN0ZW5lcih3
ZWJET01FdmVudExpc3RlbmVyKQ0KK3sNCit9DQorDQorV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZh
dGU6On5XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSgpDQorew0KK30NCisNCitFdmVudExpc3Rl
bmVyV3JhcHBlciogV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6OmNyZWF0ZUV2ZW50TGlzdGVu
ZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5v
ZGUqIG5vZGUpDQorew0KKyAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVy
ID0gbmV3IEV2ZW50TGlzdGVuZXJXcmFwcGVyKG1fd2ViRE9NRXZlbnRMaXN0ZW5lcik7DQorICAg
IFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8gbGlzdGVuZXJJbmZvKGV2
ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbGlzdGVuZXJXcmFwcGVyLCBub2RlKTsNCisgICAgbV9saXN0
ZW5lcldyYXBwZXJzLmFwcGVuZChsaXN0ZW5lckluZm8pOw0KKyAgICByZXR1cm4gbGlzdGVuZXJX
cmFwcGVyOw0KK30NCisNCitFdmVudExpc3RlbmVyV3JhcHBlciogV2ViRE9NRXZlbnRMaXN0ZW5l
clByaXZhdGU6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpDQorew0KKyAgICBWZWN0b3I8V2ViRE9N
RXZlbnRMaXN0ZW5lclByaXZhdGU6Okxpc3RlbmVySW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7
DQorICAgIGZvciAoaXRlciA9IG1fbGlzdGVuZXJXcmFwcGVycy5iZWdpbigpOyBpdGVyICE9IG1f
bGlzdGVuZXJXcmFwcGVycy5lbmQoKTsgKytpdGVyKSB7DQorICAgICAgICBpZiAoaXRlci0+bm9k
ZSA9PSBub2RlKQ0KKyAgICAgICAgICByZXR1cm4gaXRlci0+ZXZlbnRMaXN0ZW5lcldyYXBwZXI7
DQorICAgIH0NCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7DQorICAgIHJldHVybiAwOw0KK30N
CisNCit2b2lkIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjp3ZWJET01FdmVudExpc3RlbmVy
RGVsZXRlZCgpDQorew0KKyAgICAvLyBOb3RpZmllcyBhbGwgV2ViRE9NRXZlbnRMaXN0ZW5lcldy
YXBwZXJzIHRoYXQgd2UgYXJlIGdvaW5nIGF3YXkgc28gdGhleSBjYW4NCisgICAgLy8gaW52YWxp
ZGF0ZSB0aGVpciBwb2ludGVyIHRvIHVzLg0KKyAgICBWZWN0b3I8V2ViRE9NRXZlbnRMaXN0ZW5l
clByaXZhdGU6Okxpc3RlbmVySW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7DQorICAgIGZvciAo
aXRlciA9IG1fbGlzdGVuZXJXcmFwcGVycy5iZWdpbigpOyBpdGVyICE9IG1fbGlzdGVuZXJXcmFw
cGVycy5lbmQoKTsgKytpdGVyKQ0KKyAgICAgICAgaXRlci0+ZXZlbnRMaXN0ZW5lcldyYXBwZXIt
PndlYkRPTUV2ZW50TGlzdGVuZXJEZWxldGVkKCk7DQorfQ0KKw0KK3ZvaWQgV2ViRE9NRXZlbnRM
aXN0ZW5lclByaXZhdGU6OmV2ZW50TGlzdGVuZXJEZWxldGVkKEV2ZW50TGlzdGVuZXJXcmFwcGVy
KiBldmVudExpc3RlbmVyKQ0KK3sNCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3Rl
bmVyV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsNCisgICAgICAgIGlmIChtX2xpc3RlbmVyV3JhcHBl
cnNbaV0uZXZlbnRMaXN0ZW5lcldyYXBwZXIgPT0gZXZlbnRMaXN0ZW5lcikgew0KKyAgICAgICAg
ICAgIG1fbGlzdGVuZXJXcmFwcGVycy5yZW1vdmUoaSk7DQorICAgICAgICAgICAgcmV0dXJuOw0K
KyAgICAgICAgfQ0KKyAgICB9DQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOw0KK30NCisNCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQNCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2
ZW50TGlzdGVuZXJQcml2YXRlLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTUgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQor
ICogbWV0Og0KKyAqDQorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXINCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlDQorICogZGlzdHJpYnV0aW9uLg0KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQ0KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1INCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QN
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFDQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKi8NCisNCisjaWZuZGVmIFdlYkRPTUV2
ZW50TGlzdGVuZXJQcml2YXRlX2gNCisjZGVmaW5lIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRl
X2gNCisNCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiDQorDQorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4NCisNCituYW1lc3BhY2UgV2ViQ29yZSB7DQorY2xhc3MgTm9kZTsNCit9DQorDQordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7DQorDQorbmFtZXNwYWNlIFdlYktpdCB7DQorDQorY2xhc3MgRXZl
bnRMaXN0ZW5lcldyYXBwZXI7DQorY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsNCisNCitjbGFz
cyBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSB7DQorcHVibGljOg0KKyAgICBXZWJET01FdmVu
dExpc3RlbmVyUHJpdmF0ZShXZWJET01FdmVudExpc3RlbmVyKiB3ZWJET01FdmVudExpc3RlbmVy
KTsNCisgICAgfldlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKCk7DQorDQorICAgIEV2ZW50TGlz
dGVuZXJXcmFwcGVyKiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcigNCisgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpOw0KKw0K
KyAgICAvLyBHZXRzIHRoZSBMaXN0ZW5lckV2ZW50V3JhcHBlciBmb3IgYSBzcGVjaWZpYyBub2Rl
Lg0KKyAgICAvLyBVc2VkIGJ5IFdlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIoKS4NCisg
ICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKA0KKyAgICAg
ICAgY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgTm9kZSogbm9k
ZSk7DQorDQorICAgIC8vIENhbGxlZCBieSB0aGUgV2ViRE9NRXZlbnRMaXN0ZW5lciB3aGVuIGl0
IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuDQorICAgIHZvaWQgd2ViRE9NRXZlbnRMaXN0ZW5lckRl
bGV0ZWQoKTsNCisNCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBFdmVudExpc3RlbmVyV3JhcHBlciB3
aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuDQorICAgIHZvaWQgZXZlbnRMaXN0ZW5lckRl
bGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGV2ZW50TGlzdGVuZXIpOw0KKw0KKyAgICBzdHJ1
Y3QgTGlzdGVuZXJJbmZvIHsNCisgICAgICAgIExpc3RlbmVySW5mbyhjb25zdCBXZWJTdHJpbmcm
IGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLA0KKyAgICAgICAgICAgICAgICAgICAgIEV2ZW50
TGlzdGVuZXJXcmFwcGVyKiBldmVudExpc3RlbmVyV3JhcHBlciwNCisgICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlKQ0KKyAgICAgICAgICAgIDogZXZlbnRUeXBlKGV2ZW50VHlwZSkNCisg
ICAgICAgICAgICAsIHVzZUNhcHR1cmUodXNlQ2FwdHVyZSkNCisgICAgICAgICAgICAsIGV2ZW50
TGlzdGVuZXJXcmFwcGVyKGV2ZW50TGlzdGVuZXJXcmFwcGVyKQ0KKyAgICAgICAgICAgICwgbm9k
ZShub2RlKQ0KKyAgICAgICAgew0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgV2ViU3RyaW5nIGV2
ZW50VHlwZTsNCisgICAgICAgIGJvb2wgdXNlQ2FwdHVyZTsNCisgICAgICAgIEV2ZW50TGlzdGVu
ZXJXcmFwcGVyKiBldmVudExpc3RlbmVyV3JhcHBlcjsNCisgICAgICAgIE5vZGUqIG5vZGU7DQor
ICAgIH07DQorDQorcHJpdmF0ZToNCisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lciogbV93ZWJET01F
dmVudExpc3RlbmVyOw0KKw0KKyAgICAvLyBXZSBrZWVwIGEgbGlzdCBvZiB0aGUgd3JhcHBlciBm
b3IgdGhlIFdlYktpdCBFdmVudExpc3RlbmVyLCBpdCBpcyBuZWVkZWQNCisgICAgLy8gdG8gaW1w
bGVtZW50IFdlYk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoKS4NCisgICAgVmVjdG9yPExpc3Rl
bmVySW5mbz4gbV9saXN0ZW5lcldyYXBwZXJzOw0KK307DQorDQorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0DQorDQorI2VuZGlmDQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01Nb3VzZUV2
ZW50LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTW91c2VF
dmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU1vdXNl
RXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJET01Nb3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
aW50IFdlYkRPTU1vdXNlRXZlbnQ6OnNjcmVlblgoKSBjb25zdAoreworICAgIHJldHVybiBjb25z
dFVud3JhcDxNb3VzZUV2ZW50PigpLT5zY3JlZW5YKCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2
ZW50OjpzY3JlZW5ZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVu
dD4oKS0+c2NyZWVuWSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6Y2xpZW50WCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmNsaWVudFgoKTsK
K30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OmNsaWVudFkoKSBjb25zdAoreworICAgIHJldHVy
biBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5jbGllbnRZKCk7Cit9CisKK2ludCBXZWJET01N
b3VzZUV2ZW50OjpsYXllclgoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3Vz
ZUV2ZW50PigpLT5sYXllclgoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OmxheWVyWSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmxheWVyWSgp
OworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6b2Zmc2V0WCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPm9mZnNldFgoKTsKK30KKworaW50IFdlYkRP
TU1vdXNlRXZlbnQ6Om9mZnNldFkoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxN
b3VzZUV2ZW50PigpLT5vZmZzZXRZKCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50OjpwYWdl
WCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnBhZ2VY
KCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50OjpwYWdlWSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnBhZ2VZKCk7Cit9CisKK2ludCBXZWJET01N
b3VzZUV2ZW50Ojp4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVu
dD4oKS0+eCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6eSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPnkoKTsKK30KKworaW50IFdlYkRPTU1v
dXNlRXZlbnQ6OmJ1dHRvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNl
RXZlbnQ+KCktPmJ1dHRvbigpOworfQorCitib29sIFdlYkRPTU1vdXNlRXZlbnQ6OmJ1dHRvbkRv
d24oKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5idXR0
b25Eb3duKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRE9NTXV0YXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRPTU11dGF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTU11dGF0aW9u
RXZlbnQuaCIKKworI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJOb2RlIFdlYkRPTU11dGF0aW9u
RXZlbnQ6OnJlbGF0ZWROb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViTm9kZShjb25zdFVu
d3JhcDxNdXRhdGlvbkV2ZW50PigpLT5yZWxhdGVkTm9kZSgpKTsKK30KKworV2ViU3RyaW5nIFdl
YkRPTU11dGF0aW9uRXZlbnQ6OnByZXZWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYlN0
cmluZyhjb25zdFVud3JhcDxNdXRhdGlvbkV2ZW50PigpLT5wcmV2VmFsdWUoKSk7Cit9CisKK1dl
YlN0cmluZyBXZWJET01NdXRhdGlvbkV2ZW50OjpuZXdWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFdlYlN0cmluZyhjb25zdFVud3JhcDxNdXRhdGlvbkV2ZW50PigpLT5uZXdWYWx1ZSgpKTsK
K30KKworV2ViU3RyaW5nIFdlYkRPTU11dGF0aW9uRXZlbnQ6OmF0dHJOYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV2ViU3RyaW5nKGNvbnN0VW53cmFwPE11dGF0aW9uRXZlbnQ+KCktPmF0dHJO
YW1lKCkpOworfQorCitXZWJET01NdXRhdGlvbkV2ZW50OjpBdHRyQ2hhbmdlVHlwZSBXZWJET01N
dXRhdGlvbkV2ZW50OjphdHRyQ2hhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QXR0ckNoYW5nZVR5cGU+KGNvbnN0VW53cmFwPE11dGF0aW9uRXZlbnQ+KCktPmF0dHJDaGFu
Z2UoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJFdmVudExpc3RlbmVyLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDY1NTM2KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcg
KzQ2LDE3IEBAIFdlYkV2ZW50TGlzdGVuZXI6On5XZWJFdmVudExpc3RlbmVyKCkKICAgICBkZWxl
dGUgbV9wcml2YXRlOw0KIH0NCiANCi12b2lkIFdlYkV2ZW50TGlzdGVuZXI6Om5vdGlmeUV2ZW50
TGlzdGVuZXJEZWxldGVkKEV2ZW50TGlzdGVuZXJXcmFwcGVyKiB3cmFwcGVyKQ0KK3ZvaWQgV2Vi
RXZlbnRMaXN0ZW5lcjo6bm90aWZ5RXZlbnRMaXN0ZW5lckRlbGV0ZWQoRGVwcmVjYXRlZEV2ZW50
TGlzdGVuZXJXcmFwcGVyKiB3cmFwcGVyKQ0KIHsNCiAgICAgbV9wcml2YXRlLT5ldmVudExpc3Rl
bmVyRGVsZXRlZCh3cmFwcGVyKTsNCiB9DQogDQotRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdlYkV2
ZW50TGlzdGVuZXI6OmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYg
ZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpDQorRGVwcmVjYXRlZEV2ZW50
TGlzdGVuZXJXcmFwcGVyKiBXZWJFdmVudExpc3RlbmVyOjpjcmVhdGVFdmVudExpc3RlbmVyV3Jh
cHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBu
b2RlKQ0KIHsNCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBw
ZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBub2RlKTsNCiB9DQogDQotRXZlbnRMaXN0ZW5lcldy
YXBwZXIqIFdlYkV2ZW50TGlzdGVuZXI6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdl
YlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpDQorRGVwcmVj
YXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBXZWJFdmVudExpc3RlbmVyOjpnZXRFdmVudExpc3Rl
bmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBO
b2RlKiBub2RlKQ0KIHsNCiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RXZlbnRMaXN0ZW5lcldy
YXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBub2RlKTsNCiB9DQpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJFdmVudExpc3RlbmVyUHJpdmF0ZS5jcHANCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcAkocmV2aXNpb24g
NjU1MzYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkV2ZW50TGlzdGVuZXJQcml2YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTUgKzQ1LDE1IEBAIFdlYkV2ZW50TGlzdGVuZXJQcml2
YXRlOjp+V2ViRXZlbnRMaXN0ZW4KIHsNCiB9DQogDQotRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdl
YkV2ZW50TGlzdGVuZXJQcml2YXRlOjpjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBX
ZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQ0KK0RlcHJl
Y2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciogV2ViRXZlbnRMaXN0ZW5lclByaXZhdGU6OmNyZWF0
ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVz
ZUNhcHR1cmUsIE5vZGUqIG5vZGUpDQogew0KLSAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlz
dGVuZXJXcmFwcGVyID0gbmV3IEV2ZW50TGlzdGVuZXJXcmFwcGVyKG1fd2ViRXZlbnRMaXN0ZW5l
cik7DQorICAgIERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVy
ID0gbmV3IERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlcihtX3dlYkV2ZW50TGlzdGVuZXIp
Ow0KICAgICBXZWJFdmVudExpc3RlbmVyUHJpdmF0ZTo6TGlzdGVuZXJJbmZvIGxpc3RlbmVySW5m
byhldmVudFR5cGUsIHVzZUNhcHR1cmUsIGxpc3RlbmVyV3JhcHBlciwgbm9kZSk7DQogICAgIG1f
bGlzdGVuZXJXcmFwcGVycy5hcHBlbmQobGlzdGVuZXJJbmZvKTsNCiAgICAgcmV0dXJuIGxpc3Rl
bmVyV3JhcHBlcjsNCiB9DQogDQotRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdlYkV2ZW50TGlzdGVu
ZXJQcml2YXRlOjpnZXRFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50
VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQ0KK0RlcHJlY2F0ZWRFdmVudExpc3Rl
bmVyV3JhcHBlciogV2ViRXZlbnRMaXN0ZW5lclByaXZhdGU6OmdldEV2ZW50TGlzdGVuZXJXcmFw
cGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5v
ZGUpDQogew0KICAgICBWZWN0b3I8V2ViRXZlbnRMaXN0ZW5lclByaXZhdGU6Okxpc3RlbmVySW5m
bz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7DQogICAgIGZvciAoaXRlciA9IG1fbGlzdGVuZXJXcmFw
cGVycy5iZWdpbigpOyBpdGVyICE9IG1fbGlzdGVuZXJXcmFwcGVycy5lbmQoKTsgKytpdGVyKSB7
DQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIFdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOjp3ZWJFdmVu
dExpCiAgICAgICAgIGl0ZXItPmV2ZW50TGlzdGVuZXJXcmFwcGVyLT53ZWJFdmVudExpc3RlbmVy
RGVsZXRlZCgpOw0KIH0NCiANCi12b2lkIFdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOjpldmVudExp
c3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlciogZXZlbnRMaXN0ZW5lcikNCit2b2lk
IFdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOjpldmVudExpc3RlbmVyRGVsZXRlZChEZXByZWNhdGVk
RXZlbnRMaXN0ZW5lcldyYXBwZXIqIGV2ZW50TGlzdGVuZXIpDQogew0KICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fbGlzdGVuZXJXcmFwcGVycy5zaXplKCk7ICsraSkgew0KICAgICAgICAg
aWYgKG1fbGlzdGVuZXJXcmFwcGVyc1tpXS5ldmVudExpc3RlbmVyV3JhcHBlciA9PSBldmVudExp
c3RlbmVyKSB7DQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFdmVudExpc3RlbmVyUHJp
dmF0ZS5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJFdmVudExpc3Rl
bmVyUHJpdmF0ZS5oCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RXZlbnRMaXN0ZW5lclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIA0KIG5hbWVzcGFjZSBXZWJLaXQgew0KIA0KLWNsYXNz
IEV2ZW50TGlzdGVuZXJXcmFwcGVyOw0KK2NsYXNzIERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3Jh
cHBlcjsNCiBjbGFzcyBXZWJFdmVudExpc3RlbmVyOw0KIA0KIGNsYXNzIFdlYkV2ZW50TGlzdGVu
ZXJQcml2YXRlIHsNCkBAIC01MSwyMyArNTEsMjMgQEAgcHVibGljOgogICAgIFdlYkV2ZW50TGlz
dGVuZXJQcml2YXRlKFdlYkV2ZW50TGlzdGVuZXIqIHdlYkV2ZW50TGlzdGVuZXIpOw0KICAgICB+
V2ViRXZlbnRMaXN0ZW5lclByaXZhdGUoKTsNCiANCi0gICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIq
IGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKA0KKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5l
cldyYXBwZXIqIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKA0KICAgICAgICAgY29uc3QgV2Vi
U3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgTm9kZSogbm9kZSk7DQogDQotICAg
IC8vIEdldHMgdGhlIExpc3RlbmVyRXZlbnRXcmFwcGVyIGZvciBhIHNwZWNpZmljIG5vZGUuDQor
ICAgIC8vIEdldHMgdGhlIERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciBmb3IgYSBzcGVj
aWZpYyBub2RlLg0KICAgICAvLyBVc2VkIGJ5IFdlYk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
KS4NCi0gICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKA0K
KyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlzdGVuZXJXcmFw
cGVyKA0KICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVy
ZSwgTm9kZSogbm9kZSk7DQogDQogICAgIC8vIENhbGxlZCBieSB0aGUgV2ViRXZlbnRMaXN0ZW5l
ciB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuDQogICAgIHZvaWQgd2ViRXZlbnRMaXN0
ZW5lckRlbGV0ZWQoKTsNCiANCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBFdmVudExpc3RlbmVyV3Jh
cHBlciB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuDQotICAgIHZvaWQgZXZlbnRMaXN0
ZW5lckRlbGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGV2ZW50TGlzdGVuZXIpOw0KKyAgICAv
LyBDYWxsZWQgYnkgdGhlIERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciB3aGVuIGl0IGlz
IGFib3V0IHRvIGJlIGRlbGV0ZWQuDQorICAgIHZvaWQgZXZlbnRMaXN0ZW5lckRlbGV0ZWQoRGVw
cmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBldmVudExpc3RlbmVyKTsNCiANCiAgICAgc3Ry
dWN0IExpc3RlbmVySW5mbyB7DQogICAgICAgICBMaXN0ZW5lckluZm8oY29uc3QgV2ViU3RyaW5n
JiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwNCi0gICAgICAgICAgICAgICAgICAgICBFdmVu
dExpc3RlbmVyV3JhcHBlciogZXZlbnRMaXN0ZW5lcldyYXBwZXIsDQorICAgICAgICAgICAgICAg
ICAgICAgRGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBldmVudExpc3RlbmVyV3JhcHBl
ciwNCiAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlKQ0KICAgICAgICAgICAgIDogZXZl
bnRUeXBlKGV2ZW50VHlwZSkNCiAgICAgICAgICAgICAsIHVzZUNhcHR1cmUodXNlQ2FwdHVyZSkN
CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKIA0KICAgICAgICAgV2ViU3RyaW5nIGV2ZW50VHlw
ZTsNCiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZTsNCi0gICAgICAgIEV2ZW50TGlzdGVuZXJXcmFw
cGVyKiBldmVudExpc3RlbmVyV3JhcHBlcjsNCisgICAgICAgIERlcHJlY2F0ZWRFdmVudExpc3Rl
bmVyV3JhcHBlciogZXZlbnRMaXN0ZW5lcldyYXBwZXI7DQogICAgICAgICBOb2RlKiBub2RlOw0K
ICAgICB9Ow0KIA0KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwCShyZXZpc2lvbiA2NTUz
NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogCiAjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lcldyYXBwZXIuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudC5oIgorI2luY2x1ZGUgIldl
YkRPTUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IldlYkV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRMaXN0ZW5lci5oIgpAQCAtMTQ5LDcgKzE1
MSw3IEBAIGJvb2wgV2ViTm9kZTo6aXNFbGVtZW50Tm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNFbGVtZW50Tm9kZSgpOwogfQogCi12b2lkIFdlYk5vZGU6OmFkZEV2ZW50TGlz
dGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lkIFdlYk5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBi
b29sIHVzZUNhcHR1cmUpCiB7CiAgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3Jh
cHBlciA9CiAgICAgICAgIGxpc3RlbmVyLT5jcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihldmVu
dFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5nZXQoKSk7CkBAIC0xNTksMTIgKzE2MSwzMCBA
QCB2b2lkIFdlYk5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgV2ViCiAgICAgbV9wcml2YXRl
LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgYWRvcHRSZWYobGlzdGVuZXJXcmFwcGVyKSwg
dXNlQ2FwdHVyZSk7CiB9CiAKLXZvaWQgV2ViTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wg
dXNlQ2FwdHVyZSkKK3ZvaWQgV2ViTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJT
dHJpbmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSkKIHsKICAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0K
ICAgICAgICAgbGlzdGVuZXItPmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNl
Q2FwdHVyZSwgbV9wcml2YXRlLmdldCgpKTsKICAgICBtX3ByaXZhdGUtPnJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lcldyYXBwZXIsIHVzZUNhcHR1cmUpOwogICAgIC8vIGxp
c3RlbmVyV3JhcHBlciBpcyBub3cgZGVsZXRlZC4KK30KKwordm9pZCBXZWJOb2RlOjphZGRFdmVu
dExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJFdmVudExpc3RlbmVyKiBs
aXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIERlcHJlY2F0ZWRFdmVudExpc3RlbmVy
V3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0KKyAgICAgICAgbGlzdGVuZXItPmNyZWF0ZUV2ZW50
TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbV9wcml2YXRlLmdldCgpKTsK
KyAgICAvLyBUaGUgbGlzdGVuZXJXcmFwcGVyIGlzIG9ubHkgcmVmZXJlbmNlZCBieSB0aGUgYWN0
dWFsIE5vZGUuICBPbmNlIGl0IGdvZXMKKyAgICAvLyBhd2F5LCB0aGUgd3JhcHBlciBub3RpZmll
cyB0aGUgV2ViRXZlbnRMaXN0ZW5lciBzbyBpdCBjYW4gY2xlYXIgaXRzCisgICAgLy8gcG9pbnRl
ciB0byBpdC4KKyAgICBtX3ByaXZhdGUtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBhZG9w
dFJlZihsaXN0ZW5lcldyYXBwZXIpLCB1c2VDYXB0dXJlKTsKK30KKwordm9pZCBXZWJOb2RlOjpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoreworICAgIERlcHJlY2F0ZWRFdmVu
dExpc3RlbmVyV3JhcHBlciogbGlzdGVuZXJXcmFwcGVyID0KKyAgICAgICAgbGlzdGVuZXItPmdl
dEV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwgbV9wcml2YXRlLmdl
dCgpKTsKKyAgICBtX3ByaXZhdGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0
ZW5lcldyYXBwZXIsIHVzZUNhcHR1cmUpOworICAgIC8vIGxpc3RlbmVyV3JhcHBlciBpcyBub3cg
ZGVsZXRlZC4KIH0KIAogdm9pZCBXZWJOb2RlOjpzaW11bGF0ZUNsaWNrKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64638</attachid>
            <date>2010-08-17 15:03:14 -0700</date>
            <delta_ts>2010-08-18 15:06:30 -0700</delta_ts>
            <desc>Fixing EOL (sigh...)</desc>
            <filename>mouse_event.patch</filename>
            <type>text/plain</type>
            <size>73783</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMC0wOC0xMyAgSmF5
IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1pbmcgdGhlIFdlYkV2ZW50IHRvIFdlYkRP
TUV2ZW50IGFuZCBhZGRpbmcgYSBuZXcgZXZlbnQgY2xhc3MKKyAgICAgICAgZm9yIG1vdXNlIGV2
ZW50cyBzbyB0aGF0IHRoZSBldmVudCBsaXN0ZW5lciBBUEkgY2FuIGJlIHVzZWQgdG8gbGlzdGVu
CisgICAgICAgIHRvIHRoZW0uICBUaGUgcmVuYW1pbmcgaXMgbmVlZGVkIGFzIHRoZXJlIGFscmVh
ZHkgaXMgYSBXZWJNb3VzZUV2ZW50IGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NTMKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYkRPTUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJE
T01FdmVudExpc3RlbmVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01Nb3VzZUV2
ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50Lmg6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJOb2RlLmg6CisgICAgICAgICogc3JjL0V2ZW50TGlz
dGVuZXJXcmFwcGVyLmNwcDoKKyAgICAgICAgKiBzcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaDoK
KyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
RE9NRXZlbnRMaXN0ZW5lci5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExp
c3RlbmVyUHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01FdmVudExpc3Rl
bmVyUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViRE9NTW91c2VFdmVudC5jcHA6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYk5vZGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJOb2RlOjppc0Vs
ZW1lbnROb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTm9kZTo6YWRkRE9NRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJLaXQ6OldlYk5vZGU6OnJlbW92ZURPTUV2ZW50TGlzdGVuZXIpOgor
CiAyMDEwLTA4LTE3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjU1MTYuCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDEwIEBACiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ1N0cmluZy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkN1cnNv
ckluZm8uaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJET01FdmVudC5oJywKKyAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkRPTUV2ZW50TGlzdGVuZXIuaCcsCisgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViRE9NTXV0YXRpb25FdmVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkRPTVN0
cmluZ0xpc3QuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJEYXRhLmgnLAogICAgICAg
ICAgICAgICAgICdwdWJsaWMvV2ViRGF0YWJhc2UuaCcsCkBAIC0zODAsNiArMzg0LDEyIEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDU3RyaW5nLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDdXJzb3JJbmZvLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJET01F
dmVudC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lci5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmgnLAorICAg
ICAgICAgICAgICAgICdzcmMvV2ViRE9NTW91c2VFdmVudC5jcHAnLAorICAgICAgICAgICAgICAg
ICdzcmMvV2ViRE9NTXV0YXRpb25FdmVudC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RE9NU3RyaW5nTGlzdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YWJhc2UuY3BwJywKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRE9NRXZlbnQuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRE9NRXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRE9NRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkRPTUV2ZW50X2gKKyNkZWZpbmUgV2ViRE9NRXZlbnRfaAorCisjaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCisjaW5jbHVkZSAiV2ViTm9kZS5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEV2ZW50OyB9CisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQ
dHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NRXZlbnQg
eworcHVibGljOgorICAgIGVudW0gUGhhc2VUeXBlIHsKKyAgICAgICAgQ2FwdHVyaW5nUGhhc2Ug
ICAgID0gMSwKKyAgICAgICAgQXRUYXJnZXQgICAgICAgICAgID0gMiwKKyAgICAgICAgQnViYmxp
bmdQaGFzZSAgICAgID0gMworICAgIH07CisKKyAgICBXZWJET01FdmVudCgpIDogbV9wcml2YXRl
KDApIHsgfQorICAgIFdlYkRPTUV2ZW50KGNvbnN0IFdlYkRPTUV2ZW50JiBlKSA6IG1fcHJpdmF0
ZSgwKSB7IGFzc2lnbihlKTsgfQorICAgIFdlYkRPTUV2ZW50JiBvcGVyYXRvcj0oY29uc3QgV2Vi
RE9NRXZlbnQmIGUpCisgICAgeworICAgICAgICBhc3NpZ24oZSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRf
QVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRPTUV2ZW50Jik7CisKKyAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5n
IHR5cGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYk5vZGUgdGFyZ2V0KCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJOb2RlIGN1cnJlbnRUYXJnZXQoKSBjb25zdDsKKworICAgIFdFQktJ
VF9BUEkgUGhhc2VUeXBlIGV2ZW50UGhhc2UoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wg
YnViYmxlcygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBjYW5jZWxhYmxlKCkgY29uc3Q7
CisKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNVSUV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQ
SSBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc011dGF0
aW9uRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNLZXlib2FyZEV2ZW50KCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzVGV4dEV2ZW50KCkgY29uc3Q7CisgICAgV0VC
S0lUX0FQSSBib29sIGlzQ29tcG9zaXRpb25FdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
Ym9vbCBpc0RyYWdFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc0NsaXBib2Fy
ZEV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzTWVzc2FnZUV2ZW50KCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OworICAgIFdFQktJ
VF9BUEkgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lU
X0FQSSBib29sIGlzT3ZlcmZsb3dFdmVudCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBp
c1BhZ2VUcmFuc2l0aW9uRXZlbnQoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNQb3BT
dGF0ZUV2ZW50KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzUHJvZ3Jlc3NFdmVudCgp
IGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgYm9vbCBpc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkg
Y29uc3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkgY29u
c3Q7CisgICAgV0VCS0lUX0FQSSBib29sIGlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3Q7CisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJET01FdmVudChjb25zdCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6RXZlbnQ+Jik7CisjZW5kaWYKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgdG8oKQorICAgIHsKKyAgICAgICAgVCByZXM7CisgICAgICAgIHJlcy5XZWJET01FdmVu
dDo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBUIHRvQ29uc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAg
VCByZXM7CisgICAgICAgIHJlcy5XZWJET01FdmVudDo6YXNzaWduKCp0aGlzKTsKKyAgICAgICAg
cmV0dXJuIHJlczsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB0eXBlZGVmIFdlYkNvcmU6OkV2
ZW50IFdlYkRPTUV2ZW50UHJpdmF0ZTsKKyAgICB2b2lkIGFzc2lnbihXZWJET01FdmVudFByaXZh
dGUqKTsKKyAgICBXZWJET01FdmVudFByaXZhdGUqIG1fcHJpdmF0ZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQqIHVud3JhcCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VCo+KG1fcHJpdmF0ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3QgVCogY29uc3RVbndyYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFQqPihtX3ByaXZhdGUpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NRXZlbnRM
aXN0ZW5lci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJET01F
dmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkRPTUV2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViRE9NRXZlbnRMaXN0ZW5lcl9oCisjZGVmaW5lIFdlYkRPTUV2ZW50TGlzdGVuZXJfaAorCisj
aW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVz
cGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBFdmVudExpc3RlbmVyV3JhcHBlcjsKK2NsYXNzIFdlYkRPTUV2ZW50OworY2xh
c3MgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU7CitjbGFzcyBXZWJOb2RlOworY2xhc3MgV2Vi
U3RyaW5nOworCitjbGFzcyBXZWJET01FdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBXRUJL
SVRfQVBJIFdlYkRPTUV2ZW50TGlzdGVuZXIoKTsKKyAgICBXRUJLSVRfQVBJIHZpcnR1YWwgfldl
YkRPTUV2ZW50TGlzdGVuZXIoKTsKKworICAgIC8vIENhbGxlZCB3aGVuIGFuIGV2ZW50IGlzIHJl
Y2VpdmVkLgorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChjb25zdCBXZWJET01FdmVudCYp
ID0gMDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIHZvaWQgbm90aWZ5RXZlbnRM
aXN0ZW5lckRlbGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXIqKTsKKyAgICBFdmVudExpc3RlbmVy
V3JhcHBlciogY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CisgICAgRXZlbnRM
aXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYg
ZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUqIG1fcHJpdmF0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRE9NTW91c2VFdmVudC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJET01Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkRPTU1vdXNlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaWZuZGVmIFdlYkRPTU1vdXNlRXZlbnRfaAorI2RlZmluZSBXZWJET01Nb3VzZUV2ZW50
X2gKKworI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgRXZlbnQ7IH0KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NTW91c2VFdmVudCA6IHB1YmxpYyBXZWJET01FdmVu
dCB7CitwdWJsaWM6CisgICAgV0VCS0lUX0FQSSBpbnQgc2NyZWVuWCgpIGNvbnN0OworICAgIFdF
QktJVF9BUEkgaW50IHNjcmVlblkoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCBjbGllbnRY
KCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgY2xpZW50WSgpIGNvbnN0OworICAgIFdFQktJ
VF9BUEkgaW50IGxheWVyWCgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IGxheWVyWSgpIGNv
bnN0OworICAgIFdFQktJVF9BUEkgaW50IG9mZnNldFgoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJ
IGludCBvZmZzZXRZKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBpbnQgcGFnZVgoKSBjb25zdDsK
KyAgICBXRUJLSVRfQVBJIGludCBwYWdlWSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgaW50IHgo
KSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGludCB5KCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJ
IGludCBidXR0b24oKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIGJvb2wgYnV0dG9uRG93bigpIGNv
bnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJET01NdXRhdGlvbkV2ZW50LmgNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRPTU11dGF0aW9uRXZlbnQuaAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRE9NTXV0YXRpb25FdmVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgV2ViRE9NTXV0YXRpb25FdmVudF9oCisjZGVmaW5l
IFdlYkRPTU11dGF0aW9uRXZlbnRfaAorCisjaW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKworI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBFdmVudDsg
fQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJET01NdXRhdGlvbkV2
ZW50IDogcHVibGljIFdlYkRPTUV2ZW50IHsKK3B1YmxpYzoKKyAgICBlbnVtIEF0dHJDaGFuZ2VU
eXBlIHsKKyAgICAgICAgTW9kaWZpY2F0aW9uICAgID0gMSwKKyAgICAgICAgQWRkaXRpb24gICAg
ICAgID0gMiwKKyAgICAgICAgUmVtb3ZhbCAgICAgICAgID0gMworICAgIH07CisKKyAgICBXRUJL
SVRfQVBJIFdlYk5vZGUgcmVsYXRlZE5vZGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYlN0
cmluZyBwcmV2VmFsdWUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBuZXdWYWx1
ZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGF0dHJOYW1lKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBBdHRyQ2hhbmdlVHlwZSBhdHRyQ2hhbmdlKCkgY29uc3Q7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkV2ZW50TGlzdGVuZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViRXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICsz
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsgfQogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotY2xhc3MgRXZlbnRMaXN0ZW5lcldyYXBwZXI7CitjbGFzcyBEZXByZWNhdGVkRXZl
bnRMaXN0ZW5lcldyYXBwZXI7CiBjbGFzcyBXZWJFdmVudDsKIGNsYXNzIFdlYkV2ZW50TGlzdGVu
ZXJQcml2YXRlOwogY2xhc3MgV2ViTm9kZTsKQEAgLTU0LDkgKzU0LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChjb25zdCBXZWJFdmVudCYpID0gMDsKIAogI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgotICAgIHZvaWQgbm90aWZ5RXZlbnRMaXN0ZW5lckRlbGV0ZWQo
RXZlbnRMaXN0ZW5lcldyYXBwZXIqKTsKLSAgICBFdmVudExpc3RlbmVyV3JhcHBlciogY3JlYXRl
RXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNl
Q2FwdHVyZSwgV2ViQ29yZTo6Tm9kZSogbm9kZSk7Ci0gICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIq
IGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29s
IHVzZUNhcHR1cmUsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpOworICAgIHZvaWQgbm90aWZ5RXZlbnRM
aXN0ZW5lckRlbGV0ZWQoRGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKik7CisgICAgRGVw
cmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihj
b25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBXZWJDb3JlOjpOb2Rl
KiBub2RlKTsKKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGdldEV2ZW50TGlz
dGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUs
IFdlYkNvcmU6Ok5vZGUqIG5vZGUpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYk5vZGUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViTm9kZS5oCShyZXZpc2lvbiA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7IGNsYXNzIE5vZGU7IH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJET01FdmVudExpc3RlbmVyOworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU7CiBj
bGFzcyBXZWJEb2N1bWVudDsKIGNsYXNzIFdlYkV2ZW50TGlzdGVuZXI7CiBjbGFzcyBXZWJFdmVu
dExpc3RlbmVyUHJpdmF0ZTsKQEAgLTk3LDYgKzk5LDggQEAgcHVibGljOgogICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIGNyZWF0ZU1hcmt1cCgpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgYm9vbCBp
c1RleHROb2RlKCkgY29uc3Q7CiAgICAgV0VCS0lUX0FQSSBib29sIGlzRWxlbWVudE5vZGUoKSBj
b25zdDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJp
bmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2Fw
dHVyZSk7CisgICAgV0VCS0lUX0FQSSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2Vi
U3RyaW5nJiBldmVudFR5cGUsIFdlYkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpOwogICAgIFdFQktJVF9BUEkgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IFdl
YlN0cmluZyYgZXZlbnRUeXBlLCBXZWJFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VD
YXB0dXJlKTsKICAgICBXRUJLSVRfQVBJIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBX
ZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHNpbXVsYXRlQ2xpY2soKTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHAJKHJldmlzaW9u
IDY1NTM2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzEsMTA0IEBACi0vKg0KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSAqDQotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
DQotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQ0KLSAqIG1ldDoNCi0gKg0KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLg0KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUNCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyDQotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KLSAqIGRpc3RyaWJ1
dGlvbi4NCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzDQotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KLSAqDQotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0K
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwNCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
DQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVA0KLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQ0KLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQotICov
DQotDQotI2luY2x1ZGUgImNvbmZpZy5oIg0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyV3JhcHBl
ci5oIg0KLQ0KLSNpbmNsdWRlICJFdmVudC5oIg0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgi
DQotDQotI2luY2x1ZGUgIldlYkV2ZW50LmgiDQotI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVuZXIu
aCINCi0NCi1uYW1lc3BhY2UgV2ViS2l0IHsNCi0NCi1FdmVudExpc3RlbmVyV3JhcHBlcjo6RXZl
bnRMaXN0ZW5lcldyYXBwZXIoV2ViRXZlbnRMaXN0ZW5lciogd2ViRXZlbnRMaXN0ZW5lcikNCi0g
ICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lclR5cGUpDQot
ICAgICwgbV93ZWJFdmVudExpc3RlbmVyKHdlYkV2ZW50TGlzdGVuZXIpDQotew0KLX0NCi0NCi1F
dmVudExpc3RlbmVyV3JhcHBlcjo6fkV2ZW50TGlzdGVuZXJXcmFwcGVyKCkNCi17DQotICAgIGlm
IChtX3dlYkV2ZW50TGlzdGVuZXIpDQotICAgICAgICBtX3dlYkV2ZW50TGlzdGVuZXItPm5vdGlm
eUV2ZW50TGlzdGVuZXJEZWxldGVkKHRoaXMpOw0KLX0NCi0NCi1ib29sIEV2ZW50TGlzdGVuZXJX
cmFwcGVyOjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQ0KLXsNCi0g
ICAgcmV0dXJuIHRoaXMgPT0gJmxpc3RlbmVyOw0KLX0NCi0NCi12b2lkIEV2ZW50TGlzdGVuZXJX
cmFwcGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVu
dCogZXZlbnQpDQotew0KLSAgICBpZiAoIW1fd2ViRXZlbnRMaXN0ZW5lcikNCi0gICAgICAgIHJl
dHVybjsNCi0gICAgV2ViRXZlbnQgd2ViRXZlbnQoZXZlbnQpOw0KLSAgICBtX3dlYkV2ZW50TGlz
dGVuZXItPmhhbmRsZUV2ZW50KHdlYkV2ZW50KTsNCi19DQotDQotdm9pZCBFdmVudExpc3RlbmVy
V3JhcHBlcjo6d2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKQ0KLXsNCi0gICAgbV93ZWJFdmVudExp
c3RlbmVyID0gMDsNCi19DQotDQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0DQorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyV3JhcHBlci5oIgorCisjaW5jbHVkZSAiRXZl
bnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisKKyNpbmNsdWRlICJXZWJET01FdmVu
dC5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJXZWJFdmVu
dC5oIgorI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVuZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK0V2ZW50TGlzdGVuZXJXcmFwcGVyOjpFdmVudExpc3RlbmVyV3JhcHBlcihXZWJET01FdmVu
dExpc3RlbmVyKiB3ZWJET01FdmVudExpc3RlbmVyKQorICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlKQorICAgICwgbV93ZWJET01FdmVudExpc3Rl
bmVyKHdlYkRPTUV2ZW50TGlzdGVuZXIpCit7Cit9CisKK0V2ZW50TGlzdGVuZXJXcmFwcGVyOjp+
RXZlbnRMaXN0ZW5lcldyYXBwZXIoKQoreworICAgIGlmIChtX3dlYkRPTUV2ZW50TGlzdGVuZXIp
CisgICAgICAgIG1fd2ViRE9NRXZlbnRMaXN0ZW5lci0+bm90aWZ5RXZlbnRMaXN0ZW5lckRlbGV0
ZWQodGhpcyk7Cit9CisKK2Jvb2wgRXZlbnRMaXN0ZW5lcldyYXBwZXI6Om9wZXJhdG9yPT0oY29u
c3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIpCit7CisgICAgcmV0dXJuIHRoaXMgPT0gJmxpc3Rl
bmVyOworfQorCit2b2lkIEV2ZW50TGlzdGVuZXJXcmFwcGVyOjpoYW5kbGVFdmVudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFdmVudCogZXZlbnQpCit7CisgICAgaWYgKCFtX3dl
YkRPTUV2ZW50TGlzdGVuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJET01FdmVudCB3ZWJE
T01FdmVudChldmVudCk7CisgICAgbV93ZWJET01FdmVudExpc3RlbmVyLT5oYW5kbGVFdmVudCh3
ZWJET01FdmVudCk7Cit9CisKK3ZvaWQgRXZlbnRMaXN0ZW5lcldyYXBwZXI6OndlYkRPTUV2ZW50
TGlzdGVuZXJEZWxldGVkKCkKK3sKKyAgICBtX3dlYkRPTUV2ZW50TGlzdGVuZXIgPSAwOworfQor
CitEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXI6OkRlcHJlY2F0ZWRFdmVudExpc3RlbmVy
V3JhcHBlcihXZWJFdmVudExpc3RlbmVyKiB3ZWJFdmVudExpc3RlbmVyKQorICAgIDogRXZlbnRM
aXN0ZW5lcihFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXJUeXBlKQorICAgICwgbV93ZWJF
dmVudExpc3RlbmVyKHdlYkV2ZW50TGlzdGVuZXIpCit7Cit9CisKK0RlcHJlY2F0ZWRFdmVudExp
c3RlbmVyV3JhcHBlcjo6fkRlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlcigpCit7CisgICAg
aWYgKG1fd2ViRXZlbnRMaXN0ZW5lcikKKyAgICAgICAgbV93ZWJFdmVudExpc3RlbmVyLT5ub3Rp
ZnlFdmVudExpc3RlbmVyRGVsZXRlZCh0aGlzKTsKK30KKworYm9vbCBEZXByZWNhdGVkRXZlbnRM
aXN0ZW5lcldyYXBwZXI6Om9wZXJhdG9yPT0oY29uc3QgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIp
Cit7CisgICAgcmV0dXJuIHRoaXMgPT0gJmxpc3RlbmVyOworfQorCit2b2lkIERlcHJlY2F0ZWRF
dmVudExpc3RlbmVyV3JhcHBlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXZlbnQqIGV2ZW50KQoreworICAgIGlmICghbV93ZWJFdmVudExpc3RlbmVyKQor
ICAgICAgICByZXR1cm47CisgICAgV2ViRXZlbnQgd2ViRXZlbnQoZXZlbnQpOworICAgIG1fd2Vi
RXZlbnRMaXN0ZW5lci0+aGFuZGxlRXZlbnQod2ViRXZlbnQpOworfQorCit2b2lkIERlcHJlY2F0
ZWRFdmVudExpc3RlbmVyV3JhcHBlcjo6d2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKQoreworICAg
IG1fd2ViRXZlbnRMaXN0ZW5lciA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9FdmVudExpc3RlbmVyV3JhcHBlci5oCShyZXZpc2lv
biA2NTUzNikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvRXZlbnRMaXN0ZW5lcldyYXBwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw4MCBAQAotLyoNCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0gKg0KLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0K
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUNCi0gKiBtZXQ6DQotICoNCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4NCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlDQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcg0KLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCi0gKiBkaXN0cmlidXRp
b24uDQotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cw0KLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0gKg0KLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMNCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUg0KLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUDQotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsDQotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVA0KLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLA0KLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQ0K
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQNCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UNCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KLSAqLw0K
LQ0KLSNpZm5kZWYgRXZlbnRMaXN0ZW5lcldyYXBwZXJfaA0KLSNkZWZpbmUgRXZlbnRMaXN0ZW5l
cldyYXBwZXJfaA0KLQ0KLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiDQotDQotbmFtZXNwYWNl
IFdlYkNvcmUgew0KLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7DQotfQ0KLQ0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOw0KLQ0KLW5hbWVzcGFjZSBXZWJLaXQgew0KLQ0KLWNsYXNzIFdl
YkV2ZW50TGlzdGVuZXI7DQotDQotY2xhc3MgRXZlbnRMaXN0ZW5lcldyYXBwZXIgOiBwdWJsaWMg
RXZlbnRMaXN0ZW5lciB7DQotcHVibGljOg0KLSAgICBFdmVudExpc3RlbmVyV3JhcHBlcihXZWJF
dmVudExpc3RlbmVyKik7DQotICAgIH5FdmVudExpc3RlbmVyV3JhcHBlcigpOw0KLQ0KLSAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJik7DQotICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXZlbnQqKTsNCi0N
Ci0gICAgdm9pZCB3ZWJFdmVudExpc3RlbmVyRGVsZXRlZCgpOw0KLQ0KLXByaXZhdGU6DQotICAg
IFdlYkV2ZW50TGlzdGVuZXIqIG1fd2ViRXZlbnRMaXN0ZW5lcjsNCi19Ow0KLQ0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdA0KLQ0KLSNlbmRpZg0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50TGlzdGVuZXJXcmFwcGVyX2gK
KyNkZWZpbmUgRXZlbnRMaXN0ZW5lcldyYXBwZXJfaAorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5l
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CitjbGFzcyBXZWJFdmVudExpc3RlbmVyOworCisv
LyBGSVhNRTogUmVtb3ZlIHRoZSBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIgY2xhc3Mg
YmVsb3cgb25jZSBDaHJvbWl1bQorLy8gc3dpdGNoZWQgdG8gdXNpbmcgV2ViRE9NRXZlbnQuCitj
bGFzcyBFdmVudExpc3RlbmVyV3JhcHBlciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1Ymxp
YzoKKyAgICBFdmVudExpc3RlbmVyV3JhcHBlcihXZWJET01FdmVudExpc3RlbmVyKik7CisgICAg
fkV2ZW50TGlzdGVuZXJXcmFwcGVyKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBFdmVudExpc3RlbmVyJik7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOworCisgICAgdm9pZCB3ZWJET01FdmVudExpc3Rl
bmVyRGVsZXRlZCgpOworCitwcml2YXRlOgorICAgIFdlYkRPTUV2ZW50TGlzdGVuZXIqIG1fd2Vi
RE9NRXZlbnRMaXN0ZW5lcjsKK307CisKK2NsYXNzIERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3Jh
cHBlciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBEZXByZWNhdGVkRXZl
bnRMaXN0ZW5lcldyYXBwZXIoV2ViRXZlbnRMaXN0ZW5lciopOworICAgIH5EZXByZWNhdGVkRXZl
bnRMaXN0ZW5lcldyYXBwZXIoKTsKKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEV2ZW50TGlzdGVuZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEV2ZW50Kik7CisKKyAgICB2b2lkIHdlYkV2ZW50TGlzdGVuZXJEZWxl
dGVkKCk7CisKK3ByaXZhdGU6CisgICAgV2ViRXZlbnRMaXN0ZW5lciogbV93ZWJFdmVudExpc3Rl
bmVyOworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRE9NRXZlbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJET01FdmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjE5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRPTUV2ZW50LmgiCisKKyNpbmNsdWRlICJF
dmVudC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRE9NRXZlbnRQcml2YXRlIDogcHVibGlj
IFdlYkNvcmU6OkV2ZW50IHsKK307CisKK3ZvaWQgV2ViRE9NRXZlbnQ6OnJlc2V0KCkKK3sKKyAg
ICBhc3NpZ24oMCk7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnQ6OmFzc2lnbihjb25zdCBXZWJET01F
dmVudCYgb3RoZXIpCit7CisgICAgV2ViRE9NRXZlbnRQcml2YXRlKiBwID0gY29uc3RfY2FzdDxX
ZWJET01FdmVudFByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAg
ICBwLT5yZWYoKTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnQ6OmFzc2ln
bihXZWJET01FdmVudFByaXZhdGUqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZv
ciB1cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRl
LT5kZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHA7Cit9CisKK1dlYkRPTUV2ZW50OjpXZWJET01F
dmVudChjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+JiBldmVudCkKKyAgICA6
IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJET01FdmVudFByaXZhdGUqPihldmVudC5yZWxlYXNl
UmVmKCkpKQoreworfQorCitXZWJTdHJpbmcgV2ViRE9NRXZlbnQ6OnR5cGUoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnR5cGUoKTsKK30K
KworV2ViTm9kZSBXZWJET01FdmVudDo6dGFyZ2V0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9w
cml2YXRlKTsKKyAgICByZXR1cm4gV2ViTm9kZShtX3ByaXZhdGUtPnRhcmdldCgpLT50b05vZGUo
KSk7Cit9CisKK1dlYk5vZGUgV2ViRE9NRXZlbnQ6OmN1cnJlbnRUYXJnZXQoKSBjb25zdAorewor
ICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBXZWJOb2RlKG1fcHJpdmF0ZS0+Y3Vy
cmVudFRhcmdldCgpLT50b05vZGUoKSk7Cit9CisKK1dlYkRPTUV2ZW50OjpQaGFzZVR5cGUgV2Vi
RE9NRXZlbnQ6OmV2ZW50UGhhc2UoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJET01FdmVudDo6UGhhc2VUeXBlPihtX3ByaXZhdGUt
PmV2ZW50UGhhc2UoKSk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmJ1YmJsZXMoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmJ1YmJsZXMo
KTsKK30KKworYm9vbCBXZWJET01FdmVudDo6Y2FuY2VsYWJsZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2FuY2VsYWJsZSgpOworfQor
Citib29sIFdlYkRPTUV2ZW50Ojppc1VJRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3By
aXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzVUlFdmVudCgpOworfQorCitib29sIFdl
YkRPTUV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUp
OworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzTW91c2VFdmVudCgpOworfQorCitib29sIFdlYkRP
TUV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUp
OworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzTXV0YXRpb25FdmVudCgpOworfQorCitib29sIFdl
YkRPTUV2ZW50Ojppc0tleWJvYXJkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZh
dGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzS2V5Ym9hcmRFdmVudCgpOworfQorCitib29s
IFdlYkRPTUV2ZW50Ojppc1RleHRFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0
ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNUZXh0RXZlbnQoKTsKK30KKworYm9vbCBXZWJE
T01FdmVudDo6aXNDb21wb3NpdGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2
YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbXBvc2l0aW9uRXZlbnQoKTsKK30KKwor
Ym9vbCBXZWJET01FdmVudDo6aXNEcmFnRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3By
aXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRHJhZ0V2ZW50KCk7Cit9CisKK2Jvb2wg
V2ViRE9NRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3By
aXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQ2xpcGJvYXJkRXZlbnQoKTsKK30KKwor
Ym9vbCBXZWJET01FdmVudDo6aXNNZXNzYWdlRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVCht
X3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzTWVzc2FnZUV2ZW50KCk7Cit9CisK
K2Jvb2wgV2ViRE9NRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
cHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNXaGVlbEV2ZW50KCk7Cit9CisKK2Jv
b2wgV2ViRE9NRXZlbnQ6OmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBjb25zdAoreworICAg
IEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNPdmVyZmxvd0V2ZW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5p
c092ZXJmbG93RXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNQYWdlVHJhbnNpdGlv
bkV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5pc1BhZ2VUcmFuc2l0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6
aXNQb3BTdGF0ZUV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pc1BvcFN0YXRlRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVu
dDo6aXNQcm9ncmVzc0V2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc1Byb2dyZXNzRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01F
dmVudDo6aXNYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50KCk7Cit9CisKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzV2ViS2l0QW5pbWF0aW9uRXZl
bnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKTsKK30KKworYm9vbCBXZWJET01FdmVudDo6aXNX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCk7Cit9CisKK2Jv
b2wgV2ViRE9NRXZlbnQ6OmlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0JlZm9yZUxvYWRFdmVudCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RE9NRXZlbnRMaXN0ZW5lci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRPTUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJET01FdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgiCisK
KyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViRE9NRXZlbnRMaXN0ZW5lcjo6V2ViRE9NRXZlbnRMaXN0ZW5lcigpCisgICAg
OiBtX3ByaXZhdGUobmV3IFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKHRoaXMpKQoreworfQor
CitXZWJET01FdmVudExpc3RlbmVyOjp+V2ViRE9NRXZlbnRMaXN0ZW5lcigpCit7CisgICAgbV9w
cml2YXRlLT53ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOworICAgIGRlbGV0ZSBtX3ByaXZh
dGU7Cit9CisKK3ZvaWQgV2ViRE9NRXZlbnRMaXN0ZW5lcjo6bm90aWZ5RXZlbnRMaXN0ZW5lckRl
bGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXIqIHdyYXBwZXIpCit7CisgICAgbV9wcml2YXRlLT5l
dmVudExpc3RlbmVyRGVsZXRlZCh3cmFwcGVyKTsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBwZXIq
IFdlYkRPTUV2ZW50TGlzdGVuZXI6OmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdl
YlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1
c2VDYXB0dXJlLCBub2RlKTsKK30KKworRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdlYkRPTUV2ZW50
TGlzdGVuZXI6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+Z2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBub2RlKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
RE9NRXZlbnRMaXN0ZW5lclByaXZhdGUuaCIKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFw
cGVyLmgiCisjaW5jbHVkZSAiV2ViRE9NRXZlbnRMaXN0ZW5lci5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6OldlYkRPTUV2ZW50TGlzdGVuZXJQ
cml2YXRlKFdlYkRPTUV2ZW50TGlzdGVuZXIqIHdlYkRPTUV2ZW50TGlzdGVuZXIpCisgICAgOiBt
X3dlYkRPTUV2ZW50TGlzdGVuZXIod2ViRE9NRXZlbnRMaXN0ZW5lcikKK3sKK30KKworV2ViRE9N
RXZlbnRMaXN0ZW5lclByaXZhdGU6On5XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZSgpCit7Cit9
CisKK0V2ZW50TGlzdGVuZXJXcmFwcGVyKiBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6Y3Jl
YXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIGJvb2wg
dXNlQ2FwdHVyZSwgTm9kZSogbm9kZSkKK3sKKyAgICBFdmVudExpc3RlbmVyV3JhcHBlciogbGlz
dGVuZXJXcmFwcGVyID0gbmV3IEV2ZW50TGlzdGVuZXJXcmFwcGVyKG1fd2ViRE9NRXZlbnRMaXN0
ZW5lcik7CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6Okxpc3RlbmVySW5mbyBsaXN0
ZW5lckluZm8oZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBsaXN0ZW5lcldyYXBwZXIsIG5vZGUpOwor
ICAgIG1fbGlzdGVuZXJXcmFwcGVycy5hcHBlbmQobGlzdGVuZXJJbmZvKTsKKyAgICByZXR1cm4g
bGlzdGVuZXJXcmFwcGVyOworfQorCitFdmVudExpc3RlbmVyV3JhcHBlciogV2ViRE9NRXZlbnRM
aXN0ZW5lclByaXZhdGU6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYg
ZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgVmVjdG9yPFdl
YkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25zdF9pdGVyYXRvciBp
dGVyOworICAgIGZvciAoaXRlciA9IG1fbGlzdGVuZXJXcmFwcGVycy5iZWdpbigpOyBpdGVyICE9
IG1fbGlzdGVuZXJXcmFwcGVycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5u
b2RlID09IG5vZGUpCisgICAgICAgICAgcmV0dXJuIGl0ZXItPmV2ZW50TGlzdGVuZXJXcmFwcGVy
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBXZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZTo6d2ViRE9NRXZlbnRMaXN0ZW5lckRlbGV0
ZWQoKQoreworICAgIC8vIE5vdGlmaWVzIGFsbCBXZWJET01FdmVudExpc3RlbmVyV3JhcHBlcnMg
dGhhdCB3ZSBhcmUgZ29pbmcgYXdheSBzbyB0aGV5IGNhbgorICAgIC8vIGludmFsaWRhdGUgdGhl
aXIgcG9pbnRlciB0byB1cy4KKyAgICBWZWN0b3I8V2ViRE9NRXZlbnRMaXN0ZW5lclByaXZhdGU6
Okxpc3RlbmVySW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXI7CisgICAgZm9yIChpdGVyID0gbV9s
aXN0ZW5lcldyYXBwZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9saXN0ZW5lcldyYXBwZXJzLmVuZCgp
OyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmV2ZW50TGlzdGVuZXJXcmFwcGVyLT53ZWJET01FdmVu
dExpc3RlbmVyRGVsZXRlZCgpOworfQorCit2b2lkIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRl
OjpldmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlciogZXZlbnRMaXN0ZW5l
cikKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdGVuZXJXcmFwcGVycy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9saXN0ZW5lcldyYXBwZXJzW2ldLmV2ZW50TGlzdGVu
ZXJXcmFwcGVyID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIG1fbGlzdGVuZXJXcmFw
cGVycy5yZW1vdmUoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0ZS5oDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3RlbmVyUHJpdmF0
ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01FdmVudExpc3Rl
bmVyUHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJET01F
dmVudExpc3RlbmVyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlOworfQorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEV2ZW50TGlzdGVuZXJXcmFw
cGVyOworY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsKKworY2xhc3MgV2ViRE9NRXZlbnRMaXN0
ZW5lclByaXZhdGUgeworcHVibGljOgorICAgIFdlYkRPTUV2ZW50TGlzdGVuZXJQcml2YXRlKFdl
YkRPTUV2ZW50TGlzdGVuZXIqIHdlYkRPTUV2ZW50TGlzdGVuZXIpOworICAgIH5XZWJET01FdmVu
dExpc3RlbmVyUHJpdmF0ZSgpOworCisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGNyZWF0ZUV2
ZW50TGlzdGVuZXJXcmFwcGVyKAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwg
Ym9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKTsKKworICAgIC8vIEdldHMgdGhlIExpc3RlbmVy
RXZlbnRXcmFwcGVyIGZvciBhIHNwZWNpZmljIG5vZGUuCisgICAgLy8gVXNlZCBieSBXZWJOb2Rl
OjpyZW1vdmVET01FdmVudExpc3RlbmVyKCkuCisgICAgRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGdl
dEV2ZW50TGlzdGVuZXJXcmFwcGVyKAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlw
ZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKTsKKworICAgIC8vIENhbGxlZCBieSB0aGUg
V2ViRE9NRXZlbnRMaXN0ZW5lciB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuCisgICAg
dm9pZCB3ZWJET01FdmVudExpc3RlbmVyRGVsZXRlZCgpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRo
ZSBFdmVudExpc3RlbmVyV3JhcHBlciB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQuCisg
ICAgdm9pZCBldmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlciogZXZlbnRM
aXN0ZW5lcik7CisKKyAgICBzdHJ1Y3QgTGlzdGVuZXJJbmZvIHsKKyAgICAgICAgTGlzdGVuZXJJ
bmZvKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsCisgICAgICAg
ICAgICAgICAgICAgICBFdmVudExpc3RlbmVyV3JhcHBlciogZXZlbnRMaXN0ZW5lcldyYXBwZXIs
CisgICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlKQorICAgICAgICAgICAgOiBldmVudFR5
cGUoZXZlbnRUeXBlKQorICAgICAgICAgICAgLCB1c2VDYXB0dXJlKHVzZUNhcHR1cmUpCisgICAg
ICAgICAgICAsIGV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50TGlzdGVuZXJXcmFwcGVyKQorICAg
ICAgICAgICAgLCBub2RlKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFdl
YlN0cmluZyBldmVudFR5cGU7CisgICAgICAgIGJvb2wgdXNlQ2FwdHVyZTsKKyAgICAgICAgRXZl
bnRMaXN0ZW5lcldyYXBwZXIqIGV2ZW50TGlzdGVuZXJXcmFwcGVyOworICAgICAgICBOb2RlKiBu
b2RlOworICAgIH07CisKK3ByaXZhdGU6CisgICAgV2ViRE9NRXZlbnRMaXN0ZW5lciogbV93ZWJE
T01FdmVudExpc3RlbmVyOworCisgICAgLy8gV2Uga2VlcCBhIGxpc3Qgb2YgdGhlIHdyYXBwZXIg
Zm9yIHRoZSBXZWJLaXQgRXZlbnRMaXN0ZW5lciwgaXQgaXMgbmVlZGVkCisgICAgLy8gdG8gaW1w
bGVtZW50IFdlYk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoKS4KKyAgICBWZWN0b3I8TGlzdGVu
ZXJJbmZvPiBtX2xpc3RlbmVyV3JhcHBlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRPTU1vdXNlRXZlbnQuY3Bw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJET01Nb3VzZUV2ZW50LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NTW91c2VFdmVudC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldlYkRPTU1vdXNlRXZlbnQuaCIKKworI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbnQgV2Vi
RE9NTW91c2VFdmVudDo6c2NyZWVuWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFw
PE1vdXNlRXZlbnQ+KCktPnNjcmVlblgoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OnNj
cmVlblkoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT5z
Y3JlZW5ZKCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50OjpjbGllbnRYKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+Y2xpZW50WCgpOworfQorCitp
bnQgV2ViRE9NTW91c2VFdmVudDo6Y2xpZW50WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
VW53cmFwPE1vdXNlRXZlbnQ+KCktPmNsaWVudFkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZl
bnQ6OmxheWVyWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+
KCktPmxheWVyWCgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVudDo6bGF5ZXJZKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+bGF5ZXJZKCk7Cit9CisK
K2ludCBXZWJET01Nb3VzZUV2ZW50OjpvZmZzZXRYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29u
c3RVbndyYXA8TW91c2VFdmVudD4oKS0+b2Zmc2V0WCgpOworfQorCitpbnQgV2ViRE9NTW91c2VF
dmVudDo6b2Zmc2V0WSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZl
bnQ+KCktPm9mZnNldFkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OnBhZ2VYKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+cGFnZVgoKTsKK30K
KworaW50IFdlYkRPTU1vdXNlRXZlbnQ6OnBhZ2VZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29u
c3RVbndyYXA8TW91c2VFdmVudD4oKS0+cGFnZVkoKTsKK30KKworaW50IFdlYkRPTU1vdXNlRXZl
bnQ6OngoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdFVud3JhcDxNb3VzZUV2ZW50PigpLT54
KCk7Cit9CisKK2ludCBXZWJET01Nb3VzZUV2ZW50Ojp5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29uc3RVbndyYXA8TW91c2VFdmVudD4oKS0+eSgpOworfQorCitpbnQgV2ViRE9NTW91c2VFdmVu
dDo6YnV0dG9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RVbndyYXA8TW91c2VFdmVudD4o
KS0+YnV0dG9uKCk7Cit9CisKK2Jvb2wgV2ViRE9NTW91c2VFdmVudDo6YnV0dG9uRG93bigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbnN0VW53cmFwPE1vdXNlRXZlbnQ+KCktPmJ1dHRvbkRvd24o
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRPTU11dGF0aW9uRXZlbnQuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJET01NdXRhdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRE9NTXV0YXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NTXV0YXRpb25FdmVudC5o
IgorCisjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYk5vZGUgV2ViRE9NTXV0YXRpb25FdmVudDo6
cmVsYXRlZE5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBXZWJOb2RlKGNvbnN0VW53cmFwPE11
dGF0aW9uRXZlbnQ+KCktPnJlbGF0ZWROb2RlKCkpOworfQorCitXZWJTdHJpbmcgV2ViRE9NTXV0
YXRpb25FdmVudDo6cHJldlZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViU3RyaW5nKGNv
bnN0VW53cmFwPE11dGF0aW9uRXZlbnQ+KCktPnByZXZWYWx1ZSgpKTsKK30KKworV2ViU3RyaW5n
IFdlYkRPTU11dGF0aW9uRXZlbnQ6Om5ld1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2Vi
U3RyaW5nKGNvbnN0VW53cmFwPE11dGF0aW9uRXZlbnQ+KCktPm5ld1ZhbHVlKCkpOworfQorCitX
ZWJTdHJpbmcgV2ViRE9NTXV0YXRpb25FdmVudDo6YXR0ck5hbWUoKSBjb25zdAoreworICAgIHJl
dHVybiBXZWJTdHJpbmcoY29uc3RVbndyYXA8TXV0YXRpb25FdmVudD4oKS0+YXR0ck5hbWUoKSk7
Cit9CisKK1dlYkRPTU11dGF0aW9uRXZlbnQ6OkF0dHJDaGFuZ2VUeXBlIFdlYkRPTU11dGF0aW9u
RXZlbnQ6OmF0dHJDaGFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdHRy
Q2hhbmdlVHlwZT4oY29uc3RVbndyYXA8TXV0YXRpb25FdmVudD4oKS0+YXR0ckNoYW5nZSgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkV2ZW50TGlzdGVuZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNjU1MzYpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY0ICsxLDY0IEBA
Ci0vKg0KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLg0KLSAqDQotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KLSAqIG1ldDoNCi0g
Kg0KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0DQotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
DQotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQ0KLSAqIGRpc3RyaWJ1dGlvbi4NCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
Lg0KLSAqDQotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUw0KLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SDQot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQNCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UDQotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsDQotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0KLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQ0KLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuDQotICovDQotDQotI2luY2x1ZGUgImNvbmZpZy5oIg0KLSNpbmNs
dWRlICJXZWJFdmVudExpc3RlbmVyLmgiDQotDQotI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVuZXJQ
cml2YXRlLmgiDQotDQotbmFtZXNwYWNlIFdlYktpdCB7DQotDQotV2ViRXZlbnRMaXN0ZW5lcjo6
V2ViRXZlbnRMaXN0ZW5lcigpDQotICAgIDogbV9wcml2YXRlKG5ldyBXZWJFdmVudExpc3RlbmVy
UHJpdmF0ZSh0aGlzKSkNCi17DQotfQ0KLQ0KLVdlYkV2ZW50TGlzdGVuZXI6On5XZWJFdmVudExp
c3RlbmVyKCkNCi17DQotICAgIG1fcHJpdmF0ZS0+d2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKTsN
Ci0gICAgZGVsZXRlIG1fcHJpdmF0ZTsNCi19DQotDQotdm9pZCBXZWJFdmVudExpc3RlbmVyOjpu
b3RpZnlFdmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlciogd3JhcHBlcikN
Ci17DQotICAgIG1fcHJpdmF0ZS0+ZXZlbnRMaXN0ZW5lckRlbGV0ZWQod3JhcHBlcik7DQotfQ0K
LQ0KLUV2ZW50TGlzdGVuZXJXcmFwcGVyKiBXZWJFdmVudExpc3RlbmVyOjpjcmVhdGVFdmVudExp
c3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJl
LCBOb2RlKiBub2RlKQ0KLXsNCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlRXZlbnRMaXN0
ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBub2RlKTsNCi19DQotDQotRXZlbnRM
aXN0ZW5lcldyYXBwZXIqIFdlYkV2ZW50TGlzdGVuZXI6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVy
KGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUp
DQotew0KLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRFdmVudExpc3RlbmVyV3JhcHBlcihldmVu
dFR5cGUsIHVzZUNhcHR1cmUsIG5vZGUpOw0KLX0NCi0NCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQN
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVuZXIuaCIKKworI2lu
Y2x1ZGUgIldlYkV2ZW50TGlzdGVuZXJQcml2YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJFdmVudExpc3RlbmVyOjpXZWJFdmVudExpc3RlbmVyKCkKKyAgICA6IG1fcHJpdmF0ZShu
ZXcgV2ViRXZlbnRMaXN0ZW5lclByaXZhdGUodGhpcykpCit7Cit9CisKK1dlYkV2ZW50TGlzdGVu
ZXI6On5XZWJFdmVudExpc3RlbmVyKCkKK3sKKyAgICBtX3ByaXZhdGUtPndlYkV2ZW50TGlzdGVu
ZXJEZWxldGVkKCk7CisgICAgZGVsZXRlIG1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJFdmVudExp
c3RlbmVyOjpub3RpZnlFdmVudExpc3RlbmVyRGVsZXRlZChEZXByZWNhdGVkRXZlbnRMaXN0ZW5l
cldyYXBwZXIqIHdyYXBwZXIpCit7CisgICAgbV9wcml2YXRlLT5ldmVudExpc3RlbmVyRGVsZXRl
ZCh3cmFwcGVyKTsKK30KKworRGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBXZWJFdmVu
dExpc3RlbmVyOjpjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2
ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50VHlwZSwgdXNlQ2FwdHVyZSwg
bm9kZSk7Cit9CisKK0RlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciogV2ViRXZlbnRMaXN0
ZW5lcjo6Z2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUs
IGJvb2wgdXNlQ2FwdHVyZSwgTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG5vZGUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViRXZl
bnRMaXN0ZW5lclByaXZhdGUuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJFdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAJKHJldmlzaW9uIDY1NTM2KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJFdmVudExpc3RlbmVyUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsODcgKzEsODcgQEAKLS8qDQotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotICoNCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlDQotICogbWV0Og0KLSAqDQotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0K
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXINCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQotICogZGlzdHJpYnV0aW9uLg0KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQ0KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uDQotICoNCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1INCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
DQotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFDQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCi0gKi8NCi0NCi0jaW5jbHVkZSAi
Y29uZmlnLmgiDQotI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVuZXJQcml2YXRlLmgiDQotDQotI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFwcGVyLmgiDQotI2luY2x1ZGUgIldlYkV2ZW50TGlzdGVu
ZXIuaCINCi0NCi1uYW1lc3BhY2UgV2ViS2l0IHsNCi0NCi1XZWJFdmVudExpc3RlbmVyUHJpdmF0
ZTo6V2ViRXZlbnRMaXN0ZW5lclByaXZhdGUoV2ViRXZlbnRMaXN0ZW5lciogd2ViRXZlbnRMaXN0
ZW5lcikNCi0gICAgOiBtX3dlYkV2ZW50TGlzdGVuZXIod2ViRXZlbnRMaXN0ZW5lcikNCi17DQot
fQ0KLQ0KLVdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOjp+V2ViRXZlbnRMaXN0ZW5lclByaXZhdGUo
KQ0KLXsNCi19DQotDQotRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdlYkV2ZW50TGlzdGVuZXJQcml2
YXRlOjpjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlw
ZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQ0KLXsNCi0gICAgRXZlbnRMaXN0ZW5lcldy
YXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9IG5ldyBFdmVudExpc3RlbmVyV3JhcHBlcihtX3dlYkV2
ZW50TGlzdGVuZXIpOw0KLSAgICBXZWJFdmVudExpc3RlbmVyUHJpdmF0ZTo6TGlzdGVuZXJJbmZv
IGxpc3RlbmVySW5mbyhldmVudFR5cGUsIHVzZUNhcHR1cmUsIGxpc3RlbmVyV3JhcHBlciwgbm9k
ZSk7DQotICAgIG1fbGlzdGVuZXJXcmFwcGVycy5hcHBlbmQobGlzdGVuZXJJbmZvKTsNCi0gICAg
cmV0dXJuIGxpc3RlbmVyV3JhcHBlcjsNCi19DQotDQotRXZlbnRMaXN0ZW5lcldyYXBwZXIqIFdl
YkV2ZW50TGlzdGVuZXJQcml2YXRlOjpnZXRFdmVudExpc3RlbmVyV3JhcHBlcihjb25zdCBXZWJT
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJlLCBOb2RlKiBub2RlKQ0KLXsNCi0gICAg
VmVjdG9yPFdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25zdF9pdGVy
YXRvciBpdGVyOw0KLSAgICBmb3IgKGl0ZXIgPSBtX2xpc3RlbmVyV3JhcHBlcnMuYmVnaW4oKTsg
aXRlciAhPSBtX2xpc3RlbmVyV3JhcHBlcnMuZW5kKCk7ICsraXRlcikgew0KLSAgICAgICAgaWYg
KGl0ZXItPm5vZGUgPT0gbm9kZSkNCi0gICAgICAgICAgcmV0dXJuIGl0ZXItPmV2ZW50TGlzdGVu
ZXJXcmFwcGVyOw0KLSAgICB9DQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOw0KLSAgICByZXR1
cm4gMDsNCi19DQotDQotdm9pZCBXZWJFdmVudExpc3RlbmVyUHJpdmF0ZTo6d2ViRXZlbnRMaXN0
ZW5lckRlbGV0ZWQoKQ0KLXsNCi0gICAgLy8gTm90aWZpZXMgYWxsIFdlYkV2ZW50TGlzdGVuZXJX
cmFwcGVycyB0aGF0IHdlIGFyZSBnb2luZyBhd2F5IHNvIHRoZXkgY2FuDQotICAgIC8vIGludmFs
aWRhdGUgdGhlaXIgcG9pbnRlciB0byB1cy4NCi0gICAgVmVjdG9yPFdlYkV2ZW50TGlzdGVuZXJQ
cml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25zdF9pdGVyYXRvciBpdGVyOw0KLSAgICBmb3IgKGl0
ZXIgPSBtX2xpc3RlbmVyV3JhcHBlcnMuYmVnaW4oKTsgaXRlciAhPSBtX2xpc3RlbmVyV3JhcHBl
cnMuZW5kKCk7ICsraXRlcikNCi0gICAgICAgIGl0ZXItPmV2ZW50TGlzdGVuZXJXcmFwcGVyLT53
ZWJFdmVudExpc3RlbmVyRGVsZXRlZCgpOw0KLX0NCi0NCi12b2lkIFdlYkV2ZW50TGlzdGVuZXJQ
cml2YXRlOjpldmVudExpc3RlbmVyRGVsZXRlZChFdmVudExpc3RlbmVyV3JhcHBlciogZXZlbnRM
aXN0ZW5lcikNCi17DQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0ZW5lcldyYXBw
ZXJzLnNpemUoKTsgKytpKSB7DQotICAgICAgICBpZiAobV9saXN0ZW5lcldyYXBwZXJzW2ldLmV2
ZW50TGlzdGVuZXJXcmFwcGVyID09IGV2ZW50TGlzdGVuZXIpIHsNCi0gICAgICAgICAgICBtX2xp
c3RlbmVyV3JhcHBlcnMucmVtb3ZlKGkpOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAg
IH0NCi0gICAgfQ0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsNCi19DQotDQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0DQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJFdmVudExpc3Rl
bmVyUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lcldyYXBwZXIuaCIKKyNpbmNs
dWRlICJXZWJFdmVudExpc3RlbmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJFdmVu
dExpc3RlbmVyUHJpdmF0ZTo6V2ViRXZlbnRMaXN0ZW5lclByaXZhdGUoV2ViRXZlbnRMaXN0ZW5l
ciogd2ViRXZlbnRMaXN0ZW5lcikKKyAgICA6IG1fd2ViRXZlbnRMaXN0ZW5lcih3ZWJFdmVudExp
c3RlbmVyKQoreworfQorCitXZWJFdmVudExpc3RlbmVyUHJpdmF0ZTo6fldlYkV2ZW50TGlzdGVu
ZXJQcml2YXRlKCkKK3sKK30KKworRGVwcmVjYXRlZEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBXZWJF
dmVudExpc3RlbmVyUHJpdmF0ZTo6Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoY29uc3QgV2Vi
U3RyaW5nJiBldmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgTm9kZSogbm9kZSkKK3sKKyAgICBE
ZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9IG5ldyBEZXBy
ZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIobV93ZWJFdmVudExpc3RlbmVyKTsKKyAgICBXZWJF
dmVudExpc3RlbmVyUHJpdmF0ZTo6TGlzdGVuZXJJbmZvIGxpc3RlbmVySW5mbyhldmVudFR5cGUs
IHVzZUNhcHR1cmUsIGxpc3RlbmVyV3JhcHBlciwgbm9kZSk7CisgICAgbV9saXN0ZW5lcldyYXBw
ZXJzLmFwcGVuZChsaXN0ZW5lckluZm8pOworICAgIHJldHVybiBsaXN0ZW5lcldyYXBwZXI7Cit9
CisKK0RlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciogV2ViRXZlbnRMaXN0ZW5lclByaXZh
dGU6OmdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBi
b29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpCit7CisgICAgVmVjdG9yPFdlYkV2ZW50TGlzdGVu
ZXJQcml2YXRlOjpMaXN0ZW5lckluZm8+Ojpjb25zdF9pdGVyYXRvciBpdGVyOworICAgIGZvciAo
aXRlciA9IG1fbGlzdGVuZXJXcmFwcGVycy5iZWdpbigpOyBpdGVyICE9IG1fbGlzdGVuZXJXcmFw
cGVycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5ub2RlID09IG5vZGUpCisg
ICAgICAgICAgcmV0dXJuIGl0ZXItPmV2ZW50TGlzdGVuZXJXcmFwcGVyOworICAgIH0KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJFdmVudExp
c3RlbmVyUHJpdmF0ZTo6d2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKQoreworICAgIC8vIE5vdGlm
aWVzIGFsbCBXZWJFdmVudExpc3RlbmVyV3JhcHBlcnMgdGhhdCB3ZSBhcmUgZ29pbmcgYXdheSBz
byB0aGV5IGNhbgorICAgIC8vIGludmFsaWRhdGUgdGhlaXIgcG9pbnRlciB0byB1cy4KKyAgICBW
ZWN0b3I8V2ViRXZlbnRMaXN0ZW5lclByaXZhdGU6Okxpc3RlbmVySW5mbz46OmNvbnN0X2l0ZXJh
dG9yIGl0ZXI7CisgICAgZm9yIChpdGVyID0gbV9saXN0ZW5lcldyYXBwZXJzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9saXN0ZW5lcldyYXBwZXJzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmV2
ZW50TGlzdGVuZXJXcmFwcGVyLT53ZWJFdmVudExpc3RlbmVyRGVsZXRlZCgpOworfQorCit2b2lk
IFdlYkV2ZW50TGlzdGVuZXJQcml2YXRlOjpldmVudExpc3RlbmVyRGVsZXRlZChEZXByZWNhdGVk
RXZlbnRMaXN0ZW5lcldyYXBwZXIqIGV2ZW50TGlzdGVuZXIpCit7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2xpc3RlbmVyV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fbGlzdGVuZXJXcmFwcGVyc1tpXS5ldmVudExpc3RlbmVyV3JhcHBlciA9PSBldmVudExpc3Rl
bmVyKSB7CisgICAgICAgICAgICBtX2xpc3RlbmVyV3JhcHBlcnMucmVtb3ZlKGkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRXZlbnRMaXN0ZW5lclByaXZhdGUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRXZlbnRMaXN0ZW5lclByaXZhdGUuaAkocmV2aXNpb24gNjU1MzYpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkV2ZW50TGlzdGVuZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOTUgKzEsOTUgQEAKLS8qDQotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotICoNCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlDQotICogbWV0Og0KLSAqDQotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0K
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXINCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQotICogZGlzdHJpYnV0aW9uLg0KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQ0KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uDQotICoNCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1INCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVA0KLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
DQotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFDQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCi0gKi8NCi0NCi0jaWZuZGVmIFdl
YkV2ZW50TGlzdGVuZXJQcml2YXRlX2gNCi0jZGVmaW5lIFdlYkV2ZW50TGlzdGVuZXJQcml2YXRl
X2gNCi0NCi0jaW5jbHVkZSAiV2ViU3RyaW5nLmgiDQotDQotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4NCi0NCi1uYW1lc3BhY2UgV2ViQ29yZSB7DQotY2xhc3MgTm9kZTsNCi19DQotDQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7DQotDQotbmFtZXNwYWNlIFdlYktpdCB7DQotDQotY2xhc3MgRXZl
bnRMaXN0ZW5lcldyYXBwZXI7DQotY2xhc3MgV2ViRXZlbnRMaXN0ZW5lcjsNCi0NCi1jbGFzcyBX
ZWJFdmVudExpc3RlbmVyUHJpdmF0ZSB7DQotcHVibGljOg0KLSAgICBXZWJFdmVudExpc3RlbmVy
UHJpdmF0ZShXZWJFdmVudExpc3RlbmVyKiB3ZWJFdmVudExpc3RlbmVyKTsNCi0gICAgfldlYkV2
ZW50TGlzdGVuZXJQcml2YXRlKCk7DQotDQotICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBjcmVh
dGVFdmVudExpc3RlbmVyV3JhcHBlcigNCi0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpOw0KLQ0KLSAgICAvLyBHZXRzIHRoZSBM
aXN0ZW5lckV2ZW50V3JhcHBlciBmb3IgYSBzcGVjaWZpYyBub2RlLg0KLSAgICAvLyBVc2VkIGJ5
IFdlYk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoKS4NCi0gICAgRXZlbnRMaXN0ZW5lcldyYXBw
ZXIqIGdldEV2ZW50TGlzdGVuZXJXcmFwcGVyKA0KLSAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBl
dmVudFR5cGUsIGJvb2wgdXNlQ2FwdHVyZSwgTm9kZSogbm9kZSk7DQotDQotICAgIC8vIENhbGxl
ZCBieSB0aGUgV2ViRXZlbnRMaXN0ZW5lciB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0ZWQu
DQotICAgIHZvaWQgd2ViRXZlbnRMaXN0ZW5lckRlbGV0ZWQoKTsNCi0NCi0gICAgLy8gQ2FsbGVk
IGJ5IHRoZSBFdmVudExpc3RlbmVyV3JhcHBlciB3aGVuIGl0IGlzIGFib3V0IHRvIGJlIGRlbGV0
ZWQuDQotICAgIHZvaWQgZXZlbnRMaXN0ZW5lckRlbGV0ZWQoRXZlbnRMaXN0ZW5lcldyYXBwZXIq
IGV2ZW50TGlzdGVuZXIpOw0KLQ0KLSAgICBzdHJ1Y3QgTGlzdGVuZXJJbmZvIHsNCi0gICAgICAg
IExpc3RlbmVySW5mbyhjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1c2VDYXB0dXJl
LA0KLSAgICAgICAgICAgICAgICAgICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBldmVudExpc3Rl
bmVyV3JhcHBlciwNCi0gICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlKQ0KLSAgICAgICAg
ICAgIDogZXZlbnRUeXBlKGV2ZW50VHlwZSkNCi0gICAgICAgICAgICAsIHVzZUNhcHR1cmUodXNl
Q2FwdHVyZSkNCi0gICAgICAgICAgICAsIGV2ZW50TGlzdGVuZXJXcmFwcGVyKGV2ZW50TGlzdGVu
ZXJXcmFwcGVyKQ0KLSAgICAgICAgICAgICwgbm9kZShub2RlKQ0KLSAgICAgICAgew0KLSAgICAg
ICAgfQ0KLQ0KLSAgICAgICAgV2ViU3RyaW5nIGV2ZW50VHlwZTsNCi0gICAgICAgIGJvb2wgdXNl
Q2FwdHVyZTsNCi0gICAgICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBldmVudExpc3RlbmVyV3Jh
cHBlcjsNCi0gICAgICAgIE5vZGUqIG5vZGU7DQotICAgIH07DQotDQotcHJpdmF0ZToNCi0gICAg
V2ViRXZlbnRMaXN0ZW5lciogbV93ZWJFdmVudExpc3RlbmVyOw0KLQ0KLSAgICAvLyBXZSBrZWVw
IGEgbGlzdCBvZiB0aGUgd3JhcHBlciBmb3IgdGhlIFdlYktpdCBFdmVudExpc3RlbmVyLCBpdCBp
cyBuZWVkZWQNCi0gICAgLy8gdG8gaW1wbGVtZW50IFdlYk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVu
ZXIoKS4NCi0gICAgVmVjdG9yPExpc3RlbmVySW5mbz4gbV9saXN0ZW5lcldyYXBwZXJzOw0KLX07
DQotDQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0DQotDQotI2VuZGlmDQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRXZlbnRM
aXN0ZW5lclByaXZhdGVfaAorI2RlZmluZSBXZWJFdmVudExpc3RlbmVyUHJpdmF0ZV9oCisKKyNp
bmNsdWRlICJXZWJTdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgTm9kZTsKK30KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldy
YXBwZXI7CitjbGFzcyBXZWJFdmVudExpc3RlbmVyOworCitjbGFzcyBXZWJFdmVudExpc3RlbmVy
UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViRXZlbnRMaXN0ZW5lclByaXZhdGUoV2ViRXZlbnRM
aXN0ZW5lciogd2ViRXZlbnRMaXN0ZW5lcik7CisgICAgfldlYkV2ZW50TGlzdGVuZXJQcml2YXRl
KCk7CisKKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGNyZWF0ZUV2ZW50TGlz
dGVuZXJXcmFwcGVyKAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCB1
c2VDYXB0dXJlLCBOb2RlKiBub2RlKTsKKworICAgIC8vIEdldHMgdGhlIERlcHJlY2F0ZWRFdmVu
dExpc3RlbmVyV3JhcHBlciBmb3IgYSBzcGVjaWZpYyBub2RlLgorICAgIC8vIFVzZWQgYnkgV2Vi
Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcigpLgorICAgIERlcHJlY2F0ZWRFdmVudExpc3RlbmVy
V3JhcHBlciogZ2V0RXZlbnRMaXN0ZW5lcldyYXBwZXIoCisgICAgICAgIGNvbnN0IFdlYlN0cmlu
ZyYgZXZlbnRUeXBlLCBib29sIHVzZUNhcHR1cmUsIE5vZGUqIG5vZGUpOworCisgICAgLy8gQ2Fs
bGVkIGJ5IHRoZSBXZWJFdmVudExpc3RlbmVyIHdoZW4gaXQgaXMgYWJvdXQgdG8gYmUgZGVsZXRl
ZC4KKyAgICB2b2lkIHdlYkV2ZW50TGlzdGVuZXJEZWxldGVkKCk7CisKKyAgICAvLyBDYWxsZWQg
YnkgdGhlIERlcHJlY2F0ZWRFdmVudExpc3RlbmVyV3JhcHBlciB3aGVuIGl0IGlzIGFib3V0IHRv
IGJlIGRlbGV0ZWQuCisgICAgdm9pZCBldmVudExpc3RlbmVyRGVsZXRlZChEZXByZWNhdGVkRXZl
bnRMaXN0ZW5lcldyYXBwZXIqIGV2ZW50TGlzdGVuZXIpOworCisgICAgc3RydWN0IExpc3RlbmVy
SW5mbyB7CisgICAgICAgIExpc3RlbmVySW5mbyhjb25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwg
Ym9vbCB1c2VDYXB0dXJlLAorICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZEV2ZW50TGlz
dGVuZXJXcmFwcGVyKiBldmVudExpc3RlbmVyV3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUpCisgICAgICAgICAgICA6IGV2ZW50VHlwZShldmVudFR5cGUpCisgICAgICAg
ICAgICAsIHVzZUNhcHR1cmUodXNlQ2FwdHVyZSkKKyAgICAgICAgICAgICwgZXZlbnRMaXN0ZW5l
cldyYXBwZXIoZXZlbnRMaXN0ZW5lcldyYXBwZXIpCisgICAgICAgICAgICAsIG5vZGUobm9kZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgV2ViU3RyaW5nIGV2ZW50VHlwZTsKKyAg
ICAgICAgYm9vbCB1c2VDYXB0dXJlOworICAgICAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldy
YXBwZXIqIGV2ZW50TGlzdGVuZXJXcmFwcGVyOworICAgICAgICBOb2RlKiBub2RlOworICAgIH07
CisKK3ByaXZhdGU6CisgICAgV2ViRXZlbnRMaXN0ZW5lciogbV93ZWJFdmVudExpc3RlbmVyOwor
CisgICAgLy8gV2Uga2VlcCBhIGxpc3Qgb2YgdGhlIHdyYXBwZXIgZm9yIHRoZSBXZWJLaXQgRXZl
bnRMaXN0ZW5lciwgaXQgaXMgbmVlZGVkCisgICAgLy8gdG8gaW1wbGVtZW50IFdlYk5vZGU6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoKS4KKyAgICBWZWN0b3I8TGlzdGVuZXJJbmZvPiBtX2xpc3RlbmVy
V3JhcHBlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYk5vZGUuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJOb2RlLmNwcAkocmV2aXNpb24gNjU1MzYpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBACiAjaW5j
bHVkZSAiTm9kZUxpc3QuaCIKIAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXJXcmFwcGVyLmgiCisj
aW5jbHVkZSAiV2ViRE9NRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJET01FdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1
ZGUgIldlYkV2ZW50TGlzdGVuZXIuaCIKQEAgLTE0OSw3ICsxNTEsNyBAQCBib29sIFdlYk5vZGU6
OmlzRWxlbWVudE5vZGUoKSBjb25zdAogICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRWxlbWVudE5v
ZGUoKTsKIH0KIAotdm9pZCBXZWJOb2RlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmlu
ZyYgZXZlbnRUeXBlLCBXZWJFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJl
KQordm9pZCBXZWJOb2RlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRU
eXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewog
ICAgIEV2ZW50TGlzdGVuZXJXcmFwcGVyKiBsaXN0ZW5lcldyYXBwZXIgPQogICAgICAgICBsaXN0
ZW5lci0+Y3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXIoZXZlbnRUeXBlLCB1c2VDYXB0dXJlLCBt
X3ByaXZhdGUuZ2V0KCkpOwpAQCAtMTU5LDEyICsxNjEsMzAgQEAgdm9pZCBXZWJOb2RlOjphZGRF
dmVudExpc3RlbmVyKGNvbnN0IFdlYgogICAgIG1fcHJpdmF0ZS0+YWRkRXZlbnRMaXN0ZW5lcihl
dmVudFR5cGUsIGFkb3B0UmVmKGxpc3RlbmVyV3JhcHBlciksIHVzZUNhcHR1cmUpOwogfQogCi12
b2lkIFdlYk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5
cGUsIFdlYkV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit2b2lkIFdl
Yk5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgV2ViU3RyaW5nJiBldmVudFR5cGUsIFdl
YkRPTUV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAgRXZl
bnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3JhcHBlciA9CiAgICAgICAgIGxpc3RlbmVyLT5n
ZXRFdmVudExpc3RlbmVyV3JhcHBlcihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5n
ZXQoKSk7CiAgICAgbV9wcml2YXRlLT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlz
dGVuZXJXcmFwcGVyLCB1c2VDYXB0dXJlKTsKICAgICAvLyBsaXN0ZW5lcldyYXBwZXIgaXMgbm93
IGRlbGV0ZWQuCit9CisKK3ZvaWQgV2ViTm9kZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJT
dHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2Fw
dHVyZSkKK3sKKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxpc3RlbmVyV3Jh
cHBlciA9CisgICAgICAgIGxpc3RlbmVyLT5jcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcihldmVu
dFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgLy8gVGhlIGxpc3RlbmVy
V3JhcHBlciBpcyBvbmx5IHJlZmVyZW5jZWQgYnkgdGhlIGFjdHVhbCBOb2RlLiAgT25jZSBpdCBn
b2VzCisgICAgLy8gYXdheSwgdGhlIHdyYXBwZXIgbm90aWZpZXMgdGhlIFdlYkV2ZW50TGlzdGVu
ZXIgc28gaXQgY2FuIGNsZWFyIGl0cworICAgIC8vIHBvaW50ZXIgdG8gaXQuCisgICAgbV9wcml2
YXRlLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgYWRvcHRSZWYobGlzdGVuZXJXcmFwcGVy
KSwgdXNlQ2FwdHVyZSk7Cit9CisKK3ZvaWQgV2ViTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihj
b25zdCBXZWJTdHJpbmcmIGV2ZW50VHlwZSwgV2ViRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJv
b2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBEZXByZWNhdGVkRXZlbnRMaXN0ZW5lcldyYXBwZXIqIGxp
c3RlbmVyV3JhcHBlciA9CisgICAgICAgIGxpc3RlbmVyLT5nZXRFdmVudExpc3RlbmVyV3JhcHBl
cihldmVudFR5cGUsIHVzZUNhcHR1cmUsIG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRl
LT5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXJXcmFwcGVyLCB1c2VDYXB0
dXJlKTsKKyAgICAvLyBsaXN0ZW5lcldyYXBwZXIgaXMgbm93IGRlbGV0ZWQuCiB9CiAKIHZvaWQg
V2ViTm9kZTo6c2ltdWxhdGVDbGljaygpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>