<?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>73051</bug_id>
          
          <creation_ts>2011-11-23 14:24:56 -0800</creation_ts>
          <short_desc>WebCore implementation of the Intent object.</short_desc>
          <delta_ts>2012-01-06 16:54:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>75641</dependson>
          <blocked>75123</blocked>
    
    <blocked>75756</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Greg Billock">gbillock</reporter>
          <assigned_to name="Greg Billock">gbillock</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>jhawkins</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508398</commentid>
    <comment_count>0</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-23 14:24:56 -0800</bug_when>
    <thetext>[Web Intents] Flagged-off WebCore implementation of navigator.startActivity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508400</commentid>
    <comment_count>1</comment_count>
      <attachid>116428</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-23 14:25:50 -0800</bug_when>
    <thetext>Created attachment 116428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508431</commentid>
    <comment_count>2</comment_count>
      <attachid>116428</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 14:58:11 -0800</bug_when>
    <thetext>Comment on attachment 116428
Patch

Attachment 116428 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10644035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508535</commentid>
    <comment_count>3</comment_count>
      <attachid>116428</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-11-23 18:04:40 -0800</bug_when>
    <thetext>Comment on attachment 116428
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116428&amp;action=review

I am super excited about Web Intents being available in WebKit! I have made some suggestions inline.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (OOPS!)

Probably worth either:

- adding tests
- commenting why no new tests are required

&gt; Source/WebCore/ChangeLog:9
&gt; +

It might be useful to add a link to the draft spec of what you’re implementing here.

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:47
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::constructorCallback(const v8::Arguments&amp; args)

FYI This has to be a custom method for now, but haraken is working on making this unnecessary using Constructor(…) metadata. I think the only thing blocking you is that Constructor attribute does not support overloads yet.

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:55
&gt; +        fprintf(stderr, &quot;Creating empty intent\n&quot;);

Probably want to remove this ad-hoc logging?

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:107
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)

Code generation will *almost* do this for you. I believe that the only difference is that it would give null for empty script values, whereas you give undefined. How does specing returning undefined line up with other DOM attributes that are SerializedScriptValue? If others return null, you should just use generation. If others return undefined, you might consider teaching the code generators about SerializedScriptValue?.

&gt; Source/WebCore/loader/FrameLoaderClient.h:83
&gt;      class IntSize;

Isn’t S &lt; e?

&gt; Source/WebCore/loader/FrameLoaderClient.h:327
&gt; +        virtual void dispatchIntent(const Intent&amp; intent, int id) { }

The &quot;intent&quot; parameter name does not add anything that isn’t in the type, so omit the name. id is OK, natch.

&gt; Source/WebCore/page/Intent.cpp:38
&gt; +Intent::Intent()

Why not simply have one constructor and put the default values in ::create overloads?

&gt; Source/WebCore/page/Intent.cpp:52
&gt; +    setAction(action);

It might be more typical in WebKit to use : m_action(action), … style initializers… why call the setters?

&gt; Source/WebCore/page/Intent.cpp:82
&gt; +void Intent::setData(PassRefPtr&lt;SerializedScriptValue&gt; prpData)

I believe the WebKit style guide on naming parameters prpFoo is that prpFoo is an acceptable prefix when the use of the parameter is non-trivial and to that end it is being transferred to a RefPtr at the start of the function. That isn’t what is happening here.

&gt; Source/WebCore/page/Intent.cpp:87
&gt; +      m_data = SerializedScriptValue::nullValue();

This needs to be indented two more spaces.

&gt; Source/WebCore/page/Intent.idl:33
&gt; +        readonly attribute DOMString action;

Why have all of the setters in C++ then?

&gt; Source/WebCore/page/IntentResultCallback.idl:32
&gt; +        boolean handleEvent(in SerializedScriptValue result);

This looks to be indented too far… I think IDL just indents four.

&gt; Source/WebCore/page/IntentsController.h:44
&gt; +    int getIntentId(PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback);

It seems odd to me that a method named *get*-something to not be idempotent. Why not call it

assignIntentId

or something to hint at its side-effecting nature?

&gt; Source/WebCore/page/Navigator.cpp:331
&gt; +        ec = VALIDATION_ERR;

FYI DOM4 seems to deprecate this: &lt;http://www.w3.org/TR/domcore/#dom-domexception-validation_err&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508538</commentid>
    <comment_count>4</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-11-23 18:10:42 -0800</bug_when>
    <thetext>FYI I have filed bug 73064 for implementing overloaded constructor support in the generators. There is no need for that to block this though; we can delete the custom constructor in a clean-up pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508540</commentid>
    <comment_count>5</comment_count>
      <attachid>116428</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-23 18:19:27 -0800</bug_when>
    <thetext>Comment on attachment 116428
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116428&amp;action=review

&gt; Source/WebCore/WebCore.gypi:2972
&gt; +            &apos;page/Intent.cpp&apos;,
&gt; +            &apos;page/Intent.h&apos;,
&gt; +            &apos;page/IntentsController.cpp&apos;,
&gt; +            &apos;page/IntentsController.h&apos;,
&gt; +            &apos;page/IntentResultCallback.h&apos;,

Can you make an intents directory in Modules?  &quot;page&quot; shouldn&apos;t really be a dumping group for every random feature.

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:111
&gt; +    SerializedScriptValue* ssv = impl-&gt;data();

ssv =&gt; please use complete words in variable names.

&gt; Source/WebCore/page/DOMWindow.idl:622
&gt; +#if defined(ENABLE_WEB_INTENTS) &amp;&amp; ENABLE_WEB_INTENTS
&gt; +        attribute IntentConstructor Intent; // Usable with the new operator
&gt; +#endif

This is an ideal candidate for Supplemental (which doesn&apos;t yet exist).

&gt; Source/WebCore/page/Intent.h:50
&gt; +    static PassRefPtr&lt;Intent&gt; create(
&gt; +        const String&amp; action,
&gt; +        const String&amp; type) {

One line please.

&gt; Source/WebCore/page/Intent.h:71
&gt; +    Intent();
&gt; +    Intent(String action, String type);
&gt; +    Intent(String action, String type, PassRefPtr&lt;SerializedScriptValue&gt; prpData);

Can these all be combined with default values?

&gt; Source/WebCore/page/Navigator.idl:72
&gt; +#if defined(ENABLE_WEB_INTENTS) &amp;&amp; ENABLE_WEB_INTENTS
&gt; +        void startActivity(in Intent intent, in [Callback, Optional] IntentResultCallback successCallback, in [Callback, Optional] IntentResultCallback failureCallback)
&gt; +            raises(DOMException);
&gt; +#endif

Another good candidate for Supplemental.

&gt; Source/WebCore/page/Page.cpp:149
&gt; +#if ENABLE(WEB_INTENTS)
&gt; +    , m_intentsController(adoptPtr(new IntentsController()))
&gt; +#endif

Why is this controller per-page?  Naively, I would have expected it to be per-ScriptExecutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510194</commentid>
    <comment_count>6</comment_count>
      <attachid>116428</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-28 14:45:04 -0800</bug_when>
    <thetext>Comment on attachment 116428
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116428&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; Probably worth either:
&gt; 
&gt; - adding tests
&gt; - commenting why no new tests are required

I definitely need tests. Is there an example patch that has flagged-off tests that I can use for inspiration?

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +
&gt; 
&gt; It might be useful to add a link to the draft spec of what you’re implementing here.

Done.

&gt;&gt; Source/WebCore/WebCore.gypi:2972
&gt;&gt; +            &apos;page/IntentResultCallback.h&apos;,
&gt; 
&gt; Can you make an intents directory in Modules?  &quot;page&quot; shouldn&apos;t really be a dumping group for every random feature.

Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:47
&gt;&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::constructorCallback(const v8::Arguments&amp; args)
&gt; 
&gt; FYI This has to be a custom method for now, but haraken is working on making this unnecessary using Constructor(…) metadata. I think the only thing blocking you is that Constructor attribute does not support overloads yet.

That&apos;d be nice!

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:55
&gt;&gt; +        fprintf(stderr, &quot;Creating empty intent\n&quot;);
&gt; 
&gt; Probably want to remove this ad-hoc logging?

Oops! Thought I got it all. Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:107
&gt;&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; 
&gt; Code generation will *almost* do this for you. I believe that the only difference is that it would give null for empty script values, whereas you give undefined. How does specing returning undefined line up with other DOM attributes that are SerializedScriptValue? If others return null, you should just use generation. If others return undefined, you might consider teaching the code generators about SerializedScriptValue?.

I had a lot of trouble with the SSV accessors. It looks like the V8 code gen special cases it to basically bypass the accessor in the class and return built-in values, which is not what I need. I&apos;m not exactly sure what to do about it at this point.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:111
&gt;&gt; +    SerializedScriptValue* ssv = impl-&gt;data();
&gt; 
&gt; ssv =&gt; please use complete words in variable names.

Done.

&gt;&gt; Source/WebCore/loader/FrameLoaderClient.h:83
&gt;&gt;      class IntSize;
&gt; 
&gt; Isn’t S &lt; e?

Done.

&gt;&gt; Source/WebCore/page/DOMWindow.idl:622
&gt;&gt; +#endif
&gt; 
&gt; This is an ideal candidate for Supplemental (which doesn&apos;t yet exist).

So this would be like

DOMWindow implements IntentObjectConstructorInterface

which is then defined separately? (It looks to me from the WebIDL doc that supplemental interfaces are just a category of interface. Is there something syntactic in the works?)

&gt;&gt; Source/WebCore/page/Intent.cpp:38
&gt;&gt; +Intent::Intent()
&gt; 
&gt; Why not simply have one constructor and put the default values in ::create overloads?

I realized this was all redundant to the custom constructor, so I just put the setup there.

&gt;&gt; Source/WebCore/page/Intent.cpp:52
&gt;&gt; +    setAction(action);
&gt; 
&gt; It might be more typical in WebKit to use : m_action(action), … style initializers… why call the setters?

Done.

&gt;&gt; Source/WebCore/page/Intent.cpp:82
&gt;&gt; +void Intent::setData(PassRefPtr&lt;SerializedScriptValue&gt; prpData)
&gt; 
&gt; I believe the WebKit style guide on naming parameters prpFoo is that prpFoo is an acceptable prefix when the use of the parameter is non-trivial and to that end it is being transferred to a RefPtr at the start of the function. That isn’t what is happening here.

Drat. I thought I read that right. Changed to just &apos;data&apos;.

&gt;&gt; Source/WebCore/page/Intent.cpp:87
&gt;&gt; +      m_data = SerializedScriptValue::nullValue();
&gt; 
&gt; This needs to be indented two more spaces.

Done.

&gt;&gt; Source/WebCore/page/Intent.h:50
&gt;&gt; +        const String&amp; type) {
&gt; 
&gt; One line please.

Erased these methods.

&gt;&gt; Source/WebCore/page/Intent.h:71
&gt;&gt; +    Intent(String action, String type, PassRefPtr&lt;SerializedScriptValue&gt; prpData);
&gt; 
&gt; Can these all be combined with default values?

Yes. See above.

&gt;&gt; Source/WebCore/page/Intent.idl:33
&gt;&gt; +        readonly attribute DOMString action;
&gt; 
&gt; Why have all of the setters in C++ then?

Oops. That code didn&apos;t evolve with this interface. Fixed now.

&gt;&gt; Source/WebCore/page/IntentResultCallback.idl:32
&gt;&gt; +        boolean handleEvent(in SerializedScriptValue result);
&gt; 
&gt; This looks to be indented too far… I think IDL just indents four.

Fixed.

&gt;&gt; Source/WebCore/page/IntentsController.h:44
&gt;&gt; +    int getIntentId(PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback);
&gt; 
&gt; It seems odd to me that a method named *get*-something to not be idempotent. Why not call it
&gt; 
&gt; assignIntentId
&gt; 
&gt; or something to hint at its side-effecting nature?

Makes sense. Done.

&gt;&gt; Source/WebCore/page/Navigator.cpp:331
&gt;&gt; +        ec = VALIDATION_ERR;
&gt; 
&gt; FYI DOM4 seems to deprecate this: &lt;http://www.w3.org/TR/domcore/#dom-domexception-validation_err&gt;

So should this be SYNTAX_ERR?

&gt;&gt; Source/WebCore/page/Page.cpp:149
&gt;&gt; +#endif
&gt; 
&gt; Why is this controller per-page?  Naively, I would have expected it to be per-ScriptExecutionContext.

I put it here just because other similar controllers seemed to be here. (Device orientation, speech, client geolocation, ...) The DB controllers are on ScriptExecutionContext, however. I am happy to move it. Are there lifetime or scoping considerations that point one way or another?

I&apos;m using this controller to connect up which intent flows need to be notified back to which callbacks, so the scoping needs to be for as long as that callback can be reached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510205</commentid>
    <comment_count>7</comment_count>
      <attachid>116825</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-28 14:49:29 -0800</bug_when>
    <thetext>Created attachment 116825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510215</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 14:54:04 -0800</bug_when>
    <thetext>Attachment 116825 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/Modules/intents/IntentResultCallback.h:44:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:54:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 27 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>510216</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 14:54:22 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510218</commentid>
    <comment_count>10</comment_count>
      <attachid>116825</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-11-28 14:55:02 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review

&gt; Source/WebCore/page/IntentsController.h:39
&gt; +class IntentsController {

This should go in Modules/intents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510228</commentid>
    <comment_count>11</comment_count>
      <attachid>116825</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-28 14:58:33 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

Attachment 116825 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10676468</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510272</commentid>
    <comment_count>12</comment_count>
      <attachid>116825</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-28 15:35:56 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

Attachment 116825 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10678436</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510298</commentid>
    <comment_count>13</comment_count>
      <attachid>116825</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-11-28 16:02:23 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review

&gt; Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp:1623
&gt; +    WebIntent webIntent(intent, intentId);

if the identifier is not part of WebCore::Intent, then it probably shouldn&apos;t be part of WebIntent either.
i know we went back-n-forth on the API design, and so you may be loath to change it, but just wanted to
point out that we should be consistent here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510363</commentid>
    <comment_count>14</comment_count>
      <attachid>116825</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 17:37:03 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

Attachment 116825 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10676538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510389</commentid>
    <comment_count>15</comment_count>
      <attachid>116825</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-28 18:33:07 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review

Just a few drive by comments.

&gt; Source/WebCore/Modules/intents/Intent.cpp:40
&gt; +    : m_action(action),

fyi, the , goes on the next line. (Here and other places.)

&gt; Source/WebCore/Modules/intents/Intent.h:49
&gt; +        PassRefPtr&lt;SerializedScriptValue&gt; data) {

{ on the next line.

&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:41
&gt; +class IntentResultCallback : public ThreadSafeRefCounted&lt;IntentResultCallback&gt; {

Why is this a ThreadSafeRefCounted? That is a lot to force on another class (and it seems odd to make it part of a callback interface).

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:43
&gt; +#include &lt;wtf/MathExtras.h&gt;

Is the code using something from this header? (I don&apos;t see it.)

&gt; Source/WebCore/page/Page.cpp:148
&gt; +    , m_intentsController(adoptPtr(new IntentsController()))

adoptPtr(new IntentsController()) should be IntentsController::create() (like what you did for Intent except in this case it returns a PassOwnPtr).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510458</commentid>
    <comment_count>16</comment_count>
      <attachid>116825</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-11-28 21:00:18 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review

&gt; Source/WebCore/Modules/intents/Intent.h:58
&gt; +    Intent(String action, String type, PassRefPtr&lt;SerializedScriptValue&gt; data);

These should be const String&amp;.

&gt; Source/WebCore/page/IntentsController.h:47
&gt; +    void postResult(String&amp; data, int intentId);
&gt; +    void postFailure(String&amp; data, int intentId);

Are these String parameters used as out data? If not, they should be const String&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511061</commentid>
    <comment_count>17</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-29 13:28:02 -0800</bug_when>
    <thetext>Question for reviewers: the bots are giving me build errors, which look like they aren&apos;t processing the includes updates in WebCore.gyp/WebCore.gyp. Do I need to split out that change to add the Modules/intents directory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511104</commentid>
    <comment_count>18</comment_count>
      <attachid>116825</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-29 14:24:19 -0800</bug_when>
    <thetext>Comment on attachment 116825
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:40
&gt;&gt; +    : m_action(action),
&gt; 
&gt; fyi, the , goes on the next line. (Here and other places.)

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:49
&gt;&gt; +        PassRefPtr&lt;SerializedScriptValue&gt; data) {
&gt; 
&gt; { on the next line.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:58
&gt;&gt; +    Intent(String action, String type, PassRefPtr&lt;SerializedScriptValue&gt; data);
&gt; 
&gt; These should be const String&amp;.

Done.

&gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:41
&gt;&gt; +class IntentResultCallback : public ThreadSafeRefCounted&lt;IntentResultCallback&gt; {
&gt; 
&gt; Why is this a ThreadSafeRefCounted? That is a lot to force on another class (and it seems odd to make it part of a callback interface).

I think I was looking at storage/DatabaseCallback.h, but I think that misfired, and the callback interfaces more aligned with this use just RefCounted&lt;&gt;. Fixed.

&gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:44
&gt;&gt; +    virtual bool handleEvent(RefPtr&lt;SerializedScriptValue&gt; result) = 0;
&gt; 
&gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]

Can I just pass a pointer here? PassRefPtr definitely doesn&apos;t work.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:43
&gt;&gt; +#include &lt;wtf/MathExtras.h&gt;
&gt; 
&gt; Is the code using something from this header? (I don&apos;t see it.)

Thanks. Must be left over from a copy-paste.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:54
&gt;&gt; +    if (args.Length() == 0) {
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

Is this right? I think it&apos;d look odd to see &quot;if (!args.Length()),&quot; and v8::Arguments doesn&apos;t have an empty(). I see instances in the code of both forms, though.

&gt;&gt; Source/WebCore/page/IntentsController.h:39
&gt;&gt; +class IntentsController {
&gt; 
&gt; This should go in Modules/intents

Done.

&gt;&gt; Source/WebCore/page/IntentsController.h:47
&gt;&gt; +    void postFailure(String&amp; data, int intentId);
&gt; 
&gt; Are these String parameters used as out data? If not, they should be const String&amp;.

Done.

&gt;&gt; Source/WebCore/page/Page.cpp:148
&gt;&gt; +    , m_intentsController(adoptPtr(new IntentsController()))
&gt; 
&gt; adoptPtr(new IntentsController()) should be IntentsController::create() (like what you did for Intent except in this case it returns a PassOwnPtr).

OK. I was looking at parallels in this file, where adoptPtr(new Xxx) is pretty ubiquitous.

&gt;&gt; Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp:1623
&gt;&gt; +    WebIntent webIntent(intent, intentId);
&gt; 
&gt; if the identifier is not part of WebCore::Intent, then it probably shouldn&apos;t be part of WebIntent either.
&gt; i know we went back-n-forth on the API design, and so you may be loath to change it, but just wanted to
&gt; point out that we should be consistent here.

I&apos;ll add it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511106</commentid>
    <comment_count>19</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-29 14:28:46 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 116825 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review

&gt; &gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:44
&gt; &gt;&gt; +    virtual bool handleEvent(RefPtr&lt;SerializedScriptValue&gt; result) = 0;
&gt; &gt; 
&gt; &gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
&gt; 
&gt; Can I just pass a pointer here? PassRefPtr definitely doesn&apos;t work.

I wonder why PassRefPtr doesn&apos;t work. Anyway it all depends on what the method does.

If it takes ownership, make it PassRefPtr. If it just needs a pointer, then pass a pointer.

&gt; &gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:54
&gt; &gt;&gt; +    if (args.Length() == 0) {
&gt; &gt; 
&gt; &gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; 
&gt; Is this right? I think it&apos;d look odd to see &quot;if (!args.Length()),&quot; and v8::Arguments doesn&apos;t have an empty(). I see instances in the code of both forms, though.


Yep, it is correct. Odd but true. See WebKit style document.


&gt; &gt;&gt; Source/WebCore/page/Page.cpp:148
&gt; &gt;&gt; +    , m_intentsController(adoptPtr(new IntentsController()))
&gt; &gt; 
&gt; &gt; adoptPtr(new IntentsController()) should be IntentsController::create() (like what you did for Intent except in this case it returns a PassOwnPtr).
&gt; 
&gt; OK. I was looking at parallels in this file, where adoptPtr(new Xxx) is pretty ubiquitous.

Feel free to fix them as well :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511107</commentid>
    <comment_count>20</comment_count>
      <attachid>117044</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-29 14:29:01 -0800</bug_when>
    <thetext>Created attachment 117044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511111</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-29 14:32:31 -0800</bug_when>
    <thetext>Attachment 117044 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/Modules/intents/IntentResultCallback.h:44:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 27 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>511113</commentid>
    <comment_count>22</comment_count>
      <attachid>117044</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-29 14:36:13 -0800</bug_when>
    <thetext>Comment on attachment 117044
Patch

Attachment 117044 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10679747</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511138</commentid>
    <comment_count>23</comment_count>
      <attachid>117044</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-29 15:03:40 -0800</bug_when>
    <thetext>Comment on attachment 117044
Patch

Attachment 117044 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10677830</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511199</commentid>
    <comment_count>24</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-11-29 16:27:15 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 116825 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116825&amp;action=review
&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.h:44
&gt; &gt; &gt;&gt; +    virtual bool handleEvent(RefPtr&lt;SerializedScriptValue&gt; result) = 0;
&gt; &gt; &gt; 
&gt; &gt; &gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
&gt; &gt; 
&gt; &gt; Can I just pass a pointer here? PassRefPtr definitely doesn&apos;t work.
&gt; 
&gt; I wonder why PassRefPtr doesn&apos;t work. Anyway it all depends on what the method does.
&gt; 
&gt; If it takes ownership, make it PassRefPtr. If it just needs a pointer, then pass a pointer.

I believe it needs to take ownership. (It passes it to the Javascript callback; I don&apos;t keep a copy in the controller.) But looking at generate-bindings.pl, it looks to me like it&apos;ll always want this prototype to be a RefPtr or a pointer. (GetNativeTypeForCallbacks-&gt;GetNativeType, line 3344). (There are special cases for particular types, but those look like historical allowances.)

I admit though that my understanding of how the flow of control passes between my code and the generated code is imperfect. Perhaps the JS layer takes care of the ownership if I pass a pointer?

&gt; 
&gt; &gt; &gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:54
&gt; &gt; &gt;&gt; +    if (args.Length() == 0) {
&gt; &gt; &gt; 
&gt; &gt; &gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; &gt; 
&gt; &gt; Is this right? I think it&apos;d look odd to see &quot;if (!args.Length()),&quot; and v8::Arguments doesn&apos;t have an empty(). I see instances in the code of both forms, though.
&gt; 
&gt; 
&gt; Yep, it is correct. Odd but true. See WebKit style document.

I changed this. 
 
&gt; &gt; &gt;&gt; Source/WebCore/page/Page.cpp:148
&gt; &gt; &gt;&gt; +    , m_intentsController(adoptPtr(new IntentsController()))
&gt; &gt; &gt; 
&gt; &gt; &gt; adoptPtr(new IntentsController()) should be IntentsController::create() (like what you did for Intent except in this case it returns a PassOwnPtr).
&gt; &gt; 
&gt; &gt; OK. I was looking at parallels in this file, where adoptPtr(new Xxx) is pretty ubiquitous.
&gt; 
&gt; Feel free to fix them as well :).

Can do. I&apos;ll do it in a separate changelist though, so as to keep this already-long one from ballooning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511217</commentid>
    <comment_count>25</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-29 16:45:07 -0800</bug_when>
    <thetext>/levin@ ducks out of this review and stops making more drive by comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511554</commentid>
    <comment_count>26</comment_count>
      <attachid>117044</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-30 02:22:58 -0800</bug_when>
    <thetext>Comment on attachment 117044
Patch

Attachment 117044 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10687139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512390</commentid>
    <comment_count>27</comment_count>
      <attachid>117044</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-11-30 20:27:09 -0800</bug_when>
    <thetext>Comment on attachment 117044
Patch

Attachment 117044 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10696473</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519684</commentid>
    <comment_count>28</comment_count>
      <attachid>118908</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-12-12 16:51:26 -0800</bug_when>
    <thetext>Created attachment 118908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519688</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-12 16:54:33 -0800</bug_when>
    <thetext>Attachment 118908 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/Modules/intents/IntentResultCallback.h:44:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 25 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>519717</commentid>
    <comment_count>30</comment_count>
      <attachid>118908</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-12 17:14:10 -0800</bug_when>
    <thetext>Comment on attachment 118908
Patch

Attachment 118908 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10851134</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519771</commentid>
    <comment_count>31</comment_count>
      <attachid>118908</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-12-12 18:43:59 -0800</bug_when>
    <thetext>Comment on attachment 118908
Patch

Attachment 118908 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10845145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519824</commentid>
    <comment_count>32</comment_count>
      <attachid>118908</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-12 19:53:13 -0800</bug_when>
    <thetext>Comment on attachment 118908
Patch

Attachment 118908 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10845184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523982</commentid>
    <comment_count>33</comment_count>
      <attachid>118908</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-12-19 10:33:49 -0800</bug_when>
    <thetext>Comment on attachment 118908
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=118908&amp;action=review

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests. (OOPS!)

Tests are required for changes to WebCore.  Especailly ones which touch the web apis. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526474</commentid>
    <comment_count>34</comment_count>
      <attachid>120372</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-12-22 13:24:28 -0800</bug_when>
    <thetext>Created attachment 120372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526475</commentid>
    <comment_count>35</comment_count>
      <attachid>118908</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-12-22 13:26:39 -0800</bug_when>
    <thetext>Comment on attachment 118908
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=118908&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        No new tests. (OOPS!)
&gt; 
&gt; Tests are required for changes to WebCore.  Especailly ones which touch the web apis. :)

:-) Definitely. I&apos;ve added a test for the basic API functionality. Is there a good example to follow for testing the propagation of the startActivity() call? I have my own tests I run, but since the code requires a user gesture, and simply forwards out, it&apos;ll be a more complex test than these API ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526477</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-22 13:28:46 -0800</bug_when>
    <thetext>EventSender can be used in testing to trigger a user gesture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526485</commentid>
    <comment_count>37</comment_count>
      <attachid>120372</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-22 13:41:32 -0800</bug_when>
    <thetext>Comment on attachment 120372
Patch

Attachment 120372 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10955021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526486</commentid>
    <comment_count>38</comment_count>
      <attachid>120372</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-22 13:43:30 -0800</bug_when>
    <thetext>Comment on attachment 120372
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=120372&amp;action=review

This patch is too large and contains many problems.  I&apos;d recommend breaking it down into smaller pieces so we can make sure everything gets a good review.  The most problematic piece of this patch is the IntentsController.  Can you help me understand what scope that object should have?

&gt; Source/WebCore/Modules/intents/Intent.cpp:38
&gt; +

Extra blank line here.

&gt; Source/WebCore/Modules/intents/Intent.cpp:47
&gt; +String Intent::action() const

const String&amp;

&gt; Source/WebCore/Modules/intents/Intent.cpp:52
&gt; +String Intent::type() const

const String&amp;

&gt; Source/WebCore/Modules/intents/Intent.h:49
&gt; +    static PassRefPtr&lt;Intent&gt; create(
&gt; +        const String&amp; action,
&gt; +        const String&amp; type,
&gt; +        PassRefPtr&lt;SerializedScriptValue&gt; data)

All on one line pls

&gt; Source/WebCore/Modules/intents/Intent.h:62
&gt; +protected:
&gt; +    Intent(const String&amp; action, const String&amp; type, PassRefPtr&lt;SerializedScriptValue&gt; data);

Why protected?  Does this class have subclasses?

&gt; Source/WebCore/Modules/intents/IntentResultCallback.idl:29
&gt; +      LegacyDefaultOptionalArguments,

This attribute should never be added to any IDL files.  It&apos;s only for legacy IDL files (and I think we&apos;ve eradicated it for all of them by now).

&gt; Source/WebCore/Modules/intents/IntentsController.cpp:60
&gt; +    if (m_successCallbacks[intentId].get())

You should take() the callback out of the map and then handle the event.  The way you&apos;ve written this code, you&apos;ve got a potential re-entrancy problem.

&gt; Source/WebCore/Modules/intents/IntentsController.cpp:71
&gt; +    if (m_errorCallbacks[intentId].get())
&gt; +        m_errorCallbacks[intentId]-&gt;handleEvent(value);

Same problem.  handleEvent can do arbitrary things.  There&apos;s no guantee this object even exists afterwards.

&gt; Source/WebCore/Modules/intents/IntentsController.h:40
&gt; +class IntentsController {

Should this be non-copyable?

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:45
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::constructorCallback(const v8::Arguments&amp; args)

We shouldn&apos;t need a custom constructor for this object.

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:94
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)

We shouldn&apos;t need custom code here either.

&gt; Source/WebCore/page/DOMWindow.idl:623
&gt; +        attribute IntentConstructor Intent; // Usable with the new operator

You can just used Conditional=WEB_INTENTS

&gt; Source/WebCore/page/Navigator.cpp:328
&gt; +    if (!frame() || !frame()-&gt;loader() || !frame()-&gt;loader()-&gt;client() || !intent.get()) {

frame()-&gt;loader() is always non-null.  frame()-&gt;loader()-&gt;client() is always non-null.

&quot;!intent.get()&quot; can just be &quot;!intent&quot;

&gt; Source/WebCore/page/Navigator.cpp:343
&gt; +    int id = m_frame-&gt;page()-&gt;intentsController()-&gt;assignIntentId(successCallback, errorCallback);

You did a bunch of extra null checking, but you forgot to null check m_frame-&gt;page(), which actually can be null.

It&apos;s very unlikely that intentsController should be a page-scoped object.  Shouldn&apos;t we have one per ScriptExecutionContext?

&gt; Source/WebCore/page/Navigator.h:85
&gt; +    void startActivity(PassRefPtr&lt;Intent&gt;, PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback, ExceptionCode&amp;);

PassRefPtr&lt;Intent&gt; should just be const Intent&amp;.  This function doesn&apos;t take ownership of the intent.  Please see http://www.webkit.org/coding/RefPtr.html

&gt; Source/WebCore/page/Page.cpp:158
&gt; +#if ENABLE(WEB_INTENTS)
&gt; +    , m_intentsController(IntentsController::create())
&gt; +#endif

Why Page-lifetime?  This seems unlikely.  Can you show me where in the spec it says how long we need to retain this state?

&gt; Source/WebKit/chromium/public/WebIntent.h:65
&gt; +    WebIntent(const WebCore::Intent&amp;);

explicit

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1820
&gt; +    WTF::String replyString = reply.operator String();

Do we really have to use the word &quot;operator&quot; here?  Shouldn&apos;t the compiler be able to figure that out for us?

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1821
&gt; +    m_frame-&gt;page()-&gt;intentsController()-&gt;postResult(replyString, intentIdentifier);

How do you know this result is going back to the right security context?  Page can contain many different documents over its lifetime.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1831
&gt; +    WTF::String replyString = reply.operator String();

Are we really not &quot;using WTF::String&quot; in this file?

&gt; Source/WebKit/chromium/src/WebIntent.cpp:46
&gt; +    : m_action(intent.action())
&gt; +    , m_type(intent.type())
&gt; +    , m_data(intent.data()-&gt;toWireString())
&gt; +    , m_identifier(intent.identifier())

Why do we copy out all these fields instead of just take a reference to the WebCore::Intent object?  That&apos;s the usual pattern for API objects that wrap WebCore concepts.

&gt; LayoutTests/platform/wincairo/Skipped:2005
&gt; +web-intents/

This should probably be one word, without the -</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526525</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 14:38:58 -0800</bug_when>
    <thetext>Attachment 120372 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/platform/efl/Skipped&apos;, u&apos;Layou...&quot; exit_code: 1

Source/WebCore/Modules/intents/IntentResultCallback.h:44:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526652</commentid>
    <comment_count>40</comment_count>
      <attachid>120372</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-12-22 17:07:44 -0800</bug_when>
    <thetext>Comment on attachment 120372
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=120372&amp;action=review

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:38
&gt;&gt; +
&gt; 
&gt; Extra blank line here.

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:47
&gt;&gt; +String Intent::action() const
&gt; 
&gt; const String&amp;

Done. (I was following some other classes in page/ which use this idiom and perhaps need updating -- Geolocation.h, SecurityOrigin.h, Location.h, probably more.)

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:52
&gt;&gt; +String Intent::type() const
&gt; 
&gt; const String&amp;

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:49
&gt;&gt; +        PassRefPtr&lt;SerializedScriptValue&gt; data)
&gt; 
&gt; All on one line pls

Done.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:62
&gt;&gt; +    Intent(const String&amp; action, const String&amp; type, PassRefPtr&lt;SerializedScriptValue&gt; data);
&gt; 
&gt; Why protected?  Does this class have subclasses?

No good reason at this point, although we&apos;ve discussed subclasses as an option as an implementation details for some use cases. There&apos;s no reason to have this now, though. I was likely mimicking another class in an attempt to figure out how the IDL and codegen&apos;ed headers relate. (I&apos;m still uncertain about some of the details there, like handleEvent in the callback, in which the codegen won&apos;t work with what seems like the right PassRefPtr argument.)

&gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.idl:29
&gt;&gt; +      LegacyDefaultOptionalArguments,
&gt; 
&gt; This attribute should never be added to any IDL files.  It&apos;s only for legacy IDL files (and I think we&apos;ve eradicated it for all of them by now).

Removed. Are there other IDL arguments I need for a callback type?

&gt;&gt; Source/WebCore/Modules/intents/IntentsController.cpp:60
&gt;&gt; +    if (m_successCallbacks[intentId].get())
&gt; 
&gt; You should take() the callback out of the map and then handle the event.  The way you&apos;ve written this code, you&apos;ve got a potential re-entrancy problem.

Thanks. I don&apos;t feel like I have a good handle yet on how the thread hand-offs and ownerships transfers work between this code and the Javascript engine. 

I&apos;ve changed the code to be robust against re-entrancy now. I added a mutex to the ID generation process. I&apos;m not sure whether the Javascript engine needs that or not. Is is possible for invocations from JS to be re-entrant?

&gt;&gt; Source/WebCore/Modules/intents/IntentsController.cpp:71
&gt;&gt; +        m_errorCallbacks[intentId]-&gt;handleEvent(value);
&gt; 
&gt; Same problem.  handleEvent can do arbitrary things.  There&apos;s no guantee this object even exists afterwards.

Fixed.

&gt;&gt; Source/WebCore/Modules/intents/IntentsController.h:40
&gt;&gt; +class IntentsController {
&gt; 
&gt; Should this be non-copyable?

Yes. Done.

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:45
&gt;&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::constructorCallback(const v8::Arguments&amp; args)
&gt; 
&gt; We shouldn&apos;t need a custom constructor for this object.

There&apos;s work afoot on this (perhaps it is now done).

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:94
&gt;&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; 
&gt; We shouldn&apos;t need custom code here either.

I think this is the result of v8 treatment of the SerializedScriptValue type. Basically I want this field to contain anything that SerializedScriptValue can handle, and nothing it can&apos;t. There are a couple other instances where we use this type in IDL, but it has some semantic problems when we do. See Dominic&apos;s comment #3 above in this thread.

&gt;&gt; Source/WebCore/page/DOMWindow.idl:623
&gt;&gt; +        attribute IntentConstructor Intent; // Usable with the new operator
&gt; 
&gt; You can just used Conditional=WEB_INTENTS

Done.

&gt;&gt; Source/WebCore/page/Navigator.cpp:328
&gt;&gt; +    if (!frame() || !frame()-&gt;loader() || !frame()-&gt;loader()-&gt;client() || !intent.get()) {
&gt; 
&gt; frame()-&gt;loader() is always non-null.  frame()-&gt;loader()-&gt;client() is always non-null.
&gt; 
&gt; &quot;!intent.get()&quot; can just be &quot;!intent&quot;

Done.

&gt;&gt; Source/WebCore/page/Navigator.cpp:343
&gt;&gt; +    int id = m_frame-&gt;page()-&gt;intentsController()-&gt;assignIntentId(successCallback, errorCallback);
&gt; 
&gt; You did a bunch of extra null checking, but you forgot to null check m_frame-&gt;page(), which actually can be null.
&gt; 
&gt; It&apos;s very unlikely that intentsController should be a page-scoped object.  Shouldn&apos;t we have one per ScriptExecutionContext?

Yeah, this is a good question, and I&apos;m not really sure. The constraint is that when an intent reply comes back, we can&apos;t map it to an incorrect callback. The way I understand the Page/ScriptExecutionContext lifetimes, we could get a new ScriptExecutionContext which might then grab an ID which is duplicate to one that had already been issued, so we need to make sure the counter is scoped at least to the Page. I&apos;ve switched this code to just use a static counter, though, so I believe that means it can be moved to share lifetime with the ScriptExecutionContext. How does ref counting on the callbacks work? Since I&apos;m storing those in the registry, will they be inactivated if the ScriptExecutionContext they are associated with gets deleted? If they can be deleted out from under the registry then the lifetime needs to be identical to the script context, or if it is hard to keep track of the lifetime, the same argument applies.

&gt;&gt; Source/WebCore/page/Navigator.h:85
&gt;&gt; +    void startActivity(PassRefPtr&lt;Intent&gt;, PassRefPtr&lt;IntentResultCallback&gt; successCallback, PassRefPtr&lt;IntentResultCallback&gt; errorCallback, ExceptionCode&amp;);
&gt; 
&gt; PassRefPtr&lt;Intent&gt; should just be const Intent&amp;.  This function doesn&apos;t take ownership of the intent.  Please see http://www.webkit.org/coding/RefPtr.html

I&apos;m setting the identifier on this object. I can pass a pointer though.

&gt;&gt; Source/WebCore/page/Page.cpp:158
&gt;&gt; +#endif
&gt; 
&gt; Why Page-lifetime?  This seems unlikely.  Can you show me where in the spec it says how long we need to retain this state?

Discussed above.

&gt;&gt; Source/WebKit/chromium/public/WebIntent.h:65
&gt;&gt; +    WebIntent(const WebCore::Intent&amp;);
&gt; 
&gt; explicit

Done

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1821
&gt;&gt; +    m_frame-&gt;page()-&gt;intentsController()-&gt;postResult(replyString, intentIdentifier);
&gt; 
&gt; How do you know this result is going back to the right security context?  Page can contain many different documents over its lifetime.

The ID should ensure that only the registered callbacks get notified for a given intent. I think I&apos;m doing this correctly now.

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1831
&gt;&gt; +    WTF::String replyString = reply.operator String();
&gt; 
&gt; Are we really not &quot;using WTF::String&quot; in this file?

Deleted namespace.

&gt;&gt; Source/WebKit/chromium/src/WebIntent.cpp:46
&gt;&gt; +    , m_identifier(intent.identifier())
&gt; 
&gt; Why do we copy out all these fields instead of just take a reference to the WebCore::Intent object?  That&apos;s the usual pattern for API objects that wrap WebCore concepts.

Is there an example of doing that and how it interacts with wanting to flag off the WebCore type?

&gt;&gt; LayoutTests/platform/wincairo/Skipped:2005
&gt;&gt; +web-intents/
&gt; 
&gt; This should probably be one word, without the -

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526654</commentid>
    <comment_count>41</comment_count>
      <attachid>120415</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-12-22 17:10:31 -0800</bug_when>
    <thetext>Created attachment 120415
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526657</commentid>
    <comment_count>42</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2011-12-22 17:13:34 -0800</bug_when>
    <thetext>Addressed comments, but splitting this up sounds good to me. Shall I split into several smaller WebCore pieces and then one to do the rest of the API to take the invocation out to client code? There&apos;s several interdependencies, but I think I can find a good ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526658</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 17:13:45 -0800</bug_when>
    <thetext>Attachment 120415 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/platform/efl/Skipped&apos;, u&apos;Layou...&quot; exit_code: 1

Source/WebCore/Modules/intents/IntentResultCallback.h:44:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526662</commentid>
    <comment_count>44</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-22 17:29:39 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (From update of attachment 120372 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120372&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:47
&gt; &gt;&gt; +String Intent::action() const
&gt; &gt; 
&gt; &gt; const String&amp;
&gt; 
&gt; Done. (I was following some other classes in page/ which use this idiom and perhaps need updating -- Geolocation.h, SecurityOrigin.h, Location.h, probably more.)

Generally it depends on whether someone is keeping the string alive for you.  It&apos;s possible we don&apos;t do this correctly everywhere, but this case is clearly just an accessor for a member variable.  There&apos;s no reason to churn the reference count on the string buffer.

&gt; &gt;&gt; Source/WebCore/Modules/intents/Intent.h:62
&gt; &gt;&gt; +    Intent(const String&amp; action, const String&amp; type, PassRefPtr&lt;SerializedScriptValue&gt; data);
&gt; &gt; 
&gt; &gt; Why protected?  Does this class have subclasses?
&gt; 
&gt; No good reason at this point, although we&apos;ve discussed subclasses as an option as an implementation details for some use cases.

Ok.  Let&apos;s make this private for now.  We can always make it protected later if there&apos;s a good reason to do that.

&gt; &gt;&gt; Source/WebCore/Modules/intents/IntentResultCallback.idl:29
&gt; &gt;&gt; +      LegacyDefaultOptionalArguments,
&gt; &gt; 
&gt; &gt; This attribute should never be added to any IDL files.  It&apos;s only for legacy IDL files (and I think we&apos;ve eradicated it for all of them by now).
&gt; 
&gt; Removed. Are there other IDL arguments I need for a callback type?

Not that I know of.  Your tests should demonstrate that one way or another.

&gt; &gt;&gt; Source/WebCore/Modules/intents/IntentsController.cpp:60
&gt; &gt;&gt; +    if (m_successCallbacks[intentId].get())
&gt; &gt; 
&gt; &gt; You should take() the callback out of the map and then handle the event.  The way you&apos;ve written this code, you&apos;ve got a potential re-entrancy problem.
&gt; 
&gt; Thanks. I don&apos;t feel like I have a good handle yet on how the thread hand-offs and ownerships transfers work between this code and the Javascript engine. 

There are no thread hand-offs.  :)

WebCore proper needs to keep everything alive itself.  Anything that the JavaScript engine is keeping alive can disappear at any moment when you execute JavaScript.

&gt; I&apos;ve changed the code to be robust against re-entrancy now. I added a mutex to the ID generation process. I&apos;m not sure whether the Javascript engine needs that or not.

It&apos;s very unlikely that we need a mutex.  There is only one thread in the DOM.

&gt; Is is possible for invocations from JS to be re-entrant?

Yes.  JavaScript can WebCore can be on the stack interleaved an arbitrary number of times.

&gt; &gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:94
&gt; &gt;&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; &gt; 
&gt; &gt; We shouldn&apos;t need custom code here either.
&gt; 
&gt; I think this is the result of v8 treatment of the SerializedScriptValue type. Basically I want this field to contain anything that SerializedScriptValue can handle, and nothing it can&apos;t. There are a couple other instances where we use this type in IDL, but it has some semantic problems when we do. See Dominic&apos;s comment #3 above in this thread.

We should use the code generator here.  If we&apos;re an inch away from generating the code we need, then we should advance the code generator that inch.  It&apos;s also possible, however, that the code generator is right and that the WebIntents spec is wrong w.r.t. null/undefined.  That&apos;s one of the reasons we like the code generator: it helps us be consistent.

&gt; &gt;&gt; Source/WebCore/page/Navigator.cpp:343
&gt; &gt;&gt; +    int id = m_frame-&gt;page()-&gt;intentsController()-&gt;assignIntentId(successCallback, errorCallback);
&gt; &gt; 
&gt; &gt; You did a bunch of extra null checking, but you forgot to null check m_frame-&gt;page(), which actually can be null.
&gt; &gt; 
&gt; &gt; It&apos;s very unlikely that intentsController should be a page-scoped object.  Shouldn&apos;t we have one per ScriptExecutionContext?
&gt; 
&gt; Yeah, this is a good question, and I&apos;m not really sure. The constraint is that when an intent reply comes back, we can&apos;t map it to an incorrect callback. The way I understand the Page/ScriptExecutionContext lifetimes, we could get a new ScriptExecutionContext which might then grab an ID which is duplicate to one that had already been issued, so we need to make sure the counter is scoped at least to the Page. I&apos;ve switched this code to just use a static counter, though, so I believe that means it can be moved to share lifetime with the ScriptExecutionContext.

Great.  A static counter is almost certainly the right thing.  Having a per-Page counter is a recipe for sadness.

&gt; How does ref counting on the callbacks work?

I&apos;m not sure I can answer your question at this level of generality.  Callbacks are RefCounted objects.  If you want to keep them alive, you need to store them in a RefPtr.

&gt; Since I&apos;m storing those in the registry, will they be inactivated if the ScriptExecutionContext they are associated with gets deleted?

Yes, but if their script execution context is gone, you can&apos;t execute them anyway.

&gt; If they can be deleted out from under the registry then the lifetime needs to be identical to the script context, or if it is hard to keep track of the lifetime, the same argument applies.

I don&apos;t really understand what you&apos;re saying here.  If you hold a RefPtr to them, they&apos;ll stay alive.  If you call them, they&apos;ll run.  It&apos;s unlikely that we&apos;ll want to run them if their script execution context is no longer active (i.e., displayed in a Frame).

The WebIntents spec should contain all of these details.  If the spec is missing these details, we need to add them.  The general philosophy is that the web platform should not expose any details of JavaScript garbage collection to the platform.  That means the behavior of these callbacks needs to be defined without depending on any details of garbage collection.  Concretely, that means we need to define precisely when the callback will and will not be called in the specification and then we need to implement the specification.

&gt; &gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1821
&gt; &gt;&gt; +    m_frame-&gt;page()-&gt;intentsController()-&gt;postResult(replyString, intentIdentifier);
&gt; &gt; 
&gt; &gt; How do you know this result is going back to the right security context?  Page can contain many different documents over its lifetime.
&gt; 
&gt; The ID should ensure that only the registered callbacks get notified for a given intent. I think I&apos;m doing this correctly now.

Ok.

&gt; &gt;&gt; Source/WebKit/chromium/src/WebIntent.cpp:46
&gt; &gt;&gt; +    , m_identifier(intent.identifier())
&gt; &gt; 
&gt; &gt; Why do we copy out all these fields instead of just take a reference to the WebCore::Intent object?  That&apos;s the usual pattern for API objects that wrap WebCore concepts.
&gt; 
&gt; Is there an example of doing that and how it interacts with wanting to flag off the WebCore type?

http://trac.webkit.org/browser/trunk/Source/WebKit/chromium/public/WebNode.h is the canonical example.  I&apos;m not sure what you mean by &quot;flag off&quot; but I believe we define the API assuming all features are enabled and then have stub implementations for features that are not enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526665</commentid>
    <comment_count>45</comment_count>
      <attachid>120415</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-22 17:36:18 -0800</bug_when>
    <thetext>Comment on attachment 120415
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=120415&amp;action=review

Anyway, this review is mixing together many issues because this patch is way too large.  Please break the patch up in the small, reviewable pieces and we&apos;ll cover these issues as we get to them.

&gt; Source/WebCore/Modules/intents/IntentsController.cpp:53
&gt; +    static Mutex lastUsedIntentIdMutex;
&gt; +    MutexLocker locker(lastUsedIntentIdMutex);

We shouldn&apos;t have a mutex.  The DOM has only one thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526742</commentid>
    <comment_count>46</comment_count>
      <attachid>120415</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-22 22:10:36 -0800</bug_when>
    <thetext>Comment on attachment 120415
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=120415&amp;action=review

&gt;&gt; Source/WebCore/Modules/intents/IntentsController.cpp:53
&gt;&gt; +    MutexLocker locker(lastUsedIntentIdMutex);
&gt; 
&gt; We shouldn&apos;t have a mutex.  The DOM has only one thread.

If it did, a static mutex would likely be incorrect and in this case, it should use atomicIncrement anyway.

Personally, I&apos;d add an ASSERT(isMainThread()); just to document the lack of thread safety (when you get rid of the mutex, etc.) in case one day this comes to be used with Web Workers. (The assert will make it easier to find and fix this place.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529101</commentid>
    <comment_count>47</comment_count>
      <attachid>121006</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-03 15:25:50 -0800</bug_when>
    <thetext>Created attachment 121006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529105</commentid>
    <comment_count>48</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-03 15:33:09 -0800</bug_when>
    <thetext>OK, I&apos;ve reduced the scope of this patch quite a bit. I&apos;m going to make the intents controller co-exist with the ScriptExecutionContext separately and send that once we&apos;re happy with this. (It&apos;ll obviously depend on this code.) This patch now just focuses on the Intent object, IDL, &quot;new Intent&quot;, and the layout test for that.

The biggest obstacle I think is the wish to get the code generator working for this case. I&apos;ve left in the custom code for now, since the test passes and that&apos;s a good baseline, but I think we agree that the right approach is to get rid of that and do what&apos;s necessary for code gen to get us there. Dominic, did you get in patches that help close this gap? If there&apos;s anything left, I can work on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529107</commentid>
    <comment_count>49</comment_count>
      <attachid>121006</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 15:37:16 -0800</bug_when>
    <thetext>Comment on attachment 121006
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121006&amp;action=review

This looks great.  We just need to remove the custom bindings code.

&gt; Source/WebCore/ChangeLog:3
&gt; +        [Web Intents] Flagged-off WebCore implementation of navigator.startActivity

It would be nice to update this text to match the updated name of the bug.

&gt; Source/WebKit/chromium/ChangeLog:5153
&gt; +        * public/WebIntentsClient.h: Added.
&gt; +        (WebKit::WebIntentsClient::~WebIntentsClient):
&gt; +        * public/WebIntentsController.h: Added.
&gt; +        * public/WebViewClient.h:
&gt; +        (WebKit::WebViewClient::webIntentsClient):
&gt; +        * src/WebIntentsController.cpp: Added.
&gt; +        (WebKit::WebIntentsController::webIntentReply):

These changes look spurious

&gt; Source/WebCore/Modules/intents/Intent.cpp:61
&gt; +void Intent::setData(PassRefPtr&lt;SerializedScriptValue&gt; data)

Should this just be a SerializedScriptValue* ?  This function doesn&apos;t take ownership of the data.

&gt; Source/WebCore/Modules/intents/Intent.cpp:63
&gt; +    if (data.get())

No need for &quot;.get()&quot;.  PassRefPtr has a bool operator.

&gt; Source/WebCore/Modules/intents/Intent.idl:31
&gt; +      CustomConstructFunction,
&gt; +      V8CustomConstructor,

Why does this need a custom constructor?

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:45
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::constructorCallback(const v8::Arguments&amp; args)

This function is full of bugs.  We should just auto-generate it.

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:94
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)

This should be auto-generated as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529109</commentid>
    <comment_count>50</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 15:39:33 -0800</bug_when>
    <thetext>&gt; OK, I&apos;ve reduced the scope of this patch quite a bit.

Thanks for doing that.

&gt; The biggest obstacle I think is the wish to get the code generator working for this case. I&apos;ve left in the custom code for now, since the test passes and that&apos;s a good baseline, but I think we agree that the right approach is to get rid of that and do what&apos;s necessary for code gen to get us there. Dominic, did you get in patches that help close this gap? If there&apos;s anything left, I can work on it.

The problem is that the custom bindings code in the patch is full of bugs.  (Almost every line of code contains a bug of some sort.)  Don&apos;t feel bad about that.  It&apos;s true of almost all the hand-written bindings code.  That&apos;s why we autogenerate it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529112</commentid>
    <comment_count>51</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 15:40:48 -0800</bug_when>
    <thetext>It shouldn&apos;t be too hard to teach the code generator how to handle these cases.  I think it might actually handle most of them already.  In the worst case, we can start with just one of the constructors and add the overloaded one once we&apos;ve improved the code generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529179</commentid>
    <comment_count>52</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 17:09:33 -0800</bug_when>
    <thetext>I&apos;m curious why you re-titled this bug back to it&apos;s old title.  I changed the title for you because the current title isn&apos;t the way we usually name bugs in WebKit.

1) A prefix like [Web Intents] is usually used to tell most reviewers to ignore your patch because it only affects a subset of ports (e.g., [Qt] or [V8]).  That&apos;s not appropriate here because we&apos;d like to welcome all reviewers to look at this bug.

2) All feature work in WebKit occurs behind ifdefs, which means the phrase &quot;flagged-off&quot; isn&apos;t helpful.  Having that in the title just creates the impression that you&apos;ll looking for some sort of lax review because this feature isn&apos;t enabled by default in some configuration you have in mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529188</commentid>
    <comment_count>53</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-03 17:14:37 -0800</bug_when>
    <thetext>I&apos;ve been doing some exploration with the code generator. Here&apos;s what I&apos;ve found:

Setting the type to &apos;any&apos; results in undefined objects -- the code generator doesn&apos;t treat these specially, and just in-place uses the string. So I think we&apos;re at quite a distance from using that convention, and it isn&apos;t really what we want anyway.

Using &apos;SerializedScriptValue&apos; simply refuses to generate the right attribute functions. I think this is because of the exclusion in 1874 (GenerateSingleBatchedAttribute).

I also tried &apos;DOMObject&apos;, following MessageEvent. That generates code, but misses the SerializedScriptValue pathway in NativeToJSValue, resulting in a missing SerializedScriptValue::v8Value() call. Adding that isn&apos;t too hard, though.

So what&apos;s a good direction? I suspect the right approach is to make the codegen support SerializedScriptValue. It seems like it might be close, and expresses what we want to say in the spec and IDL. Seeing the MessageEvent, though, makes me suspect there are complications (it uses all custom code as well).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529191</commentid>
    <comment_count>54</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-03 17:17:31 -0800</bug_when>
    <thetext>Sorry for the description confusion. I think we may have mid-air collided. I thought I was changing the original title to something that didn&apos;t include &quot;navigator.startActivity&quot;, which isn&apos;t really accurate. Removed the other miscues. Feel free to change it to something appropriate and helpful, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529196</commentid>
    <comment_count>55</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 17:20:13 -0800</bug_when>
    <thetext>(In reply to comment #54)

Thanks.  (Looking at your code generator question now.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529198</commentid>
    <comment_count>56</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-03 17:26:12 -0800</bug_when>
    <thetext>It looks like http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm already has some special cases for SerializedScriptValue. 

http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl seems to imply that we&apos;ve already thought about the case of a SerializedScriptValue attribute.  Does using the type &quot;SerializedScriptValue&quot; not work the way you want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529609</commentid>
    <comment_count>57</comment_count>
      <attachid>121125</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-04 10:54:49 -0800</bug_when>
    <thetext>Created attachment 121125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529615</commentid>
    <comment_count>58</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-04 11:00:59 -0800</bug_when>
    <thetext>(In reply to comment #56)
&gt; It looks like http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/scripts/CodeGeneratorV8.pm already has some special cases for SerializedScriptValue. 
&gt; 
&gt; http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl seems to imply that we&apos;ve already thought about the case of a SerializedScriptValue attribute.  Does using the type &quot;SerializedScriptValue&quot; not work the way you want?

I&apos;ve uploaded a new patch with some adjustments to the code generator. As you&apos;ll see, it&apos;s not meant to be final; I&apos;m not sure why the constraints on the codegen were in to eliminate SerializedScriptValue args from the constructor and getter functions. It looks like they are on purpose, though, and disabling them and making some changes to the object API results in things basically working.

Does this look like the thing to do? I need to adjust the bindings test to account for this, and add a test for the constructor. It looks to me like the SSV is intended to be supported in the constructor, but it is not, currently, without something like this patch. (There&apos;s no usage or test for it.) The getter exclusion I don&apos;t understand. Does it have to do with resolving the ambiguity of what happens if you did this:

var mine = {a: &apos;b&apos;};
var i = new Intent(&quot;a&quot;, &quot;t&quot;, mine);
mine.a = c;

now what is i.data.a?

It seems to me that documenting the param as readonly resolves this (it should be &apos;b&apos;). But is V8 doing things behind the scenes with reusing these objects that makes that contract undesirable?

In my create() function, I&apos;m just copying off the input, so I can do error checking and so forth there (I haven&apos;t moved that logic from the custom constructor to the Intent object in the patch yet, pending feedback over whether this is the right approach.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529649</commentid>
    <comment_count>59</comment_count>
      <attachid>121125</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 11:40:00 -0800</bug_when>
    <thetext>Comment on attachment 121125
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121125&amp;action=review

I don&apos;t fully understand the issue you&apos;re running into.  I&apos;m going to try to find some time today to apply this patch locally and see if I can figure out what issues you&apos;re running into.

&gt; Source/WebCore/Modules/intents/Intent.idl:35
&gt; +        readonly attribute [InitializedByConstructor] DOMString action;
&gt; +        readonly attribute [InitializedByConstructor] DOMString type;
&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;

I don&apos;t think you need the InitializedByConstructor attribute.  That&apos;s for subclasses of Event.

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:94
&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)

data isn&apos;t marked custom anymore.  I&apos;m not sure how this compiles....

&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:100
&gt; +    SerializedScriptValue* serializedValue = impl-&gt;data();
&gt; +    if (serializedValue)
&gt; +        return serializedValue-&gt;deserialize();

So, the general problem is that this function will return a new object ever time the getter is called.  Presumably that&apos;s not what you intend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529656</commentid>
    <comment_count>60</comment_count>
      <attachid>121125</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-04 11:52:43 -0800</bug_when>
    <thetext>Comment on attachment 121125
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121125&amp;action=review

&gt;&gt; Source/WebCore/bindings/v8/custom/V8IntentCustom.cpp:94
&gt;&gt; +v8::Handle&lt;v8::Value&gt; V8Intent::dataAccessorGetter(v8::Local&lt;v8::String&gt; name, const v8::AccessorInfo&amp; info)
&gt; 
&gt; data isn&apos;t marked custom anymore.  I&apos;m not sure how this compiles....

I commented it out of the build. Basically this patch version is to get feedback on the direction to go with the codegen. I plan on deleting this entire file from the patch once we get settled on what to do there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529664</commentid>
    <comment_count>61</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 12:03:26 -0800</bug_when>
    <thetext>Ah, I understand now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529668</commentid>
    <comment_count>62</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 12:06:28 -0800</bug_when>
    <thetext>I&apos;m having trouble finding the specification for WebIntents.  I found http://webintents.org/ but the &quot;Specification&quot; link just goes back to the home page, but that&apos;s clearly not the spec because it doesn&apos;t even have the WebIDL for Intent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529677</commentid>
    <comment_count>63</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-04 12:33:47 -0800</bug_when>
    <thetext>http://www.chromium.org/developers/design-documents/webintentsapi (It&apos;s in the ChangeLog on this patch.)

But the official W3C draft version is in process as we speak. There should be a URL for that soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529730</commentid>
    <comment_count>64</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 14:00:26 -0800</bug_when>
    <thetext>Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529773</commentid>
    <comment_count>65</comment_count>
      <attachid>121158</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 14:47:53 -0800</bug_when>
    <thetext>Created attachment 121158
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529785</commentid>
    <comment_count>66</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 14:59:32 -0800</bug_when>
    <thetext>Ok.  I understand the problem you&apos;re running into now.  The next question I have is what behavior you&apos;re trying to create.

The spec is pretty vague, but it says that data is a structured clone &quot;that constitutes the payload to send to the service.&quot;

I&apos;m assuming what you want is that we create a structured clone of the parameter to the constructor.  In the IDL in the spec, |data| is not marked readonly.  What is the expected behavior when you assign to |data|?  Should |data| then become a structured clone of the value you assigned?

In the short term, I&apos;m going to recommend we keep this value as readonly and populate the JS property in the constructor.  I&apos;ll try to create a proof-of-concept patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529807</commentid>
    <comment_count>67</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-04 15:11:03 -0800</bug_when>
    <thetext>So, the proximate cause of the problem is that V8Intent::constructorCallback doesn&apos;t call SerializedScriptValue::deserializeAndSetProperty like V8Intent::wrapSlow does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530075</commentid>
    <comment_count>68</comment_count>
      <attachid>121233</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 00:57:59 -0800</bug_when>
    <thetext>Created attachment 121233
Seems to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530076</commentid>
    <comment_count>69</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 00:59:16 -0800</bug_when>
    <thetext>Greg, I spent some time looking at this issue, and the attached patch seems to work.  If this approach works for you, we should probably split off the CodeGenerator changes into a separate patch and then landing the Intents patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530408</commentid>
    <comment_count>70</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 10:36:48 -0800</bug_when>
    <thetext>(In reply to comment #66)
&gt; Ok.  I understand the problem you&apos;re running into now.  The next question I have is what behavior you&apos;re trying to create.
&gt; 
&gt; The spec is pretty vague, but it says that data is a structured clone &quot;that constitutes the payload to send to the service.&quot;
&gt; 
&gt; I&apos;m assuming what you want is that we create a structured clone of the parameter to the constructor.  In the IDL in the spec, |data| is not marked readonly.  What is the expected behavior when you assign to |data|?  Should |data| then become a structured clone of the value you assigned?

There&apos;s a W3C version now at http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html

It fixes this error of |data| not being marked readonly. Yes, the goal is that when the constructor is called, the |data| member of the Intent object is a snapshot of the value in the third constructor argument, provided it passes the structured clone algorithm, and an error is thrown if it cannot pass the structured clone algorithm. I think I&apos;ve expressed this in the webkit IDL, but the exception isn&apos;t in the IDL in the spec yet.

 
&gt; In the short term, I&apos;m going to recommend we keep this value as readonly and populate the JS property in the constructor.  I&apos;ll try to create a proof-of-concept patch.

Thanks! I agree that splitting that off first is a good plan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530439</commentid>
    <comment_count>71</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 11:01:47 -0800</bug_when>
    <thetext>(In reply to comment #69)
&gt; Greg, I spent some time looking at this issue, and the attached patch seems to work.  If this approach works for you, we should probably split off the CodeGenerator changes into a separate patch and then landing the Intents patch.

I think I understand this: The way I&apos;m reading it, the codegen will still not generate the getter, but that&apos;s OK, because the DOM wrapper object now has access to a copy of the data. Is that right?

Does that mean there&apos;s two copies of the data, one in the Intent object and another in the DOM wrapper?

Also, just to make sure I get it, will that allow the user to set values into an Intent object data field after initialization? Or will that throw an error given the modifiers in line 222 in the codegen (marking the object v8::ReadOnly).

I believe my test should catch any issues like this, so if it passes, I&apos;m happy, modulo worries about potentially duplicating a large payload. :-) Just technically, though, is it better to make a copy of the data initially so that it is accessible to JS, rather than making a copy on demand (which the accessor would end up doing, I think, right). That may depend on usage. I would expect client code would very rarely access this field, since they are in control of setting it and presumably have better access to the data in its original form while they&apos;re preparing the Intent object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530491</commentid>
    <comment_count>72</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 11:45:00 -0800</bug_when>
    <thetext>&gt; I think I understand this: The way I&apos;m reading it, the codegen will still not generate the getter, but that&apos;s OK, because the DOM wrapper object now has access to a copy of the data. Is that right?

Right, the object gets snapshotted and stored in the wrapper object as a JavaScript object.

&gt; Does that mean there&apos;s two copies of the data, one in the Intent object and another in the DOM wrapper?

Yes.  The one attached to the wrapper can be mutated by the page, but the one on the Intent object is frozen in time.

&gt; Also, just to make sure I get it, will that allow the user to set values into an Intent object data field after initialization?

Correct.  It&apos;s just like an expando DOM property at that point.

&gt; Or will that throw an error given the modifiers in line 222 in the codegen (marking the object v8::ReadOnly).

That only affects the |data| slot.  So, you can&apos;t wholesale assign to the |data| member of the object, but you can mutate the object stored as the |data| member.

&gt; I believe my test should catch any issues like this, so if it passes, I&apos;m happy, modulo worries about potentially duplicating a large payload. :-)

Yep.  Your test passes (after I modified it to know that a zero argument constructor throws and exception).

&gt; Just technically, though, is it better to make a copy of the data initially so that it is accessible to JS, rather than making a copy on demand (which the accessor would end up doing, I think, right).

This seems to be the pattern we&apos;re using for SerializedScriptValues elsewhere.  This case wasn&apos;t handled because you had a constructible object.

&gt; That may depend on usage. I would expect client code would very rarely access this field, since they are in control of setting it and presumably have better access to the data in its original form while they&apos;re preparing the Intent object.

Ok.  The way I would approach this problem is to put a FIXME into the code and worry about this optimization later.  My sense is that will let us move forward and get the rest of this features reviewed and landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530513</commentid>
    <comment_count>73</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 12:07:10 -0800</bug_when>
    <thetext>(In reply to comment #72)
&gt; &gt; I think I understand this: The way I&apos;m reading it, the codegen will still not generate the getter, but that&apos;s OK, because the DOM wrapper object now has access to a copy of the data. Is that right?
&gt; 
&gt; Right, the object gets snapshotted and stored in the wrapper object as a JavaScript object.
&gt; 
&gt; &gt; Does that mean there&apos;s two copies of the data, one in the Intent object and another in the DOM wrapper?
&gt; 
&gt; Yes.  The one attached to the wrapper can be mutated by the page, but the one on the Intent object is frozen in time.
&gt; 
&gt; &gt; Also, just to make sure I get it, will that allow the user to set values into an Intent object data field after initialization?
&gt; 
&gt; Correct.  It&apos;s just like an expando DOM property at that point.
&gt; 
&gt; &gt; Or will that throw an error given the modifiers in line 222 in the codegen (marking the object v8::ReadOnly).
&gt; 
&gt; That only affects the |data| slot.  So, you can&apos;t wholesale assign to the |data| member of the object, but you can mutate the object stored as the |data| member.
&gt; 
&gt; &gt; I believe my test should catch any issues like this, so if it passes, I&apos;m happy, modulo worries about potentially duplicating a large payload. :-)
&gt; 
&gt; Yep.  Your test passes (after I modified it to know that a zero argument constructor throws and exception).
&gt; 
&gt; &gt; Just technically, though, is it better to make a copy of the data initially so that it is accessible to JS, rather than making a copy on demand (which the accessor would end up doing, I think, right).
&gt; 
&gt; This seems to be the pattern we&apos;re using for SerializedScriptValues elsewhere.  This case wasn&apos;t handled because you had a constructible object.
&gt; 
&gt; &gt; That may depend on usage. I would expect client code would very rarely access this field, since they are in control of setting it and presumably have better access to the data in its original form while they&apos;re preparing the Intent object.
&gt; 
&gt; Ok.  The way I would approach this problem is to put a FIXME into the code and worry about this optimization later.  My sense is that will let us move forward and get the rest of this features reviewed and landed.

Sounds good. Will you split off this codegen change for review? I&apos;m happy to do it, but it&apos;s definitely your work; I understand what it&apos;s doing now, but could not have produced it. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530519</commentid>
    <comment_count>74</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 12:12:45 -0800</bug_when>
    <thetext>&gt; Sounds good. Will you split off this codegen change for review? I&apos;m happy to do it, but it&apos;s definitely your work; I understand what it&apos;s doing now, but could not have produced it. :-)

Sure.  I&apos;d be happy to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530678</commentid>
    <comment_count>75</comment_count>
      <attachid>121343</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 15:14:43 -0800</bug_when>
    <thetext>Created attachment 121343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530682</commentid>
    <comment_count>76</comment_count>
      <attachid>121343</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2012-01-05 15:18:21 -0800</bug_when>
    <thetext>Comment on attachment 121343
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121343&amp;action=review

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1874
&gt; +#    return if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;);

I don&apos;t think you meant to include this in your change.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2241
&gt; +            # next;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530688</commentid>
    <comment_count>77</comment_count>
      <attachid>121343</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 15:21:02 -0800</bug_when>
    <thetext>Comment on attachment 121343
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121343&amp;action=review

&gt; Source/WebCore/Modules/intents/Intent.idl:29
&gt; +      ConstructorParameters=3,

This isn&apos;t needed.

&gt; Source/WebCore/Modules/intents/Intent.idl:35
&gt; +        readonly attribute [InitializedByConstructor] DOMString action;
&gt; +        readonly attribute [InitializedByConstructor] DOMString type;
&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;

[InitializedByConstructor] isn&apos;t needed.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1874
&gt; -    return if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;);
&gt; +#    return if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;);

This isn&apos;t needed.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2241
&gt; -            next;
&gt; +            # next;

Nor is this.

&gt; Source/WebCore/page/DOMWindow.idl:612
&gt; +        attribute [Conditional=WEB_INTENTS] IntentConstructor Intent; // Usable with the new operator

We should actually use the new supplemental machinery here (see DOMWindowWebAudio.idl), but lets do that in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530718</commentid>
    <comment_count>78</comment_count>
      <attachid>121343</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 15:42:27 -0800</bug_when>
    <thetext>Comment on attachment 121343
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121343&amp;action=review

&gt;&gt; Source/WebCore/Modules/intents/Intent.idl:29
&gt;&gt; +      ConstructorParameters=3,
&gt; 
&gt; This isn&apos;t needed.

Done

&gt;&gt; Source/WebCore/Modules/intents/Intent.idl:35
&gt;&gt; +        readonly attribute [InitializedByConstructor] SerializedScriptValue data;
&gt; 
&gt; [InitializedByConstructor] isn&apos;t needed.

Done

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1874
&gt;&gt;&gt; +#    return if ($attribute-&gt;signature-&gt;type eq &quot;SerializedScriptValue&quot;);
&gt;&gt; 
&gt;&gt; I don&apos;t think you meant to include this in your change.
&gt; 
&gt; This isn&apos;t needed.

Oops! Killing this file from patch...

&gt;&gt; Source/WebCore/page/DOMWindow.idl:612
&gt;&gt; +        attribute [Conditional=WEB_INTENTS] IntentConstructor Intent; // Usable with the new operator
&gt; 
&gt; We should actually use the new supplemental machinery here (see DOMWindowWebAudio.idl), but lets do that in a follow-up patch.

That looks cool! Once this is in I&apos;ll change to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530731</commentid>
    <comment_count>79</comment_count>
      <attachid>121357</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 15:52:51 -0800</bug_when>
    <thetext>Created attachment 121357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530732</commentid>
    <comment_count>80</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-05 15:53:57 -0800</bug_when>
    <thetext>Near-final form (doesn&apos;t build/test without 75641, so once that&apos;s in I need to double check).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530748</commentid>
    <comment_count>81</comment_count>
      <attachid>121357</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 16:13:11 -0800</bug_when>
    <thetext>Comment on attachment 121357
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121357&amp;action=review

&gt; Source/WebCore/ChangeLog:5
&gt; +        WebCore implementation of the Intent object
&gt; +        See http://dvcs.w3.org/hg/web-intents/raw-file/tip/spec/Overview.html
&gt; +        for draft spec.

Ideally, we&apos;d include some more information in the ChangeLog, but I think this is ok for this patch.

&gt; Source/WebCore/Modules/intents/Intent.cpp:76
&gt; +void Intent::setData(SerializedScriptValue* data)

I would have just inlined this into the constructor.

&gt; Source/WebCore/Modules/intents/Intent.h:55
&gt; +    int identifier() const;
&gt; +    void setIdentifier(int);

What is an identifier?  This doesn&apos;t seem to be needed as part of this patch.  Can we add this later when needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530934</commentid>
    <comment_count>82</comment_count>
      <attachid>121400</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-05 22:24:23 -0800</bug_when>
    <thetext>Created attachment 121400
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530991</commentid>
    <comment_count>83</comment_count>
      <attachid>121400</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-06 02:11:07 -0800</bug_when>
    <thetext>Comment on attachment 121400
Patch for landing

Rejecting attachment 121400 from commit-queue.

New failing tests:
webintents/web-intents-api.html
Full output: http://queues.webkit.org/results/11143271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530994</commentid>
    <comment_count>84</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 02:15:55 -0800</bug_when>
    <thetext>We either need to enable the feature for testing or mark the tests as expected to fail on Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531146</commentid>
    <comment_count>85</comment_count>
      <attachid>121357</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 10:25:57 -0800</bug_when>
    <thetext>Comment on attachment 121357
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=121357&amp;action=review

&gt;&gt; Source/WebCore/Modules/intents/Intent.cpp:76
&gt;&gt; +void Intent::setData(SerializedScriptValue* data)
&gt; 
&gt; I would have just inlined this into the constructor.

Agreed.

&gt;&gt; Source/WebCore/Modules/intents/Intent.h:55
&gt;&gt; +    void setIdentifier(int);
&gt; 
&gt; What is an identifier?  This doesn&apos;t seem to be needed as part of this patch.  Can we add this later when needed?

Sounds fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531150</commentid>
    <comment_count>86</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 10:33:38 -0800</bug_when>
    <thetext>For the layout tests, is this webkit/tools/layout_tests/test_expectations.txt that needs changing? Or will my &apos;.../Skipped&apos; changes suffice for chromium to make sure these tests don&apos;t run? (The trybots won&apos;t have the required build flag, so they should just skip these tests for now, I think; once we turn on the feature, we&apos;ll need to enable it for testing despite being skipped by default for now in webkit, right?)

I&apos;m find with the Patch for landing you uploaded, or I can submit another that has setData merged into the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531172</commentid>
    <comment_count>87</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 10:59:27 -0800</bug_when>
    <thetext>LayoutTests/platform/chromium/test_expectations.txt is the file that needs to be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531191</commentid>
    <comment_count>88</comment_count>
      <attachid>121451</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 11:20:52 -0800</bug_when>
    <thetext>Created attachment 121451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531199</commentid>
    <comment_count>89</comment_count>
      <attachid>121453</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 11:25:58 -0800</bug_when>
    <thetext>Created attachment 121453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531201</commentid>
    <comment_count>90</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 11:27:41 -0800</bug_when>
    <thetext>(In reply to comment #87)
&gt; LayoutTests/platform/chromium/test_expectations.txt is the file that needs to be updated.

Thanks. Added. (Also updated the tests to track switch to codegen, as well as duplicate the changes to remove intent identifier and setData.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531400</commentid>
    <comment_count>91</comment_count>
      <attachid>121453</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 14:18:18 -0800</bug_when>
    <thetext>Comment on attachment 121453
Patch

Looks great.  Thanks for iterating on the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531411</commentid>
    <comment_count>92</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-01-06 14:32:32 -0800</bug_when>
    <thetext>(In reply to comment #91)
&gt; (From update of attachment 121453 [details])
&gt; Looks great.  Thanks for iterating on the patch.

Definitely. Thanks for all your help and getting the codegen set up for SerializedScriptValue! I&apos;ll start getting follow-on CLs ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531523</commentid>
    <comment_count>93</comment_count>
      <attachid>121453</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:53:52 -0800</bug_when>
    <thetext>Comment on attachment 121453
Patch

Clearing flags on attachment: 121453

Committed r104358: &lt;http://trac.webkit.org/changeset/104358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531524</commentid>
    <comment_count>94</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-01-06 16:54:02 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116428</attachid>
            <date>2011-11-23 14:25:50 -0800</date>
            <delta_ts>2011-11-28 14:49:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20111123142549.patch</filename>
            <type>text/plain</type>
            <size>41154</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2I4MDMyZTk3ZWIxZGQw
NWQ5Mjg1ZjQxYzBkZTZjMzFiYzg2MDU4My4uODA1OGVlYjFjOTdhMTExYjI2MzEzYWYyNjY5ZjUx
ZWJiYzI0ZjM0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMw
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4SW50ZW50OjpkYXRhQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxv
YWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoSW50ZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGFn
ZS9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6dHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50
OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0RGF0YSk6CisgICAgICAgICog
cGFnZS9JbnRlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OmNyZWF0ZSk6
CisgICAgICAgICogcGFnZS9JbnRlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0ludGVu
dFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50UmVzdWx0
Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxsYmFjayk6CisgICAgICAgICogcGFnZS9JbnRlbnRS
ZXN1bHRDYWxsYmFjay5pZGw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvSW50ZW50c0NvbnRyb2xs
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250cm9sbGVyOjpJbnRl
bnRzQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6fklu
dGVudHNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250cm9sbGVyOjpn
ZXRJbnRlbnRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6cG9zdFJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6cG9zdEZhaWx1cmUp
OgorICAgICAgICAqIHBhZ2UvSW50ZW50c0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICog
cGFnZS9OYXZpZ2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpzdGFydEFj
dGl2aXR5KToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlOjppbnRlbnRzQ29udHJvbGxlcik6CisKIDIwMTEtMTEtMjIgIEtlbm5ldGggUnVzc2VsbCAg
PGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU3VwcG9ydCBDb3JlIEFuaW1h
dGlvbiBwbHVnaW5zIGluIGNvbXBvc2l0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NDM4M2UyOGY3ZWUwZThiZjA1NzAyNWVkYzBkNGJlZTU0Y2ZmMTY5Yy4uZmQwZDVkNjYxNTY0MTA5
Nzc1OTYwYTdmZGFmMjUwNDk2MjA4MDI2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0xMS0yMyAgR3JlZyBCaWxsb2NrICA8Z2JpbGxvY2tAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbV2ViIEludGVudHNdIEZsYWdnZWQtb2ZmIFdlYkNvcmUgaW1wbGVt
ZW50YXRpb24gb2YgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIGZlYXR1
cmVzLmd5cGk6CisgICAgICAgICogcHVibGljL1dlYkludGVudC5oOgorICAgICAgICAqIHNyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRpc3BhdGNoSW50ZW50KToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGll
bnRJbXBsLmg6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkZyYW1lSW1wbDo6aGFuZGxlSW50ZW50UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRlbnRGYWlsdXJlKToKKyAgICAgICAgKiBzcmMvV2ViSW50
ZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50
ZW50LmguCisgICAgICAgIChXZWJLaXQ6OldlYkludGVudDo6V2ViSW50ZW50KToKKwogMjAxMS0x
MS0yMiAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBTdXBwb3J0IENvcmUgQW5pbWF0aW9uIHBsdWdpbnMgaW4gY29tcG9zaXRvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDRhYmM4NDBmZTk3MGM1YzJiMjAxMTMxNGVlZDZjNjI2YWY4Zjg1NTYuLjJh
NTMwZmM3YWE5ZTBjMDk3MzMyMzZhMjY3Y2U2MTQ3ZjA2YmVmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTE0MDksNiArMTQwOSw4IEBACiAgICAgICAgICAgICAncGFnZS9HZW9sb2NhdGlvbi5pZGwn
LAogICAgICAgICAgICAgJ3BhZ2UvR2VvcG9zaXRpb24uaWRsJywKICAgICAgICAgICAgICdwYWdl
L0hpc3RvcnkuaWRsJywKKyAgICAgICAgICAgICdwYWdlL0ludGVudC5pZGwnLAorICAgICAgICAg
ICAgJ3BhZ2UvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKICAgICAgICAgICAgICdwYWdlL0xv
Y2F0aW9uLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9NZW1vcnlJbmZvLmlkbCcsCiAgICAgICAg
ICAgICAncGFnZS9OYXZpZ2F0b3IuaWRsJywKQEAgLTIyMjIsNiArMjIyNCw3IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3RvbS5jcHAnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0b20uY3BwJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0b20uY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVj
dG9yLmNwcCcsCkBAIC0yOTYyLDYgKzI5NjUsMTEgQEAKICAgICAgICAgICAgICdwYWdlL0dyb3Vw
U2V0dGluZ3MuY3BwJywKICAgICAgICAgICAgICdwYWdlL0hpc3RvcnkuY3BwJywKICAgICAgICAg
ICAgICdwYWdlL0hpc3RvcnkuaCcsCisgICAgICAgICAgICAncGFnZS9JbnRlbnQuY3BwJywKKyAg
ICAgICAgICAgICdwYWdlL0ludGVudC5oJywKKyAgICAgICAgICAgICdwYWdlL0ludGVudHNDb250
cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAncGFnZS9JbnRlbnRzQ29udHJvbGxlci5oJywKKyAg
ICAgICAgICAgICdwYWdlL0ludGVudFJlc3VsdENhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvTG9jYXRpb24uY3BwJywKICAgICAgICAgICAgICdwYWdlL0xvY2F0aW9uLmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvTWVtb3J5SW5mby5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEzOTJjYWUy
MTA2MDkyOGFkMTQ3ZWExZGUxYTY2NTAxNzdhNWJmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAKQEAgLTAsMCAr
MSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
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
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisK
KyNpbmNsdWRlICJWOEludGVudC5oIgorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisj
aW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorCisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkludGVudC5Db25zdHJ1Y3RvciIpOwor
CisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rp
b24uIik7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAwKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ3JlYXRpbmcgZW1wdHkgaW50ZW50XG4iKTsKKyAgICAgICAgUmVmUHRyPEludGVu
dD4gaW50ZW50ID0gSW50ZW50OjpjcmVhdGUoKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRE
T01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBpbnRlbnQuZ2V0KCkpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlJldHVybmluZ1xuIik7CisgICAgICAgIHJldHVybiB0b1Y4KGludGVu
dC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0
aCgpID09IDIpIHsKKyAgICAgICAgU3RyaW5nIGFjdGlvbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhO
dWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dl
YkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisKKyAgICAgICAg
aWYgKGFjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWN0
aW9uIGNhbm5vdCBiZSBlbXB0eSIpOworICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHlwZSBjYW5ub3QgYmUgZW1wdHkiKTsKKworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNyZWF0aW5nIGludGVudCB3aXRoIG5vIGRhdGEuXG4iKTsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIGFjdGlvbj0lc1xuIiwgYWN0aW9uLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgdHlwZT0lc1xuIiwgdHlwZS51dGY4
KCkuZGF0YSgpKTsKKworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJbnRlbnQ6OmNy
ZWF0ZShhY3Rpb24sIHR5cGUpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIo
YXJncy5Ib2xkZXIoKSwgJmluZm8sIGludGVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4
KGludGVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIGlmIChhcmdz
Lkxlbmd0aCgpID09IDMpIHsKKyAgICAgICAgU3RyaW5nIGFjdGlvbiA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKKyAgICAgICAgU3RyaW5nIHR5cGUg
PSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisKKyAg
ICAgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSIpOworICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHlwZSBjYW5ub3QgYmUgZW1wdHkiKTsK
KworICAgICAgICBib29sIGV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJn
c1syXSwgMCwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJJbnRlbnQgY29uc3RydWN0b3IgZGF0YSBtdXN0IGJlIGEgc3Ry
dWN0dXJlZCBjbG9uZSIpOworCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ3JlYXRpbmcgaW50
ZW50LlxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBhY3Rpb249JXNcbiIsIGFjdGlv
bi51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIHR5cGU9JXNcbiIs
IHR5cGUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBkYXRhPSVz
XG4iLCBkYXRhLT50b1dpcmVTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBSZWZQ
dHI8SW50ZW50PiBpbnRlbnQgPSBJbnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIGRhdGEpOwor
ICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8s
IGludGVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGludGVudC5yZWxlYXNlKCksIGFy
Z3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIHJldHVybiB0aHJvd0Vycm9yKCJJbnRlbnQgY29u
c3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMiKTsKK30K
Kwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50OjpkYXRhQWNjZXNzb3JHZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7
CisgICAgSW50ZW50KiBpbXBsID0gVjhJbnRlbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwor
CisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzc3YgPSBpbXBsLT5kYXRhKCk7CisgICAgaWYg
KHNzdikKKyAgICAgICAgcmV0dXJuIHNzdi0+ZGVzZXJpYWxpemUoKTsKKworICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50LmgKaW5kZXggMzMxZjA5YzZmMGUyMTE0OWM0ZjFhMDE4M2ZjYmZkMjk4NmU5NDM0Yi4uN2M0
YjQ1ZmY3MTUyZWNlYmJjNzkwM2ZkYmY4N2U2NGE4ZTJkZTI1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTc3LDYgKzc3LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiAjZW5kaWYKICAgICBjbGFzcyBI
VE1MUGx1Z0luRWxlbWVudDsKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgY2xhc3MgSW50
ZW50OworI2VuZGlmCiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBLVVJMOwogICAgIGNs
YXNzIE5hdmlnYXRpb25BY3Rpb247CkBAIC0zMTksNiArMzIyLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+
IGNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRQYWludEJyb2tlbkltYWdlKGNvbnN0IEtVUkwmKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aEludGVudChjb25zdCBJbnRlbnQmIGludGVudCwgaW50IGlkKSB7IH0KKyNlbmRpZgogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRl
eCAyNzljYWQzNDFiMjFjZWU4MGY4NDNkM2FlZmJjNDllOTBmZDg5NzEzLi41ZjM3Mzg4ZDA0N2U0
NmQ2MGQ2MjBiZWYyMTc2ZjRiYWY0YzcyMDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
CkBAIC02MTcsNiArNjE3LDEwIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUg
W0VuYWJsZWRBdFJ1bnRpbWU9d2Via2l0VmlkZW9UcmFja10gVHJhY2tFdmVudENvbnN0cnVjdG9y
IFRyYWNrRXZlbnQ7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoRU5BQkxFX1dFQl9JTlRFTlRTKSAm
JiBFTkFCTEVfV0VCX0lOVEVOVFMKKyAgICAgICAgYXR0cmlidXRlIEludGVudENvbnN0cnVjdG9y
IEludGVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorI2VuZGlmCisKICAgICAg
ICAgYXR0cmlidXRlIERPTVBsdWdpbkNvbnN0cnVjdG9yIFBsdWdpbjsKICAgICAgICAgYXR0cmli
dXRlIERPTVBsdWdpbkFycmF5Q29uc3RydWN0b3IgUGx1Z2luQXJyYXk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NDg2NDRmNTllZWY0OGRmYTA2MzhiYTE5NDNlMGUwM2FjNGIz
YmViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlbnQuY3BwCkBA
IC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50LmgiCisKKyNp
ZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRlbnQ6OkludGVudCgpCit7CisgICAgbV9k
YXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKK30KKworSW50ZW50OjpJ
bnRlbnQoU3RyaW5nIGFjdGlvbiwgU3RyaW5nIHR5cGUpCit7CisgICAgc2V0QWN0aW9uKGFjdGlv
bik7CisgICAgc2V0VHlwZSh0eXBlKTsKKyAgICBtX2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpOworfQorCitJbnRlbnQ6OkludGVudChTdHJpbmcgYWN0aW9uLCBTdHJp
bmcgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycERhdGEpCit7Cisg
ICAgc2V0QWN0aW9uKGFjdGlvbik7CisgICAgc2V0VHlwZSh0eXBlKTsKKyAgICBzZXREYXRhKHBy
cERhdGEpOworfQorCitTdHJpbmcgSW50ZW50OjphY3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2FjdGlvbjsKK30KKwordm9pZCBJbnRlbnQ6OnNldEFjdGlvbihjb25zdCBTdHJpbmcmIGFj
dGlvbikKK3sKKyAgICBtX2FjdGlvbiA9IGFjdGlvbjsKK30KKworU3RyaW5nIEludGVudDo6dHlw
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZTsKK30KKwordm9pZCBJbnRlbnQ6OnNldFR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIG1fdHlwZSA9IHR5cGU7Cit9CisKK1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogSW50ZW50OjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhLmdldCgpOworfQorCit2b2lkIEludGVudDo6c2V0RGF0YShQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gcHJwRGF0YSkKK3sKKyAgICBpZiAocHJwRGF0YS5nZXQoKSkKKyAgICAg
ICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShwcnBEYXRh
LT50b1dpcmVTdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTE5MTU2MDMwOGZkMDE3MTA1OGY2YzMyNGRmYjYyMzk2MGUzYWExYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgi
R29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50
ZW50X2gKKyNkZWZpbmUgSW50ZW50X2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK2NsYXNzIEludGVudCA6IHB1YmxpYyBSZWZDb3VudGVk
PEludGVudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudCgpKTsgfQorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW50ZW50PiBjcmVhdGUoCisgICAgICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uLAorICAg
ICAgICBjb25zdCBTdHJpbmcmIHR5cGUpIHsKKyAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50
ZW50KGFjdGlvbiwgdHlwZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVu
dD4gY3JlYXRlKAorICAgICAgICBjb25zdCBTdHJpbmcmIGFjdGlvbiwKKyAgICAgICAgY29uc3Qg
U3RyaW5nJiB0eXBlLAorICAgICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
cHJwRGF0YSkgeworICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBl
LCBwcnBEYXRhKSk7CisgICAgfQorCisgICAgU3RyaW5nIGFjdGlvbigpIGNvbnN0OworICAgIHZv
aWQgc2V0QWN0aW9uKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSogZGF0YSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gcHJwRGF0YSk7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRlbnQoKTsKKyAgICBJ
bnRlbnQoU3RyaW5nIGFjdGlvbiwgU3RyaW5nIHR5cGUpOworICAgIEludGVudChTdHJpbmcgYWN0
aW9uLCBTdHJpbmcgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycERh
dGEpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2FjdGlvbjsKKyAgICBTdHJpbmcgbV90eXBl
OworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9JbnRlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5ZTNjZWQwNjgyNzhiZGM3NzI1YzFmZTQzMGZiNTQ5
OWM5NWU2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVudC5p
ZGwKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2Ug
WworICAgICAgQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDYW5CZUNvbnN0cnVjdGVk
LAorICAgICAgQ3VzdG9tQ29uc3RydWN0RnVuY3Rpb24sCisgICAgICBWOEN1c3RvbUNvbnN0cnVj
dG9yLAorICBdIEludGVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
YWN0aW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBhbnkgZGF0YTsKKyAgfTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MDg4M2U3MGFlNjNlMTA5MzZmN2M1ZjU5NTNhNWNiY2Q2YjFiZWYzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlbnRSZXN1bHRDYWxsYmFjay5oCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEludGVudFJlc3VsdENhbGxiYWNrX2gKKyNkZWZpbmUgSW50ZW50UmVzdWx0Q2Fs
bGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRT
YWZlUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50
UmVzdWx0Q2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SW50ZW50UmVzdWx0
Q2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnRlbnRSZXN1bHRDYWxsYmFjaygp
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiByZXN1bHQpID0gMDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRl
bnRSZXN1bHRDYWxsYmFja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVu
dFJlc3VsdENhbGxiYWNrLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50UmVzdWx0Q2Fs
bGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNTViZTFjYTY5MGFjMTcxNDAzNTUwNmFlZGMyZDJlY2E3
N2ZlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVudFJlc3Vs
dENhbGxiYWNrLmlkbApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7Cisg
IGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIExlZ2Fj
eURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seQor
ICBdIEludGVudFJlc3VsdENhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChp
biBTZXJpYWxpemVkU2NyaXB0VmFsdWUgcmVzdWx0KTsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9JbnRlbnRzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjA0YzFlYWU4MTY0NGU1MzQz
YTYzZGI1M2FhZjJkZmI3MTQyZjkxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvSW50ZW50c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIKKworI2lmIEVO
QUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxiYWNrLmgiCisj
aW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW50ZW50c0NvbnRyb2xsZXI6OkludGVudHNDb250cm9sbGVyKCkKK3sKK30KKworSW50ZW50
c0NvbnRyb2xsZXI6On5JbnRlbnRzQ29udHJvbGxlcigpCit7Cit9CisKK2ludCBJbnRlbnRzQ29u
dHJvbGxlcjo6Z2V0SW50ZW50SWQoUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQoreworICAgIGludCBpZCA9IG1fc3VjY2Vzc0NhbGxiYWNrcy5zaXplKCk7CisgICAgbV9z
dWNjZXNzQ2FsbGJhY2tzLmFwcGVuZChzdWNjZXNzQ2FsbGJhY2spOworICAgIG1fZXJyb3JDYWxs
YmFja3MuYXBwZW5kKGVycm9yQ2FsbGJhY2spOworICAgIHJldHVybiBpZDsKK30KKwordm9pZCBJ
bnRlbnRzQ29udHJvbGxlcjo6cG9zdFJlc3VsdChTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCkK
K3sKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YSk7CisgICAgaWYgKG1fc3VjY2Vzc0NhbGxi
YWNrc1tpbnRlbnRJZF0uZ2V0KCkpCisgICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrc1tpbnRlbnRJ
ZF0tPmhhbmRsZUV2ZW50KHZhbHVlKTsKKworICAgIG1fc3VjY2Vzc0NhbGxiYWNrc1tpbnRlbnRJ
ZF0uY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tzW2ludGVudElkXS5jbGVhcigpOworfQor
Cit2b2lkIEludGVudHNDb250cm9sbGVyOjpwb3N0RmFpbHVyZShTdHJpbmcmIGRhdGEsIGludCBp
bnRlbnRJZCkKK3sKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YSk7CisgICAgaWYgKG1fZXJy
b3JDYWxsYmFja3NbaW50ZW50SWRdLmdldCgpKQorICAgICAgICBtX2Vycm9yQ2FsbGJhY2tzW2lu
dGVudElkXS0+aGFuZGxlRXZlbnQodmFsdWUpOworCisgICAgbV9zdWNjZXNzQ2FsbGJhY2tzW2lu
dGVudElkXS5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFja3NbaW50ZW50SWRdLmNsZWFyKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5U
RU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50c0NvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZW50c0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
NjU2ZWE4ZTRmYTI0YjBkZmFhNWRhY2I0NmI1N2RiMDI1M2Q4Zjk1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlbnRzQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEludGVudHNDb250cm9sbGVyX2gKKyNkZWZpbmUgSW50ZW50c0Nv
bnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFj
azsKKworY2xhc3MgSW50ZW50c0NvbnRyb2xsZXIgeworcHVibGljOgorICAgIEludGVudHNDb250
cm9sbGVyKCk7CisgICAgfkludGVudHNDb250cm9sbGVyKCk7CisKKyAgICBpbnQgZ2V0SW50ZW50
SWQoUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNz
UmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKKworICAgIHZvaWQg
cG9zdFJlc3VsdChTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCk7CisgICAgdm9pZCBwb3N0RmFp
bHVyZShTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCk7CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBtX3N1Y2Nlc3NDYWxsYmFja3M7CisgICAg
VmVjdG9yPFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBtX2Vycm9yQ2FsbGJhY2tzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRF
TlRTKQorCisjZW5kaWYgLy8gSW50ZW50c0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0
b3IuY3BwCmluZGV4IGRlNTRkYzUxZTFlYmQxNjE2M2YzZjNjNjk0ZWY1Y2I1N2U2OTBhN2IuLmRl
NTJiNDZmMjMwZWM4YmI1M2VlZWRlZWVmMTkwYzFhNWU0NWM2MWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5jcHAKQEAgLTMzLDYgKzMzLDkgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIK
KyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgor
I2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUG9pbnRlckxvY2suaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKQEAgLTMxNiw0ICszMTks
MjcgQEAgR2FtZXBhZExpc3QqIE5hdmlnYXRvcjo6d2Via2l0R2FtZXBhZHMoKQogfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCit2b2lkIE5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0
eShQYXNzUmVmUHRyPEludGVudD4gaW50ZW50LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZnJhbWUoKSB8fCAh
ZnJhbWUoKS0+bG9hZGVyKCkgfHwgIWZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhaW50
ZW50LmdldCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoaW50ZW50LT5hY3Rpb24oKS5pc0VtcHR5KCkgfHwgaW50
ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gVkFMSURBVElPTl9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGlkID0gbV9mcmFtZS0+cGFnZSgpLT5p
bnRlbnRzQ29udHJvbGxlcigpLT5nZXRJbnRlbnRJZChzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2Fs
bGJhY2spOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlzcGF0Y2hJbnRlbnQo
KmludGVudCwgaWQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL05hdmlnYXRvci5oCmluZGV4IDViYWJkYzVkZDhmMmY5ZGMyNWE5MTAwY2QyYmY1ZmZmN2Vi
YmZlYWUuLjU0NTg3NmI1NGJjNjg3NjNjYjEwMGM2NTg1MDU2MjU3MjRhYWM2ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaApAQCAtMzMsNiArMzMsOCBAQCBjbGFzcyBET01QbHVnaW5BcnJheTsK
IGNsYXNzIEZyYW1lOwogY2xhc3MgR2FtZXBhZExpc3Q7CiBjbGFzcyBHZW9sb2NhdGlvbjsKK2Ns
YXNzIEludGVudDsKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrOwogY2xhc3MgUG9pbnRlckxv
Y2s7CiBjbGFzcyBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrOwogY2xhc3MgTmF2aWdh
dG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrOwpAQCAtNzksNiArODEsMTAgQEAgcHVibGljOgog
ICAgIEdhbWVwYWRMaXN0KiB3ZWJraXRHYW1lcGFkcygpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
V0VCX0lOVEVOVFMpCisgICAgdm9pZCBzdGFydEFjdGl2aXR5KFBhc3NSZWZQdHI8SW50ZW50Piwg
UGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVm
UHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBOYXZpZ2F0b3IoRnJhbWUqKTsKICAgICBGcmFtZSog
bV9mcmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbAppbmRleCAyYjYxYzVhNGJlZjcwNDZh
ZDlkZDQ1OTI3Y2EyZDI1YTFhMDQzODBkLi44NGYwZGE0NDIxM2I0MDI4OTk2ODAzMzAwODcwN2Q3
Zjc2OTQxZGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCkBAIC02NSw2ICs2NSwxMSBA
QCBtb2R1bGUgd2luZG93IHsKICNpZiBkZWZpbmVkKEVOQUJMRV9HQU1FUEFEKSAmJiBFTkFCTEVf
R0FNRVBBRAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIEdh
bWVwYWRMaXN0IHdlYmtpdEdhbWVwYWRzOwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKEVOQUJMRV9X
RUJfSU5URU5UUykgJiYgRU5BQkxFX1dFQl9JTlRFTlRTCisgICAgICAgIHZvaWQgc3RhcnRBY3Rp
dml0eShpbiBJbnRlbnQgaW50ZW50LCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBJbnRlbnRSZXN1
bHRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEludGVu
dFJlc3VsdENhbGxiYWNrIGZhaWx1cmVDYWxsYmFjaykKKyAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOworI2VuZGlmCiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggMGY2
YzJjMzQyNjYwOWE2Nzk4MTFmMjA5OGI1YWYxODM5ZjYzYzY3Zi4uOGZjMjJiOWU1ZWNmZDM3ODZm
YzVlMzliZmYzYzU3NzA0NzZmYmYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC00OSw2ICs0OSw3
IEBACiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
SW50ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVk
aWFDYW5TdGFydExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCkBAIC0xNDMsNiAr
MTQ0LDkgQEAgUGFnZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKICAgICAsIG1fdXNlck1lZGlhQ2xpZW50KHBhZ2VDbGllbnRzLnVzZXJN
ZWRpYUNsaWVudCkKICNlbmRpZgorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAsIG1faW50
ZW50c0NvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEludGVudHNDb250cm9sbGVyKCkpKQorI2VuZGlm
CiAgICAgLCBtX3NldHRpbmdzKGFkb3B0UHRyKG5ldyBTZXR0aW5ncyh0aGlzKSkpCiAgICAgLCBt
X3Byb2dyZXNzKGFkb3B0UHRyKG5ldyBQcm9ncmVzc1RyYWNrZXIpKQogICAgICwgbV9iYWNrRm9y
d2FyZENvbnRyb2xsZXIoYWRvcHRQdHIobmV3IEJhY2tGb3J3YXJkQ29udHJvbGxlcih0aGlzLCBw
YWdlQ2xpZW50cy5iYWNrRm9yd2FyZENsaWVudCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBhODM0N2U4
NzgwMGU4ZTMzMDc5ZThjNDE0OWRkZjNiNjQyYWYwYjIxLi5mOGNhNTRkOThjZWU0ODY2YmQ4MDY2
ZTA3OWU3MGI5MzA0OWE1OGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtNzAsNiArNzAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CiAgICAgY2xhc3MgSW5zcGVj
dG9yQ2xpZW50OwogICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CisgICAgY2xhc3MgSW50
ZW50c0NvbnRyb2xsZXI7CiAgICAgY2xhc3MgTWVkaWFDYW5TdGFydExpc3RlbmVyOwogICAgIGNs
YXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZUdyb3VwOwpAQCAtMTg5LDYgKzE5MCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICBVc2VyTWVk
aWFDbGllbnQqIHVzZXJNZWRpYUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlck1lZGlhQ2xp
ZW50OyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgICAgIEludGVudHND
b250cm9sbGVyKiBpbnRlbnRzQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZW50c0Nv
bnRyb2xsZXIuZ2V0KCk7IH0KKyNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dyZXNzVHJhY2tl
ciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9CiAgICAgICAg
IEJhY2tGb3J3YXJkQ29udHJvbGxlciogYmFja0ZvcndhcmQoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tGb3J3YXJkQ29udHJvbGxlci5nZXQoKTsgfQpAQCAtMzcyLDYgKzM3Niw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICBVc2VyTWVkaWFD
bGllbnQqIG1fdXNlck1lZGlhQ2xpZW50OwogI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRT
KQorICAgICAgICBPd25QdHI8SW50ZW50c0NvbnRyb2xsZXI+IG1faW50ZW50c0NvbnRyb2xsZXI7
CisjZW5kaWYKICAgICAgICAgT3duUHRyPFNldHRpbmdzPiBtX3NldHRpbmdzOwogICAgICAgICBP
d25QdHI8UHJvZ3Jlc3NUcmFja2VyPiBtX3Byb2dyZXNzOwogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCBhYzNlMmNmMGQ1MzAxNjRhMmJmOGVjNDYwMGY3OGVjOTM4ZGIz
YzFhLi44OWY4Y2E5MWYxOWMxZDRhNGQ0N2E1ZDc4NTRjYzA2YWU5ODdhYjFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC01NjEsNiArNTYxLDcgQEAKICAgICAgICAgICAgICAgICAn
c3JjL1dlYklucHV0RXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYklucHV0RXZl
bnRDb252ZXJzaW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbnB1dEV2ZW50Q29u
dmVyc2lvbi5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkludGVudC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViS2l0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJMYWJl
bEVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkxheWVyLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggNjc5NDE2OGQ3ZWFlZTNhYjJkMWM1NGEw
NjA0MzViNmZlNmM3MzU3My4uYjlkYzc1NWU2ZWUyZDBiNjhmYTQ5OTQ1YzcwNGM1MDIwYTU4YmEz
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMTU3LDYgKzE1NywxMSBA
QAogICAgICAgICAgICdFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUj0xJywKICAgICAg
ICAgXSwKICAgICAgIH1dLAorICAgICAgWydlbmFibGVfd2ViX2ludGVudHM9PTEnLCB7CisgICAg
ICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCisgICAgICAgICAgJ0VOQUJMRV9XRUJfSU5URU5UUz0x
JywKKyAgICAgICAgXSwKKyAgICAgIH1dLAogICAgICAgWydPUz09Im1hYyInLCB7CiAgICAgICAg
ICdmZWF0dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAgJ0VOQUJMRV9SVUJCRVJfQkFORElORz0x
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKaW5kZXggZjBlY2Fj
MjNiZDNiMGI1M2VhMzQyYzljOTJjOWJhNTFhOTgyODUyYi4uNzJmYmQ0YjhjNzAyMTYxMzVjNjc1
MWFiZGM4ZTg1MDcyZWI4Y2EzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViSW50ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SW50ZW50LmgKQEAgLTMxLDkgKzMxLDE0IEBACiAjaWZuZGVmIFdlYkludGVudF9oCiAjZGVmaW5l
IFdlYkludGVudF9oCiAKLW5hbWVzcGFjZSBXZWJLaXQgeworI2luY2x1ZGUgIldlYkNvbW1vbi5o
IgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEludGVudDsgfQorI2VuZGlmCiAKLWNsYXNzIFdlYlN0
cmluZzsKK25hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBIb2xkcyBkYXRhIHBhc3NlZCB0aHJvdWdo
IGEgV2ViIEludGVudHMgaW52b2NhdGlvbiBjYWxsIGZyb20gdGhlIEphdmFzY3JpcHQKIC8vIElu
dGVudCBvYmplY3QuCkBAIC01Myw2ICs1OCwxNiBAQCBwdWJsaWM6CiAKICAgICBXRUJLSVRfRVhQ
T1JUIGludCBpZGVudGlmaWVyKCkgY29uc3Q7CiAgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldElk
ZW50aWZpZXIoaW50KTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkludGVu
dChjb25zdCBXZWJDb3JlOjpJbnRlbnQmLCBpbnQgaWRlbnRpZmllcik7CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICBXZWJTdHJpbmcgbV9hY3Rpb247CisgICAgV2ViU3RyaW5nIG1fdHlwZTsKKyAg
ICBXZWJTdHJpbmcgbV9kYXRhOworICAgIGludCBtX2lkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFt
ZUxvYWRlckNsaWVudEltcGwuY3BwCmluZGV4IDgwOTM2ZjdiMTQ0MTNjMzVkMWIzNzgyZWUwNjlk
MDNlODBlYTcxNmIuLmExYjRkNzVmYTUyODFlNmViMDQ0MzYzYTk4MDAzOTM0M2FmZWE1OGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAj
aW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNp
bmNsdWRlICJXZWJJbnRlbnQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJXZWJL
aXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnkuaCIKQEAgLTE2
MTcsNCArMTYxOCwxMCBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleAogICAgIHJldHVybiBGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0SW1wbDo6Y3JlYXRlKG1fd2ViRnJhbWUtPmZyYW1lKCkpOwogfQog
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hJbnRlbnQoY29uc3QgV2ViQ29y
ZTo6SW50ZW50JiBpbnRlbnQsIGludCBpbnRlbnRJZCkKK3sKKyAgICBXZWJJbnRlbnQgd2ViSW50
ZW50KGludGVudCwgaW50ZW50SWQpOworICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaXNwYXRj
aEludGVudCh3ZWJGcmFtZSgpLCB3ZWJJbnRlbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmgKaW5kZXggZTY0NGQxODgyZDE1MTk0ZDBkNDc0MzVmNjE4MWY0YjE3Y2ViY2U0ZS4uZDQ4
OTM5MDcxYTJiZGI2YWU3NTdiMzEzMjlkNDc5NzIyN2Q4ZWQ3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKQEAgLTIwOCw2ICsy
MDgsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWVO
ZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKTsKIAorICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaEludGVudChjb25zdCBXZWJDb3JlOjpJbnRlbnQmLCBpbnQgaW50ZW50
SWQpOworCiBwcml2YXRlOgogICAgIHZvaWQgbWFrZURvY3VtZW50VmlldygpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAppbmRleCA3NTFkMmNiNjI0NTM3
YWZiYjFkZDViNzc0N2E1MDkyOWQ4MTY0MzlkLi44MWUyYWUwZmQ4ZDUwZmNiOTYyYmNjOTljMjJk
MzQyNWJkZjQ2Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgpAQCAtMTgyOCwxMCArMTgyOSwyNCBA
QCB2b2lkIFdlYkZyYW1lSW1wbDo6cmVzZXRNYXRjaENvdW50KCkKIAogdm9pZCBXZWJGcmFtZUlt
cGw6OmhhbmRsZUludGVudFJlc3VsdChpbnQgaW50ZW50SWRlbnRpZmllciwgY29uc3QgV2ViU3Ry
aW5nJiByZXBseSkKIHsKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworI2lm
IEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBXVEY6OlN0cmluZyByZXBseVN0cmluZyA9IHJlcGx5
Lm9wZXJhdG9yIFN0cmluZygpOworICAgIG1fZnJhbWUtPnBhZ2UoKS0+aW50ZW50c0NvbnRyb2xs
ZXIoKS0+cG9zdFJlc3VsdChyZXBseVN0cmluZywgaW50ZW50SWRlbnRpZmllcik7CisjZW5kaWYK
IH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OmhhbmRsZUludGVudEZhaWx1cmUoaW50IGludGVudElk
ZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgcmVwbHkpCiB7CisgICAgaWYgKCFtX2ZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgV1RGOjpTdHJp
bmcgcmVwbHlTdHJpbmcgPSByZXBseS5vcGVyYXRvciBTdHJpbmcoKTsKKyAgICBtX2ZyYW1lLT5w
YWdlKCktPmludGVudHNDb250cm9sbGVyKCktPnBvc3RGYWlsdXJlKHJlcGx5U3RyaW5nLCBpbnRl
bnRJZGVudGlmaWVyKTsKKyNlbmRpZgogfQogCiBXZWJTdHJpbmcgV2ViRnJhbWVJbXBsOjpjb250
ZW50QXNUZXh0KHNpemVfdCBtYXhDaGFycykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbnRlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YzY4N2RkY2ZiZWYzN2YyYTlhM2FjMmY1Y2E0
MmVmOTc1YjEzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbnRlbnQuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
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
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViSW50ZW50LmgiCisKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkludGVudDo6
V2ViSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYgaW50ZW50LCBpbnQgaWRlbnRpZmllcikK
KyAgICA6IG1fYWN0aW9uKGludGVudC5hY3Rpb24oKSksCisgICAgICBtX3R5cGUoaW50ZW50LnR5
cGUoKSksCisgICAgICBtX2RhdGEoaW50ZW50LmRhdGEoKS0+dG9XaXJlU3RyaW5nKCkpLAorICAg
ICAgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpIHsgfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116825</attachid>
            <date>2011-11-28 14:49:29 -0800</date>
            <delta_ts>2011-11-29 14:28:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20111128144928.patch</filename>
            <type>text/plain</type>
            <size>40984</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQxOTRiMjkwNWQwNDll
OGQ1MjZlMmRmYzMyMmY5Mjc4ZDg1NzQzZS4uMTAxOTFiYjhiMzQ3NmY3MGQxODllYmQ2OGVhNTcw
NGU2NjhhYjk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBTZWUgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9kZXNp
Z24tZG9jdW1lbnRzL3dlYmludGVudHNhcGkKKyAgICAgICAgZm9yIGRyYWZ0IHNwZWMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVu
dDo6ZGF0YUFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaEludGVu
dCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvSW50ZW50
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OkludGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlbnQ6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNl
dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50OjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6ZGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldERhdGEpOgorICAgICAgICAqIHBhZ2UvSW50
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpjcmVhdGUpOgorICAgICAg
ICAqIHBhZ2UvSW50ZW50LmlkbDogQWRkZWQuCisgICAgICAgICogcGFnZS9JbnRlbnRSZXN1bHRD
YWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudFJlc3VsdENhbGxiYWNr
Ojp+SW50ZW50UmVzdWx0Q2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvSW50ZW50UmVzdWx0Q2Fs
bGJhY2suaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0ludGVudHNDb250cm9sbGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6SW50ZW50c0NvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6On5JbnRlbnRzQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6Z2V0SW50ZW50
SWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKToKKyAgICAg
ICAgKiBwYWdlL0ludGVudHNDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0eSk6
CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5p
ZGw6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBh
Z2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aW50
ZW50c0NvbnRyb2xsZXIpOgorCiAyMDExLTExLTI1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gV2ViIEluc3BlY3RvcjogZ2V0IHJp
ZCBvZiBXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50OjpzZW5kRnJvbnRlbmRMb2FkZWQgbWV0aG9k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGY5ODQ1ZTVjZTM4NTE4OTY1MmI5OTYxZWI1
Mzg4MjczN2FjMjQxYTUuLjY1MTAzYTEwMmZhM2I4MjFmZTFmNzJhY2VlNzI3NzRiZmVkODFhZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMjMg
IEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1dlYiBJbnRl
bnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3JlIGltcGxlbWVudGF0aW9uIG9mIG5hdmlnYXRvci5zdGFy
dEFjdGl2aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAgICAqIHB1Ymxp
Yy9XZWJJbnRlbnQuaDoKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaEludGVudCk6
CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oOgorICAgICAgICAqIHNyYy9X
ZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmhhbmRsZUlu
dGVudFJlc3VsdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6aGFuZGxlSW50ZW50
RmFpbHVyZSk6CisgICAgICAgICogc3JjL1dlYkludGVudC5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oLgorICAgICAgICAoV2ViS2l0OjpX
ZWJJbnRlbnQ6OldlYkludGVudCk6CisKIDIwMTEtMTEtMjUgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQ2hyb21pdW0gYnVpbGQg
Zml4LgpAQCAtNTIyLDEwICs1NDEsMTMgQEAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgogCiAgICAgICAgICogV2ViS2l0Lmd5cDoKLSAgICAgICAgKiBwdWJsaWMvV2ViSW50ZW50
Lmg6IEFkZGVkLgotICAgICAgICAqIHB1YmxpYy9XZWJJbnRlbnRTZXJ2aWNlSW5mby5oOiBBZGRl
ZC4KLSAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKLSAgICAgICAgKiBwdWJsaWMvV2ViRnJh
bWVDbGllbnQuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViSW50ZW50c0NsaWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50c0NsaWVudDo6fldlYkludGVudHNDbGllbnQpOgor
ICAgICAgICAqIHB1YmxpYy9XZWJJbnRlbnRzQ29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBwdWJsaWMvV2ViVmlld0NsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50
Ojp3ZWJJbnRlbnRzQ2xpZW50KToKKyAgICAgICAgKiBzcmMvV2ViSW50ZW50c0NvbnRyb2xsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50c0NvbnRyb2xsZXI6OndlYklu
dGVudFJlcGx5KToKIAogMjAxMS0xMS0yMiAgU2NvdHQgR3JhaGFtICA8c2NvdHRtZ0BjaHJvbWl1
bS5vcmc+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGY4YmU2MTJjMDNmMjNlMjQ3ODJkNmViNmVmMzhjODliNzRkMGFjYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCkBAIC0w
LDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
R09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50LmgiCisKKyNpZiBF
TkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKK0ludGVudDo6SW50ZW50KFN0cmluZyBhY3Rpb24s
IFN0cmluZyB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKKyAg
ICA6IG1fYWN0aW9uKGFjdGlvbiksCisgICAgICBtX3R5cGUodHlwZSkKK3sKKyAgICBzZXREYXRh
KGRhdGEpOworfQorCitTdHJpbmcgSW50ZW50OjphY3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2FjdGlvbjsKK30KKworU3RyaW5nIEludGVudDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdHlwZTsKK30KKworU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7Cit9CisKK3ZvaWQgSW50ZW50OjpzZXRE
YXRhKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKQoreworICAgIGlmIChk
YXRhLmdldCgpKQorICAgICAgICBtX2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZUZyb21XaXJlKGRhdGEtPnRvV2lyZVN0cmluZygpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGF0
YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZTVkYWUwZTI5MDg4OWYyNzFh
MTgyOWY2OWRiOGY0OTk3NDBlNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudF9oCisj
ZGVmaW5lIEludGVudF9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOworCitjbGFzcyBJbnRlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnQ+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZSgKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiBhY3Rpb24sCisgICAgICAgIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAg
ICAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRhKSk7CisgICAgfQor
CisgICAgU3RyaW5nIGFjdGlvbigpIGNvbnN0OworICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7Cisg
ICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICBJbnRlbnQoU3RyaW5nIGFjdGlvbiwgU3RyaW5nIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBkYXRhKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldERhdGEoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKKworICAgIFN0cmluZyBtX2FjdGlvbjsKKyAg
ICBTdHJpbmcgbV90eXBlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0
YTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJ
bnRlbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hOWUzY2VkMDY4Mjc4YmRjNzcyNWMxZmU0MzBmYjU0OTljOTVlNjIzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTAs
MCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWworICAgICAg
Q29uZGl0aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAg
Q3VzdG9tQ29uc3RydWN0RnVuY3Rpb24sCisgICAgICBWOEN1c3RvbUNvbnN0cnVjdG9yLAorICBd
IEludGVudCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYWN0aW9uOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBhbnkgZGF0YTsKKyAgfTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzA4ODNlNzBhZTYzZTEwOTM2ZjdjNWY1OTUzYTVjYmNkNmIxYmVmMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1
bHRDYWxsYmFjay5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudFJlc3VsdENhbGxiYWNrX2gK
KyNkZWZpbmUgSW50ZW50UmVzdWx0Q2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKFdF
Ql9JTlRFTlRTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKKworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2sgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5JbnRlbnRSZXN1bHRDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQpID0gMDsKK307CisKK30KKwor
I2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRSZXN1bHRDYWxsYmFja19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wNzdmNjNjZjhjMTBhMDE2NmNlMzlkMDg5ZDA3MzkxYjdkNjBkZWYxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3Vs
dENhbGxiYWNrLmlkbApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7Cisg
IGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIExlZ2Fj
eURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seQor
ICBdIEludGVudFJlc3VsdENhbGxiYWNrIHsKKyAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlIHJlc3VsdCk7CisgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDVmZTBjZTEzZmMxOWZhMTNjYmIzNWIwNWJhOTRjMWFi
ZmJmY2FhMzkuLmFiMzkxMGNkNTllYTViYzljMWFiNTBlY2JmNTBjM2RjYzBlYmNkMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC00OSw2ICs0OSw3IEBACiAgICAg
ICAnLi4vJywKICAgICAgICcuLi8uLicsCiAgICAgICAnLi4vTW9kdWxlcy9nYW1lcGFkJywKKyAg
ICAgICcuLi9Nb2R1bGVzL2ludGVudHMnLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHknLAogICAg
ICAgJy4uL2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAogICAgICAgJy4uL2JpbmRpbmdzJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBkNzI3MTUyNGY4NTM2Yzc0YTFhOGM2YTliMmNjODNhMDAyODZiMjNi
Li5jOTk0MmExODdiMzNlMWFhZWJiZjYwZTE1YzdhNTk5ZmFiYzQ5ZWZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xMTMzLDYgKzExMzMsOCBAQAogICAgICAgICAnd2ViY29yZV9iaW5kaW5nc19pZGxf
ZmlsZXMnOiBbCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaWRsJywKICAg
ICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaWRsJywKKyAgICAgICAgICAg
ICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRl
bnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0NoYXJz
ZXRSdWxlLmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwnLAogICAg
ICAgICAgICAgJ2Nzcy9DU1NJbXBvcnRSdWxlLmlkbCcsCkBAIC0xNjc0LDYgKzE2NzYsOSBAQAog
ICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2Ft
ZXBhZC9HYW1lcGFkTGlzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oJywKKyAgICAgICAg
ICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCcsCiAgICAgICAgICAg
ICAnYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oJywKQEAgLTIyMjMsNiArMjIyOCw3IEBACiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0b20uY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0b20uY3BwJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yLmNwcCcsCkBAIC0yOTcxLDYgKzI5NzcsOCBAQAogICAgICAgICAgICAgJ3BhZ2Uv
R3JvdXBTZXR0aW5ncy5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvSGlzdG9yeS5jcHAnLAogICAg
ICAgICAgICAgJ3BhZ2UvSGlzdG9yeS5oJywKKyAgICAgICAgICAgICdwYWdlL0ludGVudHNDb250
cm9sbGVyLmNwcCcsCisgICAgICAgICAgICAncGFnZS9JbnRlbnRzQ29udHJvbGxlci5oJywKICAg
ICAgICAgICAgICdwYWdlL0xvY2F0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9Mb2NhdGlv
bi5oJywKICAgICAgICAgICAgICdwYWdlL01lbW9yeUluZm8uY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEwMWY3OGU1ZjI1YjcyYmY3ZWEyNzczYmRkYzVlYzFkMGNlMTUyNWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20u
Y3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
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
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdF
Ql9JTlRFTlRTKQorCisjaW5jbHVkZSAiVjhJbnRlbnQuaCIKKworI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9N
V3JhcHBlci5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUlu
Zm8uaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJJbnRlbnQuQ29u
c3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxl
ZCBhcyBhIGZ1bmN0aW9uLiIpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMCkgeworICAg
ICAgICBSZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJbnRlbnQ6OmNyZWF0ZShTdHJpbmcoKSwgU3Ry
aW5nKCksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICBWOERP
TVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGludGVudC5nZXQo
KSk7CisgICAgICAgIHJldHVybiB0b1Y4KGludGVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkp
OworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDIpIHsKKyAgICAgICAgU3RyaW5n
IGFjdGlvbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBd
KTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZp
bmVkQ2hlY2soYXJnc1sxXSk7CisKKyAgICAgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSIpOworICAg
ICAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigi
VHlwZSBjYW5ub3QgYmUgZW1wdHkiKTsKKworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbnRlbnQg
PSBJbnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVs
bFZhbHVlKCkpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xk
ZXIoKSwgJmluZm8sIGludGVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGludGVudC5y
ZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgp
ID09IDMpIHsKKyAgICAgICAgU3RyaW5nIGFjdGlvbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
T3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNv
cmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisKKyAgICAgICAgaWYg
KGFjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWN0aW9u
IGNhbm5vdCBiZSBlbXB0eSIpOworICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHlwZSBjYW5ub3QgYmUgZW1wdHkiKTsKKworICAgICAg
ICBib29sIGV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgMCwg
MCwgZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJJbnRlbnQgY29uc3RydWN0b3IgZGF0YSBtdXN0IGJlIGEgc3RydWN0dXJl
ZCBjbG9uZSIpOworCisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6Y3Jl
YXRlKGFjdGlvbiwgdHlwZSwgZGF0YSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IHRvVjgoaW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHRocm93RXJyb3IoIkludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28g
b3IgdGhyZWUgcGFyYW1ldGVycyIpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRl
bnQ6OmRhdGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJbnRlbnQqIGltcGwgPSBWOEludGVudDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNl
cmlhbGl6ZWRWYWx1ZSA9IGltcGwtPmRhdGEoKTsKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQor
ICAgICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgpOworCisgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAppbmRleCAzMzFmMDljNmYwZTIxMTQ5YzRmMWEwMTgzZmNiZmQyOTg2ZTk0MzRi
Li4xZTZhNTU3MDYyZTgzZGJmMmUzNjZjODdlYTE3NTg1YWZjM2NiOGE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtNzgsNiArNzgsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjZW5kaWYKICAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKICAgICBj
bGFzcyBJbnRTaXplOworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBjbGFzcyBJbnRlbnQ7
CisjZW5kaWYKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CiAg
ICAgY2xhc3MgUGFnZTsKQEAgLTMxOSw2ICszMjIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRl
TmV0d29ya2luZ0NvbnRleHQoKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFBh
aW50QnJva2VuSW1hZ2UoY29uc3QgS1VSTCYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworI2lm
IEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoSW50ZW50
KGNvbnN0IEludGVudCYgaW50ZW50LCBpbnQgaWQpIHsgfQorI2VuZGlmCiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IGM5YWMy
NTFjMjZiZGU0OTMwODcyNjI5MGRjNmFhNzg0MzAwMTkxYTYuLjY4NmQ2YTFjZWQzNTM5NDk4NTQy
ZmM5OWJmMWM0YTE0MGZmOWQ0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTYx
OCw2ICs2MTgsMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxl
ZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tF
dmVudDsKICNlbmRpZgogCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCX0lOVEVOVFMpICYmIEVOQUJM
RV9XRUJfSU5URU5UUworICAgICAgICBhdHRyaWJ1dGUgSW50ZW50Q29uc3RydWN0b3IgSW50ZW50
OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisjZW5kaWYKKwogICAgICAgICBhdHRy
aWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwogICAgICAgICBhdHRyaWJ1dGUgRE9N
UGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVnaW5BcnJheTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9JbnRlbnRzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ludGVudHNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODQ3NTkzYzlhYjNkNjA3Mjc3YWYx
NTcxMjE2Mzg4ZGU2M2FiZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9JbnRlbnRzQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnRzQ29udHJvbGxlci5oIgorCisjaWYgRU5BQkxF
KFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiSW50ZW50UmVzdWx0Q2FsbGJhY2suaCIKKyNpbmNs
dWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bnRlbnRzQ29udHJvbGxlcjo6SW50ZW50c0NvbnRyb2xsZXIoKQoreworfQorCitJbnRlbnRzQ29u
dHJvbGxlcjo6fkludGVudHNDb250cm9sbGVyKCkKK3sKK30KKworaW50IEludGVudHNDb250cm9s
bGVyOjphc3NpZ25JbnRlbnRJZChQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2spCit7CisgICAgaW50IGlkID0gbV9zdWNjZXNzQ2FsbGJhY2tzLnNpemUoKTsKKyAgICBtX3N1
Y2Nlc3NDYWxsYmFja3MuYXBwZW5kKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgbV9lcnJvckNhbGxi
YWNrcy5hcHBlbmQoZXJyb3JDYWxsYmFjayk7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIElu
dGVudHNDb250cm9sbGVyOjpwb3N0UmVzdWx0KFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKQor
eworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhKTsKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJh
Y2tzW2ludGVudElkXS5nZXQoKSkKKyAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElk
XS0+aGFuZGxlRXZlbnQodmFsdWUpOworCisgICAgbV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElk
XS5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFja3NbaW50ZW50SWRdLmNsZWFyKCk7Cit9CisK
K3ZvaWQgSW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKFN0cmluZyYgZGF0YSwgaW50IGlu
dGVudElkKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhKTsKKyAgICBpZiAobV9lcnJv
ckNhbGxiYWNrc1tpbnRlbnRJZF0uZ2V0KCkpCisgICAgICAgIG1fZXJyb3JDYWxsYmFja3NbaW50
ZW50SWRdLT5oYW5kbGVFdmVudCh2YWx1ZSk7CisKKyAgICBtX3N1Y2Nlc3NDYWxsYmFja3NbaW50
ZW50SWRdLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrc1tpbnRlbnRJZF0uY2xlYXIoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRF
TlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlbnRzQ29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlbnRzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYy
MDYyN2NiMjFiYzFhOTYxNjZmZjUzOWFiMmIzMDMzMWE2ZmQ5ZjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVudHNDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSW50ZW50c0NvbnRyb2xsZXJfaAorI2RlZmluZSBJbnRlbnRzQ29u
dHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNr
OworCitjbGFzcyBJbnRlbnRzQ29udHJvbGxlciB7CitwdWJsaWM6CisgICAgSW50ZW50c0NvbnRy
b2xsZXIoKTsKKyAgICB+SW50ZW50c0NvbnRyb2xsZXIoKTsKKworICAgIGludCBhc3NpZ25JbnRl
bnRJZChQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOworCisgICAgdm9p
ZCBwb3N0UmVzdWx0KFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKTsKKyAgICB2b2lkIHBvc3RG
YWlsdXJlKFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKTsKKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8UmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiA+IG1fc3VjY2Vzc0NhbGxiYWNrczsKKyAg
ICBWZWN0b3I8UmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiA+IG1fZXJyb3JDYWxsYmFja3M7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lO
VEVOVFMpCisKKyNlbmRpZiAvLyBJbnRlbnRzQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmln
YXRvci5jcHAKaW5kZXggYmMxZTA1MzRkMGVjOTAyNzE5ZmE3NDRhNzE5OTMzZDQ5NGI5OWJlZi4u
MGEwNWRmYzJmYzU4ODI1NmNkZDJmMzY3YzgzODA0MTM4ODNkZWI1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yLmNwcApAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkludGVudC5oIgorI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxiYWNrLmgi
CisjaW5jbHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQb2ludGVyTG9jay5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgpAQCAtMzE5LDQgKzMy
MiwyNyBAQCBHYW1lcGFkTGlzdCogTmF2aWdhdG9yOjp3ZWJraXRHYW1lcGFkcygpCiB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKK3ZvaWQgTmF2aWdhdG9yOjpzdGFydEFjdGl2
aXR5KFBhc3NSZWZQdHI8SW50ZW50PiBpbnRlbnQsIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFmcmFtZSgpIHx8
ICFmcmFtZSgpLT5sb2FkZXIoKSB8fCAhZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpIHx8ICFp
bnRlbnQuZ2V0KCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnRlbnQtPmFjdGlvbigpLmlzRW1wdHkoKSB8fCBp
bnRlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBWQUxJREFUSU9OX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6cHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaWQgPSBtX2ZyYW1lLT5wYWdlKCkt
PmludGVudHNDb250cm9sbGVyKCktPmFzc2lnbkludGVudElkKHN1Y2Nlc3NDYWxsYmFjaywgZXJy
b3JDYWxsYmFjayk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaElu
dGVudCgqaW50ZW50LCBpZCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yLmgKaW5kZXggNjMyMWIzMWQ5NzM2MjI5M2NjMTgyM2Q2OWRmYTg5
ZjA4MTViMDMyMi4uZTgxNzdiMmQ0ZTkxY2IxMmZkZjg5NTU2OGJmNmViNmEzMzlkZGFlNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5oCkBAIC0zMyw2ICszMyw4IEBAIGNsYXNzIERPTVBsdWdpbkFy
cmF5OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBHYW1lcGFkTGlzdDsKIGNsYXNzIEdlb2xvY2F0aW9u
OworY2xhc3MgSW50ZW50OworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2s7CiBjbGFzcyBQb2lu
dGVyTG9jazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2s7CiBjbGFzcyBO
YXZpZ2F0b3JVc2VyTWVkaWFTdWNjZXNzQ2FsbGJhY2s7CkBAIC03OSw2ICs4MSwxMCBAQCBwdWJs
aWM6CiAgICAgR2FtZXBhZExpc3QqIHdlYmtpdEdhbWVwYWRzKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXRUJfSU5URU5UUykKKyAgICB2b2lkIHN0YXJ0QWN0aXZpdHkoUGFzc1JlZlB0cjxJbnRl
bnQ+LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIEV4Y2VwdGlvbkNv
ZGUmKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIE5hdmlnYXRvcihGcmFtZSopOwogICAgIEZy
YW1lKiBtX2ZyYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
aWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCmluZGV4IDJiNjFjNWE0YmVm
NzA0NmFkOWRkNDU5MjdjYTJkMjVhMWEwNDM4MGQuLjg0ZjBkYTQ0MjEzYjQwMjg5OTY4MDMzMDA4
NzA3ZDdmNzY5NDFkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9y
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKQEAgLTY1LDYgKzY1
LDExIEBAIG1vZHVsZSB3aW5kb3cgewogI2lmIGRlZmluZWQoRU5BQkxFX0dBTUVQQUQpICYmIEVO
QUJMRV9HQU1FUEFECiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGlt
ZV0gR2FtZXBhZExpc3Qgd2Via2l0R2FtZXBhZHM7CiAjZW5kaWYKKworI2lmIGRlZmluZWQoRU5B
QkxFX1dFQl9JTlRFTlRTKSAmJiBFTkFCTEVfV0VCX0lOVEVOVFMKKyAgICAgICAgdm9pZCBzdGFy
dEFjdGl2aXR5KGluIEludGVudCBpbnRlbnQsIGluIFtDYWxsYmFjaywgT3B0aW9uYWxdIEludGVu
dFJlc3VsdENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0g
SW50ZW50UmVzdWx0Q2FsbGJhY2sgZmFpbHVyZUNhbGxiYWNrKQorICAgICAgICAgICAgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisjZW5kaWYKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRl
eCAwZjZjMmMzNDI2NjA5YTY3OTgxMWYyMDk4YjVhZjE4MzlmNjNjNjdmLi44ZmMyMmI5ZTVlY2Zk
Mzc4NmZjNWUzOWJmZjNjNTc3MDQ3NmZiZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTQ5LDYg
KzQ5LDcgQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNs
dWRlICJJbnRlbnRzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNZWRpYUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKQEAgLTE0
Myw2ICsxNDQsOSBAQCBQYWdlOjpQYWdlKFBhZ2VDbGllbnRzJiBwYWdlQ2xpZW50cykKICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQogICAgICwgbV91c2VyTWVkaWFDbGllbnQocGFnZUNsaWVudHMu
dXNlck1lZGlhQ2xpZW50KQogI2VuZGlmCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICwg
bV9pbnRlbnRzQ29udHJvbGxlcihhZG9wdFB0cihuZXcgSW50ZW50c0NvbnRyb2xsZXIoKSkpCisj
ZW5kaWYKICAgICAsIG1fc2V0dGluZ3MoYWRvcHRQdHIobmV3IFNldHRpbmdzKHRoaXMpKSkKICAg
ICAsIG1fcHJvZ3Jlc3MoYWRvcHRQdHIobmV3IFByb2dyZXNzVHJhY2tlcikpCiAgICAgLCBtX2Jh
Y2tGb3J3YXJkQ29udHJvbGxlcihhZG9wdFB0cihuZXcgQmFja0ZvcndhcmRDb250cm9sbGVyKHRo
aXMsIHBhZ2VDbGllbnRzLmJhY2tGb3J3YXJkQ2xpZW50KSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IGE4
MzQ3ZTg3ODAwZThlMzMwNzllOGM0MTQ5ZGRmM2I2NDJhZjBiMjEuLmY4Y2E1NGQ5OGNlZTQ4NjZi
ZDgwNjZlMDc5ZTcwYjkzMDQ5YTU4YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC03MCw2ICs3MCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBIaXN0b3J5SXRlbTsKICAgICBjbGFzcyBJ
bnNwZWN0b3JDbGllbnQ7CiAgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBjbGFz
cyBJbnRlbnRzQ29udHJvbGxlcjsKICAgICBjbGFzcyBNZWRpYUNhblN0YXJ0TGlzdGVuZXI7CiAg
ICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlR3JvdXA7CkBAIC0xODksNiArMTkwLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFVz
ZXJNZWRpYUNsaWVudCogdXNlck1lZGlhQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VyTWVk
aWFDbGllbnQ7IH0KICNlbmRpZgorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgSW50
ZW50c0NvbnRyb2xsZXIqIGludGVudHNDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRl
bnRzQ29udHJvbGxlci5nZXQoKTsgfQorI2VuZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5n
cygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NU
cmFja2VyKiBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KICAg
ICAgICAgQmFja0ZvcndhcmRDb250cm9sbGVyKiBiYWNrRm9yd2FyZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja0ZvcndhcmRDb250cm9sbGVyLmdldCgpOyB9CkBAIC0zNzIsNiArMzc2LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFVzZXJN
ZWRpYUNsaWVudCogbV91c2VyTWVkaWFDbGllbnQ7CiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0lO
VEVOVFMpCisgICAgICAgIE93blB0cjxJbnRlbnRzQ29udHJvbGxlcj4gbV9pbnRlbnRzQ29udHJv
bGxlcjsKKyNlbmRpZgogICAgICAgICBPd25QdHI8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAgICAg
ICAgIE93blB0cjxQcm9ncmVzc1RyYWNrZXI+IG1fcHJvZ3Jlc3M7CiAgICAgICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IDExOThhYTE4YjQ4MDdhOTVmMTJmNDczODQ4
NjU3NTI5MWZmODVlNWIuLjUxNmMyZGZiOTA2MzFhNWYyOTYyYjY3MTFlNGZiMDE4M2M3YzkyYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTE1NCw2ICsxNTQsMTEgQEAK
ICAgICAgICAgICAnRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVI9MScsCiAgICAgICAg
IF0sCiAgICAgICB9XSwKKyAgICAgIFsnZW5hYmxlX3dlYl9pbnRlbnRzPT0xJywgeworICAgICAg
ICAnZmVhdHVyZV9kZWZpbmVzJzogWworICAgICAgICAgICdFTkFCTEVfV0VCX0lOVEVOVFM9MScs
CisgICAgICAgIF0sCisgICAgICB9XSwKICAgICAgIFsnT1M9PSJtYWMiJywgewogICAgICAgICAn
ZmVhdHVyZV9kZWZpbmVzJzogWwogICAgICAgICAgICdFTkFCTEVfUlVCQkVSX0JBTkRJTkc9MScs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCmluZGV4IDk4OWU5YjA3
ZmQ1OTNkY2Q0ZWEzNTE1ZjU4MDcxZDJiMDBkY2Y4NTcuLjgwYTFkNmNmY2Y3NGYzZjhiZjUzZjQ5
NTNiOGRhMThhNjMwMWJlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkludGVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklu
dGVudC5oCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogI2luY2x1
ZGUgIldlYlN0cmluZy5oIgogCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2Ug
V2ViQ29yZSB7IGNsYXNzIEludGVudDsgfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiAvLyBIb2xkcyBkYXRhIHBhc3NlZCB0aHJvdWdoIGEgV2ViIEludGVudHMgaW52b2NhdGlvbiBj
YWxsIGZyb20gdGhlIEphdmFzY3JpcHQKQEAgLTU3LDYgKzYxLDcgQEAgcHVibGljOgogCiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgV2ViSW50ZW50KCk7CisgICAgV2ViSW50ZW50KGNv
bnN0IFdlYkNvcmU6OkludGVudCYsIGludCBpZGVudGlmaWVyKTsKICNlbmRpZgogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50U2Vy
dmljZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudFNlcnZp
Y2VJbmZvLmgKaW5kZXggNWVlNGEwOTYzYzdmMTQxZjllOTJjMzMzMWI5MTczZDk5Y2ViNGViZS4u
OWM1ODJjOWM2M2Q4OTI2ZDUxNjMxMmI5OWEwZjU3NGViNmY5NTJjZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50U2VydmljZUluZm8uaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnRTZXJ2aWNlSW5mby5oCkBAIC02
OCw2ICs2OCw4IEBAIHB1YmxpYzoKIAogI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgogICAgIFdl
YkludGVudFNlcnZpY2VJbmZvKCk7CisgICAgV2ViSW50ZW50U2VydmljZUluZm8oY29uc3QgV2Vi
U3RyaW5nJiBhY3Rpb24sIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwgY29uc3QgV2ViVVJMJiBocmVm
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdGl0bGUsIGNvbnN0
IFdlYlN0cmluZyYgZGlzcG9zaXRpb24pOwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAppbmRl
eCA4MDkzNmY3YjE0NDEzYzM1ZDFiMzc4MmVlMDY5ZDAzZTgwZWE3MTZiLi5hMWI0ZDc1ZmE1Mjgx
ZTZlYjA0NDM2M2E5ODAwMzkzNDNhZmVhNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKQEAgLTY0LDYgKzY0LDcgQEAK
ICNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSW50ZW50LmgiCiAjaW5j
bHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5j
bHVkZSAiV2ViTWltZVJlZ2lzdHJ5LmgiCkBAIC0xNjE3LDQgKzE2MTgsMTAgQEAgUGFzc1JlZlB0
cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNyZWF0ZU5l
dHdvcmtpbmdDb250ZXgKICAgICByZXR1cm4gRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGw6OmNy
ZWF0ZShtX3dlYkZyYW1lLT5mcmFtZSgpKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlckNsaWVudElt
cGw6OmRpc3BhdGNoSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYgaW50ZW50LCBpbnQgaW50
ZW50SWQpCit7CisgICAgV2ViSW50ZW50IHdlYkludGVudChpbnRlbnQsIGludGVudElkKTsKKyAg
ICBtX3dlYkZyYW1lLT5jbGllbnQoKS0+ZGlzcGF0Y2hJbnRlbnQod2ViRnJhbWUoKSwgd2ViSW50
ZW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCmluZGV4IGU2NDRkMTg4MmQxNTE5
NGQwZDQ3NDM1ZjYxODFmNGIxN2NlYmNlNGUuLmQ0ODkzOTA3MWEyYmRiNmFlNzU3YjMxMzI5ZDQ3
OTcyMjdkOGVkNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5oCkBAIC0yMDgsNiArMjA4LDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZU5l
dHdvcmtpbmdDb250ZXh0KCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hJbnRlbnQoY29u
c3QgV2ViQ29yZTo6SW50ZW50JiwgaW50IGludGVudElkKTsKKwogcHJpdmF0ZToKICAgICB2b2lk
IG1ha2VEb2N1bWVudFZpZXcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKaW5kZXggNzUxZDJjYjYyNDUzN2FmYmIxZGQ1Yjc3NDdhNTA5MjlkODE2NDM5
ZC4uODFlMmFlMGZkOGQ1MGZjYjk2MmJjYzk5YzIyZDM0MjViZGY0NmNkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC0xMDQsNiArMTA0LDcgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvblVSTC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnRlbnRzQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZU92
ZXJsYXkuaCIKQEAgLTE4MjgsMTAgKzE4MjksMjQgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnJlc2V0
TWF0Y2hDb3VudCgpCiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRlbnRSZXN1bHQoaW50
IGludGVudElkZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgcmVwbHkpCiB7CisgICAgaWYgKCFt
X2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAg
V1RGOjpTdHJpbmcgcmVwbHlTdHJpbmcgPSByZXBseS5vcGVyYXRvciBTdHJpbmcoKTsKKyAgICBt
X2ZyYW1lLT5wYWdlKCktPmludGVudHNDb250cm9sbGVyKCktPnBvc3RSZXN1bHQocmVwbHlTdHJp
bmcsIGludGVudElkZW50aWZpZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpo
YW5kbGVJbnRlbnRGYWlsdXJlKGludCBpbnRlbnRJZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcm
IHJlcGx5KQogeworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorICAgIFdURjo6U3RyaW5nIHJlcGx5U3RyaW5nID0gcmVwbHkub3Bl
cmF0b3IgU3RyaW5nKCk7CisgICAgbV9mcmFtZS0+cGFnZSgpLT5pbnRlbnRzQ29udHJvbGxlcigp
LT5wb3N0RmFpbHVyZShyZXBseVN0cmluZywgaW50ZW50SWRlbnRpZmllcik7CisjZW5kaWYKIH0K
IAogV2ViU3RyaW5nIFdlYkZyYW1lSW1wbDo6Y29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAppbmRleCAxMzU0
MGUxNjIxYjhhM2FmZWM4MWJhOTRlYTA5YmRmZjEwYjllY2UzLi43ZGM4NDViODM1MmJiZTRkZjY2
OWJjYTE3M2U3Y2Y1OWJhNTRkMzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJbnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklu
dGVudC5jcHAKQEAgLTMxLDEwICszMSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldlYkludGVudC5oIgogCisjaW5jbHVkZSAiSW50ZW50LmgiCisjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJJbnRlbnQ6Oldl
YkludGVudCgpIHsgfQogCitXZWJJbnRlbnQ6OldlYkludGVudChjb25zdCBXZWJDb3JlOjpJbnRl
bnQmIGludGVudCwgaW50IGlkZW50aWZpZXIpCisgICAgOiBtX2FjdGlvbihpbnRlbnQuYWN0aW9u
KCkpLAorICAgICAgbV90eXBlKGludGVudC50eXBlKCkpLAorICAgICAgbV9kYXRhKGludGVudC5k
YXRhKCktPnRvV2lyZVN0cmluZygpKSwKKyAgICAgIG1faWRlbnRpZmllcihpZGVudGlmaWVyKSB7
IH0KKwogV2ViU3RyaW5nIFdlYkludGVudDo6YWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9hY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRl
bnRTZXJ2aWNlSW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnRT
ZXJ2aWNlSW5mby5jcHAKaW5kZXggYzYzNjVjZWYzYWY4YTE2ZTRmMGQyYWM2YWE4M2JhYWE0OTU1
MTA4Ni4uM2RkZWY5OGM3MzIxMDdhYzcxOTliMDBjM2MzYzNhZTg1MGY1YjEyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50U2VydmljZUluZm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudFNlcnZpY2VJbmZvLmNwcApA
QCAtMzUsNiArMzUsMTcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkludGVudFNlcnZpY2VJ
bmZvOjpXZWJJbnRlbnRTZXJ2aWNlSW5mbygpIHsgfQogCitXZWJJbnRlbnRTZXJ2aWNlSW5mbzo6
V2ViSW50ZW50U2VydmljZUluZm8oY29uc3QgV2ViU3RyaW5nJiBhY3Rpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlVSTCYg
aHJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgZGlzcG9zaXRpb24pCisgICAgOiBtX2FjdGlvbihhY3Rpb24p
LAorICAgICAgbV90eXBlKHR5cGUpLAorICAgICAgbV9ocmVmKGhyZWYpLAorICAgICAgbV90aXRs
ZSh0aXRsZSksCisgICAgICBtX2Rpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSB7IH0KKwogV2ViVVJM
IFdlYkludGVudFNlcnZpY2VJbmZvOjp1cmwoKSBjb25zdAogewogICAgIHJldHVybiBtX2hyZWY7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117044</attachid>
            <date>2011-11-29 14:29:01 -0800</date>
            <delta_ts>2011-12-12 16:51:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20111129142900.patch</filename>
            <type>text/plain</type>
            <size>41246</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlN2Y5MGJlZDUyMjFj
NGQ5MTEyOTI2MzEyMzEzNmJiYmU0MjMyNy4uN2VkNjc0MjIwMjA0ODA1ZTcyYTdkNjY5N2Q4Y2Q1
ZmNkYjZhYmRiZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBTZWUgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9kZXNp
Z24tZG9jdW1lbnRzL3dlYmludGVudHNhcGkKKyAgICAgICAgZm9yIGRyYWZ0IHNwZWMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVu
dDo6ZGF0YUFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaEludGVu
dCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvSW50ZW50
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OkludGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlbnQ6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNl
dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50OjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6ZGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldERhdGEpOgorICAgICAgICAqIHBhZ2UvSW50
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpjcmVhdGUpOgorICAgICAg
ICAqIHBhZ2UvSW50ZW50LmlkbDogQWRkZWQuCisgICAgICAgICogcGFnZS9JbnRlbnRSZXN1bHRD
YWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudFJlc3VsdENhbGxiYWNr
Ojp+SW50ZW50UmVzdWx0Q2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvSW50ZW50UmVzdWx0Q2Fs
bGJhY2suaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0ludGVudHNDb250cm9sbGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6SW50ZW50c0NvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6On5JbnRlbnRzQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6Z2V0SW50ZW50
SWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKToKKyAgICAg
ICAgKiBwYWdlL0ludGVudHNDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0eSk6
CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5p
ZGw6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBh
Z2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aW50
ZW50c0NvbnRyb2xsZXIpOgorCiAyMDExLTExLTI4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3Iga25vd2luZyB3aGVuIGEgVHJl
ZUVsZW1lbnQgaXMgYWRkZWQgb3IgY2hhbmdlZCBhbnl3aGVyZSBpbiBhIFRyZWVPdXRsaW5lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3NDEzMzcyM2FjYTVmZWE2NmViODg5MzkyMTcx
ZjNmZjllZmVkNzhiLi5iN2IxMjZkNDY4MjNlOWJhYTc2ZmYwNDFiZDgzODg4NjVlZDA5ZmRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTExLTIzICBH
cmVnIEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50
c10gRmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRB
Y3Rpdml0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzMwNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYktpdC5neXA6CisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMv
V2ViSW50ZW50Lmg6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hJbnRlbnQpOgor
ICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2Vi
RnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRl
bnRSZXN1bHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmhhbmRsZUludGVudEZh
aWx1cmUpOgorICAgICAgICAqIHNyYy9XZWJJbnRlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
SW50ZW50OjpXZWJJbnRlbnQpOgorCiAyMDExLTExLTI4ICBKb24gTGVlICA8am9ubGVlQGFwcGxl
LmNvbT4KIAogICAgICAgICBQb3NzaWJsZSBmaXggZm9yIHRlc3QgZmFpbHVyZXMgaW4gcjEwMTMw
Ny4KQEAgLTg5OCwxMCArOTE3LDEzIEBACiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KIAogICAgICAgICAqIFdlYktpdC5neXA6Ci0gICAgICAgICogcHVibGljL1dlYkludGVudC5o
OiBBZGRlZC4KLSAgICAgICAgKiBwdWJsaWMvV2ViSW50ZW50U2VydmljZUluZm8uaDogQWRkZWQu
Ci0gICAgICAgICogcHVibGljL1dlYkZyYW1lLmg6Ci0gICAgICAgICogcHVibGljL1dlYkZyYW1l
Q2xpZW50Lmg6CisgICAgICAgICogcHVibGljL1dlYkludGVudHNDbGllbnQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkludGVudHNDbGllbnQ6On5XZWJJbnRlbnRzQ2xpZW50KToKKyAg
ICAgICAgKiBwdWJsaWMvV2ViSW50ZW50c0NvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICog
cHVibGljL1dlYlZpZXdDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0NsaWVudDo6
d2ViSW50ZW50c0NsaWVudCk6CisgICAgICAgICogc3JjL1dlYkludGVudHNDb250cm9sbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkludGVudHNDb250cm9sbGVyOjp3ZWJJbnRl
bnRSZXBseSk6CiAKIDIwMTEtMTEtMjIgIFNjb3R0IEdyYWhhbSAgPHNjb3R0bWdAY2hyb21pdW0u
b3JnPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJkNjVjMDBmZmM3NDcxNjFhNjhmZTUwODc4Yjk0MGNkZTBlZjM5Y2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApAQCAtMCww
ICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworCitJbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcmIGFj
dGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gZGF0YSkKKyAgICA6IG1fYWN0aW9uKGFjdGlvbikKKyAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICwgbV9pZGVudGlmaWVyKDApCit7CisgICAgc2V0RGF0YShkYXRhKTsKK30KKworU3RyaW5nIElu
dGVudDo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3Rpb247Cit9CisKK1N0cmlu
ZyBJbnRlbnQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGU7Cit9CisKK1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogSW50ZW50OjpkYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhLmdldCgpOworfQorCit2b2lkIEludGVudDo6c2V0RGF0YShQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKK3sKKyAgICBpZiAoZGF0YS5nZXQoKSkKKyAgICAgICAgbV9k
YXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhLT50b1dpcmVT
dHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBtX2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6Om51bGxWYWx1ZSgpOworfQorCitpbnQgSW50ZW50OjppZGVudGlmaWVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pZGVudGlmaWVyOworfQorCit2b2lkIEludGVudDo6c2V0SWRlbnRpZmll
cihpbnQgaWQpCit7CisgICAgbV9pZGVudGlmaWVyID0gaWQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmMxNzk1MjIyNzRiMmY4ZDI3MmQx
ZjUyNTE0ZWVhZGJlOThmMDUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudF9oCisjZGVm
aW5lIEludGVudF9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VyaWFsaXplZFNj
cmlwdFZhbHVlOworCitjbGFzcyBJbnRlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnQ+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZSgKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBhY3Rpb24sCisgICAgICAgIGNvbnN0IFN0cmluZyYgdHlwZSwKKyAgICAg
ICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICB9
CisKKyAgICBTdHJpbmcgYWN0aW9uKCkgY29uc3Q7CisgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsK
KyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEoKSBjb25zdDsKKworICAgIGludCBpZGVu
dGlmaWVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJZGVudGlmaWVyKGludCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOworCitwcml2YXRlOgorICAg
IHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworCisgICAg
U3RyaW5nIG1fYWN0aW9uOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gbV9kYXRhOworICAgIGludCBtX2lkZW50aWZpZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTllM2NlZDA2
ODI3OGJkYzc3MjVjMWZlNDMwZmI1NDk5Yzk1ZTYyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCittb2R1bGUgd2luZG93IHsKKyAgaW50ZXJmYWNlIFsKKyAgICAgIENvbmRpdGlvbmFsPVdF
Ql9JTlRFTlRTLAorICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKKyAgICAgIEN1c3RvbUNvbnN0cnVj
dEZ1bmN0aW9uLAorICAgICAgVjhDdXN0b21Db25zdHJ1Y3RvciwKKyAgXSBJbnRlbnQgeworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFjdGlvbjsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
W0N1c3RvbUdldHRlcl0gYW55IGRhdGE7CisgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUw
NjAwN2YyYjExMTE1MjNkZDhkYjZlNzc3ODk1NmQzMDY5ZGRmZjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRSZXN1bHRDYWxsYmFja19oCisjZGVmaW5lIEludGVu
dFJlc3VsdENhbGxiYWNrX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50
UmVzdWx0Q2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
eworcHVibGljOgorICAgIHZpcnR1YWwgfkludGVudFJlc3VsdENhbGxiYWNrKCkgeyB9CisgICAg
dmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJl
c3VsdCkgPSAwOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIEludGVudFJlc3VsdENh
bGxiYWNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRl
bnRSZXN1bHRDYWxsYmFjay5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50UmVzdWx0Q2FsbGJhY2suaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3N2Y2M2NmOGMxMGEwMTY2Y2UzOWQw
ODlkMDczOTFiN2Q2MGRlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsCkBAIC0wLDAgKzEsMzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCittb2R1bGUgd2luZG93IHsKKyAgaW50ZXJmYWNlIFsKKyAgICAgIENvbmRpdGlvbmFsPVdF
Ql9JTlRFTlRTLAorICAgICAgTGVnYWN5RGVmYXVsdE9wdGlvbmFsQXJndW1lbnRzLAorICAgICAg
Q2FsbGJhY2s9RnVuY3Rpb25Pbmx5CisgIF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgeworICAgICAg
Ym9vbGVhbiBoYW5kbGVFdmVudChpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgcmVzdWx0KTsKKyAg
fTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRz
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0Nv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0MDFlOTM2OTVjZTQ5ZWE1YzY4ODgzYzkxYzc1YmQ0
N2EzMmM1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50c0NvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJM
RShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxiYWNrLmgiCisjaW5j
bHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW50ZW50c0NvbnRyb2xsZXI6OkludGVudHNDb250cm9sbGVyKCkKK3sKK30KKworSW50ZW50c0Nv
bnRyb2xsZXI6On5JbnRlbnRzQ29udHJvbGxlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8SW50ZW50
c0NvbnRyb2xsZXI+IEludGVudHNDb250cm9sbGVyOjpjcmVhdGUoKQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgSW50ZW50c0NvbnRyb2xsZXIpOworfQorCitpbnQgSW50ZW50c0NvbnRyb2xs
ZXI6OmFzc2lnbkludGVudElkKFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aykKK3sKKyAgICBpbnQgaWQgPSBtX3N1Y2Nlc3NDYWxsYmFja3Muc2l6ZSgpOworICAgIG1fc3Vj
Y2Vzc0NhbGxiYWNrcy5hcHBlbmQoc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICBtX2Vycm9yQ2FsbGJh
Y2tzLmFwcGVuZChlcnJvckNhbGxiYWNrKTsKKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgSW50
ZW50c0NvbnRyb2xsZXI6OnBvc3RSZXN1bHQoY29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgaW50ZW50
SWQpCit7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGRhdGEpOworICAgIGlmIChtX3N1Y2Nlc3ND
YWxsYmFja3NbaW50ZW50SWRdLmdldCgpKQorICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFja3NbaW50
ZW50SWRdLT5oYW5kbGVFdmVudCh2YWx1ZSk7CisKKyAgICBtX3N1Y2Nlc3NDYWxsYmFja3NbaW50
ZW50SWRdLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrc1tpbnRlbnRJZF0uY2xlYXIoKTsK
K30KKwordm9pZCBJbnRlbnRzQ29udHJvbGxlcjo6cG9zdEZhaWx1cmUoY29uc3QgU3RyaW5nJiBk
YXRhLCBpbnQgaW50ZW50SWQpCit7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGRhdGEpOworICAg
IGlmIChtX2Vycm9yQ2FsbGJhY2tzW2ludGVudElkXS5nZXQoKSkKKyAgICAgICAgbV9lcnJvckNh
bGxiYWNrc1tpbnRlbnRJZF0tPmhhbmRsZUV2ZW50KHZhbHVlKTsKKworICAgIG1fc3VjY2Vzc0Nh
bGxiYWNrc1tpbnRlbnRJZF0uY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tzW2ludGVudElk
XS5jbGVhcigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50c0NvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9J
bnRlbnRzQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQzM2NkMTczYmMyMDFjODg2YWJhNWI4YzA1
N2QzNTA4ODgyZjkyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBJbnRlbnRzQ29udHJvbGxlcl9oCisjZGVmaW5lIEludGVudHNDb250cm9sbGVyX2gKKwor
I2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRl
bnRSZXN1bHRDYWxsYmFjazsKKworY2xhc3MgSW50ZW50c0NvbnRyb2xsZXIgeworcHVibGljOgor
ICAgIH5JbnRlbnRzQ29udHJvbGxlcigpOworCisgICAgc3RhdGljIFBhc3NPd25QdHI8SW50ZW50
c0NvbnRyb2xsZXI+IGNyZWF0ZSgpOworCisgICAgaW50IGFzc2lnbkludGVudElkKFBhc3NSZWZQ
dHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRl
bnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayk7CisKKyAgICB2b2lkIHBvc3RSZXN1bHQo
Y29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgaW50ZW50SWQpOworICAgIHZvaWQgcG9zdEZhaWx1cmUo
Y29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgaW50ZW50SWQpOworCitwcml2YXRlOgorICAgIEludGVu
dHNDb250cm9sbGVyKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiA+IG1fc3VjY2Vzc0NhbGxiYWNrczsKKyAgICBWZWN0b3I8UmVmUHRyPEludGVudFJlc3VsdENh
bGxiYWNrPiA+IG1fZXJyb3JDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNlbmRpZiAvLyBJbnRlbnRzQ29u
dHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDVmZTBj
ZTEzZmMxOWZhMTNjYmIzNWIwNWJhOTRjMWFiZmJmY2FhMzkuLmFiMzkxMGNkNTllYTViYzljMWFi
NTBlY2JmNTBjM2RjYzBlYmNkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCkBAIC00OSw2ICs0OSw3IEBACiAgICAgICAnLi4vJywKICAgICAgICcuLi8uLicsCiAgICAg
ICAnLi4vTW9kdWxlcy9nYW1lcGFkJywKKyAgICAgICcuLi9Nb2R1bGVzL2ludGVudHMnLAogICAg
ICAgJy4uL2FjY2Vzc2liaWxpdHknLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHkvY2hyb21pdW0n
LAogICAgICAgJy4uL2JpbmRpbmdzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2MmRlOWRmNWQ4MzE3
YmRlMjU0NWU1M2E1NDdmZTg1MmE3YWMzMmQwLi4zZDRjOGI4NjM0NWZhYjk4MThhNTRmYWNiYTQy
MDFkN2RjMTVhYzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xMTM5LDYgKzExMzksOCBAQAogICAg
ICAgICAnd2ViY29yZV9iaW5kaW5nc19pZGxfZmlsZXMnOiBbCiAgICAgICAgICAgICAnTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWQuaWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2Ft
ZXBhZExpc3QuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCcs
CisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbCcs
CiAgICAgICAgICAgICAnY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCcsCiAgICAgICAgICAgICAnY3Nz
L0NTU0ZvbnRGYWNlUnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NJbXBvcnRSdWxlLmlk
bCcsCkBAIC0xNjgwLDYgKzE2ODIsMTEgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuY3Bw
JywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaCcsCisgICAgICAg
ICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMv
aW50ZW50cy9JbnRlbnQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudFJl
c3VsdENhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29u
dHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29udHJv
bGxlci5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwJywK
ICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAnLAog
ICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApAQCAt
MjIyOSw2ICsyMjM2LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQx
NkFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50
MzJBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
dDhBcnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
dGVudEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEphdmFT
Y3JpcHRDYWxsRnJhbWVDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNl
ZjIwNWJkNmQzYjA2N2E1ZjhkNDhkZDE1OTdlMjFhMDdkZjllNzgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwCkBA
IC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9JTlRF
TlRTKQorCisjaW5jbHVkZSAiVjhJbnRlbnQuaCIKKworI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6
OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJ
TkNfU1RBVFMoIkludGVudC5Db25zdHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3Ry
dWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1
Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7CisKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA9PSAwKSB7CisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6
Y3JlYXRlKFN0cmluZygpLCBTdHJpbmcoKSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFs
dWUoKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigp
LCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW50ZW50LnJlbGVh
c2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0g
MikgeworICAgICAgICBTdHJpbmcgYWN0aW9uID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVu
ZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0
cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsKKworICAgICAgICBpZiAoYWN0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJBY3Rpb24gY2Fu
bm90IGJlIGVtcHR5Iik7CisgICAgICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJUeXBlIGNhbm5vdCBiZSBlbXB0eSIpOworCisgICAgICAgIFJl
ZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIHRvVjgoaW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMykgeworICAgICAgICBTdHJpbmcgYWN0aW9uID0gdG9X
ZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgICAgICBT
dHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdz
WzFdKTsKKworICAgICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKCJBY3Rpb24gY2Fubm90IGJlIGVtcHR5Iik7CisgICAgICAgIGlmICh0eXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUeXBlIGNhbm5vdCBi
ZSBlbXB0eSIpOworCisgICAgICAgIGJvb2wgZXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShhcmdzWzJdLCAwLCAwLCBleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9u
KQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkludGVudCBjb25zdHJ1Y3RvciBkYXRh
IG11c3QgYmUgYSBzdHJ1Y3R1cmVkIGNsb25lIik7CisKKyAgICAgICAgUmVmUHRyPEludGVudD4g
aW50ZW50ID0gSW50ZW50OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBkYXRhKTsKKyAgICAgICAgVjhE
T01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBpbnRlbnQuZ2V0
KCkpOworICAgICAgICByZXR1cm4gdG9WOChpbnRlbnQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhyb3dFcnJvcigiSW50ZW50IGNvbnN0cnVjdG9yIG11
c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzIik7Cit9CisKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEludGVudDo6ZGF0YUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEludGVu
dCogaW1wbCA9IFY4SW50ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKworICAgIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFZhbHVlID0gaW1wbC0+ZGF0YSgpOworICAgIGlm
IChzZXJpYWxpemVkVmFsdWUpCisgICAgICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWUtPmRlc2Vy
aWFsaXplKCk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDMzMWYwOWM2ZjBlMjExNDljNGYx
YTAxODNmY2JmZDI5ODZlOTQzNGIuLjNmMjMxOWVkZWY1NmJiNTk1Mzg2YTNjNDFkNDQxZjliZDMz
Y2MxMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBAIC03
OCw2ICs3OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIGNsYXNzIEhUTUxQ
bHVnSW5FbGVtZW50OwogICAgIGNsYXNzIEludFNpemU7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRT
KQorICAgIGNsYXNzIEludGVudDsKKyNlbmRpZgogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3Mg
TmF2aWdhdGlvbkFjdGlvbjsKICAgICBjbGFzcyBQYWdlOwpAQCAtMzE5LDYgKzMyMiwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGcmFtZU5ldHdv
cmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpID0gMDsKIAogICAgICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZShjb25zdCBLVVJMJikgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hJbnRlbnQoY29uc3QgSW50ZW50JiBpbnRlbnQpIHsgfQorI2VuZGlmCiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
CmluZGV4IGM5YWMyNTFjMjZiZGU0OTMwODcyNjI5MGRjNmFhNzg0MzAwMTkxYTYuLjY4NmQ2YTFj
ZWQzNTM5NDk4NTQyZmM5OWJmMWM0YTE0MGZmOWQ0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwKQEAgLTYxOCw2ICs2MTgsMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJp
YnV0ZSBbRW5hYmxlZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3Ry
dWN0b3IgVHJhY2tFdmVudDsKICNlbmRpZgogCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCX0lOVEVO
VFMpICYmIEVOQUJMRV9XRUJfSU5URU5UUworICAgICAgICBhdHRyaWJ1dGUgSW50ZW50Q29uc3Ry
dWN0b3IgSW50ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisjZW5kaWYKKwog
ICAgICAgICBhdHRyaWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwogICAgICAgICBh
dHRyaWJ1dGUgRE9NUGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVnaW5BcnJheTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuY3BwCmluZGV4IGJjMWUwNTM0ZDBlYzkwMjcxOWZhNzQ0YTcxOTkzM2Q0
OTRiOTliZWYuLmQyM2RjOGEzYmJlNjcwMGUwY2I0MGM0OTUwZWY0OTdhZDUxYmRkNjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTMzLDYgKzMzLDkgQEAKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR2Vv
bG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRD
YWxsYmFjay5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUG9p
bnRlckxvY2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKQEAg
LTMxOSw0ICszMjIsMjggQEAgR2FtZXBhZExpc3QqIE5hdmlnYXRvcjo6d2Via2l0R2FtZXBhZHMo
KQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCit2b2lkIE5hdmlnYXRvcjo6
c3RhcnRBY3Rpdml0eShQYXNzUmVmUHRyPEludGVudD4gaW50ZW50LCBQYXNzUmVmUHRyPEludGVu
dFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
ZnJhbWUoKSB8fCAhZnJhbWUoKS0+bG9hZGVyKCkgfHwgIWZyYW1lKCktPmxvYWRlcigpLT5jbGll
bnQoKSB8fCAhaW50ZW50LmdldCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW50ZW50LT5hY3Rpb24oKS5pc0Vt
cHR5KCkgfHwgaW50ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gVkFMSURB
VElPTl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVNjcmlwdENvbnRy
b2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGlkID0gbV9mcmFt
ZS0+cGFnZSgpLT5pbnRlbnRzQ29udHJvbGxlcigpLT5hc3NpZ25JbnRlbnRJZChzdWNjZXNzQ2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIGludGVudC0+c2V0SWRlbnRpZmllcihpZCk7Cisg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaEludGVudCgqaW50ZW50KTsK
K30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL05hdmlnYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
aAppbmRleCA2MzIxYjMxZDk3MzYyMjkzY2MxODIzZDY5ZGZhODlmMDgxNWIwMzIyLi5lODE3N2Iy
ZDRlOTFjYjEyZmRmODk1NTY4YmY2ZWI2YTMzOWRkYWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9y
LmgKQEAgLTMzLDYgKzMzLDggQEAgY2xhc3MgRE9NUGx1Z2luQXJyYXk7CiBjbGFzcyBGcmFtZTsK
IGNsYXNzIEdhbWVwYWRMaXN0OwogY2xhc3MgR2VvbG9jYXRpb247CitjbGFzcyBJbnRlbnQ7Citj
bGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFjazsKIGNsYXNzIFBvaW50ZXJMb2NrOwogY2xhc3MgTmF2
aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1
Y2Nlc3NDYWxsYmFjazsKQEAgLTc5LDYgKzgxLDEwIEBAIHB1YmxpYzoKICAgICBHYW1lcGFkTGlz
dCogd2Via2l0R2FtZXBhZHMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQor
ICAgIHZvaWQgc3RhcnRBY3Rpdml0eShQYXNzUmVmUHRyPEludGVudD4sIFBhc3NSZWZQdHI8SW50
ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1
bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgTmF2aWdhdG9yKEZyYW1lKik7CiAgICAgRnJhbWUqIG1fZnJhbWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5pZGwKaW5kZXggMmI2MWM1YTRiZWY3MDQ2YWQ5ZGQ0NTkyN2NhMmQy
NWExYTA0MzgwZC4uODRmMGRhNDQyMTNiNDAyODk5NjgwMzMwMDg3MDdkN2Y3Njk0MWRhMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApAQCAtNjUsNiArNjUsMTEgQEAgbW9kdWxlIHdpbmRv
dyB7CiAjaWYgZGVmaW5lZChFTkFCTEVfR0FNRVBBRCkgJiYgRU5BQkxFX0dBTUVQQUQKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBHYW1lcGFkTGlzdCB3ZWJr
aXRHYW1lcGFkczsKICNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCX0lOVEVOVFMpICYm
IEVOQUJMRV9XRUJfSU5URU5UUworICAgICAgICB2b2lkIHN0YXJ0QWN0aXZpdHkoaW4gSW50ZW50
IGludGVudCwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFj
ayBmYWlsdXJlQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNl
bmRpZgogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDQ2NTk5ZmM0YzNmY2FiOTBl
YjQ5Y2IwMjhjYjUwNmNjMjFkNGZhYjYuLmM5NWFmZmE4MTZjY2UyZWUzZDk0ZDRmMWEyOGYwOWZj
ODJjMWU0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUg
Ikhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgpAQCAtMTQ4LDYgKzE0OSw5IEBAIFBhZ2U6
OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiAgICAgLCBtX3VzZXJNZWRpYUNsaWVudChwYWdlQ2xpZW50cy51c2VyTWVkaWFDbGllbnQpCiAj
ZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgLCBtX2ludGVudHNDb250cm9sbGVy
KEludGVudHNDb250cm9sbGVyOjpjcmVhdGUoKSkKKyNlbmRpZgogICAgICwgbV9zZXR0aW5ncyhh
ZG9wdFB0cihuZXcgU2V0dGluZ3ModGhpcykpKQogICAgICwgbV9wcm9ncmVzcyhhZG9wdFB0cihu
ZXcgUHJvZ3Jlc3NUcmFja2VyKSkKICAgICAsIG1fYmFja0ZvcndhcmRDb250cm9sbGVyKGFkb3B0
UHRyKG5ldyBCYWNrRm9yd2FyZENvbnRyb2xsZXIodGhpcywgcGFnZUNsaWVudHMuYmFja0Zvcndh
cmRDbGllbnQpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggM2QwZWU3YTliZDQ1ZDc4NWZiNjYzMTRkOWM5
YTI4MGZlNGRkZGM3MC4uN2QxNDdiMjBmODdiNzJkYmU0Y2RiNWRhNWZkNThlYjQ0ZjFmMjU2NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmgKQEAgLTcwLDYgKzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEhpc3RvcnlJdGVtOwogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFz
cyBJbnNwZWN0b3JDb250cm9sbGVyOworICAgIGNsYXNzIEludGVudHNDb250cm9sbGVyOwogICAg
IGNsYXNzIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcjsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNz
IE5vdGlmaWNhdGlvbkNvbnRyb2xsZXI7CkBAIC0xOTUsNiArMTk2LDkgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFVzZXJNZWRpYUNsaWVu
dCogdXNlck1lZGlhQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VyTWVkaWFDbGllbnQ7IH0K
ICNlbmRpZgorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgSW50ZW50c0NvbnRyb2xs
ZXIqIGludGVudHNDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlbnRzQ29udHJvbGxl
ci5nZXQoKTsgfQorI2VuZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NUcmFja2VyKiBwcm9n
cmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KICAgICAgICAgQmFja0Zv
cndhcmRDb250cm9sbGVyKiBiYWNrRm9yd2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja0Zvcndh
cmRDb250cm9sbGVyLmdldCgpOyB9CkBAIC0zODEsNiArMzg1LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFVzZXJNZWRpYUNsaWVudCog
bV91c2VyTWVkaWFDbGllbnQ7CiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAg
ICAgIE93blB0cjxJbnRlbnRzQ29udHJvbGxlcj4gbV9pbnRlbnRzQ29udHJvbGxlcjsKKyNlbmRp
ZgogICAgICAgICBPd25QdHI8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAgICAgICAgIE93blB0cjxQ
cm9ncmVzc1RyYWNrZXI+IG1fcHJvZ3Jlc3M7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9m
ZWF0dXJlcy5neXBpCmluZGV4IDExOThhYTE4YjQ4MDdhOTVmMTJmNDczODQ4NjU3NTI5MWZmODVl
NWIuLjUxNmMyZGZiOTA2MzFhNWYyOTYyYjY3MTFlNGZiMDE4M2M3YzkyYzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTE1NCw2ICsxNTQsMTEgQEAKICAgICAgICAgICAn
RU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVI9MScsCiAgICAgICAgIF0sCiAgICAgICB9
XSwKKyAgICAgIFsnZW5hYmxlX3dlYl9pbnRlbnRzPT0xJywgeworICAgICAgICAnZmVhdHVyZV9k
ZWZpbmVzJzogWworICAgICAgICAgICdFTkFCTEVfV0VCX0lOVEVOVFM9MScsCisgICAgICAgIF0s
CisgICAgICB9XSwKICAgICAgIFsnT1M9PSJtYWMiJywgewogICAgICAgICAnZmVhdHVyZV9kZWZp
bmVzJzogWwogICAgICAgICAgICdFTkFCTEVfUlVCQkVSX0JBTkRJTkc9MScsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCmluZGV4IDk4OWU5YjA3ZmQ1OTNkY2Q0ZWEz
NTE1ZjU4MDcxZDJiMDBkY2Y4NTcuLjQyN2UxNGM1ZGMwODIzY2I2NzAwMTdmZmQyNTY1NTUxMTJk
YWY3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCkBAIC0z
NCw2ICszNCwxMCBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgogCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNs
YXNzIEludGVudDsgfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBIb2xkcyBk
YXRhIHBhc3NlZCB0aHJvdWdoIGEgV2ViIEludGVudHMgaW52b2NhdGlvbiBjYWxsIGZyb20gdGhl
IEphdmFzY3JpcHQKQEAgLTU3LDYgKzYxLDcgQEAgcHVibGljOgogCiAjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCiAgICAgV2ViSW50ZW50KCk7CisgICAgV2ViSW50ZW50KGNvbnN0IFdlYkNvcmU6
OkludGVudCYpOwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnRTZXJ2aWNlSW5mby5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50U2VydmljZUluZm8uaAppbmRleCA1ZWU0YTA5NjNjN2Yx
NDFmOWU5MmMzMzMxYjkxNzNkOTljZWI0ZWJlLi45YzU4MmM5YzYzZDg5MjZkNTE2MzEyYjk5YTBm
NTc0ZWI2Zjk1MmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJJbnRlbnRTZXJ2aWNlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkludGVudFNlcnZpY2VJbmZvLmgKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogCiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgV2ViSW50ZW50U2VydmljZUluZm8oKTsKKyAgICBX
ZWJJbnRlbnRTZXJ2aWNlSW5mbyhjb25zdCBXZWJTdHJpbmcmIGFjdGlvbiwgY29uc3QgV2ViU3Ry
aW5nJiB0eXBlLCBjb25zdCBXZWJVUkwmIGhyZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiB0aXRsZSwgY29uc3QgV2ViU3RyaW5nJiBkaXNwb3NpdGlvbik7CiAj
ZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuY3BwCmluZGV4IDgwOTM2ZjdiMTQ0MTNjMzVkMWIzNzgyZWUw
NjlkMDNlODBlYTcxNmIuLmYzZmY1YjQzNTg1MjBjZWM4ZjlkNjZmMjIzY2M2NjgyNDdmNTM0Zjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGll
bnRJbXBsLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIK
KyNpbmNsdWRlICJXZWJJbnRlbnQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJX
ZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnkuaCIKQEAg
LTE2MTcsNCArMTYxOCwxMCBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IEZy
YW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleAogICAgIHJldHVybiBG
cmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbDo6Y3JlYXRlKG1fd2ViRnJhbWUtPmZyYW1lKCkpOwog
fQogCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hJbnRlbnQoY29uc3QgV2Vi
Q29yZTo6SW50ZW50JiBpbnRlbnQpCit7CisgICAgV2ViSW50ZW50IHdlYkludGVudChpbnRlbnQp
OworICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaXNwYXRjaEludGVudCh3ZWJGcmFtZSgpLCB3
ZWJJbnRlbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKaW5kZXggZTY0NGQxODgy
ZDE1MTk0ZDBkNDc0MzVmNjE4MWY0YjE3Y2ViY2U0ZS4uNWJmMzZmYmE2Mjg0ZGI1Y2Q3Njc4YzFm
MjVmNGEzODAyZDNhNWVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKQEAgLTIwOCw2ICsyMDgsOCBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3Jl
YXRlTmV0d29ya2luZ0NvbnRleHQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEludGVu
dChjb25zdCBXZWJDb3JlOjpJbnRlbnQmKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VEb2N1
bWVudFZpZXcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAKaW5kZXggNzUxZDJjYjYyNDUzN2FmYmIxZGQ1Yjc3NDdhNTA5MjlkODE2NDM5ZC4uODFlMmFl
MGZkOGQ1MGZjYjk2MmJjYzk5YzIyZDM0MjViZGY0NmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCkBAIC0xMDQsNiArMTA0LDcgQEAKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSWNvblVSTC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnRlbnRzQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIK
QEAgLTE4MjgsMTAgKzE4MjksMjQgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnJlc2V0TWF0Y2hDb3Vu
dCgpCiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRlbnRSZXN1bHQoaW50IGludGVudElk
ZW50aWZpZXIsIGNvbnN0IFdlYlN0cmluZyYgcmVwbHkpCiB7CisgICAgaWYgKCFtX2ZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgV1RGOjpTdHJp
bmcgcmVwbHlTdHJpbmcgPSByZXBseS5vcGVyYXRvciBTdHJpbmcoKTsKKyAgICBtX2ZyYW1lLT5w
YWdlKCktPmludGVudHNDb250cm9sbGVyKCktPnBvc3RSZXN1bHQocmVwbHlTdHJpbmcsIGludGVu
dElkZW50aWZpZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRl
bnRGYWlsdXJlKGludCBpbnRlbnRJZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIHJlcGx5KQog
eworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKFdFQl9J
TlRFTlRTKQorICAgIFdURjo6U3RyaW5nIHJlcGx5U3RyaW5nID0gcmVwbHkub3BlcmF0b3IgU3Ry
aW5nKCk7CisgICAgbV9mcmFtZS0+cGFnZSgpLT5pbnRlbnRzQ29udHJvbGxlcigpLT5wb3N0RmFp
bHVyZShyZXBseVN0cmluZywgaW50ZW50SWRlbnRpZmllcik7CisjZW5kaWYKIH0KIAogV2ViU3Ry
aW5nIFdlYkZyYW1lSW1wbDo6Y29udGVudEFzVGV4dChzaXplX3QgbWF4Q2hhcnMpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAppbmRleCAxMzU0MGUxNjIxYjhh
M2FmZWM4MWJhOTRlYTA5YmRmZjEwYjllY2UzLi4xZmFlYzYzZTRkZTBhZTI3YTYzZjhkYTM2MmZl
MWE3N2RmY2FlNDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bnRlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5jcHAK
QEAgLTMxLDEwICszMSwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYklu
dGVudC5oIgogCisjaW5jbHVkZSAiSW50ZW50LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBXZWJJbnRlbnQ6OldlYkludGVudCgp
IHsgfQogCitXZWJJbnRlbnQ6OldlYkludGVudChjb25zdCBXZWJDb3JlOjpJbnRlbnQmIGludGVu
dCkKKyAgICA6IG1fYWN0aW9uKGludGVudC5hY3Rpb24oKSkKKyAgICAsIG1fdHlwZShpbnRlbnQu
dHlwZSgpKQorICAgICwgbV9kYXRhKGludGVudC5kYXRhKCktPnRvV2lyZVN0cmluZygpKQorICAg
ICwgbV9pZGVudGlmaWVyKGludGVudC5pZGVudGlmaWVyKCkpIHsgfQorCiBXZWJTdHJpbmcgV2Vi
SW50ZW50OjphY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2FjdGlvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudFNlcnZpY2VJbmZvLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudFNlcnZpY2VJbmZvLmNwcAppbmRl
eCBjNjM2NWNlZjNhZjhhMTZlNGYwZDJhYzZhYTgzYmFhYTQ5NTUxMDg2Li5lN2VhMjJjOGM5MDJh
NTRmYmQ1YTkxYTAxMTMyYjMzNDdhNDg4OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJbnRlbnRTZXJ2aWNlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSW50ZW50U2VydmljZUluZm8uY3BwCkBAIC0zNSw2ICszNSwxNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogV2ViSW50ZW50U2VydmljZUluZm86OldlYkludGVudFNlcnZp
Y2VJbmZvKCkgeyB9CiAKK1dlYkludGVudFNlcnZpY2VJbmZvOjpXZWJJbnRlbnRTZXJ2aWNlSW5m
byhjb25zdCBXZWJTdHJpbmcmIGFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVVJMJiBocmVmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdGl0bGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5n
JiBkaXNwb3NpdGlvbikKKyAgICA6IG1fYWN0aW9uKGFjdGlvbikKKyAgICAsIG1fdHlwZSh0eXBl
KQorICAgICwgbV9ocmVmKGhyZWYpCisgICAgLCBtX3RpdGxlKHRpdGxlKQorICAgICwgbV9kaXNw
b3NpdGlvbihkaXNwb3NpdGlvbikgeyB9CisKIFdlYlVSTCBXZWJJbnRlbnRTZXJ2aWNlSW5mbzo6
dXJsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9ocmVmOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118908</attachid>
            <date>2011-12-12 16:51:26 -0800</date>
            <delta_ts>2011-12-22 13:26:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20111212165125.patch</filename>
            <type>text/plain</type>
            <size>39763</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2IxZWZhMjM2Mjg2NjY1
OGUyOTc2MjJjYjkzZDRjYTI2MDAxYzc2Ni4uOWQwOGI2ZjNjMWExOWM5ODI0YWU5MDc3ZGNjMTI2
NzAxYzJmM2Q3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBTZWUgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9kZXNp
Z24tZG9jdW1lbnRzL3dlYmludGVudHNhcGkKKyAgICAgICAgZm9yIGRyYWZ0IHNwZWMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiAoT09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpW
OEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVu
dDo6ZGF0YUFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaEludGVu
dCk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvSW50ZW50
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OkludGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlbnQ6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNl
dEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50OjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6ZGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldERhdGEpOgorICAgICAgICAqIHBhZ2UvSW50
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpjcmVhdGUpOgorICAgICAg
ICAqIHBhZ2UvSW50ZW50LmlkbDogQWRkZWQuCisgICAgICAgICogcGFnZS9JbnRlbnRSZXN1bHRD
YWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudFJlc3VsdENhbGxiYWNr
Ojp+SW50ZW50UmVzdWx0Q2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvSW50ZW50UmVzdWx0Q2Fs
bGJhY2suaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL0ludGVudHNDb250cm9sbGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6SW50ZW50c0NvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6On5JbnRlbnRzQ29u
dHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6Z2V0SW50ZW50
SWQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKToKKyAgICAg
ICAgKiBwYWdlL0ludGVudHNDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvTmF2
aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0eSk6
CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5p
ZGw6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBh
Z2UpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aW50
ZW50c0NvbnRyb2xsZXIpOgorCiAyMDExLTEyLTExICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxh
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBLaWxsUmluZ05vbmUuY3BwIHRvIE1hYyBidWls
ZCBzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZmFlYjI1MzZlYjk3YTRmZjRh
ODhjMzkzMmYzZmRmNzk2NGM2N2RiOS4uOTNmOWZkMDcxOGE3NDFmMmMzYzRkMTJiMWNhZjM3OWQ0
OWYwMTQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAx
MS0xMS0yMyAgR3JlZyBCaWxsb2NrICA8Z2JpbGxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBb
V2ViIEludGVudHNdIEZsYWdnZWQtb2ZmIFdlYkNvcmUgaW1wbGVtZW50YXRpb24gb2YgbmF2aWdh
dG9yLnN0YXJ0QWN0aXZpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTczMDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAg
ICogcHVibGljL1dlYkludGVudC5oOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNo
SW50ZW50KToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAg
ICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
aGFuZGxlSW50ZW50UmVzdWx0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpoYW5k
bGVJbnRlbnRGYWlsdXJlKToKKyAgICAgICAgKiBzcmMvV2ViSW50ZW50LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmguCisgICAgICAgIChX
ZWJLaXQ6OldlYkludGVudDo6V2ViSW50ZW50KToKKwogMjAxMS0xMi0wOSAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIGZv
cndhcmRpbmcgaGVhZGVycyBmb3IgV2ViTGF5ZXIgQVBJcwpAQCAtMjk4NCw2ICszMDAzLDEzIEBA
CiAgICAgICAgICogcHVibGljL1dlYkludGVudFNlcnZpY2VJbmZvLmg6IEFkZGVkLgogICAgICAg
ICAqIHB1YmxpYy9XZWJGcmFtZS5oOgogICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZUNsaWVudC5o
OgorICAgICAgICAqIHB1YmxpYy9XZWJJbnRlbnRzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJJbnRlbnRzQ2xpZW50Ojp+V2ViSW50ZW50c0NsaWVudCk6CisgICAgICAgICog
cHVibGljL1dlYkludGVudHNDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9X
ZWJWaWV3Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnQ6OndlYkludGVu
dHNDbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJJbnRlbnRzQ29udHJvbGxlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnRzQ29udHJvbGxlcjo6d2ViSW50ZW50UmVwbHkp
OgogCiAyMDExLTExLTIyICBTY290dCBHcmFoYW0gIDxzY290dG1nQGNocm9taXVtLm9yZz4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDY1
YzAwZmZjNzQ3MTYxYTY4ZmU1MDg3OGI5NDBjZGUwZWYzOWNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAKQEAgLTAsMCArMSw4MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
LCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKworI2lmIEVOQUJMRShXRUJf
SU5URU5UUykKKworI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKworSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
CisgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1faWRl
bnRpZmllcigwKQoreworICAgIHNldERhdGEoZGF0YSk7Cit9CisKK1N0cmluZyBJbnRlbnQ6OmFj
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0aW9uOworfQorCitTdHJpbmcgSW50ZW50
Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90eXBlOworfQorCitTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5nZXQo
KTsKK30KKwordm9pZCBJbnRlbnQ6OnNldERhdGEoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGRhdGEpCit7CisgICAgaWYgKGRhdGEuZ2V0KCkpCisgICAgICAgIG1fZGF0YSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5nKCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxs
VmFsdWUoKTsKK30KKworaW50IEludGVudDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faWRlbnRpZmllcjsKK30KKwordm9pZCBJbnRlbnQ6OnNldElkZW50aWZpZXIoaW50IGlk
KQoreworICAgIG1faWRlbnRpZmllciA9IGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZjMTc5NTIyMjc0YjJmOGQyNzJkMWY1MjUxNGVl
YWRiZTk4ZjA1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnQuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRfaAorI2RlZmluZSBJbnRl
bnRfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTsKKworY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoCisgICAgICAgIGNvbnN0IFN0
cmluZyYgYWN0aW9uLAorICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9uLCB0eXBlLCBkYXRhKSk7CisgICAgfQorCisgICAg
U3RyaW5nIGFjdGlvbigpIGNvbnN0OworICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CisgICAgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhKCkgY29uc3Q7CisKKyAgICBpbnQgaWRlbnRpZmllcigp
IGNvbnN0OworICAgIHZvaWQgc2V0SWRlbnRpZmllcihpbnQpOworCitwcm90ZWN0ZWQ6CisgICAg
SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNl
dERhdGEoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KTsKKworICAgIFN0cmluZyBt
X2FjdGlvbjsKKyAgICBTdHJpbmcgbV90eXBlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG1fZGF0YTsKKyAgICBpbnQgbV9pZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIEludGVudF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5ZTNjZWQwNjgyNzhiZGM3
NzI1YzFmZTQzMGZiNTQ5OWM5NWU2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9k
dWxlIHdpbmRvdyB7CisgIGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5U
UywKKyAgICAgIENhbkJlQ29uc3RydWN0ZWQsCisgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlv
biwKKyAgICAgIFY4Q3VzdG9tQ29uc3RydWN0b3IsCisgIF0gSW50ZW50IHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhY3Rpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21H
ZXR0ZXJdIGFueSBkYXRhOworICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MDYwMDdmMmIx
MTExNTIzZGQ4ZGI2ZTc3Nzg5NTZkMzA2OWRkZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09H
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSW50ZW50UmVzdWx0Q2FsbGJhY2tfaAorI2RlZmluZSBJbnRlbnRSZXN1bHRD
YWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKK2NsYXNzIEludGVudFJlc3VsdENh
bGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5JbnRlbnRSZXN1bHRDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFdmVudChSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQpID0g
MDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRSZXN1bHRDYWxsYmFja19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0
Q2FsbGJhY2suaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3Vs
dENhbGxiYWNrLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzdmNjNjZjhjMTBhMDE2NmNlMzlkMDg5ZDA3Mzkx
YjdkNjBkZWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9k
dWxlIHdpbmRvdyB7CisgIGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5U
UywKKyAgICAgIExlZ2FjeURlZmF1bHRPcHRpb25hbEFyZ3VtZW50cywKKyAgICAgIENhbGxiYWNr
PUZ1bmN0aW9uT25seQorICBdIEludGVudFJlc3VsdENhbGxiYWNrIHsKKyAgICAgIGJvb2xlYW4g
aGFuZGxlRXZlbnQoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHJlc3VsdCk7CisgIH07Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNDAxZTkzNjk1Y2U0OWVhNWM2ODg4M2M5MWM3NWJkNDdhMzJjNWY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dHNDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCX0lO
VEVOVFMpCisKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludGVudHND
b250cm9sbGVyOjpJbnRlbnRzQ29udHJvbGxlcigpCit7Cit9CisKK0ludGVudHNDb250cm9sbGVy
Ojp+SW50ZW50c0NvbnRyb2xsZXIoKQoreworfQorCitQYXNzT3duUHRyPEludGVudHNDb250cm9s
bGVyPiBJbnRlbnRzQ29udHJvbGxlcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IEludGVudHNDb250cm9sbGVyKTsKK30KKworaW50IEludGVudHNDb250cm9sbGVyOjphc3Np
Z25JbnRlbnRJZChQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJh
Y2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7Cisg
ICAgaW50IGlkID0gbV9zdWNjZXNzQ2FsbGJhY2tzLnNpemUoKTsKKyAgICBtX3N1Y2Nlc3NDYWxs
YmFja3MuYXBwZW5kKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgbV9lcnJvckNhbGxiYWNrcy5hcHBl
bmQoZXJyb3JDYWxsYmFjayk7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIEludGVudHNDb250
cm9sbGVyOjpwb3N0UmVzdWx0KGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKQorewor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhKTsKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tz
W2ludGVudElkXS5nZXQoKSkKKyAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElkXS0+
aGFuZGxlRXZlbnQodmFsdWUpOworCisgICAgbV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElkXS5j
bGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFja3NbaW50ZW50SWRdLmNsZWFyKCk7Cit9CisKK3Zv
aWQgSW50ZW50c0NvbnRyb2xsZXI6OnBvc3RGYWlsdXJlKGNvbnN0IFN0cmluZyYgZGF0YSwgaW50
IGludGVudElkKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhKTsKKyAgICBpZiAobV9l
cnJvckNhbGxiYWNrc1tpbnRlbnRJZF0uZ2V0KCkpCisgICAgICAgIG1fZXJyb3JDYWxsYmFja3Nb
aW50ZW50SWRdLT5oYW5kbGVFdmVudCh2YWx1ZSk7CisKKyAgICBtX3N1Y2Nlc3NDYWxsYmFja3Nb
aW50ZW50SWRdLmNsZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrc1tpbnRlbnRJZF0uY2xlYXIo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9J
TlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dHNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0Nv
bnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzNjZDE3M2JjMjAxYzg4NmFiYTViOGMwNTdkMzUwODg4
MmY5MjFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudHNDb250cm9sbGVyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50
ZW50c0NvbnRyb2xsZXJfaAorI2RlZmluZSBJbnRlbnRzQ29udHJvbGxlcl9oCisKKyNpZiBFTkFC
TEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50ZW50UmVzdWx0
Q2FsbGJhY2s7CisKK2NsYXNzIEludGVudHNDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICB+SW50
ZW50c0NvbnRyb2xsZXIoKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPEludGVudHNDb250cm9s
bGVyPiBjcmVhdGUoKTsKKworICAgIGludCBhc3NpZ25JbnRlbnRJZChQYXNzUmVmUHRyPEludGVu
dFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOworCisgICAgdm9pZCBwb3N0UmVzdWx0KGNvbnN0IFN0
cmluZyYgZGF0YSwgaW50IGludGVudElkKTsKKyAgICB2b2lkIHBvc3RGYWlsdXJlKGNvbnN0IFN0
cmluZyYgZGF0YSwgaW50IGludGVudElkKTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnRzQ29udHJv
bGxlcigpOworCisgICAgVmVjdG9yPFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBtX3N1
Y2Nlc3NDYWxsYmFja3M7CisgICAgVmVjdG9yPFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
PiBtX2Vycm9yQ2FsbGJhY2tzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjZW5kaWYgLy8gSW50ZW50c0NvbnRyb2xsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA5Nzg1MGUyYmY0ZmM5
ZDU0MTY5MjY5ZWZkZjRkMTg3NDQxZGRjODhmLi5iZjkxMmM0NDZjYjEzNDU4ODA3Yzk5YjhiODYy
NGYyODVhNmIyNGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAt
NDksNiArNDksNyBAQAogICAgICAgJy4uLycsCiAgICAgICAnLi4vLi4nLAogICAgICAgJy4uL01v
ZHVsZXMvZ2FtZXBhZCcsCisgICAgICAnLi4vTW9kdWxlcy9pbnRlbnRzJywKICAgICAgICcuLi9h
Y2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5L2Nocm9taXVtJywKICAgICAg
ICcuLi9iaW5kaW5ncycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMGRiMzgxN2QzYzZmZWQwOTBmNzhj
MTVhZmJlY2ZhMzFjNjY2N2E1Mi4uZmVkNGMxYTkzNTNmOGUxN2E1OGZmYWQ3N2IyYmQyOTU1MTQy
N2QxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTE0MSw2ICsxMTQxLDggQEAKICAgICAgICAgJ3dl
YmNvcmVfYmluZGluZ3NfaWRsX2ZpbGVzJzogWwogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0
LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLAorICAgICAg
ICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwnLAogICAgICAg
ICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250
RmFjZVJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAt
MTY4NCw2ICsxNjg2LDExIEBACiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
aCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmNwcCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMv
SW50ZW50LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxs
YmFjay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIu
Y3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaCcs
CiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCcsCiAgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwJywKICAgICAgICAg
ICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oJywKQEAgLTIyMzQsNiAr
MjI0MSw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlD
dXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2Fs
bEZyYW1lQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9j
YXRpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODQ4OWRmM2My
YTFhMDY3YjhmZTQxMmY1YzRmMDY2MTZiYzg4Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcApAQCAtMCwwICsx
LDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
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
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKwor
I2luY2x1ZGUgIlY4SW50ZW50LmgiCisKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNp
bmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiV3JhcHBlclR5cGVJbmZvLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1
Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRT
KCJJbnRlbnQuQ29uc3RydWN0b3IiKTsKKworICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fu
bm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOworCisgICAgaWYgKCFhcmdzLkxlbmd0aCgp
KSB7CisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6Y3JlYXRlKFN0cmlu
ZygpLCBTdHJpbmcoKSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAg
ICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW50
ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW50ZW50LnJlbGVhc2UoKSwgYXJncy5I
b2xkZXIoKSk7CisgICAgfQorCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMikgeworICAgICAg
ICBTdHJpbmcgYWN0aW9uID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNr
KGFyZ3NbMF0pOworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
T3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsKKworICAgICAgICBpZiAoYWN0aW9uLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJBY3Rpb24gY2Fubm90IGJlIGVtcHR5
Iik7CisgICAgICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJUeXBlIGNhbm5vdCBiZSBlbXB0eSIpOworCisgICAgICAgIFJlZlB0cjxJbnRlbnQ+
IGludGVudCA9IEludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpudWxsVmFsdWUoKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihh
cmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgo
aW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPT0gMykgeworICAgICAgICBTdHJpbmcgYWN0aW9uID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgICAgICBTdHJpbmcgdHlwZSA9
IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsKKworICAg
ICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJBY3Rpb24gY2Fubm90IGJlIGVtcHR5Iik7CisgICAgICAgIGlmICh0eXBlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUeXBlIGNhbm5vdCBiZSBlbXB0eSIpOwor
CisgICAgICAgIGJvb2wgZXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdz
WzJdLCAwLCAwLCBleGNlcHRpb24pOworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoIkludGVudCBjb25zdHJ1Y3RvciBkYXRhIG11c3QgYmUgYSBz
dHJ1Y3R1cmVkIGNsb25lIik7CisKKyAgICAgICAgUmVmUHRyPEludGVudD4gaW50ZW50ID0gSW50
ZW50OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBkYXRhKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBpbnRlbnQuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gdG9WOChpbnRlbnQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdGhyb3dFcnJvcigiSW50ZW50IGNvbnN0cnVjdG9yIG11c3QgaGF2ZSB6ZXJv
IG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzIik7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOEludGVudDo6ZGF0YUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEludGVudCogaW1wbCA9IFY4
SW50ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogc2VyaWFsaXplZFZhbHVlID0gaW1wbC0+ZGF0YSgpOworICAgIGlmIChzZXJpYWxpemVk
VmFsdWUpCisgICAgICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCk7CisK
KyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlckNsaWVudC5oCmluZGV4IGJlNzRiN2MzMmExZTdiMWRkZWQ5YTMyMmIwZThmMjM3
NjBlZDJmZWYuLjk1NjY2MWI5ZWY2YzQwZDVhMjRjODhhM2JhMTE0ODNhZDY1ODJmYzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCkBAIC03OCw2ICs3OCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50
OwogICAgIGNsYXNzIEludFNpemU7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIGNsYXNz
IEludGVudDsKKyNlbmRpZgogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFj
dGlvbjsKICAgICBjbGFzcyBQYWdlOwpAQCAtMzE5LDYgKzMyMiwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0
PiBjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgpID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkUGFpbnRCcm9rZW5JbWFnZShjb25zdCBLVVJMJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hJbnRlbnQoY29uc3QgSW50ZW50JiBpbnRlbnQpIHsgfQorI2VuZGlmCiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDQ3M2Iz
NzgwZGUyMWVjNDc0MGU3MDhmZTU1YWY2YTA5NWY2MzhiZjQuLjczZWM2OWVkMDAyYjBiOWE2MGE4
NjBjYTkzYjU4MDNmZDgyMmY2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTYx
OCw2ICs2MTgsMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxl
ZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tF
dmVudDsKICNlbmRpZgogCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCX0lOVEVOVFMpICYmIEVOQUJM
RV9XRUJfSU5URU5UUworICAgICAgICBhdHRyaWJ1dGUgSW50ZW50Q29uc3RydWN0b3IgSW50ZW50
OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisjZW5kaWYKKwogICAgICAgICBhdHRy
aWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwogICAgICAgICBhdHRyaWJ1dGUgRE9N
UGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVnaW5BcnJheTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0
b3IuY3BwCmluZGV4IGJjMWUwNTM0ZDBlYzkwMjcxOWZhNzQ0YTcxOTkzM2Q0OTRiOTliZWYuLmQy
M2RjOGEzYmJlNjcwMGUwY2I0MGM0OTUwZWY0OTdhZDUxYmRkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5jcHAKQEAgLTMzLDYgKzMzLDkgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIK
KyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgor
I2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUG9pbnRlckxvY2suaCIK
ICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKQEAgLTMxOSw0ICszMjIs
MjggQEAgR2FtZXBhZExpc3QqIE5hdmlnYXRvcjo6d2Via2l0R2FtZXBhZHMoKQogfQogI2VuZGlm
CiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCit2b2lkIE5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0
eShQYXNzUmVmUHRyPEludGVudD4gaW50ZW50LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZnJhbWUoKSB8fCAh
ZnJhbWUoKS0+bG9hZGVyKCkgfHwgIWZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhaW50
ZW50LmdldCgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoaW50ZW50LT5hY3Rpb24oKS5pc0VtcHR5KCkgfHwgaW50
ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gVkFMSURBVElPTl9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nl
c3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IGlkID0gbV9mcmFtZS0+cGFnZSgpLT5p
bnRlbnRzQ29udHJvbGxlcigpLT5hc3NpZ25JbnRlbnRJZChzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2spOworICAgIGludGVudC0+c2V0SWRlbnRpZmllcihpZCk7CisgICAgbV9mcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRjaEludGVudCgqaW50ZW50KTsKK30KKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAppbmRleCA2MzIx
YjMxZDk3MzYyMjkzY2MxODIzZDY5ZGZhODlmMDgxNWIwMzIyLi5lODE3N2IyZDRlOTFjYjEyZmRm
ODk1NTY4YmY2ZWI2YTMzOWRkYWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAgLTMzLDYg
KzMzLDggQEAgY2xhc3MgRE9NUGx1Z2luQXJyYXk7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEdhbWVw
YWRMaXN0OwogY2xhc3MgR2VvbG9jYXRpb247CitjbGFzcyBJbnRlbnQ7CitjbGFzcyBJbnRlbnRS
ZXN1bHRDYWxsYmFjazsKIGNsYXNzIFBvaW50ZXJMb2NrOwogY2xhc3MgTmF2aWdhdG9yVXNlck1l
ZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFj
azsKQEAgLTc5LDYgKzgxLDEwIEBAIHB1YmxpYzoKICAgICBHYW1lcGFkTGlzdCogd2Via2l0R2Ft
ZXBhZHMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHZvaWQgc3Rh
cnRBY3Rpdml0eShQYXNzUmVmUHRyPEludGVudD4sIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
TmF2aWdhdG9yKEZyYW1lKik7CiAgICAgRnJhbWUqIG1fZnJhbWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmln
YXRvci5pZGwKaW5kZXggMmI2MWM1YTRiZWY3MDQ2YWQ5ZGQ0NTkyN2NhMmQyNWExYTA0MzgwZC4u
ODRmMGRhNDQyMTNiNDAyODk5NjgwMzMwMDg3MDdkN2Y3Njk0MWRhMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yLmlkbApAQCAtNjUsNiArNjUsMTEgQEAgbW9kdWxlIHdpbmRvdyB7CiAjaWYgZGVm
aW5lZChFTkFCTEVfR0FNRVBBRCkgJiYgRU5BQkxFX0dBTUVQQUQKICAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBHYW1lcGFkTGlzdCB3ZWJraXRHYW1lcGFkczsK
ICNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCX0lOVEVOVFMpICYmIEVOQUJMRV9XRUJf
SU5URU5UUworICAgICAgICB2b2lkIHN0YXJ0QWN0aXZpdHkoaW4gSW50ZW50IGludGVudCwgaW4g
W0NhbGxiYWNrLCBPcHRpb25hbF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNr
LCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJlQ2Fs
bGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogICAgIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDc3MjAwZmUyMjc0YzgzMjhlNTcwZTcwM2Y4NWVi
MDEzNTcyZDIwYjYuLmRmYWVmYjU4OWEzNjEwZmQ4YWQxYmUyZGE3ZmI5MGM2ZGNmYjg2NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVt
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgogI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgpAQCAtMTQ4LDYgKzE0OSw5IEBAIFBhZ2U6OlBhZ2UoUGFnZUNs
aWVudHMmIHBhZ2VDbGllbnRzKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgLCBtX3Vz
ZXJNZWRpYUNsaWVudChwYWdlQ2xpZW50cy51c2VyTWVkaWFDbGllbnQpCiAjZW5kaWYKKyNpZiBF
TkFCTEUoV0VCX0lOVEVOVFMpCisgICAgLCBtX2ludGVudHNDb250cm9sbGVyKEludGVudHNDb250
cm9sbGVyOjpjcmVhdGUoKSkKKyNlbmRpZgogICAgICwgbV9zZXR0aW5ncyhhZG9wdFB0cihuZXcg
U2V0dGluZ3ModGhpcykpKQogICAgICwgbV9wcm9ncmVzcyhhZG9wdFB0cihuZXcgUHJvZ3Jlc3NU
cmFja2VyKSkKICAgICAsIG1fYmFja0ZvcndhcmRDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBCYWNr
Rm9yd2FyZENvbnRyb2xsZXIodGhpcywgcGFnZUNsaWVudHMuYmFja0ZvcndhcmRDbGllbnQpKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgKaW5kZXggNDk4MDFiNTVmOTA1OTdmMWIwZjYxOWM2ZmJiN2I2MzNhYmY2MWE1
Zi4uZGRjNTU3Zjk3NzkzNzYwZmY1YTYzMmNjM2IzNzIwMjU0YWZkMGZmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmgKQEAgLTcwLDYgKzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEhpc3Rv
cnlJdGVtOwogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFzcyBJbnNwZWN0b3JD
b250cm9sbGVyOworICAgIGNsYXNzIEludGVudHNDb250cm9sbGVyOwogICAgIGNsYXNzIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcjsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vdGlmaWNhdGlv
bkNvbnRyb2xsZXI7CkBAIC0xOTUsNiArMTk2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFVzZXJNZWRpYUNsaWVudCogdXNlck1lZGlh
Q2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV91c2VyTWVkaWFDbGllbnQ7IH0KICNlbmRpZgorI2lm
IEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgSW50ZW50c0NvbnRyb2xsZXIqIGludGVudHND
b250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlbnRzQ29udHJvbGxlci5nZXQoKTsgfQor
I2VuZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
dGluZ3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NUcmFja2VyKiBwcm9ncmVzcygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KICAgICAgICAgQmFja0ZvcndhcmRDb250cm9s
bGVyKiBiYWNrRm9yd2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja0ZvcndhcmRDb250cm9sbGVy
LmdldCgpOyB9CkBAIC0zODgsNiArMzkyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIFVzZXJNZWRpYUNsaWVudCogbV91c2VyTWVkaWFD
bGllbnQ7CiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgICAgIE93blB0cjxJ
bnRlbnRzQ29udHJvbGxlcj4gbV9pbnRlbnRzQ29udHJvbGxlcjsKKyNlbmRpZgogICAgICAgICBP
d25QdHI8U2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAgICAgICAgIE93blB0cjxQcm9ncmVzc1RyYWNr
ZXI+IG1fcHJvZ3Jlc3M7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBp
CmluZGV4IDZmZGFhMGU0Mjg3NDM1NTQyODRiMDQwOTAwMmVmOTE3MTQ0Y2Y2NTEuLjcwZmFhYTM1
NDdjYTMwMTlkNTE5OTIzOGNmNTQ0OWMyYTk2Y2JiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Zl
YXR1cmVzLmd5cGkKQEAgLTE1Nyw2ICsxNTcsMTEgQEAKICAgICAgICAgICAnRU5BQkxFX1JFR0lT
VEVSX1BST1RPQ09MX0hBTkRMRVI9MScsCiAgICAgICAgIF0sCiAgICAgICB9XSwKKyAgICAgIFsn
ZW5hYmxlX3dlYl9pbnRlbnRzPT0xJywgeworICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWwor
ICAgICAgICAgICdFTkFCTEVfV0VCX0lOVEVOVFM9MScsCisgICAgICAgIF0sCisgICAgICB9XSwK
ICAgICAgIFsnT1M9PSJtYWMiJywgewogICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWwogICAg
ICAgICAgICdFTkFCTEVfUlVCQkVSX0JBTkRJTkc9MScsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbnRlbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkludGVudC5oCmluZGV4IDRjZTAzNDJiNzg3YmIxMjVjMTIyN2VkMmNmZTY0MWRl
MjEzZDYxYzQuLmFlZTc0NDIwMTE5MTk5ZWZjZjU0NjE5NzdiMmRkODg4MzY4ZDYxZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oCkBAIC0zNCw2ICszNCwxMCBA
QAogI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNvbW1vbi5oIgogI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlN0cmluZy5oIgogCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29y
ZSB7IGNsYXNzIEludGVudDsgfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBI
b2xkcyBkYXRhIHBhc3NlZCB0aHJvdWdoIGEgV2ViIEludGVudHMgaW52b2NhdGlvbiBjYWxsIGZy
b20gdGhlIEphdmFzY3JpcHQKQEAgLTU3LDYgKzYxLDkgQEAgcHVibGljOgogCiAjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCiAgICAgV2ViSW50ZW50KCk7CisjaWYgRU5BQkxFKFdFQl9JTlRFTlRT
KQorICAgIFdlYkludGVudChjb25zdCBXZWJDb3JlOjpJbnRlbnQmKTsKKyNlbmRpZgogI2VuZGlm
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFt
ZUxvYWRlckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVM
b2FkZXJDbGllbnRJbXBsLmNwcAppbmRleCAwZGQxZGI4YzdhZGJkMTA5NWU1NDE0YTVmZDhiNmVh
YWEwNjA3ZmI5Li41MTVjYjRiYmVjYWQ1ZWJlMDk4ZGJkYmJkMWZhNmQ0YTYxZjM5OTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJXZWJGb3JtRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5j
bHVkZSAiV2ViSW50ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0LmgiCiAjaW5jbHVkZSAicGxhdGZv
cm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViTWltZVJl
Z2lzdHJ5LmgiCkBAIC0xNjE2LDQgKzE2MTcsMTEgQEAgUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtp
bmdDb250ZXh0PiBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNyZWF0ZU5ldHdvcmtpbmdDb250ZXgK
ICAgICByZXR1cm4gRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGw6OmNyZWF0ZShtX3dlYkZyYW1l
LT5mcmFtZSgpKTsKIH0KIAorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjpkaXNwYXRjaEludGVudChjb25zdCBXZWJDb3JlOjpJbnRlbnQmIGludGVu
dCwgaW50IGludGVudElkKQoreworICAgIG1fd2ViRnJhbWUtPmNsaWVudCgpLT5kaXNwYXRjaElu
dGVudCh3ZWJGcmFtZSgpLCBpbnRlbnQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVu
dEltcGwuaAppbmRleCAyMjI5NGY5MGMzM2E2ODNlODk5MzY1ZDg5MGFlZDIxMzNkNWI0NDg4Li5h
ZTk0Y2M0OTc1OWI4YWIxOTFkM2FkYzM2ZjVmOGNjNDBlNDE5MDQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaApAQCAtMjA3LDYg
KzIwNywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJh
bWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKTsKIAorI2lmIEVO
QUJMRShXRUJfSU5URU5UUykKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hJbnRlbnQoY29uc3Qg
V2ViQ29yZTo6SW50ZW50JiwgaW50IGludGVudElkKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IHZvaWQgbWFrZURvY3VtZW50VmlldygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcAppbmRleCAzMzBmMGE5ZGE1MTIxMDY2ZjcyNjgxY2FhZjFkNDQ5NzRl
MmY2MDkzLi4yMWZjZTM4OGY0YzAyMDVhZDQ2Y2VmNzBkYWY4ZGQ5NmQwNjRhYTg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKQEAgLTEwNSw2ICsxMDUs
NyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uVVJMLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlT3ZlcmxheS5oIgpAQCAtMTgzNywxMCArMTgzOCwyNCBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6
cmVzZXRNYXRjaENvdW50KCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OmhhbmRsZUludGVudFJlc3Vs
dChpbnQgaW50ZW50SWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiByZXBseSkKIHsKKyAgICBp
ZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykK
KyAgICBXVEY6OlN0cmluZyByZXBseVN0cmluZyA9IHJlcGx5Lm9wZXJhdG9yIFN0cmluZygpOwor
ICAgIG1fZnJhbWUtPnBhZ2UoKS0+aW50ZW50c0NvbnRyb2xsZXIoKS0+cG9zdFJlc3VsdChyZXBs
eVN0cmluZywgaW50ZW50SWRlbnRpZmllcik7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJGcmFtZUlt
cGw6OmhhbmRsZUludGVudEZhaWx1cmUoaW50IGludGVudElkZW50aWZpZXIsIGNvbnN0IFdlYlN0
cmluZyYgcmVwbHkpCiB7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgV1RGOjpTdHJpbmcgcmVwbHlTdHJpbmcgPSByZXBs
eS5vcGVyYXRvciBTdHJpbmcoKTsKKyAgICBtX2ZyYW1lLT5wYWdlKCktPmludGVudHNDb250cm9s
bGVyKCktPnBvc3RGYWlsdXJlKHJlcGx5U3RyaW5nLCBpbnRlbnRJZGVudGlmaWVyKTsKKyNlbmRp
ZgogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBXZWJTdHJp
bmcmIGV2ZW50VHlwZSwgV2ViRE9NRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2Fw
dHVyZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkludGVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCmluZGV4IDEzNTQw
ZTE2MjFiOGEzYWZlYzgxYmE5NGVhMDliZGZmMTBiOWVjZTMuLjcwNmRlMGRkM2ZkNDgxYmRkNWMw
N2FmZmU2NzFiYjNhZTNkMDcyZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkludGVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50
ZW50LmNwcApAQCAtMzEsMTAgKzMxLDIzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViSW50ZW50LmgiCiAKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYkludGVudDo6V2Vi
SW50ZW50KCkgeyB9CiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCitXZWJJbnRlbnQ6OldlYklu
dGVudChjb25zdCBXZWJDb3JlOjpJbnRlbnQmIGludGVudCkKKyAgICA6IG1fYWN0aW9uKGludGVu
dC5hY3Rpb24oKSkKKyAgICAsIG1fdHlwZShpbnRlbnQudHlwZSgpKQorICAgICwgbV9kYXRhKGlu
dGVudC5kYXRhKCktPnRvV2lyZVN0cmluZygpKQorICAgICwgbV9pZGVudGlmaWVyKGludGVudC5p
ZGVudGlmaWVyKCkpCit7Cit9CisjZW5kaWYKKwogV2ViU3RyaW5nIFdlYkludGVudDo6YWN0aW9u
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120372</attachid>
            <date>2011-12-22 13:24:28 -0800</date>
            <delta_ts>2011-12-22 17:10:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20111222132427.patch</filename>
            <type>text/plain</type>
            <size>47872</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk0N2M2ZjNjYmExNzFi
N2ExYWJhMWU0MmUzOGIwZGQxYmQ5ZjgxNS4uOTUwZDg5ZGI0ZDhhM2NjOWEwOTdjYWMyYzZmYzMx
ZmJiNDNmNmY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBTZWUgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9kZXNp
Z24tZG9jdW1lbnRzL3dlYmludGVudHNhcGkKKyAgICAgICAgZm9yIGRyYWZ0IHNwZWMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViLWlu
dGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4SW50ZW50OjpkYXRhQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoSW50ZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAg
ICAgICogcGFnZS9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6
SW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0RGF0YSk6Cisg
ICAgICAgICogcGFnZS9JbnRlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6
OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9JbnRlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBw
YWdlL0ludGVudFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZW50UmVzdWx0Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxsYmFjayk6CisgICAgICAgICogcGFn
ZS9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvSW50ZW50
c0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250cm9s
bGVyOjpJbnRlbnRzQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJv
bGxlcjo6fkludGVudHNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250
cm9sbGVyOjpnZXRJbnRlbnRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxl
cjo6cG9zdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6cG9z
dEZhaWx1cmUpOgorICAgICAgICAqIHBhZ2UvSW50ZW50c0NvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9y
OjpzdGFydEFjdGl2aXR5KToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAq
IHBhZ2UvTmF2aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjppbnRlbnRzQ29udHJvbGxlcik6CisKIDIwMTEtMTItMjEgIE1hdHQgRmFs
a2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBhbGwgSUNVIGxh
bmd1YWdlcyB0byBMb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZDJhMWRlZGRjZmNiNjg1MjRhYzQ1N2YyNWVjZmUxYjVlN2ViN2Rk
Li4wZDU2NWMyZGY2NjQ1YTM0ZTgyYzJhZGY1ODYxNzdjYzQ2ZDAxZGJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTExLTIzICBHcmVnIEJpbGxvY2sg
IDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10gRmxhZ2dlZC1v
ZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6
CisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViSW50ZW50Lmg6
CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hJbnRlbnQpOgorICAgICAgICAqIHNy
Yy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRlbnRSZXN1bHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmhhbmRsZUludGVudEZhaWx1cmUpOgorICAg
ICAgICAqIHNyYy9XZWJJbnRlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJbnRlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50OjpXZWJJ
bnRlbnQpOgorCiAyMDExLTEyLTIwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2ZXJ0IGNvZGUgZm9yIHI5NjkxMiBhbmQgcjEwMTkwNSwgc2luY2UgdGhl
eSBjYXVzZQpAQCAtNDI5NSw2ICs0MzE0LDEzIEBACiAgICAgICAgICogcHVibGljL1dlYkludGVu
dFNlcnZpY2VJbmZvLmg6IEFkZGVkLgogICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgogICAg
ICAgICAqIHB1YmxpYy9XZWJGcmFtZUNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJJbnRl
bnRzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnRzQ2xpZW50Ojp+
V2ViSW50ZW50c0NsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYkludGVudHNDb250cm9sbGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdDbGllbnQ6OndlYkludGVudHNDbGllbnQpOgorICAgICAgICAqIHNyYy9X
ZWJJbnRlbnRzQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRl
bnRzQ29udHJvbGxlcjo6d2ViSW50ZW50UmVwbHkpOgogCiAyMDExLTExLTIyICBTY290dCBHcmFo
YW0gIDxzY290dG1nQGNocm9taXVtLm9yZz4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDY1YzAwZmZjNzQ3MTYxYTY4ZmU1MDg3OGI5NDBj
ZGUwZWYzOWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnRlbnQuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKworSW50ZW50OjpJ
bnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCisgICAgOiBtX2FjdGlvbihhY3Rpb24pCisg
ICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1faWRlbnRpZmllcigwKQoreworICAgIHNldERhdGEo
ZGF0YSk7Cit9CisKK1N0cmluZyBJbnRlbnQ6OmFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYWN0aW9uOworfQorCitTdHJpbmcgSW50ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90eXBlOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKK30KKwordm9pZCBJbnRlbnQ6OnNldERh
dGEoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCit7CisgICAgaWYgKGRh
dGEuZ2V0KCkpCisgICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRh
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKK30KKworaW50IEludGVudDo6
aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKK30KKwordm9p
ZCBJbnRlbnQ6OnNldElkZW50aWZpZXIoaW50IGlkKQoreworICAgIG1faWRlbnRpZmllciA9IGlk
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lO
VEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2ZjMTc5NTIyMjc0YjJmOGQyNzJkMWY1MjUxNGVlYWRiZTk4ZjA1MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBJbnRlbnRfaAorI2RlZmluZSBJbnRlbnRfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRF
TlRTKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50IDogcHVibGlj
IFJlZkNvdW50ZWQ8SW50ZW50PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW50
ZW50PiBjcmVhdGUoCisgICAgICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uLAorICAgICAgICBjb25z
dCBTdHJpbmcmIHR5cGUsCisgICAgICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0aW9u
LCB0eXBlLCBkYXRhKSk7CisgICAgfQorCisgICAgU3RyaW5nIGFjdGlvbigpIGNvbnN0OworICAg
IFN0cmluZyB0eXBlKCkgY29uc3Q7CisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhKCkg
Y29uc3Q7CisKKyAgICBpbnQgaWRlbnRpZmllcigpIGNvbnN0OworICAgIHZvaWQgc2V0SWRlbnRp
ZmllcihpbnQpOworCitwcm90ZWN0ZWQ6CisgICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
YXRhKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+KTsKKworICAgIFN0cmluZyBtX2FjdGlvbjsKKyAgICBTdHJpbmcgbV90eXBl
OworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKKyAgICBpbnQgbV9p
ZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2Vu
ZGlmIC8vIEludGVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRs
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmE5ZTNjZWQwNjgyNzhiZGM3NzI1YzFmZTQzMGZiNTQ5OWM5NWU2MjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50Lmlk
bApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisgIGludGVyZmFjZSBb
CisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIENhbkJlQ29uc3RydWN0ZWQs
CisgICAgICBDdXN0b21Db25zdHJ1Y3RGdW5jdGlvbiwKKyAgICAgIFY4Q3VzdG9tQ29uc3RydWN0
b3IsCisgIF0gSW50ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBh
Y3Rpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIGFueSBkYXRhOworICB9OworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENh
bGxiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2Fs
bGJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MDYwMDdmMmIxMTExNTIzZGQ4ZGI2ZTc3Nzg5NTZkMzA2OWRk
ZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0lu
dGVudFJlc3VsdENhbGxiYWNrLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50UmVzdWx0Q2Fs
bGJhY2tfaAorI2RlZmluZSBJbnRlbnRSZXN1bHRDYWxsYmFja19oCisKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIEVOQUJMRShXRUJf
SU5URU5UUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0
VmFsdWU7CisKK2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8
SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnRlbnRSZXN1
bHRDYWxsYmFjaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQpID0gMDsKK307CisKK30KKworI2VuZGlmCisKKyNl
bmRpZiAvLyBJbnRlbnRSZXN1bHRDYWxsYmFja19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
NzdmNjNjZjhjMTBhMDE2NmNlMzlkMDg5ZDA3MzkxYjdkNjBkZWYxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlk
bApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisgIGludGVyZmFjZSBb
CisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIExlZ2FjeURlZmF1bHRPcHRp
b25hbEFyZ3VtZW50cywKKyAgICAgIENhbGxiYWNrPUZ1bmN0aW9uT25seQorICBdIEludGVudFJl
c3VsdENhbGxiYWNrIHsKKyAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlIHJlc3VsdCk7CisgIH07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNDAxZTkzNjk1
Y2U0OWVhNWM2ODg4M2M5MWM3NWJkNDdhMzJjNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmNwcApAQCAtMCwwICsx
LDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudHNDb250
cm9sbGVyLmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJJbnRlbnRS
ZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludGVudHNDb250cm9sbGVyOjpJbnRlbnRzQ29udHJvbGxl
cigpCit7Cit9CisKK0ludGVudHNDb250cm9sbGVyOjp+SW50ZW50c0NvbnRyb2xsZXIoKQorewor
fQorCitQYXNzT3duUHRyPEludGVudHNDb250cm9sbGVyPiBJbnRlbnRzQ29udHJvbGxlcjo6Y3Jl
YXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEludGVudHNDb250cm9sbGVyKTsKK30K
KworaW50IEludGVudHNDb250cm9sbGVyOjphc3NpZ25JbnRlbnRJZChQYXNzUmVmUHRyPEludGVu
dFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spCit7CisgICAgaW50IGlkID0gbV9zdWNjZXNzQ2FsbGJh
Y2tzLnNpemUoKTsKKyAgICBtX3N1Y2Nlc3NDYWxsYmFja3MuYXBwZW5kKHN1Y2Nlc3NDYWxsYmFj
ayk7CisgICAgbV9lcnJvckNhbGxiYWNrcy5hcHBlbmQoZXJyb3JDYWxsYmFjayk7CisgICAgcmV0
dXJuIGlkOworfQorCit2b2lkIEludGVudHNDb250cm9sbGVyOjpwb3N0UmVzdWx0KGNvbnN0IFN0
cmluZyYgZGF0YSwgaW50IGludGVudElkKQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRh
KTsKKyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElkXS5nZXQoKSkKKyAgICAgICAg
bV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElkXS0+aGFuZGxlRXZlbnQodmFsdWUpOworCisgICAg
bV9zdWNjZXNzQ2FsbGJhY2tzW2ludGVudElkXS5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFj
a3NbaW50ZW50SWRdLmNsZWFyKCk7Cit9CisKK3ZvaWQgSW50ZW50c0NvbnRyb2xsZXI6OnBvc3RG
YWlsdXJlKGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKQoreworICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGVGcm9tV2lyZShkYXRhKTsKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrc1tpbnRlbnRJZF0uZ2V0
KCkpCisgICAgICAgIG1fZXJyb3JDYWxsYmFja3NbaW50ZW50SWRdLT5oYW5kbGVFdmVudCh2YWx1
ZSk7CisKKyAgICBtX3N1Y2Nlc3NDYWxsYmFja3NbaW50ZW50SWRdLmNsZWFyKCk7CisgICAgbV9l
cnJvckNhbGxiYWNrc1tpbnRlbnRJZF0uY2xlYXIoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzNj
ZDE3M2JjMjAxYzg4NmFiYTViOGMwNTdkMzUwODg4MmY5MjFlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmgKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50c0NvbnRyb2xsZXJfaAorI2RlZmluZSBJ
bnRlbnRzQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2s7CisKK2NsYXNzIEludGVudHND
b250cm9sbGVyIHsKK3B1YmxpYzoKKyAgICB+SW50ZW50c0NvbnRyb2xsZXIoKTsKKworICAgIHN0
YXRpYyBQYXNzT3duUHRyPEludGVudHNDb250cm9sbGVyPiBjcmVhdGUoKTsKKworICAgIGludCBh
c3NpZ25JbnRlbnRJZChQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2spOwor
CisgICAgdm9pZCBwb3N0UmVzdWx0KGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKTsK
KyAgICB2b2lkIHBvc3RGYWlsdXJlKGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGludGVudElkKTsK
KworcHJpdmF0ZToKKyAgICBJbnRlbnRzQ29udHJvbGxlcigpOworCisgICAgVmVjdG9yPFJlZlB0
cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBtX3N1Y2Nlc3NDYWxsYmFja3M7CisgICAgVmVjdG9y
PFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBtX2Vycm9yQ2FsbGJhY2tzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQor
CisjZW5kaWYgLy8gSW50ZW50c0NvbnRyb2xsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cAppbmRleCBiYWJjYjc0OTQ5Mzk3OGQzNGFiNmVjZGNiODE2NDFjOWVmMDQzY2Q0
Li41OTIyMDViMTJkYWYxYTRjODBkZTYwMDBlM2FkZGU3MjQ0ZWZkMTVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtNTIsNiArNTIsNyBAQAogICAgICAgJy4uLycs
CiAgICAgICAnLi4vLi4nLAogICAgICAgJy4uL01vZHVsZXMvZ2FtZXBhZCcsCisgICAgICAnLi4v
TW9kdWxlcy9pbnRlbnRzJywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9h
Y2Nlc3NpYmlsaXR5L2Nocm9taXVtJywKICAgICAgICcuLi9iaW5kaW5ncycsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggZmNkZjViOGIzMjUwMTlkZDg0MmMyN2VhNTg1OTBkMmVlNmVlNDkzNS4uZmFmZjRl
NDI0MmQxODg5ZWQ5NWE3NWY5ODdlZDM3ODQ2MjdmMDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
MTE0OCw2ICsxMTQ4LDggQEAKICAgICAgICAgJ3dlYmNvcmVfYmluZGluZ3NfaWRsX2ZpbGVzJzog
WwogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbCcsCiAgICAgICAgICAg
ICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5pZGwnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRl
bnRSZXN1bHRDYWxsYmFjay5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVsZS5p
ZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRsJywKICAgICAgICAgICAg
ICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAtMTY5Myw2ICsxNjk1LDExIEBACiAgICAgICAg
ICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRMaXN0LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRMaXN0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwJywK
KyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmgnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVz
L2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWQuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZC5oJywKQEAgLTIyNDQsNiArMjI1MSw3IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdi
aW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5k
aW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9tLmNwcCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3Vz
dG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hODQ4OWRmM2MyYTFhMDY3YjhmZTQxMmY1YzRmMDY2MTZiYzg4
Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SW50ZW50Q3VzdG9tLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlY4SW50ZW50LmgiCisKKyNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVk
ZSAiV3JhcHBlclR5cGVJbmZvLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJJbnRlbnQuQ29uc3RydWN0b3IiKTsKKwor
ICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9u
LiIpOworCisgICAgaWYgKCFhcmdzLkxlbmd0aCgpKSB7CisgICAgICAgIFJlZlB0cjxJbnRlbnQ+
IGludGVudCA9IEludGVudDo6Y3JlYXRlKFN0cmluZygpLCBTdHJpbmcoKSwgU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJu
IHRvVjgoaW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPT0gMikgeworICAgICAgICBTdHJpbmcgYWN0aW9uID0gdG9XZWJDb3Jl
U3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOworICAgICAgICBTdHJpbmcg
dHlwZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzFdKTsK
KworICAgICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJBY3Rpb24gY2Fubm90IGJlIGVtcHR5Iik7CisgICAgICAgIGlmICh0eXBlLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJUeXBlIGNhbm5vdCBiZSBlbXB0
eSIpOworCisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6Y3JlYXRlKGFj
dGlvbiwgdHlwZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgICAg
IFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xk
ZXIoKSk7CisgICAgfQorCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMykgeworICAgICAgICBT
dHJpbmcgYWN0aW9uID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFy
Z3NbMF0pOworICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JV
bmRlZmluZWRDaGVjayhhcmdzWzFdKTsKKworICAgICAgICBpZiAoYWN0aW9uLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJBY3Rpb24gY2Fubm90IGJlIGVtcHR5Iik7
CisgICAgICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCJUeXBlIGNhbm5vdCBiZSBlbXB0eSIpOworCisgICAgICAgIGJvb2wgZXhjZXB0aW9uID0g
ZmFsc2U7CisgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzJdLCAwLCAwLCBleGNlcHRpb24pOworICAg
ICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkludGVu
dCBjb25zdHJ1Y3RvciBkYXRhIG11c3QgYmUgYSBzdHJ1Y3R1cmVkIGNsb25lIik7CisKKyAgICAg
ICAgUmVmUHRyPEludGVudD4gaW50ZW50ID0gSW50ZW50OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBk
YXRhKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCks
ICZpbmZvLCBpbnRlbnQuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9WOChpbnRlbnQucmVsZWFz
ZSgpLCBhcmdzLkhvbGRlcigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdGhyb3dFcnJvcigiSW50
ZW50IGNvbnN0cnVjdG9yIG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJz
Iik7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6ZGF0YUFjY2Vzc29yR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIEludGVudCogaW1wbCA9IFY4SW50ZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKKworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2VyaWFsaXplZFZhbHVlID0gaW1w
bC0+ZGF0YSgpOworICAgIGlmIChzZXJpYWxpemVkVmFsdWUpCisgICAgICAgIHJldHVybiBzZXJp
YWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKCk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lO
VEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCmluZGV4IDQ1
MTdiMzY0OGUyMjM4ZjQxM2ZlZGNkMDJhMTJmNzdjNTQ1MDJkOTcuLjEzYzZlNWU3NmQ5NzBmMDRh
YzZjNjI3ZThmMzRjMTRlNjE2ZWRmN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlckNsaWVudC5oCkBAIC03OCw2ICs3OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRp
ZgogICAgIGNsYXNzIEhUTUxQbHVnSW5FbGVtZW50OwogICAgIGNsYXNzIEludFNpemU7CisjaWYg
RU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIGNsYXNzIEludGVudDsKKyNlbmRpZgogICAgIGNsYXNz
IEtVUkw7CiAgICAgY2xhc3MgTmF2aWdhdGlvbkFjdGlvbjsKICAgICBjbGFzcyBQYWdlOwpAQCAt
MzE5LDYgKzMyMiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5nQ29udGV4dCgp
ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRCcm9rZW5JbWFnZShjb25z
dCBLVVJMJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRT
KQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hJbnRlbnQoY29uc3QgSW50ZW50JiBpbnRl
bnQpIHsgfQorI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDJlYzhkNmE1YjA1ZTU2ZGEwMWVjM2QwNDc3NGFjMmE2
M2QzZjkzNjEuLmJjYzBlZDc4NTA3NTBmOWMxYTJlMWY5MzM4OGQ4ZDg2MjBiMTBkYTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTYxOSw2ICs2MTksMTAgQEAgbW9kdWxlIHdpbmRv
dyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNr
XSBUcmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tFdmVudDsKICNlbmRpZgogCisjaWYgZGVmaW5l
ZChFTkFCTEVfV0VCX0lOVEVOVFMpICYmIEVOQUJMRV9XRUJfSU5URU5UUworICAgICAgICBhdHRy
aWJ1dGUgSW50ZW50Q29uc3RydWN0b3IgSW50ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9w
ZXJhdG9yCisjZW5kaWYKKwogICAgICAgICBhdHRyaWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3Ig
UGx1Z2luOwogICAgICAgICBhdHRyaWJ1dGUgRE9NUGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVn
aW5BcnJheTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCmluZGV4IGJjMWUwNTM0ZDBlYzkw
MjcxOWZhNzQ0YTcxOTkzM2Q0OTRiOTliZWYuLmQyM2RjOGEzYmJlNjcwMGUwY2I0MGM0OTUwZWY0
OTdhZDUxYmRkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTMzLDYgKzMzLDkg
QEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKyNpbmNs
dWRlICJJbnRlbnRSZXN1bHRDYWxsYmFjay5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiUG9pbnRlckxvY2suaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiTGFuZ3VhZ2UuaCIKQEAgLTMxOSw0ICszMjIsMjggQEAgR2FtZXBhZExpc3QqIE5hdmlnYXRv
cjo6d2Via2l0R2FtZXBhZHMoKQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
Cit2b2lkIE5hdmlnYXRvcjo6c3RhcnRBY3Rpdml0eShQYXNzUmVmUHRyPEludGVudD4gaW50ZW50
LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghZnJhbWUoKSB8fCAhZnJhbWUoKS0+bG9hZGVyKCkgfHwgIWZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKSB8fCAhaW50ZW50LmdldCgpKSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaW50
ZW50LT5hY3Rpb24oKS5pc0VtcHR5KCkgfHwgaW50ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGVjID0gVkFMSURBVElPTl9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIVNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSB7CisgICAg
ICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaW50IGlkID0gbV9mcmFtZS0+cGFnZSgpLT5pbnRlbnRzQ29udHJvbGxlcigpLT5hc3NpZ25J
bnRlbnRJZChzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIGludGVudC0+c2V0
SWRlbnRpZmllcihpZCk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaXNwYXRj
aEludGVudCgqaW50ZW50KTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3IuaAppbmRleCA2MzIxYjMxZDk3MzYyMjkzY2MxODIzZDY5ZGZhODlm
MDgxNWIwMzIyLi5lODE3N2IyZDRlOTFjYjEyZmRmODk1NTY4YmY2ZWI2YTMzOWRkYWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAgLTMzLDYgKzMzLDggQEAgY2xhc3MgRE9NUGx1Z2luQXJy
YXk7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEdhbWVwYWRMaXN0OwogY2xhc3MgR2VvbG9jYXRpb247
CitjbGFzcyBJbnRlbnQ7CitjbGFzcyBJbnRlbnRSZXN1bHRDYWxsYmFjazsKIGNsYXNzIFBvaW50
ZXJMb2NrOwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5h
dmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazsKQEAgLTc5LDYgKzgxLDEwIEBAIHB1Ymxp
YzoKICAgICBHYW1lcGFkTGlzdCogd2Via2l0R2FtZXBhZHMoKTsKICNlbmRpZgogCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorICAgIHZvaWQgc3RhcnRBY3Rpdml0eShQYXNzUmVmUHRyPEludGVu
dD4sIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFz
c1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29k
ZSYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTmF2aWdhdG9yKEZyYW1lKik7CiAgICAgRnJh
bWUqIG1fZnJhbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKaW5kZXggMmI2MWM1YTRiZWY3
MDQ2YWQ5ZGQ0NTkyN2NhMmQyNWExYTA0MzgwZC4uODRmMGRhNDQyMTNiNDAyODk5NjgwMzMwMDg3
MDdkN2Y3Njk0MWRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApAQCAtNjUsNiArNjUs
MTEgQEAgbW9kdWxlIHdpbmRvdyB7CiAjaWYgZGVmaW5lZChFTkFCTEVfR0FNRVBBRCkgJiYgRU5B
QkxFX0dBTUVQQUQKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1l
XSBHYW1lcGFkTGlzdCB3ZWJraXRHYW1lcGFkczsKICNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFC
TEVfV0VCX0lOVEVOVFMpICYmIEVOQUJMRV9XRUJfSU5URU5UUworICAgICAgICB2b2lkIHN0YXJ0
QWN0aXZpdHkoaW4gSW50ZW50IGludGVudCwgaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gSW50ZW50
UmVzdWx0Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBJ
bnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJlQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4
IDBjNmZmNTViYTEyNGM4OWJmYTg5OGMyZTBhOTc1NWFlMWUzN2Q3M2EuLmUzNDIwM2U0ZTkyNTI1
MzMxYzgwNGI2ZTkyNGFjNjBkYjgyNDQ4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNDksNiAr
NDksNyBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1
ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgpAQCAtMTUy
LDYgKzE1Myw5IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAgICAgLCBtX3VzZXJNZWRpYUNsaWVudChwYWdlQ2xpZW50cy51
c2VyTWVkaWFDbGllbnQpCiAjZW5kaWYKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgLCBt
X2ludGVudHNDb250cm9sbGVyKEludGVudHNDb250cm9sbGVyOjpjcmVhdGUoKSkKKyNlbmRpZgog
ICAgICwgbV9zZXR0aW5ncyhTZXR0aW5nczo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wcm9ncmVz
cyhQcm9ncmVzc1RyYWNrZXI6OmNyZWF0ZSgpKQogICAgICwgbV9iYWNrRm9yd2FyZENvbnRyb2xs
ZXIoQmFja0ZvcndhcmRDb250cm9sbGVyOjpjcmVhdGUodGhpcywgcGFnZUNsaWVudHMuYmFja0Zv
cndhcmRDbGllbnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBlZjFkMWQ5ZmMyNzQ0ZDQ1MmY1MTU4Mzcy
NjFlNjI5Nzg0ZTFhZThlLi4xMmRjNzZmZDcwOGQ4OTA1NmUyOTVjYmRiMmE3Y2QzMmEzMTBhYTUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuaApAQCAtNzAsNiArNzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgSGlzdG9yeUl0ZW07CiAgICAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogICAgIGNs
YXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CisgICAgY2xhc3MgSW50ZW50c0NvbnRyb2xsZXI7CiAg
ICAgY2xhc3MgTWVkaWFDYW5TdGFydExpc3RlbmVyOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xh
c3MgTm90aWZpY2F0aW9uQ29udHJvbGxlcjsKQEAgLTE5OSw3ICsyMDAsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKICAgICAgICAgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAjZW5kaWYKLQorI2lmIEVO
QUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgSW50ZW50c0NvbnRyb2xsZXIqIGludGVudHNDb250
cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlbnRzQ29udHJvbGxlci5nZXQoKTsgfQorI2Vu
ZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGlu
Z3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jlc3NUcmFja2VyKiBwcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0KICAgICAgICAgQmFja0ZvcndhcmRDb250cm9sbGVy
KiBiYWNrRm9yd2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja0ZvcndhcmRDb250cm9sbGVyLmdl
dCgpOyB9CkBAIC0zOTYsNiArMzk5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCiAgICAgICAgIFJlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRv
cj4gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKICNlbmRpZgorI2lmIEVOQUJMRShXRUJfSU5URU5U
UykKKyAgICAgICAgT3duUHRyPEludGVudHNDb250cm9sbGVyPiBtX2ludGVudHNDb250cm9sbGVy
OworI2VuZGlmCiAgICAgICAgIE93blB0cjxTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICAgICAg
T3duUHRyPFByb2dyZXNzVHJhY2tlcj4gbV9wcm9ncmVzczsKICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggZTdkOWZlYmM0MDk3ZDRiMmUxZTBlMTE1OTA3ZTEy
NzQ1MGU2MWQxYS4uOWQyZTA2MDQ3NTI2NjZlNzkwNTIxOTY0NGIwZDdlN2Y4MGVkODJhYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMTU5LDYgKzE1OSwxMSBAQAogICAg
ICAgICAgICdFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUj0xJywKICAgICAgICAgXSwK
ICAgICAgIH1dLAorICAgICAgWydlbmFibGVfd2ViX2ludGVudHM9PTEnLCB7CisgICAgICAgICdm
ZWF0dXJlX2RlZmluZXMnOiBbCisgICAgICAgICAgJ0VOQUJMRV9XRUJfSU5URU5UUz0xJywKKyAg
ICAgICAgXSwKKyAgICAgIH1dLAogICAgICAgWydPUz09Im1hYyInLCB7CiAgICAgICAgICdmZWF0
dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAgJ0VOQUJMRV9SVUJCRVJfQkFORElORz0xJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkludGVudC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKaW5kZXggNGNlMDM0MmI3ODdi
YjEyNWMxMjI3ZWQyY2ZlNjQxZGUyMTNkNjFjNC4uYWVlNzQ0MjAxMTkxOTllZmNmNTQ2MTk3N2Iy
ZGQ4ODgzNjhkNjFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSW50ZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50
LmgKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCiAj
aW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCiAKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgSW50ZW50OyB9CisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIC8vIEhvbGRzIGRhdGEgcGFzc2VkIHRocm91Z2ggYSBXZWIgSW50ZW50
cyBpbnZvY2F0aW9uIGNhbGwgZnJvbSB0aGUgSmF2YXNjcmlwdApAQCAtNTcsNiArNjEsOSBAQCBw
dWJsaWM6CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJJbnRlbnQoKTsKKyNp
ZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgV2ViSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVu
dCYpOworI2VuZGlmCiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCmluZGV4IDkwNWEzNzc3MjI1
OWFiZTMwYjcxYWE0YzE3ZDRlNTZlZWJmMTRmNjkuLjE3YmRlMGU0NjNlZWM2ZmJiNmU1YTBiMjJl
MTFhNGFhMmJhNTVjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIldl
YkZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJJbnRlbnQuaCIKICNpbmNsdWRlICJXZWJLaXQu
aCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJNaW1lUmVnaXN0cnkuaCIKQEAgLTE2MTcsNCArMTYxOCwxMSBAQCBQYXNz
UmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3Jl
YXRlTmV0d29ya2luZ0NvbnRleAogICAgIHJldHVybiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1w
bDo6Y3JlYXRlKG1fd2ViRnJhbWUtPmZyYW1lKCkpOwogfQogCisjaWYgRU5BQkxFKFdFQl9JTlRF
TlRTKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoSW50ZW50KGNvbnN0IFdl
YkNvcmU6OkludGVudCYgaW50ZW50LCBpbnQgaW50ZW50SWQpCit7CisgICAgbV93ZWJGcmFtZS0+
Y2xpZW50KCktPmRpc3BhdGNoSW50ZW50KHdlYkZyYW1lKCksIGludGVudCk7Cit9CisjZW5kaWYK
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCmluZGV4IDU5NmI1ZjRhMDc5YjAzMGNhMzgxMWNm
ZjM3MDMxNzQ5NDIwNWZhYjMuLjM5MjM4Nzk3ZTgzZWI5OTJkNDMzOTNkNGY5ZTljMjQ2OTc4MmE0
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5oCkBAIC0yMDcsNiArMjA3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5n
Q29udGV4dCgpOwogCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaEludGVudChjb25zdCBXZWJDb3JlOjpJbnRlbnQmLCBpbnQgaW50ZW50SWQpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGU1YWU5YzUxODliMTg1
OGJhZGM5ODA2MWNhNDc2OTY4OGY0YmYyMjkuLmIyODNiMzc3YmNjOTNlNTUxMTMwZmZhMzczYmE0
YjBjZDBhNDlkNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcApAQCAtMTA1LDYgKzEwNSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCkBAIC0xODEyLDEwICsxODEzLDI0IEBA
IHZvaWQgV2ViRnJhbWVJbXBsOjpyZXNldE1hdGNoQ291bnQoKQogCiB2b2lkIFdlYkZyYW1lSW1w
bDo6aGFuZGxlSW50ZW50UmVzdWx0KGludCBpbnRlbnRJZGVudGlmaWVyLCBjb25zdCBXZWJTdHJp
bmcmIHJlcGx5KQogeworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
RU5BQkxFKFdFQl9JTlRFTlRTKQorICAgIFdURjo6U3RyaW5nIHJlcGx5U3RyaW5nID0gcmVwbHku
b3BlcmF0b3IgU3RyaW5nKCk7CisgICAgbV9mcmFtZS0+cGFnZSgpLT5pbnRlbnRzQ29udHJvbGxl
cigpLT5wb3N0UmVzdWx0KHJlcGx5U3RyaW5nLCBpbnRlbnRJZGVudGlmaWVyKTsKKyNlbmRpZgog
fQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6aGFuZGxlSW50ZW50RmFpbHVyZShpbnQgaW50ZW50SWRl
bnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiByZXBseSkKIHsKKyAgICBpZiAoIW1fZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBXVEY6OlN0cmlu
ZyByZXBseVN0cmluZyA9IHJlcGx5Lm9wZXJhdG9yIFN0cmluZygpOworICAgIG1fZnJhbWUtPnBh
Z2UoKS0+aW50ZW50c0NvbnRyb2xsZXIoKS0+cG9zdEZhaWx1cmUocmVwbHlTdHJpbmcsIGludGVu
dElkZW50aWZpZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjphZGRFdmVudExp
c3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBs
aXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklu
dGVudC5jcHAKaW5kZXggMTM1NDBlMTYyMWI4YTNhZmVjODFiYTk0ZWEwOWJkZmYxMGI5ZWNlMy4u
NzA2ZGUwZGQzZmQ0ODFiZGQ1YzA3YWZmZTY3MWJiM2FlM2QwNzJlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zMSwxMCArMzEsMjMgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJJbnRlbnQuaCIKIAorI2luY2x1ZGUgIkludGVudC5o
IgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogV2ViSW50ZW50OjpXZWJJbnRlbnQoKSB7IH0KIAorI2lmIEVOQUJMRShXRUJfSU5URU5U
UykKK1dlYkludGVudDo6V2ViSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYgaW50ZW50KQor
ICAgIDogbV9hY3Rpb24oaW50ZW50LmFjdGlvbigpKQorICAgICwgbV90eXBlKGludGVudC50eXBl
KCkpCisgICAgLCBtX2RhdGEoaW50ZW50LmRhdGEoKS0+dG9XaXJlU3RyaW5nKCkpCisgICAgLCBt
X2lkZW50aWZpZXIoaW50ZW50LmlkZW50aWZpZXIoKSkKK3sKK30KKyNlbmRpZgorCiBXZWJTdHJp
bmcgV2ViSW50ZW50OjphY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2FjdGlvbjsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggZDY0YTFkNmJmODI0NDc3N2JmNzEwYzMzYzEwNjE3
ZTllODZmNmE2NS4uZGEzOTEzNmMwOTM0ODdlMzk4ODllNzVlZGY2MTFkNmY4NWQ2YzMwMiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTE5MjcsNiArMTkyNyw5IEBAIGh0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5YmkvCiAjIE1pY3JvZGF0YSBET00gQVBJIGlzIG5vdCB5ZXQgZW5h
YmxlZC4KIGZhc3QvZG9tL01pY3JvRGF0YQogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5h
YmxlZC4KK3dlYi1pbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQu
CiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggOWE5NmRjMmE5
NzMwOWFhZmQ0ZDA5OTU4ZjQyZGE1NTI3ZTM5ZjIwYi4uNzBhMjgwY2EzZmY0OWNjZmM1ZmNlOTQ5
YTNlOGRlMjAxNWIwMTgyYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTE0MzIsNiAr
MTQzMiw5IEBAIGZhc3QvZnJhbWVzL2ZsYXR0ZW5pbmcvaWZyYW1lLWZsYXR0ZW5pbmctZml4ZWQt
d2lkdGgtYW5kLWhlaWdodC1uby1zY3JvbGxpbmcuaHRtCiAjIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MjI0OAogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy11bmlm
aWVkLWVtdWxhdGlvbi5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgor
d2ViLWludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50
ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCAxNjUyMThmYzlhODNhZTgz
ZWIxYzEwMzg5OWFiYTNiMDM3OGUzMDIzLi4xYmVjZjdmNTUwYmI3NDRjY2MzMjFiNTU1MmNmZGZi
Y2Y4ZWZjY2M0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNDg4LDYgKzQ4OCw5IEBA
IGZhc3QvcmVwYWludC90YWJsZS1leHRyYS1ib3R0b20tZ3Jvdy5odG1sCiAjIERSVCBkb2Vzbid0
IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3Rl
eHQvaW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50
ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWItaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sg
aXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBl
ZAppbmRleCBjZmNiNGQzZmFjZTUyYWRjZmM4YTY2NWUwYzI5NTAyNzBiZTVkOTNmLi41ZmM2YTJk
ZjExZTYzM2M1NDZkNGM1MzkwMzdmOGMyZmFhY2Q4NGZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBw
ZWQKQEAgLTI0OTAsNiArMjQ5MCw5IEBAIGNzczMvZmxleGJveC9saW5lLXdyYXBwaW5nLmh0bWwK
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDkxCiBodHRwL3Rl
c3RzL21pc2Mvb25sb2FkLXJlbW92ZS1pZnJhbWUtY3Jhc2gtMi5odG1sCiAKKyMgV2ViIEludGVu
dHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViLWludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlz
IG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZAppbmRleCAwNTdlOWJiOGEyZmQ5NWI0MTkyZDJhM2YzMTE4OGY2MDZmOGQ2ZmUxLi5kOWRkY2I2
Y2ZiZjQyM2UwMjc4Mjc0MzhjM2I1YTg1YTBkODRhN2U3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tp
cHBlZApAQCAtMTQ4Myw2ICsxNDgzLDkgQEAgZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVu
dC1wYWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sCiAjIERSVCBkb2Vzbid0IHN1cHBvcnQg
b3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3RleHQvaW50ZXJu
YXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBu
b3QgeWV0IGVuYWJsZWQuCit3ZWItaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGlt
cGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tp
cHBlZAppbmRleCA5OTZiYTUzNTQ2ZjFkYjVjNjljZTdjMDIxYWU5ZjcyYmI2ZWJiZGNjLi4yNjBl
ZmEzMDQ0MDMxOWFkNjg3YTc3YTk1ZjZiM2IzZTY1NmVhNGQzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1NraXBwZWQKQEAgLTIwMDEsNiArMjAwMSw5IEBAIGZhc3QvZXZlbnRzL3BsYXRm
b3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogIyBEUlQgZG9l
c24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFz
dC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2Vi
IEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViLWludGVudHMvCisKICMgUG9pbnRlciBM
b2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViLWludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGMxMDczMTNiOTBlZGQ3NzkyYzJkMzYwMTQ0M2Q3MjYwMWZlYTIwZQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzNSBAQAorUEFTUyBuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eSBpcyBkZWZp
bmVkLgorUEFTUyBpbnRlbnQuYWN0aW9uIGlzICIiCitQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8g
b3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJ2EnLCdiJywnYycs
J2QnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBo
YXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJycs
JycsJycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHku
CitQQVNTIG5ldyBJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QWN0aW9uIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnJywnJywnYycpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJ
bnRlbnQoJ2EnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBjYW5ub3Qg
YmUgZW1wdHkuCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQxLnR5cGUg
aXMgImIiCitQQVNTIGludGVudDEuZGF0YSBpcyBudWxsCitQQVNTIGludGVudDEuYWN0aW9uIGlz
ICJhIgorUEFTUyBpbnRlbnQyLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50Mi50eXBlIGlzICJi
IgorUEFTUyBpbnRlbnQyLmRhdGEgaXMgImMiCitQQVNTIGludGVudDMuYWN0aW9uIGlzICJhIgor
UEFTUyBpbnRlbnQzLnR5cGUgaXMgImIiCitQQVNTIGludGVudDMuZGF0YS5jIGlzICJkIgorUEFT
UyBpbnRlbnQ0LmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50NC50eXBlIGlzICJiIgorUEFTUyBp
bnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheSBpcyB0cnVlCitQQVNTIGludGVudDQuZGF0YS5s
ZW5ndGggaXMgMgorUEFTUyBpbnRlbnQ0LmRhdGFbMF0gaXMgImMiCitQQVNTIGludGVudDQuZGF0
YVsxXSBpcyAiZCIKK1BBU1MgaW50ZW50NS5kYXRhIGlzIDQKK1BBU1MgaW50ZW50Ni5kYXRhIGlz
IDQuNQorUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQorUEFTUyBpbnRlbnQ4LmRhdGEgaXMgbnVs
bAorUEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3QgT2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBu
YXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eShpbnRlbnQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVkFM
SURBVElPTl9FUlI6IERPTSBFeGNlcHRpb24gMTYuCitQQVNTIG5hdmlnYXRvci5zdGFydEFjdGl2
aXR5KGludGVudDEpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9BQ0NFU1NfRVJSOiBE
T00gRXhjZXB0aW9uIDE1LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYi1pbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViLWludGVudHMvd2ViLWludGVudHMtYXBpLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGUxOTc3ZGM4ZjU2YTVkZDQyN2JlNmU4MWNiMjg3OWMzOTQzNDMzMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFw
aS5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICBzaG91bGRCZURlZmluZWQoIm5hdmln
YXRvci5zdGFydEFjdGl2aXR5Iik7CisKKyAgICAgIC8vIFRPRE8oZ2JpbGxvY2spOiBlbGltaW5h
dGUgdGhpcyB6ZXJvLWFyZyBjYXNlLgorICAgICAgdmFyIGludGVudCA9IG5ldyBJbnRlbnQoKTsK
KyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50LmFjdGlvbicsICcnKTsKKworICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnKSIsICInVHlwZUVycm9yOiBJbnRlbnQgY29u
c3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMnIik7Cisg
ICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnYScsJ2InLCdjJywnZCcpIiwgIidUeXBlRXJy
b3I6IEludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFy
YW1ldGVycyciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCcnKSIsICIn
VHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hvdWxkVGhyb3co
Im5ldyBJbnRlbnQoJycsJ2InLCdjJykiLCAiJ1R5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBl
bXB0eSciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCdjJykiLCAiJ1R5
cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAgICAgIHNob3VsZFRocm93KCJu
ZXcgSW50ZW50KCdhJywnJywnYycpIiwgIidUeXBlRXJyb3I6IFR5cGUgY2Fubm90IGJlIGVtcHR5
JyIpOworCisgICAgICB2YXIgaW50ZW50MSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicpOworICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEudHlwZSIsICJiIik7CisgICAgICBzaG91bGRCZU51
bGwoImludGVudDEuZGF0YSIpOworICAgICAgaW50ZW50MS5hY3Rpb24gPSAiYWJjIjsKKyAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS5hY3Rpb24iLCAiYSIpOworCisgICAgICB2
YXIgaW50ZW50MiA9IG5ldyBJbnRlbnQoImEiLCAiYiIsICJjIik7CisgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2ludGVudDIuYWN0aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnaW50ZW50Mi50eXBlJywgImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnaW50ZW50Mi5kYXRhJywgImMiKTsKKworICAgICAgdmFyIGludGVudDMgPSBuZXcgSW50ZW50
KCJhIiwgImIiLCB7ImMiOiAiZCJ9KTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50My5hY3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQz
LnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLmRhdGEu
YycsICJkIik7CisKKyAgICAgIHZhciBpbnRlbnQ0ID0gbmV3IEludGVudCgiYSIsICJiIiwgWyJj
IiwgImQiXSk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuYWN0aW9uJywg
ImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC50eXBlJywgImIiKTsK
KyAgICAgIHNob3VsZEJlVHJ1ZSgnaW50ZW50NC5kYXRhIGluc3RhbmNlb2YgQXJyYXknKTsKKyAg
ICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDQuZGF0YS5sZW5ndGgnLCAyKTsKKyAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC5kYXRhWzBdJywgImMiKTsKKyAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC5kYXRhWzFdJywgImQiKTsKKworICAgICAgdmFyIGlu
dGVudDUgPSBuZXcgSW50ZW50KCJhIiwgImIiLCA0KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8o
J2ludGVudDUuZGF0YScsIDQpOworICAgICAgdmFyIGludGVudDYgPSBuZXcgSW50ZW50KCdhJywg
J2InLCA0LjUpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50Ni5kYXRhJywgNC41KTsK
KyAgICAgIHZhciBpbnRlbnQ3ID0gbmV3IEludGVudCgnYScsICdiJywgdHJ1ZSk7CisgICAgICBz
aG91bGRCZVRydWUoJ2ludGVudDcuZGF0YScpOworICAgICAgdmFyIGludGVudDggPSBuZXcgSW50
ZW50KCdhJywgJ2InLCBudWxsKTsKKyAgICAgIHNob3VsZEJlTnVsbCgnaW50ZW50OC5kYXRhJyk7
CisgICAgICB2YXIgaW50ZW50OSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHt9KTsKKyAgICAgIHNo
b3VsZEV2YWx1YXRlVG8oJ2ludGVudDkuZGF0YScsIHt9KTsKKworICAgICAgc2hvdWxkVGhyb3co
J25hdmlnYXRvci5zdGFydEFjdGl2aXR5KGludGVudCknLCAiJ0Vycm9yOiBWQUxJREFUSU9OX0VS
UjogRE9NIEV4Y2VwdGlvbiAxNiciKTsKKyAgICAgIHNob3VsZFRocm93KCduYXZpZ2F0b3Iuc3Rh
cnRBY3Rpdml0eShpbnRlbnQxKScsICInRXJyb3I6IElOVkFMSURfQUNDRVNTX0VSUjogRE9NIEV4
Y2VwdGlvbiAxNSciKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120415</attachid>
            <date>2011-12-22 17:10:31 -0800</date>
            <delta_ts>2012-01-03 15:25:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20111222171030.patch</filename>
            <type>text/plain</type>
            <size>47974</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk0N2M2ZjNjYmExNzFi
N2ExYWJhMWU0MmUzOGIwZGQxYmQ5ZjgxNS4uOTUwZDg5ZGI0ZDhhM2NjOWEwOTdjYWMyYzZmYzMx
ZmJiNDNmNmY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBTZWUgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9kZXNp
Z24tZG9jdW1lbnRzL3dlYmludGVudHNhcGkKKyAgICAgICAgZm9yIGRyYWZ0IHNwZWMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViLWlu
dGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4SW50ZW50OjpkYXRhQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoSW50ZW50KToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAg
ICAgICogcGFnZS9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6
SW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6dHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0RGF0YSk6Cisg
ICAgICAgICogcGFnZS9JbnRlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6
OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9JbnRlbnQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBw
YWdlL0ludGVudFJlc3VsdENhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZW50UmVzdWx0Q2FsbGJhY2s6On5JbnRlbnRSZXN1bHRDYWxsYmFjayk6CisgICAgICAgICogcGFn
ZS9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvSW50ZW50
c0NvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250cm9s
bGVyOjpJbnRlbnRzQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJv
bGxlcjo6fkludGVudHNDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudHNDb250
cm9sbGVyOjpnZXRJbnRlbnRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxl
cjo6cG9zdFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnRzQ29udHJvbGxlcjo6cG9z
dEZhaWx1cmUpOgorICAgICAgICAqIHBhZ2UvSW50ZW50c0NvbnRyb2xsZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9y
OjpzdGFydEFjdGl2aXR5KToKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAq
IHBhZ2UvTmF2aWdhdG9yLmlkbDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjppbnRlbnRzQ29udHJvbGxlcik6CisKIDIwMTEtMTItMjEgIE1hdHQgRmFs
a2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBhbGwgSUNVIGxh
bmd1YWdlcyB0byBMb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA4ZDJhMWRlZGRjZmNiNjg1MjRhYzQ1N2YyNWVjZmUxYjVlN2ViN2Rk
Li4wZDU2NWMyZGY2NjQ1YTM0ZTgyYzJhZGY1ODYxNzdjYzQ2ZDAxZGJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTExLTIzICBHcmVnIEJpbGxvY2sg
IDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10gRmxhZ2dlZC1v
ZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNTEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6
CisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKyAgICAgICAgKiBwdWJsaWMvV2ViSW50ZW50Lmg6
CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hJbnRlbnQpOgorICAgICAgICAqIHNy
Yy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpoYW5kbGVJbnRlbnRSZXN1bHQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OmhhbmRsZUludGVudEZhaWx1cmUpOgorICAg
ICAgICAqIHNyYy9XZWJJbnRlbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJJbnRlbnQuaC4KKyAgICAgICAgKFdlYktpdDo6V2ViSW50ZW50OjpXZWJJ
bnRlbnQpOgorCiAyMDExLTEyLTIwICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2ZXJ0IGNvZGUgZm9yIHI5NjkxMiBhbmQgcjEwMTkwNSwgc2luY2UgdGhl
eSBjYXVzZQpAQCAtNDI5NSw2ICs0MzE0LDEzIEBACiAgICAgICAgICogcHVibGljL1dlYkludGVu
dFNlcnZpY2VJbmZvLmg6IEFkZGVkLgogICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgogICAg
ICAgICAqIHB1YmxpYy9XZWJGcmFtZUNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJJbnRl
bnRzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnRzQ2xpZW50Ojp+
V2ViSW50ZW50c0NsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYkludGVudHNDb250cm9sbGVy
Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdDbGllbnQ6OndlYkludGVudHNDbGllbnQpOgorICAgICAgICAqIHNyYy9X
ZWJJbnRlbnRzQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRl
bnRzQ29udHJvbGxlcjo6d2ViSW50ZW50UmVwbHkpOgogCiAyMDExLTExLTIyICBTY290dCBHcmFo
YW0gIDxzY290dG1nQGNocm9taXVtLm9yZz4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MGIyMTA0N2RhYmJkZDRjZWViMGYyMDYxYTljZTE2
MThiNDhmNDE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnRlbnQuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludGVudDo6SW50
ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKQorICAgIDogbV9hY3Rpb24oYWN0aW9uKQorICAg
ICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2lkZW50aWZpZXIoMCkKK3sKKyAgICBzZXREYXRhKGRh
dGEpOworfQorCitjb25zdCBTdHJpbmcmIEludGVudDo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9hY3Rpb247Cit9CisKK2NvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90eXBlOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVu
dDo6ZGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKK30KKwordm9pZCBJ
bnRlbnQ6OnNldERhdGEoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCit7
CisgICAgaWYgKGRhdGEuZ2V0KCkpCisgICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5nKCkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKK30KKwor
aW50IEludGVudDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWRlbnRpZmll
cjsKK30KKwordm9pZCBJbnRlbnQ6OnNldElkZW50aWZpZXIoaW50IGlkKQoreworICAgIG1faWRl
bnRpZmllciA9IGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDVhYWYwNWQwNmMzZDUxNzQ1MDNhMWM2YmU5MjhhM2JjOWE5NGQ0NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRfaAorI2RlZmluZSBJbnRlbnRfaAorCisjaWYgRU5B
QkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50
ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsK
KyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0
cmluZyYgdHlwZSgpIGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNv
bnN0OworCisgICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZp
ZXIoaW50KTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
OworCisgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7
CisKKyAgICBTdHJpbmcgbV9hY3Rpb247CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7CisgICAgaW50IG1faWRlbnRpZmllcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWUzY2VkMDY4Mjc4YmRjNzcyNWMxZmU0MzBmYjU0OTljOTVlNjIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTAsMCArMSwz
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWworICAgICAgQ29uZGl0
aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAgQ3VzdG9t
Q29uc3RydWN0RnVuY3Rpb24sCisgICAgICBWOEN1c3RvbUNvbnN0cnVjdG9yLAorICBdIEludGVu
dCB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYWN0aW9uOworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBhbnkgZGF0YTsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTA2MDA3ZjJiMTExMTUyM2RkOGRiNmU3Nzc4OTU2ZDMwNjlkZGZmOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxs
YmFjay5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudFJlc3VsdENhbGxiYWNrX2gKKyNkZWZp
bmUgSW50ZW50UmVzdWx0Q2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCitjbGFz
cyBJbnRlbnRSZXN1bHRDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudFJlc3VsdENh
bGxiYWNrPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW50ZW50UmVzdWx0Q2FsbGJhY2soKSB7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRXZlbnQoUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gcmVzdWx0KSA9IDA7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50
UmVzdWx0Q2FsbGJhY2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudFJlc3VsdENhbGxiYWNrLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50
ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmViNGEzY2M2YTU5MGYz
OTM2ZGU1OTVjNTExYTRlZTcwMWE1NTdmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRSZXN1bHRDYWxsYmFjay5pZGwKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWworICAgICAgQ29uZGl0
aW9uYWw9V0VCX0lOVEVOVFMsCisgICAgICBDYWxsYmFjaz1GdW5jdGlvbk9ubHkKKyAgXSBJbnRl
bnRSZXN1bHRDYWxsYmFjayB7CisgICAgICBib29sZWFuIGhhbmRsZUV2ZW50KGluIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSByZXN1bHQpOworICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRmMDdj
ZDlhNWRkMWE0OTE3YjdlNGExYWI0NmMwNDZiYThhM2Q1OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5jcHAKQEAgLTAs
MCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnRz
Q29udHJvbGxlci5oIgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiSW50
ZW50UmVzdWx0Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRlbnRzQ29udHJvbGxlcjo6SW50ZW50c0NvbnRy
b2xsZXIoKQoreworfQorCitJbnRlbnRzQ29udHJvbGxlcjo6fkludGVudHNDb250cm9sbGVyKCkK
K3sKK30KKworUGFzc093blB0cjxJbnRlbnRzQ29udHJvbGxlcj4gSW50ZW50c0NvbnRyb2xsZXI6
OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnRlbnRzQ29udHJvbGxlcik7
Cit9CisKK3N0YXRpYyBpbnQgaW50ZW50SWQoKQoreworICAgIHN0YXRpYyBpbnQgbGFzdFVzZWRJ
bnRlbnRJZCA9IDA7CisgICAgc3RhdGljIE11dGV4IGxhc3RVc2VkSW50ZW50SWRNdXRleDsKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobGFzdFVzZWRJbnRlbnRJZE11dGV4KTsKKyAgICArK2xhc3RV
c2VkSW50ZW50SWQ7CisgICAgcmV0dXJuIGxhc3RVc2VkSW50ZW50SWQ7Cit9CisKK2ludCBJbnRl
bnRzQ29udHJvbGxlcjo6YXNzaWduSW50ZW50SWQoUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxs
YmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBl
cnJvckNhbGxiYWNrKQoreworICAgIGludCBpZCA9IGludGVudElkKCk7CisgICAgbV9zdWNjZXNz
Q2FsbGJhY2tzLnNldChpZCwgc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tz
LnNldChpZCwgZXJyb3JDYWxsYmFjayk7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIEludGVu
dHNDb250cm9sbGVyOjpwb3N0UmVzdWx0KGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGludGVudElk
KQoreworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhKTsKKyAgICBSZWZQdHI8SW50ZW50UmVz
dWx0Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNrcy50YWtlKGlu
dGVudElkKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tzLnJlbW92ZShpbnRlbnRJZCk7CisKKyAgICBp
ZiAoc3VjY2Vzc0NhbGxiYWNrLmdldCgpKQorICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KHZhbHVlKTsKK30KKwordm9pZCBJbnRlbnRzQ29udHJvbGxlcjo6cG9zdEZhaWx1cmUo
Y29uc3QgU3RyaW5nJiBkYXRhLCBpbnQgaW50ZW50SWQpCit7CisgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKGRhdGEpOworICAgIFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
ayA9IG1fZXJyb3JDYWxsYmFja3MudGFrZShpbnRlbnRJZCk7CisgICAgbV9zdWNjZXNzQ2FsbGJh
Y2tzLnJlbW92ZShpbnRlbnRJZCk7CisKKyAgICBpZiAoZXJyb3JDYWxsYmFjay5nZXQoKSkKKyAg
ICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodmFsdWUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnRzQ29udHJvbGxlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlmNWVkM2RmNDE5ZDk0NTA0Nzk0NzczMGRlODE4NmZhNjAwNTM4YTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50c0NvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnRlbnRzQ29udHJvbGxlcl9oCisj
ZGVmaW5lIEludGVudHNDb250cm9sbGVyX2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKwor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50ZW50UmVzdWx0Q2FsbGJhY2s7CisKK2NsYXNz
IEludGVudHNDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnRlbnRzQ29u
dHJvbGxlcik7CitwdWJsaWM6CisgICAgfkludGVudHNDb250cm9sbGVyKCk7CisKKyAgICBzdGF0
aWMgUGFzc093blB0cjxJbnRlbnRzQ29udHJvbGxlcj4gY3JlYXRlKCk7CisKKyAgICBpbnQgYXNz
aWduSW50ZW50SWQoUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNrPiBlcnJvckNhbGxiYWNrKTsKKwor
ICAgIHZvaWQgcG9zdFJlc3VsdChjb25zdCBTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCk7Cisg
ICAgdm9pZCBwb3N0RmFpbHVyZShjb25zdCBTdHJpbmcmIGRhdGEsIGludCBpbnRlbnRJZCk7CisK
K3ByaXZhdGU6CisgICAgSW50ZW50c0NvbnRyb2xsZXIoKTsKKworICAgIHR5cGVkZWYgSGFzaE1h
cDxpbnQsIFJlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFjaz4gPiBDYWxsYmFja01hcDsKKyAgICBD
YWxsYmFja01hcCBtX3N1Y2Nlc3NDYWxsYmFja3M7CisgICAgQ2FsbGJhY2tNYXAgbV9lcnJvckNh
bGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJfSU5URU5UUykKKworI2VuZGlmIC8vIEludGVudHNDb250cm9sbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggYmFiY2I3NDk0OTM5NzhkMzRhYjZlY2Rj
YjgxNjQxYzllZjA0M2NkNC4uNTkyMjA1YjEyZGFmMWE0YzgwZGU2MDAwZTNhZGRlNzI0NGVmZDE1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTUyLDYgKzUyLDcg
QEAKICAgICAgICcuLi8nLAogICAgICAgJy4uLy4uJywKICAgICAgICcuLi9Nb2R1bGVzL2dhbWVw
YWQnLAorICAgICAgJy4uL01vZHVsZXMvaW50ZW50cycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0
eScsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eS9jaHJvbWl1bScsCiAgICAgICAnLi4vYmluZGlu
Z3MnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZjZGY1YjhiMzI1MDE5ZGQ4NDJjMjdlYTU4NTkwZDJl
ZTZlZTQ5MzUuLmZhZmY0ZTQyNDJkMTg4OWVkOTVhNzVmOTg3ZWQzNzg0NjI3ZjA5YjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTExNDgsNiArMTE0OCw4IEBACiAgICAgICAgICd3ZWJjb3JlX2JpbmRp
bmdzX2lkbF9maWxlcyc6IFsKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5p
ZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaWRsJywKICAgICAgICAgICAgICdjc3Mv
Q1NTQ2hhcnNldFJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VSdWxlLmlk
bCcsCiAgICAgICAgICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTMsNiArMTY5
NSwxMSBAQAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oJywK
KyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50UmVzdWx0Q2FsbGJhY2suaCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmNwcCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudHNDb250cm9sbGVyLmgnLAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCcsCkBAIC0yMjQ0LDYgKzIyNTEsNyBAQAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDE2QXJyYXlDdXN0b20uY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQzMkFycmF5Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50OEFycmF5Q3VzdG9tLmNwcCcs
CisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEludGVudEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg0ODlkZjNjMmExYTA2N2I4ZmU0
MTJmNWM0ZjA2NjE2YmM4ODI4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJW
OEludGVudC5oIgorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhQ
cm94eS5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiSW50ZW50LkNv
bnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxs
ZWQgYXMgYSBmdW5jdGlvbi4iKTsKKworICAgIGlmICghYXJncy5MZW5ndGgoKSkgeworICAgICAg
ICBSZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJbnRlbnQ6OmNyZWF0ZShTdHJpbmcoKSwgU3RyaW5n
KCksIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICBWOERPTVdy
YXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGludGVudC5nZXQoKSk7
CisgICAgICAgIHJldHVybiB0b1Y4KGludGVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDIpIHsKKyAgICAgICAgU3RyaW5nIGFj
dGlvbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsK
KyAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVk
Q2hlY2soYXJnc1sxXSk7CisKKyAgICAgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSIpOworICAgICAg
ICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHlw
ZSBjYW5ub3QgYmUgZW1wdHkiKTsKKworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJ
bnRlbnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZh
bHVlKCkpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIo
KSwgJmluZm8sIGludGVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGludGVudC5yZWxl
YXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09
IDMpIHsKKyAgICAgICAgU3RyaW5nIGFjdGlvbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JV
bmRlZmluZWRDaGVjayhhcmdzWzBdKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVT
dHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisKKyAgICAgICAgaWYgKGFj
dGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWN0aW9uIGNh
bm5vdCBiZSBlbXB0eSIpOworICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiVHlwZSBjYW5ub3QgYmUgZW1wdHkiKTsKKworICAgICAgICBi
b29sIGV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgMCwgMCwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKCJJbnRlbnQgY29uc3RydWN0b3IgZGF0YSBtdXN0IGJlIGEgc3RydWN0dXJlZCBj
bG9uZSIpOworCisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6Y3JlYXRl
KGFjdGlvbiwgdHlwZSwgZGF0YSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRv
VjgoaW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHRocm93RXJyb3IoIkludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3Ig
dGhyZWUgcGFyYW1ldGVycyIpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6
OmRhdGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJbnRlbnQqIGltcGwgPSBWOEludGVudDo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlh
bGl6ZWRWYWx1ZSA9IGltcGwtPmRhdGEoKTsKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQorICAg
ICAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgpOworCisgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJD
bGllbnQuaAppbmRleCA0NTE3YjM2NDhlMjIzOGY0MTNmZWRjZDAyYTEyZjc3YzU0NTAyZDk3Li4x
M2M2ZTVlNzZkOTcwZjA0YWM2YzYyN2U4ZjM0YzE0ZTYxNmVkZjdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaApAQCAtNzgsNiArNzgsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZW5kaWYKICAgICBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKICAgICBjbGFz
cyBJbnRTaXplOworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICBjbGFzcyBJbnRlbnQ7Cisj
ZW5kaWYKICAgICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247CiAgICAg
Y2xhc3MgUGFnZTsKQEAgLTMxOSw2ICszMjIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0
d29ya2luZ0NvbnRleHQoKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFBhaW50
QnJva2VuSW1hZ2UoY29uc3QgS1VSTCYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworI2lmIEVO
QUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoSW50ZW50KGNv
bnN0IEludGVudCYgaW50ZW50KSB7IH0KKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCAyZWM4ZDZhNWIwNWU1NmRh
MDFlYzNkMDQ3NzRhYzJhNjNkM2Y5MzYxLi4yY2ZjMzRmZTJkYjVkYjVkZjBjMDBlMTcyMWY2YzVi
MDQ1MjFkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC02MTksNiArNjE5LDgg
QEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVudGltZT13
ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tFdmVudDsKICNlbmRp
ZgogCisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFNdIEludGVudENv
bnN0cnVjdG9yIEludGVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgorCiAgICAg
ICAgIGF0dHJpYnV0ZSBET01QbHVnaW5Db25zdHJ1Y3RvciBQbHVnaW47CiAgICAgICAgIGF0dHJp
YnV0ZSBET01QbHVnaW5BcnJheUNvbnN0cnVjdG9yIFBsdWdpbkFycmF5OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5jcHAKaW5kZXggYmMxZTA1MzRkMGVjOTAyNzE5ZmE3NDRhNzE5OTMzZDQ5NGI5
OWJlZi4uNDY3NjJmYTI0MmUzMDkyZTk1MWJiYTkyODg3ODMyYTgzMmQ1Njc1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcApAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJHZW9sb2Nh
dGlvbi5oIgorI2luY2x1ZGUgIkludGVudC5oIgorI2luY2x1ZGUgIkludGVudFJlc3VsdENhbGxi
YWNrLmgiCisjaW5jbHVkZSAiSW50ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQb2ludGVy
TG9jay5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgpAQCAtMzE5
LDQgKzMyMiwyOCBAQCBHYW1lcGFkTGlzdCogTmF2aWdhdG9yOjp3ZWJraXRHYW1lcGFkcygpCiB9
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKK3ZvaWQgTmF2aWdhdG9yOjpzdGFy
dEFjdGl2aXR5KEludGVudCogaW50ZW50LCBQYXNzUmVmUHRyPEludGVudFJlc3VsdENhbGxiYWNr
PiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0Q2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZnJhbWUoKSB8fCAhZnJh
bWUoKS0+cGFnZSgpIHx8ICFpbnRlbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbnRlbnQtPmFjdGlvbigpLmlz
RW1wdHkoKSB8fCBpbnRlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBWQUxJ
REFUSU9OX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghU2NyaXB0Q29u
dHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElE
X0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaWQgPSBtX2Zy
YW1lLT5wYWdlKCktPmludGVudHNDb250cm9sbGVyKCktPmFzc2lnbkludGVudElkKHN1Y2Nlc3ND
YWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CisgICAgaW50ZW50LT5zZXRJZGVudGlmaWVyKGlkKTsK
KyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpc3BhdGNoSW50ZW50KCppbnRlbnQp
OworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRv
ci5oCmluZGV4IDYzMjFiMzFkOTczNjIyOTNjYzE4MjNkNjlkZmE4OWYwODE1YjAzMjIuLjE3OTlj
MjViOGQ2ZmQyMzE1MjVjOTk3OGYwNTBkODkyZjljNDZkZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0
b3IuaApAQCAtMzMsNiArMzMsOCBAQCBjbGFzcyBET01QbHVnaW5BcnJheTsKIGNsYXNzIEZyYW1l
OwogY2xhc3MgR2FtZXBhZExpc3Q7CiBjbGFzcyBHZW9sb2NhdGlvbjsKK2NsYXNzIEludGVudDsK
K2NsYXNzIEludGVudFJlc3VsdENhbGxiYWNrOwogY2xhc3MgUG9pbnRlckxvY2s7CiBjbGFzcyBO
YXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrOwogY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlh
U3VjY2Vzc0NhbGxiYWNrOwpAQCAtNzksNiArODEsMTAgQEAgcHVibGljOgogICAgIEdhbWVwYWRM
aXN0KiB3ZWJraXRHYW1lcGFkcygpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMp
CisgICAgdm9pZCBzdGFydEFjdGl2aXR5KEludGVudCosIFBhc3NSZWZQdHI8SW50ZW50UmVzdWx0
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxJbnRlbnRSZXN1bHRDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKIHByaXZhdGU6CiAg
ICAgTmF2aWdhdG9yKEZyYW1lKik7CiAgICAgRnJhbWUqIG1fZnJhbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5pZGwKaW5kZXggMmI2MWM1YTRiZWY3MDQ2YWQ5ZGQ0NTkyN2NhMmQyNWExYTA0Mzgw
ZC4uODRmMGRhNDQyMTNiNDAyODk5NjgwMzMwMDg3MDdkN2Y3Njk0MWRhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvTmF2aWdhdG9yLmlkbApAQCAtNjUsNiArNjUsMTEgQEAgbW9kdWxlIHdpbmRvdyB7CiAjaWYg
ZGVmaW5lZChFTkFCTEVfR0FNRVBBRCkgJiYgRU5BQkxFX0dBTUVQQUQKICAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lXSBHYW1lcGFkTGlzdCB3ZWJraXRHYW1lcGFk
czsKICNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfV0VCX0lOVEVOVFMpICYmIEVOQUJMRV9X
RUJfSU5URU5UUworICAgICAgICB2b2lkIHN0YXJ0QWN0aXZpdHkoaW4gSW50ZW50IGludGVudCwg
aW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gSW50ZW50UmVzdWx0Q2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrLCBpbiBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBJbnRlbnRSZXN1bHRDYWxsYmFjayBmYWlsdXJl
Q2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRpZgogICAg
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDBjNmZmNTViYTEyNGM4OWJmYTg5OGMyZTBh
OTc1NWFlMWUzN2Q3M2EuLmUzNDIwM2U0ZTkyNTI1MzMxYzgwNGI2ZTkyNGFjNjBkYjgyNDQ4MWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIkhpc3RvcnlJ
dGVtLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludGVudHNDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0ZW5lci5oIgog
I2luY2x1ZGUgIk5hdmlnYXRvci5oIgpAQCAtMTUyLDYgKzE1Myw5IEBAIFBhZ2U6OlBhZ2UoUGFn
ZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgLCBt
X3VzZXJNZWRpYUNsaWVudChwYWdlQ2xpZW50cy51c2VyTWVkaWFDbGllbnQpCiAjZW5kaWYKKyNp
ZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgLCBtX2ludGVudHNDb250cm9sbGVyKEludGVudHND
b250cm9sbGVyOjpjcmVhdGUoKSkKKyNlbmRpZgogICAgICwgbV9zZXR0aW5ncyhTZXR0aW5nczo6
Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wcm9ncmVzcyhQcm9ncmVzc1RyYWNrZXI6OmNyZWF0ZSgp
KQogICAgICwgbV9iYWNrRm9yd2FyZENvbnRyb2xsZXIoQmFja0ZvcndhcmRDb250cm9sbGVyOjpj
cmVhdGUodGhpcywgcGFnZUNsaWVudHMuYmFja0ZvcndhcmRDbGllbnQpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApp
bmRleCBlZjFkMWQ5ZmMyNzQ0ZDQ1MmY1MTU4MzcyNjFlNjI5Nzg0ZTFhZThlLi4xMmRjNzZmZDcw
OGQ4OTA1NmUyOTVjYmRiMmE3Y2QzMmEzMTBhYTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtNzAsNiAr
NzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgSGlzdG9yeUl0ZW07CiAgICAg
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Cisg
ICAgY2xhc3MgSW50ZW50c0NvbnRyb2xsZXI7CiAgICAgY2xhc3MgTWVkaWFDYW5TdGFydExpc3Rl
bmVyOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgTm90aWZpY2F0aW9uQ29udHJvbGxlcjsK
QEAgLTE5OSw3ICsyMDAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKICAgICAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCk7CiAjZW5kaWYKLQorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAg
SW50ZW50c0NvbnRyb2xsZXIqIGludGVudHNDb250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlbnRzQ29udHJvbGxlci5nZXQoKTsgfQorI2VuZGlmCiAgICAgICAgIFNldHRpbmdzKiBzZXR0
aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICAgICAgUHJvZ3Jl
c3NUcmFja2VyKiBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3MuZ2V0KCk7IH0K
ICAgICAgICAgQmFja0ZvcndhcmRDb250cm9sbGVyKiBiYWNrRm9yd2FyZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja0ZvcndhcmRDb250cm9sbGVyLmdldCgpOyB9CkBAIC0zOTYsNiArMzk5LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAgICAg
ICAgIFJlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsK
ICNlbmRpZgorI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKyAgICAgICAgT3duUHRyPEludGVudHND
b250cm9sbGVyPiBtX2ludGVudHNDb250cm9sbGVyOworI2VuZGlmCiAgICAgICAgIE93blB0cjxT
ZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICAgICAgT3duUHRyPFByb2dyZXNzVHJhY2tlcj4gbV9w
cm9ncmVzczsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2Zl
YXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXgg
ZTdkOWZlYmM0MDk3ZDRiMmUxZTBlMTE1OTA3ZTEyNzQ1MGU2MWQxYS4uOWQyZTA2MDQ3NTI2NjZl
NzkwNTIxOTY0NGIwZDdlN2Y4MGVkODJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMu
Z3lwaQpAQCAtMTU5LDYgKzE1OSwxMSBAQAogICAgICAgICAgICdFTkFCTEVfUkVHSVNURVJfUFJP
VE9DT0xfSEFORExFUj0xJywKICAgICAgICAgXSwKICAgICAgIH1dLAorICAgICAgWydlbmFibGVf
d2ViX2ludGVudHM9PTEnLCB7CisgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCisgICAgICAg
ICAgJ0VOQUJMRV9XRUJfSU5URU5UUz0xJywKKyAgICAgICAgXSwKKyAgICAgIH1dLAogICAgICAg
WydPUz09Im1hYyInLCB7CiAgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAg
J0VOQUJMRV9SVUJCRVJfQkFORElORz0xJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkludGVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSW50ZW50LmgKaW5kZXggNGNlMDM0MmI3ODdiYjEyNWMxMjI3ZWQyY2ZlNjQxZGUyMTNkNjFj
NC4uMzZhY2JjMjUwNTgzN2M1OTcxNDgyNmExY2Q0ZTJjZGJiYjIyZmNkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW50ZW50LmgKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5j
bHVkZSAicGxhdGZvcm0vV2ViQ29tbW9uLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5n
LmgiCiAKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xh
c3MgSW50ZW50OyB9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEhvbGRzIGRh
dGEgcGFzc2VkIHRocm91Z2ggYSBXZWIgSW50ZW50cyBpbnZvY2F0aW9uIGNhbGwgZnJvbSB0aGUg
SmF2YXNjcmlwdApAQCAtNTcsNiArNjEsOSBAQCBwdWJsaWM6CiAKICNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KICAgICBXZWJJbnRlbnQoKTsKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAg
ZXhwbGljaXQgV2ViSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYpOworI2VuZGlmCiAjZW5k
aWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFt
ZUxvYWRlckNsaWVudEltcGwuY3BwCmluZGV4IDkwNWEzNzc3MjI1OWFiZTMwYjcxYWE0YzE3ZDRl
NTZlZWJmMTRmNjkuLmY5ZDYyZTIzMWQ0OTMyOWZkODc1YzdmZTRlMGU5OWRkNTc1NmRiZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIldlYkZvcm1FbGVtZW50LmgiCiAj
aW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNp
bmNsdWRlICJXZWJJbnRlbnQuaCIKICNpbmNsdWRlICJXZWJLaXQuaCIKICNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJLaXRQbGF0Zm9ybVN1cHBvcnQuaCIKICNpbmNsdWRlICJwbGF0Zm9ybS9XZWJNaW1l
UmVnaXN0cnkuaCIKQEAgLTE2MTcsNCArMTYxOCwxMiBAQCBQYXNzUmVmUHRyPEZyYW1lTmV0d29y
a2luZ0NvbnRleHQ+IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRl
eAogICAgIHJldHVybiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbDo6Y3JlYXRlKG1fd2ViRnJh
bWUtPmZyYW1lKCkpOwogfQogCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQordm9pZCBGcmFtZUxv
YWRlckNsaWVudEltcGw6OmRpc3BhdGNoSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYgaW50
ZW50KQoreworICAgIFdlYkludGVudCB3ZWJJbnRlbnQoaW50ZW50KTsKKyAgICBtX3dlYkZyYW1l
LT5jbGllbnQoKS0+ZGlzcGF0Y2hJbnRlbnQod2ViRnJhbWUoKSwgd2ViSW50ZW50KTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKaW5kZXggNTk2YjVmNGEwNzliMDMwY2Ez
ODExY2ZmMzcwMzE3NDk0MjA1ZmFiMy4uYzE0YzIzOTdkZTg0NjFlYjM5NThjNDc4ZWUyY2JkZWMx
YzQyNTllMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmgKQEAgLTIwNyw2ICsyMDcsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZU5ldHdv
cmtpbmdDb250ZXh0KCk7CiAKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYpOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGU1YWU5YzUxODliMTg1OGJhZGM5ODA2
MWNhNDc2OTY4OGY0YmYyMjkuLjAxYzBlNTcwZmRlOWQ5OTk4ZDQ5NjVhMjU4NmY0YWJhMTA4OWE2
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAt
MTA1LDYgKzEwNSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklj
b25VUkwuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW50
ZW50c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCkBAIC0xODEyLDEwICsxODEzLDI0IEBAIHZvaWQgV2Vi
RnJhbWVJbXBsOjpyZXNldE1hdGNoQ291bnQoKQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6aGFuZGxl
SW50ZW50UmVzdWx0KGludCBpbnRlbnRJZGVudGlmaWVyLCBjb25zdCBXZWJTdHJpbmcmIHJlcGx5
KQogeworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgRU5BQkxFKFdF
Ql9JTlRFTlRTKQorICAgIFN0cmluZyByZXBseVN0cmluZyhyZXBseSk7CisgICAgbV9mcmFtZS0+
cGFnZSgpLT5pbnRlbnRzQ29udHJvbGxlcigpLT5wb3N0UmVzdWx0KHJlcGx5U3RyaW5nLCBpbnRl
bnRJZGVudGlmaWVyKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6aGFuZGxlSW50
ZW50RmFpbHVyZShpbnQgaW50ZW50SWRlbnRpZmllciwgY29uc3QgV2ViU3RyaW5nJiByZXBseSkK
IHsKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXRUJf
SU5URU5UUykKKyAgICBTdHJpbmcgcmVwbHlTdHJpbmcocmVwbHkpOworICAgIG1fZnJhbWUtPnBh
Z2UoKS0+aW50ZW50c0NvbnRyb2xsZXIoKS0+cG9zdEZhaWx1cmUocmVwbHlTdHJpbmcsIGludGVu
dElkZW50aWZpZXIpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjphZGRFdmVudExp
c3RlbmVyKGNvbnN0IFdlYlN0cmluZyYgZXZlbnRUeXBlLCBXZWJET01FdmVudExpc3RlbmVyKiBs
aXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklu
dGVudC5jcHAKaW5kZXggMTM1NDBlMTYyMWI4YTNhZmVjODFiYTk0ZWEwOWJkZmYxMGI5ZWNlMy4u
NzA2ZGUwZGQzZmQ0ODFiZGQ1YzA3YWZmZTY3MWJiM2FlM2QwNzJlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW50ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbnRlbnQuY3BwCkBAIC0zMSwxMCArMzEsMjMgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJJbnRlbnQuaCIKIAorI2luY2x1ZGUgIkludGVudC5o
IgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogV2ViSW50ZW50OjpXZWJJbnRlbnQoKSB7IH0KIAorI2lmIEVOQUJMRShXRUJfSU5URU5U
UykKK1dlYkludGVudDo6V2ViSW50ZW50KGNvbnN0IFdlYkNvcmU6OkludGVudCYgaW50ZW50KQor
ICAgIDogbV9hY3Rpb24oaW50ZW50LmFjdGlvbigpKQorICAgICwgbV90eXBlKGludGVudC50eXBl
KCkpCisgICAgLCBtX2RhdGEoaW50ZW50LmRhdGEoKS0+dG9XaXJlU3RyaW5nKCkpCisgICAgLCBt
X2lkZW50aWZpZXIoaW50ZW50LmlkZW50aWZpZXIoKSkKK3sKK30KKyNlbmRpZgorCiBXZWJTdHJp
bmcgV2ViSW50ZW50OjphY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX2FjdGlvbjsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggZDY0YTFkNmJmODI0NDc3N2JmNzEwYzMzYzEwNjE3
ZTllODZmNmE2NS4uZmJhZWZmYjk1ZmM2NDZkY2YyNmU5YWQyNGU4YWVlZjQyMmQwNTZiMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTE5MjcsNiArMTkyNyw5IEBAIGh0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5YmkvCiAjIE1pY3JvZGF0YSBET00gQVBJIGlzIG5vdCB5ZXQgZW5h
YmxlZC4KIGZhc3QvZG9tL01pY3JvRGF0YQogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5h
YmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4K
IHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5YTk2ZGMyYTk3
MzA5YWFmZDRkMDk5NThmNDJkYTU1MjdlMzlmMjBiLi5kY2MzYjc5YjdmMWRlZTAwYjU5MDMyMDky
NDk0NTE3NTZlMzNlYTA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtMTQzMiw2ICsx
NDMyLDkgQEAgZmFzdC9mcmFtZXMvZmxhdHRlbmluZy9pZnJhbWUtZmxhdHRlbmluZy1maXhlZC13
aWR0aC1hbmQtaGVpZ2h0LW5vLXNjcm9sbGluZy5odG0KICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcyMjQ4CiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXVuaWZp
ZWQtZW11bGF0aW9uLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3
ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVy
LWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggMTY1MjE4ZmM5YTgzYWU4M2Vi
MWMxMDM4OTlhYmEzYjAzNzhlMzAyMy4uOTdjZmE2YWFlZjE1MjRlYjIyYjBhNjc1NWFlM2Y4MTEz
Nzg3MGM2NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTQ4OCw2ICs0ODgsOSBAQCBm
YXN0L3JlcGFpbnQvdGFibGUtZXh0cmEtYm90dG9tLWdyb3cuaHRtbAogIyBEUlQgZG9lc24ndCBz
dXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0
L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIEludGVu
dHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMg
bm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApp
bmRleCBjZmNiNGQzZmFjZTUyYWRjZmM4YTY2NWUwYzI5NTAyNzBiZTVkOTNmLi42ZTZjZTg4ZDlh
ODczZmQzNjMyNmNhMTU4MWEyYWMzMTIzOWY1NWUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQK
QEAgLTI0OTAsNiArMjQ5MCw5IEBAIGNzczMvZmxleGJveC9saW5lLXdyYXBwaW5nLmh0bWwKICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDkxCiBodHRwL3Rlc3Rz
L21pc2Mvb25sb2FkLXJlbW92ZS1pZnJhbWUtY3Jhc2gtMi5odG1sCiAKKyMgV2ViIEludGVudHMg
aXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90
IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmlu
ZGV4IDA1N2U5YmI4YTJmZDk1YjQxOTJkMmEzZjMxMTg4ZjYwNmY4ZDZmZTEuLmQ1OWE1ODM0NmQ0
OTYxODg2NTRhMWJmZDAzNDhiNzY3OTBiNGNiYTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CkBAIC0xNDgzLDYgKzE0ODMsOSBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBh
Z2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJUIGRvZXNuJ3Qgc3VwcG9ydCBvdmVy
cmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4dC9pbnRlcm5hdGlv
bmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5
ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1l
bnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQK
aW5kZXggOTk2YmE1MzU0NmYxZGI1YzY5Y2U3YzAyMWFlOWY3MmJiNmViYmRjYy4uYjdlN2Y2ZjRj
ZDM1OWQyOWNhNDVhYjMxZTlhNmNlMmZmMzAzYzQ0MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5j
YWlyby9Ta2lwcGVkCkBAIC0yMDAxLDYgKzIwMDEsOSBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13
aGVlbGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJUIGRvZXNuJ3Qg
c3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4
dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRl
bnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlz
IG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjMTA3
MzEzYjkwZWRkNzc5MmMyZDM2MDE0NDNkNzI2MDFmZWEyMGUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzNSBAQAorUEFTUyBuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eSBpcyBkZWZpbmVkLgorUEFT
UyBpbnRlbnQuYWN0aW9uIGlzICIiCitQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9y
IHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJ2EnLCdiJywnYycsJ2QnKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8g
b3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJycsJycsJycpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIG5l
dyBJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQWN0aW9uIGNh
bm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnJywnJywnYycpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJbnRlbnQoJ2En
LCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBjYW5ub3QgYmUgZW1wdHku
CitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQxLnR5cGUgaXMgImIiCitQ
QVNTIGludGVudDEuZGF0YSBpcyBudWxsCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFT
UyBpbnRlbnQyLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50Mi50eXBlIGlzICJiIgorUEFTUyBp
bnRlbnQyLmRhdGEgaXMgImMiCitQQVNTIGludGVudDMuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRl
bnQzLnR5cGUgaXMgImIiCitQQVNTIGludGVudDMuZGF0YS5jIGlzICJkIgorUEFTUyBpbnRlbnQ0
LmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50NC50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQ0LmRh
dGEgaW5zdGFuY2VvZiBBcnJheSBpcyB0cnVlCitQQVNTIGludGVudDQuZGF0YS5sZW5ndGggaXMg
MgorUEFTUyBpbnRlbnQ0LmRhdGFbMF0gaXMgImMiCitQQVNTIGludGVudDQuZGF0YVsxXSBpcyAi
ZCIKK1BBU1MgaW50ZW50NS5kYXRhIGlzIDQKK1BBU1MgaW50ZW50Ni5kYXRhIGlzIDQuNQorUEFT
UyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQorUEFTUyBpbnRlbnQ4LmRhdGEgaXMgbnVsbAorUEFTUyBp
bnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3QgT2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBuYXZpZ2F0b3Iu
c3RhcnRBY3Rpdml0eShpbnRlbnQpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVkFMSURBVElPTl9F
UlI6IERPTSBFeGNlcHRpb24gMTYuCitQQVNTIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5KGludGVu
dDEpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9BQ0NFU1NfRVJSOiBET00gRXhjZXB0
aW9uIDE1LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlMTk3N2RjOGY1NmE1ZGQ0MjdiZTZlODFjYjI4NzljMzk0MzQzMzIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC0w
LDAgKzEsNjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CisgICAgICBzaG91bGRCZURlZmluZWQoIm5hdmlnYXRvci5zdGFydEFj
dGl2aXR5Iik7CisKKyAgICAgIC8vIFRPRE8oZ2JpbGxvY2spOiBlbGltaW5hdGUgdGhpcyB6ZXJv
LWFyZyBjYXNlLgorICAgICAgdmFyIGludGVudCA9IG5ldyBJbnRlbnQoKTsKKyAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnaW50ZW50LmFjdGlvbicsICcnKTsKKworICAgICAgc2hvdWxkVGhy
b3coIm5ldyBJbnRlbnQoJ2EnKSIsICInVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVz
dCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMnIik7CisgICAgICBzaG91bGRU
aHJvdygibmV3IEludGVudCgnYScsJ2InLCdjJywnZCcpIiwgIidUeXBlRXJyb3I6IEludGVudCBj
b25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVycyciKTsK
KyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCcnKSIsICInVHlwZUVycm9yOiBB
Y3Rpb24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQo
JycsJ2InLCdjJykiLCAiJ1R5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAg
ICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCdjJykiLCAiJ1R5cGVFcnJvcjogQWN0
aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdh
JywnJywnYycpIiwgIidUeXBlRXJyb3I6IFR5cGUgY2Fubm90IGJlIGVtcHR5JyIpOworCisgICAg
ICB2YXIgaW50ZW50MSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicpOworICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImludGVudDEudHlwZSIsICJiIik7CisgICAgICBzaG91bGRCZU51bGwoImludGVudDEu
ZGF0YSIpOworICAgICAgaW50ZW50MS5hY3Rpb24gPSAiYWJjIjsKKyAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygiaW50ZW50MS5hY3Rpb24iLCAiYSIpOworCisgICAgICB2YXIgaW50ZW50MiA9
IG5ldyBJbnRlbnQoImEiLCAiYiIsICJjIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDIuYWN0aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50Mi50eXBlJywgImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50Mi5k
YXRhJywgImMiKTsKKworICAgICAgdmFyIGludGVudDMgPSBuZXcgSW50ZW50KCJhIiwgImIiLCB7
ImMiOiAiZCJ9KTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My5hY3Rpb24n
LCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLnR5cGUnLCAiYiIp
OworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLmRhdGEuYycsICJkIik7CisK
KyAgICAgIHZhciBpbnRlbnQ0ID0gbmV3IEludGVudCgiYSIsICJiIiwgWyJjIiwgImQiXSk7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuYWN0aW9uJywgImEiKTsKKyAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC50eXBlJywgImIiKTsKKyAgICAgIHNob3Vs
ZEJlVHJ1ZSgnaW50ZW50NC5kYXRhIGluc3RhbmNlb2YgQXJyYXknKTsKKyAgICAgIHNob3VsZEV2
YWx1YXRlVG8oJ2ludGVudDQuZGF0YS5sZW5ndGgnLCAyKTsKKyAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnaW50ZW50NC5kYXRhWzBdJywgImMiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygnaW50ZW50NC5kYXRhWzFdJywgImQiKTsKKworICAgICAgdmFyIGludGVudDUgPSBuZXcg
SW50ZW50KCJhIiwgImIiLCA0KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDUuZGF0
YScsIDQpOworICAgICAgdmFyIGludGVudDYgPSBuZXcgSW50ZW50KCdhJywgJ2InLCA0LjUpOwor
ICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50Ni5kYXRhJywgNC41KTsKKyAgICAgIHZhciBp
bnRlbnQ3ID0gbmV3IEludGVudCgnYScsICdiJywgdHJ1ZSk7CisgICAgICBzaG91bGRCZVRydWUo
J2ludGVudDcuZGF0YScpOworICAgICAgdmFyIGludGVudDggPSBuZXcgSW50ZW50KCdhJywgJ2In
LCBudWxsKTsKKyAgICAgIHNob3VsZEJlTnVsbCgnaW50ZW50OC5kYXRhJyk7CisgICAgICB2YXIg
aW50ZW50OSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHt9KTsKKyAgICAgIHNob3VsZEV2YWx1YXRl
VG8oJ2ludGVudDkuZGF0YScsIHt9KTsKKworICAgICAgc2hvdWxkVGhyb3coJ25hdmlnYXRvci5z
dGFydEFjdGl2aXR5KGludGVudCknLCAiJ0Vycm9yOiBWQUxJREFUSU9OX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxNiciKTsKKyAgICAgIHNob3VsZFRocm93KCduYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0eShp
bnRlbnQxKScsICInRXJyb3I6IElOVkFMSURfQUNDRVNTX0VSUjogRE9NIEV4Y2VwdGlvbiAxNSci
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121006</attachid>
            <date>2012-01-03 15:25:50 -0800</date>
            <delta_ts>2012-01-04 10:54:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20120103152549.patch</filename>
            <type>text/plain</type>
            <size>25543</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQzMWU3NTU1M2EwNWQx
YjBlNzAxY2Q4ODY4MDRmOTBmNDc1ZDg0Zi4uZTVhNDg2M2U0MTJkNmE0MjcxZjhjZWI5NTlmMDA2
NWUxMTljMTdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10g
RmxhZ2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rp
dml0eQorICAgICAgICBTZWUgaHR0cDovL3d3dy5jaHJvbWl1bS5vcmcvZGV2ZWxvcGVycy9kZXNp
Z24tZG9jdW1lbnRzL3dlYmludGVudHNhcGkKKyAgICAgICAgZm9yIGRyYWZ0IHNwZWMuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogd2ViLWlu
dGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4SW50ZW50OjpkYXRhQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIHBhZ2Uv
RE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OkludGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlbnQ6OmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldEFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZW50OjpzZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6ZGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlbnQ6OnNldERhdGEpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9J
bnRlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OmNyZWF0ZSk6CisgICAg
ICAgICogTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGw6IEFkZGVkLgorCiAyMDEyLTAxLTAzICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LiBSZWJhc2VsaW5lZCBydW4tYmluZGluZ3MtdGVzdHMgcmVzdWx0cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggMGU0ZThjODNiODdkMjNiZjVjNTBiOGU5MzcwNTYyMDlkODM4YWNlMC4u
NjY4MTA4NDNhYWI3MWQ3NDRmZDEyYmZiOWMzNDU2MjM3YjNkYWFiYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMS0xMS0yMyAgR3JlZyBCaWxsb2NrICA8
Z2JpbGxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBbV2ViIEludGVudHNdIEZsYWdnZWQtb2Zm
IFdlYkNvcmUgaW1wbGVtZW50YXRpb24gb2YgbmF2aWdhdG9yLnN0YXJ0QWN0aXZpdHkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmZWF0dXJlcy5neXBp
OgorCiAyMDExLTEyLTMwICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQWxsb3cgZGlzYWJsaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGluIFdlYk1l
ZGlhUGxheWVyQ2xpZW50IChzbyBhdWRpby1vbmx5IDx2aWRlbz4gaXNuJ3QgYWNjZWxlcmF0ZWQp
LgpAQCAtNTEzNSw2ICs1MTQ0LDEzIEBACiAgICAgICAgICogcHVibGljL1dlYkludGVudFNlcnZp
Y2VJbmZvLmg6IEFkZGVkLgogICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgogICAgICAgICAq
IHB1YmxpYy9XZWJGcmFtZUNsaWVudC5oOgorICAgICAgICAqIHB1YmxpYy9XZWJJbnRlbnRzQ2xp
ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnRzQ2xpZW50Ojp+V2ViSW50
ZW50c0NsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYkludGVudHNDb250cm9sbGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJWaWV3Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdDbGllbnQ6OndlYkludGVudHNDbGllbnQpOgorICAgICAgICAqIHNyYy9XZWJJbnRl
bnRzQ29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnRlbnRzQ29u
dHJvbGxlcjo6d2ViSW50ZW50UmVwbHkpOgogCiAyMDExLTExLTIyICBTY290dCBHcmFoYW0gIDxz
Y290dG1nQGNocm9taXVtLm9yZz4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MGIyMTA0N2RhYmJkZDRjZWViMGYyMDYxYTljZTE2MThiNDhm
NDE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0lu
dGVudC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRl
bnQuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludGVudDo6SW50ZW50KGNv
bnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBkYXRhKQorICAgIDogbV9hY3Rpb24oYWN0aW9uKQorICAgICwgbV90
eXBlKHR5cGUpCisgICAgLCBtX2lkZW50aWZpZXIoMCkKK3sKKyAgICBzZXREYXRhKGRhdGEpOwor
fQorCitjb25zdCBTdHJpbmcmIEludGVudDo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9hY3Rpb247Cit9CisKK2NvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV90eXBlOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0
YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKK30KKwordm9pZCBJbnRlbnQ6
OnNldERhdGEoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCit7CisgICAg
aWYgKGRhdGEuZ2V0KCkpCisgICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlRnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5nKCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKTsKK30KKworaW50IElu
dGVudDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWRlbnRpZmllcjsKK30K
Kwordm9pZCBJbnRlbnQ6OnNldElkZW50aWZpZXIoaW50IGlkKQoreworICAgIG1faWRlbnRpZmll
ciA9IGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0lOVEVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
SW50ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDVhYWYwNWQwNmMzZDUxNzQ1MDNhMWM2YmU5MjhhM2JjOWE5NGQ0NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJbnRlbnRfaAorI2RlZmluZSBJbnRlbnRfaAorCisjaWYgRU5BQkxFKFdF
Ql9JTlRFTlRTKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKworY2xhc3MgSW50ZW50IDog
cHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlw
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAgICB9
CisKKyAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYg
dHlwZSgpIGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0Owor
CisgICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZpZXIoaW50
KTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0
cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOworCisg
ICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CisKKyAg
ICBTdHJpbmcgbV9hY3Rpb247CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBtX2RhdGE7CisgICAgaW50IG1faWRlbnRpZmllcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWUzY2Vk
MDY4Mjc4YmRjNzcyNWMxZmU0MzBmYjU0OTljOTVlNjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTAsMCArMSwzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWworICAgICAgQ29uZGl0aW9uYWw9
V0VCX0lOVEVOVFMsCisgICAgICBDYW5CZUNvbnN0cnVjdGVkLAorICAgICAgQ3VzdG9tQ29uc3Ry
dWN0RnVuY3Rpb24sCisgICAgICBWOEN1c3RvbUNvbnN0cnVjdG9yLAorICBdIEludGVudCB7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYWN0aW9uOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBbQ3VzdG9tR2V0dGVyXSBhbnkgZGF0YTsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXAKaW5kZXggZTc5Yzc5OGMxMjcxOTkzNzMxYWJhNDk2Y2MzMjdiNDViYmJl
YjQ2ZC4uNmExODc2YTBhZjg3ZmQ3NWM4OTYxY2ZlYWFjODE2ZjNhOTUwZTRiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTUxLDYgKzUxLDcgQEAKICAgICAgICcu
Li8nLAogICAgICAgJy4uLy4uJywKICAgICAgICcuLi9Nb2R1bGVzL2dhbWVwYWQnLAorICAgICAg
Jy4uL01vZHVsZXMvaW50ZW50cycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eScsCiAgICAgICAn
Li4vYWNjZXNzaWJpbGl0eS9jaHJvbWl1bScsCiAgICAgICAnLi4vYmluZGluZ3MnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDgzMDVmY2VkOGVhZjYzMDlmN2U2YmM5YmY3NjFiMDIxYWMwNDQ4ODUuLjk4
NmM2Yzc4MjhiMmExOGRlNjA2MjZhYzkzMWQwZjIwOGZlYzdlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTExNDcsNiArMTE0Nyw3IEBACiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX2lkbF9maWxl
cyc6IFsKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAorICAgICAgICAgICAgJ01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTQ2hhcnNldFJ1
bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCcsCiAgICAgICAg
ICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTIsNiArMTY5Myw4IEBACiAgICAg
ICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaCcsCiAgICAgICAgICAgICAnTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRMaXN0LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRMaXN0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3Bw
JywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmgnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCcsCkBAIC0yMjQxLDYgKzIyNDQsNyBAQAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDE2QXJyYXlDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQzMkFycmF5Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50OEFycmF5Q3VzdG9tLmNwcCcsCisg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxGcmFtZUN1c3RvbS5j
cHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW50ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEludGVudEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTg0ODlkZjNjMmExYTA2N2I4ZmU0MTJm
NWM0ZjA2NjE2YmM4ODI4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
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
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJWOElu
dGVudC5oIgorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6Y29uc3RydWN0b3JDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiSW50ZW50LkNvbnN0
cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQg
YXMgYSBmdW5jdGlvbi4iKTsKKworICAgIGlmICghYXJncy5MZW5ndGgoKSkgeworICAgICAgICBS
ZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJbnRlbnQ6OmNyZWF0ZShTdHJpbmcoKSwgU3RyaW5nKCks
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICBWOERPTVdyYXBw
ZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIGludGVudC5nZXQoKSk7Cisg
ICAgICAgIHJldHVybiB0b1Y4KGludGVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAg
IH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDIpIHsKKyAgICAgICAgU3RyaW5nIGFjdGlv
biA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRlZmluZWRDaGVjayhhcmdzWzBdKTsKKyAg
ICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hl
Y2soYXJnc1sxXSk7CisKKyAgICAgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSIpOworICAgICAgICBp
ZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHlwZSBj
YW5ub3QgYmUgZW1wdHkiKTsKKworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJbnRl
bnQ6OmNyZWF0ZShhY3Rpb24sIHR5cGUsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVl
KCkpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
JmluZm8sIGludGVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGludGVudC5yZWxlYXNl
KCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDMp
IHsKKyAgICAgICAgU3RyaW5nIGFjdGlvbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JVbmRl
ZmluZWRDaGVjayhhcmdzWzBdKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJp
bmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CisKKyAgICAgICAgaWYgKGFjdGlv
bi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQWN0aW9uIGNhbm5v
dCBiZSBlbXB0eSIpOworICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiVHlwZSBjYW5ub3QgYmUgZW1wdHkiKTsKKworICAgICAgICBib29s
IGV4Y2VwdGlvbiA9IGZhbHNlOworICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1syXSwgMCwgMCwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJJbnRlbnQgY29uc3RydWN0b3IgZGF0YSBtdXN0IGJlIGEgc3RydWN0dXJlZCBjbG9u
ZSIpOworCisgICAgICAgIFJlZlB0cjxJbnRlbnQ+IGludGVudCA9IEludGVudDo6Y3JlYXRlKGFj
dGlvbiwgdHlwZSwgZGF0YSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihh
cmdzLkhvbGRlcigpLCAmaW5mbywgaW50ZW50LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgo
aW50ZW50LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRo
cm93RXJyb3IoIkludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhy
ZWUgcGFyYW1ldGVycyIpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6OmRh
dGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJbnRlbnQqIGltcGwgPSBWOEludGVudDo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7CisKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlcmlhbGl6
ZWRWYWx1ZSA9IGltcGwtPmRhdGEoKTsKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQorICAgICAg
ICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZSgpOworCisgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDJlYzhk
NmE1YjA1ZTU2ZGEwMWVjM2QwNDc3NGFjMmE2M2QzZjkzNjEuLjJjZmMzNGZlMmRiNWRiNWRmMGMw
MGUxNzIxZjZjNWIwNDUyMWQ5NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTYx
OSw2ICs2MTksOCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFtFbmFibGVk
QXRSdW50aW1lPXdlYmtpdFZpZGVvVHJhY2tdIFRyYWNrRXZlbnRDb25zdHJ1Y3RvciBUcmFja0V2
ZW50OwogI2VuZGlmCiAKKyAgICAgICAgYXR0cmlidXRlIFtDb25kaXRpb25hbD1XRUJfSU5URU5U
U10gSW50ZW50Q29uc3RydWN0b3IgSW50ZW50OyAvLyBVc2FibGUgd2l0aCB0aGUgbmV3IG9wZXJh
dG9yCisKICAgICAgICAgYXR0cmlidXRlIERPTVBsdWdpbkNvbnN0cnVjdG9yIFBsdWdpbjsKICAg
ICAgICAgYXR0cmlidXRlIERPTVBsdWdpbkFycmF5Q29uc3RydWN0b3IgUGx1Z2luQXJyYXk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCBlN2Q5ZmViYzQwOTdkNGIyZTFl
MGUxMTU5MDdlMTI3NDUwZTYxZDFhLi45ZDJlMDYwNDc1MjY2NmU3OTA1MjE5NjQ0YjBkN2U3Zjgw
ZWQ4MmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0xNTksNiArMTU5
LDExIEBACiAgICAgICAgICAgJ0VOQUJMRV9SRUdJU1RFUl9QUk9UT0NPTF9IQU5ETEVSPTEnLAog
ICAgICAgICBdLAogICAgICAgfV0sCisgICAgICBbJ2VuYWJsZV93ZWJfaW50ZW50cz09MScsIHsK
KyAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKKyAgICAgICAgICAnRU5BQkxFX1dFQl9JTlRF
TlRTPTEnLAorICAgICAgICBdLAorICAgICAgfV0sCiAgICAgICBbJ09TPT0ibWFjIicsIHsKICAg
ICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKICAgICAgICAgICAnRU5BQkxFX1JVQkJFUl9CQU5E
SU5HPTEnLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAppbmRleCBkNjRhMWQ2YmY4MjQ0Nzc3YmY3
MTBjMzNjMTA2MTdlOWU4NmY2YTY1Li5mYmFlZmZiOTVmYzY0NmRjZjI2ZTlhZDI0ZThhZWVmNDIy
ZDA1NmIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApAQCAtMTkyNyw2ICsxOTI3LDkgQEAg
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS8KICMgTWljcm9kYXRhIERPTSBBUEkgaXMg
bm90IHlldCBlbmFibGVkLgogZmFzdC9kb20vTWljcm9EYXRhCiAKKyMgV2ViIEludGVudHMgaXMg
bm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGlt
cGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4
IDA5YjRhZGRmNTI3YzhhNGUyNjU4YTVjNWJhMDI5MWZiYmE1YWJlOGYuLjg1ZGNmZjUxODAzZjZl
YzA2MDQ2ZGM5NmM1MTEzODM4MTMyMDNlZDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBA
IC0xNDM1LDYgKzE0MzUsOSBAQCBmYXN0L2ZyYW1lcy9mbGF0dGVuaW5nL2lmcmFtZS1mbGF0dGVu
aW5nLWZpeGVkLXdpZHRoLWFuZC1oZWlnaHQtbm8tc2Nyb2xsaW5nLmh0bQogIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIyNDgKIGVkaXRpbmcvc3BlbGxpbmcvc3Bl
bGxpbmctdW5pZmllZC1lbXVsYXRpb24uaHRtbAogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQg
ZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRl
ZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCAzYjk4MDNk
YTg3MGQxZjc5YmEzOTcwZjRjMzk1YmNhNjI2ZGMyNmNmLi5lZWZhZjQ4YjVhMzViNGViY2RiYzVl
Njg3OTU0OGE3MjNmMjc5NDViIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNDg4LDYg
KzQ4OCw5IEBAIGZhc3QvcmVwYWludC90YWJsZS1leHRyYS1ib3R0b20tZ3Jvdy5odG1sCiAjIERS
VCBkb2Vzbid0IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4p
CiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAor
IyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50
ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC9Ta2lwcGVkCmluZGV4IDdhOWUyOTJiNzQ0MmZiNmZmMmNmMjcyZmVmZmViNGMyYzA4NjkwZmUu
LjEzNDZiOTU5Yjc2ODgxNzljOGViZDYzNGFkN2IxYzliMmE0ZDlkMTEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZApAQCAtMjQ4Nyw2ICsyNDg3LDkgQEAgY3NzMy9mbGV4Ym94L2xpbmUtd3JhcHBp
bmcuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0OTEK
IGh0dHAvdGVzdHMvbWlzYy9vbmxvYWQtcmVtb3ZlLWlmcmFtZS1jcmFzaC0yLmh0bWwKIAorIyBX
ZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIg
TG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQKaW5kZXggZWNiZTE5MWRjZmI1MThlZjg0Mjc1NGVkZmY1ZDg1ZGRhZmYxOTI0Yi4u
NzhhODQxMDk0MTY5MjcwMDI2YThmYmMxYjIwOTExYmNhNDcxM2JjZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQKQEAgLTE0ODMsNiArMTQ4Myw5IEBAIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdo
ZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogIyBEUlQgZG9lc24ndCBz
dXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0
L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIEludGVu
dHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMg
bm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fp
cm8vU2tpcHBlZAppbmRleCBlZTc3YTE3MTQ0YzI4OTJjYTQyNDJjYmJhNmQ1NDBmODE3ZDc2NTM3
Li40ODE2ZDExYTFjMjZlMTdmNzI5MWE4YmU1NzYzZDI2NzI0MTRlNzk2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTIwMjEsNiArMjAyMSw5IEBAIGZhc3QvZXZlbnRz
L3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogIyBE
UlQgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4u
KQogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAK
KyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2lu
dGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2M3NjNiZGVmNGI5ODUyNDY0OWRhYWJiMDBkNDgxNGE1MTRmNTZiNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDMyIEBACitQQVNTIGludGVudC5hY3Rpb24gaXMgIiIKK1BBU1MgbmV3
IEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludGVudCBjb25zdHJ1Y3Rv
ciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVycy4KK1BBU1MgbmV3IElu
dGVudCgnYScsJ2InLCdjJywnZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludGVudCBj
b25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVycy4KK1BB
U1MgbmV3IEludGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQWN0aW9u
IGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnJywnYicsJ2MnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5LgorUEFTUyBuZXcgSW50ZW50
KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBl
bXB0eS4KK1BBU1MgbmV3IEludGVudCgnYScsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBUeXBlIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgaW50ZW50MS5hY3Rpb24gaXMgImEiCitQ
QVNTIGludGVudDEudHlwZSBpcyAiYiIKK1BBU1MgaW50ZW50MS5kYXRhIGlzIG51bGwKK1BBU1Mg
aW50ZW50MS5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDIuYWN0aW9uIGlzICJhIgorUEFTUyBp
bnRlbnQyLnR5cGUgaXMgImIiCitQQVNTIGludGVudDIuZGF0YSBpcyAiYyIKK1BBU1MgaW50ZW50
My5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDMudHlwZSBpcyAiYiIKK1BBU1MgaW50ZW50My5k
YXRhLmMgaXMgImQiCitQQVNTIGludGVudDQuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQ0LnR5
cGUgaXMgImIiCitQQVNTIGludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5IGlzIHRydWUKK1BB
U1MgaW50ZW50NC5kYXRhLmxlbmd0aCBpcyAyCitQQVNTIGludGVudDQuZGF0YVswXSBpcyAiYyIK
K1BBU1MgaW50ZW50NC5kYXRhWzFdIGlzICJkIgorUEFTUyBpbnRlbnQ1LmRhdGEgaXMgNAorUEFT
UyBpbnRlbnQ2LmRhdGEgaXMgNC41CitQQVNTIGludGVudDcuZGF0YSBpcyB0cnVlCitQQVNTIGlu
dGVudDguZGF0YSBpcyBudWxsCitQQVNTIGludGVudDkuZGF0YSA9PSAnW29iamVjdCBPYmplY3Rd
JyBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGku
aHRtbCBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWNiZGMwMGJkZjRhNGRiYThiODU0NWFmNTNkYTdjZGE1MGQ1NWE1NQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKQEAg
LTAsMCArMSw1NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgIC8vIFRPRE8oZ2JpbGxvY2spOiBlbGltaW5hdGUgdGhp
cyB6ZXJvLWFyZyBjYXNlLgorICAgICAgdmFyIGludGVudCA9IG5ldyBJbnRlbnQoKTsKKyAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50LmFjdGlvbicsICcnKTsKKworICAgICAgc2hv
dWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnKSIsICInVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0
b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMnIik7CisgICAgICBz
aG91bGRUaHJvdygibmV3IEludGVudCgnYScsJ2InLCdjJywnZCcpIiwgIidUeXBlRXJyb3I6IElu
dGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVy
cyciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCcnKSIsICInVHlwZUVy
cm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJ
bnRlbnQoJycsJ2InLCdjJykiLCAiJ1R5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSci
KTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCcnLCdjJykiLCAiJ1R5cGVFcnJv
cjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50
ZW50KCdhJywnJywnYycpIiwgIidUeXBlRXJyb3I6IFR5cGUgY2Fubm90IGJlIGVtcHR5JyIpOwor
CisgICAgICB2YXIgaW50ZW50MSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicpOworICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoImludGVudDEudHlwZSIsICJiIik7CisgICAgICBzaG91bGRCZU51bGwoImlu
dGVudDEuZGF0YSIpOworICAgICAgaW50ZW50MS5hY3Rpb24gPSAiYWJjIjsKKyAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS5hY3Rpb24iLCAiYSIpOworCisgICAgICB2YXIgaW50
ZW50MiA9IG5ldyBJbnRlbnQoImEiLCAiYiIsICJjIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2ludGVudDIuYWN0aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnaW50ZW50Mi50eXBlJywgImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50Mi5kYXRhJywgImMiKTsKKworICAgICAgdmFyIGludGVudDMgPSBuZXcgSW50ZW50KCJhIiwg
ImIiLCB7ImMiOiAiZCJ9KTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My5h
Y3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLnR5cGUn
LCAiYiIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLmRhdGEuYycsICJk
Iik7CisKKyAgICAgIHZhciBpbnRlbnQ0ID0gbmV3IEludGVudCgiYSIsICJiIiwgWyJjIiwgImQi
XSk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuYWN0aW9uJywgImEiKTsK
KyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC50eXBlJywgImIiKTsKKyAgICAg
IHNob3VsZEJlVHJ1ZSgnaW50ZW50NC5kYXRhIGluc3RhbmNlb2YgQXJyYXknKTsKKyAgICAgIHNo
b3VsZEV2YWx1YXRlVG8oJ2ludGVudDQuZGF0YS5sZW5ndGgnLCAyKTsKKyAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygnaW50ZW50NC5kYXRhWzBdJywgImMiKTsKKyAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygnaW50ZW50NC5kYXRhWzFdJywgImQiKTsKKworICAgICAgdmFyIGludGVudDUg
PSBuZXcgSW50ZW50KCJhIiwgImIiLCA0KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVu
dDUuZGF0YScsIDQpOworICAgICAgdmFyIGludGVudDYgPSBuZXcgSW50ZW50KCdhJywgJ2InLCA0
LjUpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50Ni5kYXRhJywgNC41KTsKKyAgICAg
IHZhciBpbnRlbnQ3ID0gbmV3IEludGVudCgnYScsICdiJywgdHJ1ZSk7CisgICAgICBzaG91bGRC
ZVRydWUoJ2ludGVudDcuZGF0YScpOworICAgICAgdmFyIGludGVudDggPSBuZXcgSW50ZW50KCdh
JywgJ2InLCBudWxsKTsKKyAgICAgIHNob3VsZEJlTnVsbCgnaW50ZW50OC5kYXRhJyk7CisgICAg
ICB2YXIgaW50ZW50OSA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHt9KTsKKyAgICAgIHNob3VsZEV2
YWx1YXRlVG8oJ2ludGVudDkuZGF0YScsIHt9KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121125</attachid>
            <date>2012-01-04 10:54:49 -0800</date>
            <delta_ts>2012-01-04 14:47:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20120104105447.patch</filename>
            <type>text/plain</type>
            <size>26510</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQzMWU3NTU1M2EwNWQx
YjBlNzAxY2Q4ODY4MDRmOTBmNDc1ZDg0Zi4uNDUzYWM3OGQzYzlmOWFiNjYzODZjZTc3OTUxMGI2
MzQxMTE2YWMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly93d3cuY2hy
b21pdW0ub3JnL2RldmVsb3BlcnMvZGVzaWduLWRvY3VtZW50cy93ZWJpbnRlbnRzYXBpCisgICAg
ICAgIGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50
ZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6Y29uc3Ry
dWN0b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6ZGF0YUFjY2Vzc29y
R2V0dGVyKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpJ
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjphY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZW50OjpzZXRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50Ojp0eXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlbnQ6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpzZXREYXRhKToKKyAg
ICAgICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZW50OjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRs
OiBBZGRlZC4KKwogMjAxMi0wMS0wMyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmViYXNlbGluZWQgcnVuLWJpbmRpbmdzLXRlc3Rz
IHJlc3VsdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDBlNGU4YzgzYjg3ZDIzYmY1
YzUwYjhlOTM3MDU2MjA5ZDgzOGFjZTAuLjcxMjRiNWRlN2VlMWNlNzhkYzg0MmU2N2UzYmM4Mjlj
ZWJhN2ExNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTEtMTEtMjMgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAg
W1dlYiBJbnRlbnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3JlIGltcGxlbWVudGF0aW9uIG9mIG5hdmln
YXRvci5zdGFydEFjdGl2aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMS0xMi0zMCAgQW1pIEZpc2NobWFuICA8
ZmlzY2htYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFsbG93IGRpc2FibGluZyBhY2NlbGVy
YXRlZCBjb21wb3NpdGluZyBpbiBXZWJNZWRpYVBsYXllckNsaWVudCAoc28gYXVkaW8tb25seSA8
dmlkZW8+IGlzbid0IGFjY2VsZXJhdGVkKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRz
L0ludGVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY2MWZlMDE5NzIwZWFmOWMyNTRiZWE2MjJiM2I1M2Ez
ZjRjYjgwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50
cy9JbnRlbnQuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW50ZW50LmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRlbnQ6OkludGVu
dChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKKyAgICA6IG1fYWN0aW9uKGFjdGlvbikKKyAgICAs
IG1fdHlwZSh0eXBlKQorICAgICwgbV9pZGVudGlmaWVyKDApCit7CisgICAgc2V0RGF0YShkYXRh
LmdldCgpKTsKK30KKworY29uc3QgU3RyaW5nJiBJbnRlbnQ6OmFjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fYWN0aW9uOworfQorCitjb25zdCBTdHJpbmcmIEludGVudDo6dHlwZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdHlwZTsKK30KKworU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJ
bnRlbnQ6OmRhdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7Cit9CisKK3Zv
aWQgSW50ZW50OjpzZXREYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSkKK3sKKyAgICBp
ZiAoZGF0YSkKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVG
cm9tV2lyZShkYXRhLT50b1dpcmVTdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBtX2RhdGEg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpOworfQorCitpbnQgSW50ZW50Ojpp
ZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pZGVudGlmaWVyOworfQorCit2b2lk
IEludGVudDo6c2V0SWRlbnRpZmllcihpbnQgaWQpCit7CisgICAgbV9pZGVudGlmaWVyID0gaWQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5U
RU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NGNjNTRjNjI5ZWQ4YzVlMTJhYmYzYTc2ZTQ4MTFmMzU3NjIwNGNjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEludGVudF9oCisjZGVmaW5lIEludGVudF9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVO
VFMpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworCit0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOworCitjbGFzcyBJbnRlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnQ+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFj
dGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gZGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlv
biwgdHlwZSwgZGF0YSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVudD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSkp
OworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uKCkgY29uc3Q7CisgICAgY29uc3Qg
U3RyaW5nJiB0eXBlKCkgY29uc3Q7CisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhKCkg
Y29uc3Q7CisKKyAgICBpbnQgaWRlbnRpZmllcigpIGNvbnN0OworICAgIHZvaWQgc2V0SWRlbnRp
ZmllcihpbnQpOworCitwcml2YXRlOgorICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0
YSk7CisKKyAgICB2b2lkIHNldERhdGEoU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CisKKyAgICBT
dHJpbmcgbV9hY3Rpb247CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBtX2RhdGE7CisgICAgaW50IG1faWRlbnRpZmllcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJbnRlbnRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWU3ZjE2YzE1
MDVjMjRiMjEyMDNjNDVjOTgyYTNjMTgxY2M2NjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKQEAgLTAsMCArMSwzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK21vZHVsZSB3aW5kb3cgeworICBpbnRlcmZhY2UgWworICAgICAgQ29uZGl0aW9uYWw9V0VC
X0lOVEVOVFMsCisgICAgICBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9MywKKyAgICAgIENvbnN0cnVj
dG9yKGluIERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9
Q2FsbFdpdGhOdWxsVmFsdWVdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhKSwKKyAgICAgIENv
bnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCisgIF0gSW50ZW50IHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JdIERPTVN0cmluZyBhY3Rpb247Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbSW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yXSBET01T
dHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtJbml0aWFsaXplZEJ5Q29u
c3RydWN0b3JdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhOworICB9OworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBlNzljNzk4YzEyNzE5OTM3MzFhYmE0OTZj
YzMyN2I0NWJiYmViNDZkLi42YTE4NzZhMGFmODdmZDc1Yzg5NjFjZmVhYWM4MTZmM2E5NTBlNGIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtNTEsNiArNTEsNyBA
QAogICAgICAgJy4uLycsCiAgICAgICAnLi4vLi4nLAogICAgICAgJy4uL01vZHVsZXMvZ2FtZXBh
ZCcsCisgICAgICAnLi4vTW9kdWxlcy9pbnRlbnRzJywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5
JywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5L2Nocm9taXVtJywKICAgICAgICcuLi9iaW5kaW5n
cycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggODMwNWZjZWQ4ZWFmNjMwOWY3ZTZiYzliZjc2MWIwMjFh
YzA0NDg4NS4uZWQ5MWExYzJmNWJlYjA4MjYxNjNjMDQyM2I0MGI1MWRlY2YxZTNjNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMTE0Nyw2ICsxMTQ3LDcgQEAKICAgICAgICAgJ3dlYmNvcmVfYmluZGlu
Z3NfaWRsX2ZpbGVzJzogWwogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmlk
bCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmlkbCcsCisgICAg
ICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9D
U1NDaGFyc2V0UnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRs
JywKICAgICAgICAgICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAtMTY5Miw2ICsxNjkz
LDggQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5oJywKICAgICAgICAg
ICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuY3BwJywKICAgICAgICAgICAgICdNb2R1
bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRz
L0ludGVudC5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCcsCiAg
ICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCcsCiAgICAgICAgICAg
ICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwJywKICAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oJywKQEAgLTIyNDEsNiArMjI0
NCw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50MTZBcnJheUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludDMyQXJyYXlDdXN0
b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnQ4QXJyYXlDdXN0
b20uY3BwJywKKyMgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SmF2YVNjcmlwdENhbGxG
cmFtZUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0
aW9uQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2Fn
ZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA1ZWJkNjIxZGVkZWJhMDc2MThlYjA5
YjJiMDcwZjAxNmEyNmI2NTA0Li5hYzZjODUwYTk4NDBkNTNjZmMxMTg2YzJkNDM2NWZiY2I1Nzk0
MmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQpAQCAtMTg3MSw3ICsxODcxLDcgQEAgc3ViIEdlbmVyYXRlU2luZ2xlQmF0Y2hl
ZEF0dHJpYnV0ZQogCiAgICAgIyBBdHRyaWJ1dGVzIG9mIHR5cGUgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIGFyZSBzZXQgaW4gdGhlCiAgICAgIyBjb25zdHJ1Y3RvciBhbmQgZG9uJ3QgcmVxdWlyZSBj
YWxsYmFja3MuCi0gICAgcmV0dXJuIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworIyAgICByZXR1cm4gaWYgKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAKICAgICBteSAkYWNj
ZXNzQ29udHJvbCA9ICJ2ODo6REVGQVVMVCI7CiAgICAgaWYgKCRhdHRyRXh0LT57IkRvTm90Q2hl
Y2tEb21haW5TZWN1cml0eU9uR2V0In0pIHsKQEAgLTIyMzgsNyArMjIzOCw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBkaWUgIk9ubHkgb25lIGF0dHJpYnV0ZSBv
ZiB0eXBlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdXBwb3J0ZWQiIGlmICRzZXJpYWxpemVkQXR0
cmlidXRlOwogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIik7CiAgICAgICAgICAgICAkc2VyaWFsaXplZEF0dHJpYnV0ZSA9ICRhdHRyaWJ1dGU7
Ci0gICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgIyBuZXh0OwogICAgICAgICB9CiAKICAg
ICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgYWNjZXNzb3IgaWYgdGhpcyBpcyBhIGN1c3RvbSBhdHRy
aWJ1dGUuICBUaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEludGVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhJbnRlbnRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NDg5ZGYzYzJhMWEwNjdiOGZlNDEyZjVj
NGYwNjYxNmJjODgyODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiVjhJbnRl
bnQuaCIKKworI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4UHJveHku
aCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkludGVudC5Db25zdHJ1
Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFz
IGEgZnVuY3Rpb24uIik7CisKKyAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpIHsKKyAgICAgICAgUmVm
UHRyPEludGVudD4gaW50ZW50ID0gSW50ZW50OjpjcmVhdGUoU3RyaW5nKCksIFN0cmluZygpLCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKKyAgICAgICAgVjhET01XcmFwcGVy
OjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBpbnRlbnQuZ2V0KCkpOworICAg
ICAgICByZXR1cm4gdG9WOChpbnRlbnQucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKKyAgICB9
CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAyKSB7CisgICAgICAgIFN0cmluZyBhY3Rpb24g
PSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1swXSk7CisgICAg
ICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNr
KGFyZ3NbMV0pOworCisgICAgICAgIGlmIChhY3Rpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIkFjdGlvbiBjYW5ub3QgYmUgZW1wdHkiKTsKKyAgICAgICAgaWYg
KHR5cGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlR5cGUgY2Fu
bm90IGJlIGVtcHR5Iik7CisKKyAgICAgICAgUmVmUHRyPEludGVudD4gaW50ZW50ID0gSW50ZW50
OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgp
KTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZp
bmZvLCBpbnRlbnQuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9WOChpbnRlbnQucmVsZWFzZSgp
LCBhcmdzLkhvbGRlcigpKTsKKyAgICB9CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAzKSB7
CisgICAgICAgIFN0cmluZyBhY3Rpb24gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZp
bmVkQ2hlY2soYXJnc1swXSk7CisgICAgICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMV0pOworCisgICAgICAgIGlmIChhY3Rpb24u
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkFjdGlvbiBjYW5ub3Qg
YmUgZW1wdHkiKTsKKyAgICAgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIlR5cGUgY2Fubm90IGJlIGVtcHR5Iik7CisKKyAgICAgICAgYm9vbCBl
eGNlcHRpb24gPSBmYWxzZTsKKyAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
ZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0sIDAsIDAsIGV4Y2Vw
dGlvbik7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiSW50ZW50IGNvbnN0cnVjdG9yIGRhdGEgbXVzdCBiZSBhIHN0cnVjdHVyZWQgY2xvbmUi
KTsKKworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbnRlbnQgPSBJbnRlbnQ6OmNyZWF0ZShhY3Rp
b24sIHR5cGUsIGRhdGEpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJn
cy5Ib2xkZXIoKSwgJmluZm8sIGludGVudC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGlu
dGVudC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAgIH0KKworICAgIHJldHVybiB0aHJv
d0Vycm9yKCJJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVl
IHBhcmFtZXRlcnMiKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50OjpkYXRh
QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCit7CisgICAgSW50ZW50KiBpbXBsID0gVjhJbnRlbnQ6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOworCisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZXJpYWxpemVk
VmFsdWUgPSBpbXBsLT5kYXRhKCk7CisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKKyAgICAgICAg
cmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoKTsKKworICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCAyZWM4ZDZh
NWIwNWU1NmRhMDFlYzNkMDQ3NzRhYzJhNjNkM2Y5MzYxLi4yY2ZjMzRmZTJkYjVkYjVkZjBjMDBl
MTcyMWY2YzViMDQ1MjFkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC02MTks
NiArNjE5LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0
UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tFdmVu
dDsKICNlbmRpZgogCisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFNd
IEludGVudENvbnN0cnVjdG9yIEludGVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRv
cgorCiAgICAgICAgIGF0dHJpYnV0ZSBET01QbHVnaW5Db25zdHJ1Y3RvciBQbHVnaW47CiAgICAg
ICAgIGF0dHJpYnV0ZSBET01QbHVnaW5BcnJheUNvbnN0cnVjdG9yIFBsdWdpbkFycmF5OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggZTdkOWZlYmM0MDk3ZDRiMmUxZTBl
MTE1OTA3ZTEyNzQ1MGU2MWQxYS4uOWQyZTA2MDQ3NTI2NjZlNzkwNTIxOTY0NGIwZDdlN2Y4MGVk
ODJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtMTU5LDYgKzE1OSwx
MSBAQAogICAgICAgICAgICdFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFORExFUj0xJywKICAg
ICAgICAgXSwKICAgICAgIH1dLAorICAgICAgWydlbmFibGVfd2ViX2ludGVudHM9PTEnLCB7Cisg
ICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCisgICAgICAgICAgJ0VOQUJMRV9XRUJfSU5URU5U
Uz0xJywKKyAgICAgICAgXSwKKyAgICAgIH1dLAogICAgICAgWydPUz09Im1hYyInLCB7CiAgICAg
ICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAgJ0VOQUJMRV9SVUJCRVJfQkFORElO
Rz0xJywKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggZDY0YTFkNmJmODI0NDc3N2JmNzEw
YzMzYzEwNjE3ZTllODZmNmE2NS4uZmJhZWZmYjk1ZmM2NDZkY2YyNmU5YWQyNGU4YWVlZjQyMmQw
NTZiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTE5MjcsNiArMTkyNyw5IEBAIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvCiAjIE1pY3JvZGF0YSBET00gQVBJIGlzIG5v
dCB5ZXQgZW5hYmxlZC4KIGZhc3QvZG9tL01pY3JvRGF0YQogCisjIFdlYiBJbnRlbnRzIGlzIG5v
dCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBs
ZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAw
OWI0YWRkZjUyN2M4YTRlMjY1OGE1YzViYTAyOTFmYmJhNWFiZThmLi44NWRjZmY1MTgwM2Y2ZWMw
NjA0NmRjOTZjNTExMzgzODEzMjAzZWQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAt
MTQzNSw2ICsxNDM1LDkgQEAgZmFzdC9mcmFtZXMvZmxhdHRlbmluZy9pZnJhbWUtZmxhdHRlbmlu
Zy1maXhlZC13aWR0aC1hbmQtaGVpZ2h0LW5vLXNjcm9sbGluZy5odG0KICMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjQ4CiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLXVuaWZpZWQtZW11bGF0aW9uLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVu
YWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQu
CiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggM2I5ODAzZGE4
NzBkMWY3OWJhMzk3MGY0YzM5NWJjYTYyNmRjMjZjZi4uZWVmYWY0OGI1YTM1YjRlYmNkYmM1ZTY4
Nzk1NDhhNzIzZjI3OTQ1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTQ4OCw2ICs0
ODgsOSBAQCBmYXN0L3JlcGFpbnQvdGFibGUtZXh0cmEtYm90dG9tLWdyb3cuaHRtbAogIyBEUlQg
ZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQog
ZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMg
V2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVy
IExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZAppbmRleCA3YTllMjkyYjc0NDJmYjZmZjJjZjI3MmZlZmZlYjRjMmMwODY5MGZlLi4x
MzQ2Yjk1OWI3Njg4MTc5YzhlYmQ2MzRhZDdiMWM5YjJhNGQ5ZDExIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L1NraXBwZWQKQEAgLTI0ODcsNiArMjQ4Nyw5IEBAIGNzczMvZmxleGJveC9saW5lLXdyYXBwaW5n
Lmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDkxCiBo
dHRwL3Rlc3RzL21pc2Mvb25sb2FkLXJlbW92ZS1pZnJhbWUtY3Jhc2gtMi5odG1sCiAKKyMgV2Vi
IEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExv
Y2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCmluZGV4IGVjYmUxOTFkY2ZiNTE4ZWY4NDI3NTRlZGZmNWQ4NWRkYWZmMTkyNGIuLjc4
YTg0MTA5NDE2OTI3MDAyNmE4ZmJjMWIyMDkxMWJjYTQ3MTNiY2YgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9Ta2lwcGVkCkBAIC0xNDgzLDYgKzE0ODMsOSBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVl
bGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJUIGRvZXNuJ3Qgc3Vw
cG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4dC9p
bnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRlbnRz
IGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5v
dCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJv
L1NraXBwZWQKaW5kZXggZWU3N2ExNzE0NGMyODkyY2E0MjQyY2JiYTZkNTQwZjgxN2Q3NjUzNy4u
NDgxNmQxMWExYzI2ZTE3ZjcyOTFhOGJlNTc2M2QyNjcyNDE0ZTc5NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0yMDIxLDYgKzIwMjEsOSBAQCBmYXN0L2V2ZW50cy9w
bGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJU
IGRvZXNuJ3Qgc3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikK
IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisj
IFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRl
ciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdjNzYzYmRlZjRiOTg1MjQ2NDlkYWFiYjAwZDQ4MTRhNTE0ZjU2YjQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzMiBAQAorUEFTUyBpbnRlbnQuYWN0aW9uIGlzICIiCitQQVNTIG5ldyBJ
bnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3Ig
bXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRl
bnQoJ2EnLCdiJywnYycsJ2QnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29u
c3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNT
IG5ldyBJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBj
YW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgn
JywnJywnYycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1w
dHkuCitQQVNTIG5ldyBJbnRlbnQoJ2EnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogVHlwZSBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFT
UyBpbnRlbnQxLnR5cGUgaXMgImIiCitQQVNTIGludGVudDEuZGF0YSBpcyBudWxsCitQQVNTIGlu
dGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQyLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50
ZW50Mi50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQyLmRhdGEgaXMgImMiCitQQVNTIGludGVudDMu
YWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQzLnR5cGUgaXMgImIiCitQQVNTIGludGVudDMuZGF0
YS5jIGlzICJkIgorUEFTUyBpbnRlbnQ0LmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50NC50eXBl
IGlzICJiIgorUEFTUyBpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheSBpcyB0cnVlCitQQVNT
IGludGVudDQuZGF0YS5sZW5ndGggaXMgMgorUEFTUyBpbnRlbnQ0LmRhdGFbMF0gaXMgImMiCitQ
QVNTIGludGVudDQuZGF0YVsxXSBpcyAiZCIKK1BBU1MgaW50ZW50NS5kYXRhIGlzIDQKK1BBU1Mg
aW50ZW50Ni5kYXRhIGlzIDQuNQorUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQorUEFTUyBpbnRl
bnQ4LmRhdGEgaXMgbnVsbAorUEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3QgT2JqZWN0XScg
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjljYmRjMDBiZGY0YTRkYmE4Yjg1NDVhZjUzZGE3Y2RhNTBkNTVhNTUKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC0w
LDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CisgICAgICAvLyBUT0RPKGdiaWxsb2NrKTogZWxpbWluYXRlIHRoaXMg
emVyby1hcmcgY2FzZS4KKyAgICAgIHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KCk7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudC5hY3Rpb24nLCAnJyk7CisKKyAgICAgIHNob3Vs
ZFRocm93KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogSW50ZW50IGNvbnN0cnVjdG9y
IG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyIpOworICAgICAgc2hv
dWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCdiJywnYycsJ2QnKSIsICInVHlwZUVycm9yOiBJbnRl
bnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMn
Iik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnJykiLCAiJ1R5cGVFcnJv
cjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50
ZW50KCcnLCdiJywnYycpIiwgIidUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHknIik7
CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnYycpIiwgIidUeXBlRXJyb3I6
IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVu
dCgnYScsJycsJ2MnKSIsICInVHlwZUVycm9yOiBUeXBlIGNhbm5vdCBiZSBlbXB0eSciKTsKKwor
ICAgICAgdmFyIGludGVudDEgPSBuZXcgSW50ZW50KCdhJywgJ2InKTsKKyAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiaW50ZW50MS5hY3Rpb24iLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJpbnRlbnQxLnR5cGUiLCAiYiIpOworICAgICAgc2hvdWxkQmVOdWxsKCJpbnRl
bnQxLmRhdGEiKTsKKyAgICAgIGludGVudDEuYWN0aW9uID0gImFiYyI7CisgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsKKworICAgICAgdmFyIGludGVu
dDIgPSBuZXcgSW50ZW50KCJhIiwgImIiLCAiYyIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdpbnRlbnQyLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDIudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVu
dDIuZGF0YScsICJjIik7CisKKyAgICAgIHZhciBpbnRlbnQzID0gbmV3IEludGVudCgiYSIsICJi
IiwgeyJjIjogImQifSk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDMuYWN0
aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My50eXBlJywg
ImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My5kYXRhLmMnLCAiZCIp
OworCisgICAgICB2YXIgaW50ZW50NCA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIFsiYyIsICJkIl0p
OworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmFjdGlvbicsICJhIik7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQudHlwZScsICJiIik7CisgICAgICBz
aG91bGRCZVRydWUoJ2ludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5Jyk7CisgICAgICBzaG91
bGRFdmFsdWF0ZVRvKCdpbnRlbnQ0LmRhdGEubGVuZ3RoJywgMik7CisgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVswXScsICJjIik7CisgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoJ2ludGVudDQuZGF0YVsxXScsICJkIik7CisKKyAgICAgIHZhciBpbnRlbnQ1ID0g
bmV3IEludGVudCgiYSIsICJiIiwgNCk7CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ1
LmRhdGEnLCA0KTsKKyAgICAgIHZhciBpbnRlbnQ2ID0gbmV3IEludGVudCgnYScsICdiJywgNC41
KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDYuZGF0YScsIDQuNSk7CisgICAgICB2
YXIgaW50ZW50NyA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHRydWUpOworICAgICAgc2hvdWxkQmVU
cnVlKCdpbnRlbnQ3LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ4ID0gbmV3IEludGVudCgnYScs
ICdiJywgbnVsbCk7CisgICAgICBzaG91bGRCZU51bGwoJ2ludGVudDguZGF0YScpOworICAgICAg
dmFyIGludGVudDkgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB7fSk7CisgICAgICBzaG91bGRFdmFs
dWF0ZVRvKCdpbnRlbnQ5LmRhdGEnLCB7fSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121158</attachid>
            <date>2012-01-04 14:47:53 -0800</date>
            <delta_ts>2012-01-05 00:57:53 -0800</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-73051-20120104144752.patch</filename>
            <type>text/plain</type>
            <size>19635</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDA0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAxLTA0ICBHcmVnIEJp
bGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVtZW50
YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly93d3cuY2hyb21p
dW0ub3JnL2RldmVsb3BlcnMvZGVzaWduLWRvY3VtZW50cy93ZWJpbnRlbnRzYXBpCisgICAgICAg
IGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6Y29uc3RydWN0
b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6ZGF0YUFjY2Vzc29yR2V0
dGVyKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpJbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjphY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZW50OjpzZXRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50Ojp0eXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlbnQ6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpzZXREYXRhKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZW50OjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsOiBB
ZGRlZC4KKwogMjAxMi0wMS0wNCAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJv
c3NhLm9yZz4KIAogICAgICAgICBTaGFyZSBmcmFjdGlvbmFsIHRpbWUgY29kZSBiZXR3ZWVuIEFu
aW1hdGlvbkJhc2UgYW5kIEtleWZyYW1lQW5pbWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiAxMDQwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTExNDcsNiArMTE0Nyw3IEBACiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX2lk
bF9maWxlcyc6IFsKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTQ2hh
cnNldFJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCcsCiAg
ICAgICAgICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTIsNiArMTY5Myw4IEBA
CiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRMaXN0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRl
bnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmgnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCcsCiAgICAgICAgICAgICAnYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisjaWYgRU5BQkxFKFdF
Ql9JTlRFTlRTKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
CisgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1faWRl
bnRpZmllcigwKQoreworICAgIHNldERhdGEoZGF0YS5nZXQoKSk7Cit9CisKK2NvbnN0IFN0cmlu
ZyYgSW50ZW50OjphY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2FjdGlvbjsKK30KKwor
Y29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGU7
Cit9CisKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSW50ZW50OjpkYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kYXRhLmdldCgpOworfQorCit2b2lkIEludGVudDo6c2V0RGF0YShTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgaWYgKGRhdGEpCisgICAgICAgIG1fZGF0YSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5n
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpu
dWxsVmFsdWUoKTsKK30KKworaW50IEludGVudDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faWRlbnRpZmllcjsKK30KKwordm9pZCBJbnRlbnQ6OnNldElkZW50aWZpZXIoaW50
IGlkKQoreworICAgIG1faWRlbnRpZmllciA9IGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIElu
Yy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbnRlbnRfaAorI2RlZmluZSBJbnRlbnRfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
KworY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5
cGUsIGRhdGEpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSgpIGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0
OworCisgICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZpZXIo
aW50KTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOwor
CisgICAgdm9pZCBzZXREYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOworCisgICAgU3RyaW5n
IG1fYWN0aW9uOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbV9kYXRhOworICAgIGludCBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50X2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBE
T01TdHJpbmcgYWN0aW9uLCBpbiBET01TdHJpbmcgdHlwZSwgaW4gW09wdGlvbmFsPUNhbGxXaXRo
TnVsbFZhbHVlXSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YSksCisgICAgICAgIENvbnN0cnVj
dG9yUmFpc2VzRXhjZXB0aW9uCisgICAgXSBJbnRlbnQgeworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGFjdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIGRhdGE7CisgICAgfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAgICAgICAnLi4v
JywKICAgICAgICcuLi8uLicsCiAgICAgICAnLi4vTW9kdWxlcy9nYW1lcGFkJywKKyAgICAgICcu
Li9Nb2R1bGVzL2ludGVudHMnLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHknLAogICAgICAgJy4u
L2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAogICAgICAgJy4uL2JpbmRpbmdzJywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDYgKzYwOSw4IEBA
IG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9d2Vi
a2l0VmlkZW9UcmFja10gVHJhY2tFdmVudENvbnN0cnVjdG9yIFRyYWNrRXZlbnQ7CiAjZW5kaWYK
IAorICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVdFQl9JTlRFTlRTXSBJbnRlbnRDb25z
dHJ1Y3RvciBJbnRlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKwogICAgICAg
ICBhdHRyaWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwogICAgICAgICBhdHRyaWJ1
dGUgRE9NUGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVnaW5BcnJheTsKIApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDEt
MDQgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1dlYiBJ
bnRlbnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3JlIGltcGxlbWVudGF0aW9uIG9mIG5hdmlnYXRvci5z
dGFydEFjdGl2aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMi0wMS0wNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRl
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZS11c2UgVGVzdFNoZWxsTGlu
dXguY3BwIGZvciBBbmRyb2lkCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVz
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBp
CShyZXZpc2lvbiAxMDQwNDMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgICdFTkFCTEVfV0VCR0w9
MScsCiAgICAgICAnRU5BQkxFX1dFQl9TT0NLRVRTPTEnLAogICAgICAgJ0VOQUJMRV9XRUJfVElN
SU5HPTEnLAorICAgICAgJ0VOQUJMRV9XRUJfSU5URU5UUz0xJywKICAgICAgICdFTkFCTEVfV09S
S0VSUz0xJywKICAgICAgICdFTkFCTEVfWEhSX1JFU1BPTlNFX0JMT0I9MScsCiAgICAgICAnRU5B
QkxFX1hTTFQ9MScsCkBAIC0xNTksNiArMTYwLDExIEBACiAgICAgICAgICAgJ0VOQUJMRV9SRUdJ
U1RFUl9QUk9UT0NPTF9IQU5ETEVSPTEnLAogICAgICAgICBdLAogICAgICAgfV0sCisgICAgICAj
IFsnZW5hYmxlX3dlYl9pbnRlbnRzPT0xJywgeworICAgICAgIyAgICdmZWF0dXJlX2RlZmluZXMn
OiBbCisgICAgICAjICAgICAnRU5BQkxFX1dFQl9JTlRFTlRTPTEnLAorICAgICAgIyAgIF0sCisg
ICAgICAjIH1dLAogICAgICAgWydPUz09Im1hYyInLCB7CiAgICAgICAgICdmZWF0dXJlX2RlZmlu
ZXMnOiBbCiAgICAgICAgICAgJ0VOQUJMRV9SVUJCRVJfQkFORElORz0xJywKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL2VmbC9Ta2lwcGVkCShyZXZpc2lvbiAxMDQwNDMpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9lZmwvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTkyNyw2ICsxOTI3LDkgQEAgaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS8KICMgTWljcm9kYXRhIERPTSBBUEkgaXMgbm90
IHlldCBlbmFibGVkLgogZmFzdC9kb20vTWljcm9EYXRhCiAKKyMgV2ViIEludGVudHMgaXMgbm90
IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxl
bWVudGVkLgogcG9pbnRlci1sb2NrLwogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAko
cmV2aXNpb24gMTA0MDQzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdv
cmtpbmcgY29weSkKQEAgLTE0MzUsNiArMTQzNSw5IEBAIGZhc3QvZnJhbWVzL2ZsYXR0ZW5pbmcv
aWZyYW1lLWZsYXR0ZW5pbmcKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyMjQ4CiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXVuaWZpZWQtZW11bGF0aW9uLmh0
bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAj
IFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiAxMDQwNDMpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCw5IEBA
IGZhc3QvcmVwYWludC90YWJsZS1leHRyYS1ib3R0b20tZ3Jvdy5odG0KICMgRFJUIGRvZXNuJ3Qg
c3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4
dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRl
bnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlz
IG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9T
a2lwcGVkCShyZXZpc2lvbiAxMDQwNDMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgzLDYgKzI0ODMsOSBAQCBjc3MzL2ZsZXhib3gvbGlu
ZS13cmFwcGluZy5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjQ5MQogaHR0cC90ZXN0cy9taXNjL29ubG9hZC1yZW1vdmUtaWZyYW1lLWNyYXNoLTIuaHRt
bAogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMg
UG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApJbmRleDog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDEwNDA0MykKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgzLDYgKzE0ODMsOSBA
QCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15CiAjIERSVCBkb2Vzbid0
IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3Rl
eHQvaW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50
ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBp
cyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vU2tpcHBlZAkocmV2aXNpb24gMTA0MDQzKQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjAyMSw2ICsyMDIxLDkg
QEAgZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteQogIyBEUlQgZG9lc24n
dCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90
ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIElu
dGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sg
aXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCkluZGV4OiBMYXlvdXRUZXN0cy93
ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACitQQVNTIGludGVudC5hY3Rpb24gaXMg
IiIKK1BBU1MgbmV3IEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludGVu
dCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVycy4K
K1BBU1MgbmV3IEludGVudCgnYScsJ2InLCdjJywnZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFy
YW1ldGVycy4KK1BBU1MgbmV3IEludGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnJywnYicsJ2Mn
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5LgorUEFT
UyBuZXcgSW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQWN0aW9u
IGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnYScsJycsJ2MnKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBUeXBlIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgaW50ZW50MS5hY3Rp
b24gaXMgImEiCitQQVNTIGludGVudDEudHlwZSBpcyAiYiIKK1BBU1MgaW50ZW50MS5kYXRhIGlz
IG51bGwKK1BBU1MgaW50ZW50MS5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDIuYWN0aW9uIGlz
ICJhIgorUEFTUyBpbnRlbnQyLnR5cGUgaXMgImIiCitQQVNTIGludGVudDIuZGF0YSBpcyAiYyIK
K1BBU1MgaW50ZW50My5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDMudHlwZSBpcyAiYiIKK1BB
U1MgaW50ZW50My5kYXRhLmMgaXMgImQiCitQQVNTIGludGVudDQuYWN0aW9uIGlzICJhIgorUEFT
UyBpbnRlbnQ0LnR5cGUgaXMgImIiCitQQVNTIGludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5
IGlzIHRydWUKK1BBU1MgaW50ZW50NC5kYXRhLmxlbmd0aCBpcyAyCitQQVNTIGludGVudDQuZGF0
YVswXSBpcyAiYyIKK1BBU1MgaW50ZW50NC5kYXRhWzFdIGlzICJkIgorUEFTUyBpbnRlbnQ1LmRh
dGEgaXMgNAorUEFTUyBpbnRlbnQ2LmRhdGEgaXMgNC41CitQQVNTIGludGVudDcuZGF0YSBpcyB0
cnVlCitQQVNTIGludGVudDguZGF0YSBpcyBudWxsCitQQVNTIGludGVudDkuZGF0YSA9PSAnW29i
amVjdCBPYmplY3RdJyBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50
cy1hcGkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAg
IHNob3VsZFRocm93KCJuZXcgSW50ZW50KCkiLCAiJ1R5cGVFcnJvcjogVHlwZSBjYW5ub3QgYmUg
ZW1wdHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnYScpIiwgIidUeXBlRXJy
b3I6IEludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFy
YW1ldGVycyciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdhJywnYicsJ2MnLCdk
JykiLCAiJ1R5cGVFcnJvcjogSW50ZW50IGNvbnN0cnVjdG9yIG11c3QgaGF2ZSB6ZXJvIG9yIHR3
byBvciB0aHJlZSBwYXJhbWV0ZXJzJyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQo
JycsJycsJycpIiwgIidUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHknIik7CisgICAg
ICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnYicsJ2MnKSIsICInVHlwZUVycm9yOiBBY3Rp
b24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycs
JycsJ2MnKSIsICInVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAg
c2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCcnLCdjJykiLCAiJ1R5cGVFcnJvcjogVHlwZSBj
YW5ub3QgYmUgZW1wdHknIik7CisKKyAgICAgIHZhciBpbnRlbnQxID0gbmV3IEludGVudCgnYScs
ICdiJyk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEi
KTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS50eXBlIiwgImIiKTsKKyAg
ICAgIHNob3VsZEJlTnVsbCgiaW50ZW50MS5kYXRhIik7CisgICAgICBpbnRlbnQxLmFjdGlvbiA9
ICJhYmMiOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJh
Iik7CisKKyAgICAgIHZhciBpbnRlbnQyID0gbmV3IEludGVudCgiYSIsICJiIiwgImMiKTsKKyAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50Mi5hY3Rpb24nLCAiYSIpOworICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLmRhdGEnLCAiYyIpOworCisgICAgICB2YXIgaW50ZW50
MyA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIHsiYyI6ICJkIn0pOworICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdpbnRlbnQzLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2ludGVudDMudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDMuZGF0YS5jJywgImQiKTsKKworICAgICAgdmFyIGludGVudDQgPSBuZXcgSW50ZW50
KCJhIiwgImIiLCBbImMiLCAiZCJdKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50NC5hY3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0
LnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVUcnVlKCdpbnRlbnQ0LmRhdGEgaW5zdGFuY2Vv
ZiBBcnJheScpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50NC5kYXRhLmxlbmd0aCcs
IDIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmRhdGFbMF0nLCAiYyIp
OworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmRhdGFbMV0nLCAiZCIpOwor
CisgICAgICB2YXIgaW50ZW50NSA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIDQpOworICAgICAgc2hv
dWxkRXZhbHVhdGVUbygnaW50ZW50NS5kYXRhJywgNCk7CisgICAgICB2YXIgaW50ZW50NiA9IG5l
dyBJbnRlbnQoJ2EnLCAnYicsIDQuNSk7CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ2
LmRhdGEnLCA0LjUpOworICAgICAgdmFyIGludGVudDcgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB0
cnVlKTsKKyAgICAgIHNob3VsZEJlVHJ1ZSgnaW50ZW50Ny5kYXRhJyk7CisgICAgICB2YXIgaW50
ZW50OCA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIG51bGwpOworICAgICAgc2hvdWxkQmVOdWxsKCdp
bnRlbnQ4LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ5ID0gbmV3IEludGVudCgnYScsICdiJywg
e30pOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50OS5kYXRhJywge30pOworPC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121233</attachid>
            <date>2012-01-05 00:57:59 -0800</date>
            <delta_ts>2012-01-05 15:14:37 -0800</delta_ts>
            <desc>Seems to work</desc>
            <filename>bug-73051-20120105005758.patch</filename>
            <type>text/plain</type>
            <size>37530</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDA0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAxLTA0ICBHcmVnIEJp
bGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVtZW50
YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly93d3cuY2hyb21p
dW0ub3JnL2RldmVsb3BlcnMvZGVzaWduLWRvY3VtZW50cy93ZWJpbnRlbnRzYXBpCisgICAgICAg
IGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6Y29uc3RydWN0
b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEludGVudDo6ZGF0YUFjY2Vzc29yR2V0
dGVyKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpJbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjphY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZW50OjpzZXRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50Ojp0eXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlbnQ6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpzZXREYXRhKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ludGVudHMvSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZW50OjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsOiBB
ZGRlZC4KKwogMjAxMi0wMS0wNCAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJv
c3NhLm9yZz4KIAogICAgICAgICBTaGFyZSBmcmFjdGlvbmFsIHRpbWUgY29kZSBiZXR3ZWVuIEFu
aW1hdGlvbkJhc2UgYW5kIEtleWZyYW1lQW5pbWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiAxMDQwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTExNDcsNiArMTE0Nyw3IEBACiAgICAgICAgICd3ZWJjb3JlX2JpbmRpbmdzX2lk
bF9maWxlcyc6IFsKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAorICAgICAgICAg
ICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTQ2hh
cnNldFJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCcsCiAg
ICAgICAgICAgICAnY3NzL0NTU0ltcG9ydFJ1bGUuaWRsJywKQEAgLTE2OTIsNiArMTY5Myw4IEBA
CiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaCcsCiAgICAgICAgICAgICAn
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRMaXN0LmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9n
YW1lcGFkL0dhbWVwYWRMaXN0LmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRl
bnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmgnLAogICAgICAg
ICAgICAgJ2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCcsCiAgICAgICAgICAgICAnYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5oIgorCisjaWYgRU5BQkxFKFdF
Ql9JTlRFTlRTKQorCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
CisgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1faWRl
bnRpZmllcigwKQoreworICAgIHNldERhdGEoZGF0YS5nZXQoKSk7Cit9CisKK2NvbnN0IFN0cmlu
ZyYgSW50ZW50OjphY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2FjdGlvbjsKK30KKwor
Y29uc3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGU7
Cit9CisKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSW50ZW50OjpkYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9kYXRhLmdldCgpOworfQorCit2b2lkIEludGVudDo6c2V0RGF0YShTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgaWYgKGRhdGEpCisgICAgICAgIG1fZGF0YSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5n
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpu
dWxsVmFsdWUoKTsKK30KKworaW50IEludGVudDo6aWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faWRlbnRpZmllcjsKK30KKwordm9pZCBJbnRlbnQ6OnNldElkZW50aWZpZXIoaW50
IGlkKQoreworICAgIG1faWRlbnRpZmllciA9IGlkOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIElu
Yy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJbnRlbnRfaAorI2RlZmluZSBJbnRlbnRfaAorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQor
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
KworY2xhc3MgSW50ZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW50ZW50PiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBhY3Rpb24s
IGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRh
dGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5
cGUsIGRhdGEpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChhY3Rpb24sIHR5cGUsIGRhdGEpKTsKKyAg
ICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSgpIGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0
OworCisgICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZpZXIo
aW50KTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOwor
CisgICAgdm9pZCBzZXREYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOworCisgICAgU3RyaW5n
IG1fYWN0aW9uOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gbV9kYXRhOworICAgIGludCBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50X2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBE
T01TdHJpbmcgYWN0aW9uLCBpbiBET01TdHJpbmcgdHlwZSwgaW4gW09wdGlvbmFsPUNhbGxXaXRo
TnVsbFZhbHVlXSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YSksCisgICAgICAgIENvbnN0cnVj
dG9yUmFpc2VzRXhjZXB0aW9uCisgICAgXSBJbnRlbnQgeworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIGFjdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIGRhdGE7CisgICAgfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAgICAgICAnLi4v
JywKICAgICAgICcuLi8uLicsCiAgICAgICAnLi4vTW9kdWxlcy9nYW1lcGFkJywKKyAgICAgICcu
Li9Nb2R1bGVzL2ludGVudHMnLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHknLAogICAgICAgJy4u
L2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAogICAgICAgJy4uL2JpbmRpbmdzJywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CShyZXZpc2lvbiAxMDQwNDMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCwyNiBAQCBzdWIg
R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZwogICAgIH0KIH0KIAorc3ViIEdlbmVyYXRlRWFnZXJE
ZXNlcmlhbGl6YXRpb24KK3sKKyAgICBteSAkc2VyaWFsaXplZEF0dHJpYnV0ZSA9IHNoaWZ0Owor
CisgICAgIyBFYWdlcmx5IGRlc2VyaWFsaXplIGF0dHJpYnV0ZXMgb2YgdHlwZSBTZXJpYWxpemVk
U2NyaXB0VmFsdWUgd2hpbGUgd2UncmUKKyAgICAjIGluIHRoZSByaWdodCBjb250ZXh0LgorCisg
ICAgZGllICJBdHRyaWJ1dGUgb2YgdHlwZSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZXhwZWN0ZWQi
IGlmICRzZXJpYWxpemVkQXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgbmUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSI7CisgICAgbXkgJGF0dHJOYW1lID0gJHNlcmlhbGl6ZWRBdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZTsKKyAgICBteSAkYXR0ckF0dHIgPSAidjg6OkRvbnREZWxldGUiOworICAg
IGlmICgkc2VyaWFsaXplZEF0dHJpYnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5LykgeworICAgICAg
ICAkYXR0ckF0dHIgLj0gIiB8IHY4OjpSZWFkT25seSI7CisgICAgfQorICAgICRhdHRyQXR0ciA9
ICJzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KCRhdHRyQXR0cikiOworICAgIG15
ICRnZXR0ZXJGdW5jID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGF0dHJOYW1lKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
ZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0eSh3cmFwcGVyLCAiJHthdHRyTmFtZX0iLCAke2F0dHJB
dHRyfSwgaW1wbC0+JHtnZXR0ZXJGdW5jfSgpKTsKK0VORAorfQorCiBzdWIgR2V0U1ZHUHJvcGVy
dHlUeXBlcwogewogICAgIG15ICRpbXBsVHlwZSA9IHNoaWZ0OwpAQCAtMTU2MSw2ICsxNTgxLDcg
QEAgc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsYmFjawogICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OwogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0g
c2hpZnQ7CisgICAgbXkgJHNlcmlhbGl6ZWRBdHRyaWJ1dGUgPSBzaGlmdDsKIAogICAgIG15ICRy
YWlzZXNFeGNlcHRpb25zID0gQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9OwogICAgIGlm
ICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2Vw
dGlvbiJ9KSB7CkBAIC0xNTg2LDYgKzE2MDcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgk
e2ltcGxDbGFzc05hbWV9CiAKICAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0g
Q29uc3RydWN0b3JNb2RlOjpXcmFwRXhpc3RpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBhcmdz
LkhvbGRlcigpOworCiBFTkQKIAogICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUFyZ3Vt
ZW50c0NvdW50Q2hlY2soJGZ1bmN0aW9uLCAkZGF0YU5vZGUpKTsKQEAgLTE2MjMsNyArMTY0NSw4
IEBAIEVORAogCiAgICAgbXkgJGFyZ3VtZW50U3RyaW5nID0gam9pbigiLCAiLCBAYmVmb3JlQXJn
dW1lbnRMaXN0LCBAYXJndW1lbnRMaXN0LCBAYWZ0ZXJBcmd1bWVudExpc3QpOwogICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8
JHtpbXBsQ2xhc3NOYW1lfT4gb2JqID0gJHtpbXBsQ2xhc3NOYW1lfTo6Y3JlYXRlKCR7YXJndW1l
bnRTdHJpbmd9KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwke2lt
cGxDbGFzc05hbWV9PiBpbXBsID0gJHtpbXBsQ2xhc3NOYW1lfTo6Y3JlYXRlKCR7YXJndW1lbnRT
dHJpbmd9KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7XG4iKTsKIAogICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25zdHJ1Y3RvclJhaXNlc0V4Y2VwdGlvbiJ9KSB7
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChlYylcbiIpOwpAQCAtMTYzMyw5
ICsxNjU2LDE0IEBAIEVORAogICAgIG15ICRET01PYmplY3QgPSAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJBY3RpdmVET01PYmplY3QifSA/ICJBY3RpdmVET01PYmplY3QiIDogIkRP
TU9iamVjdCI7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIAotICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmaW5mbywgb2JqLmdldCgpKTsKLSAg
ICBvYmotPnJlZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yJHtET01PYmpl
Y3R9KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRl
cigpKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBwZXIsICZpbmZvLCBp
bXBsLmdldCgpKTsKKyAgICBpbXBsLT5yZWYoKTsKK0VORAorICAgIGlmICgkc2VyaWFsaXplZEF0
dHJpYnV0ZSkgeworICAgICAgICBHZW5lcmF0ZUVhZ2VyRGVzZXJpYWxpemF0aW9uKCRzZXJpYWxp
emVkQXR0cmlidXRlKTsKKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAg
ICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvciR7RE9NT2JqZWN0fShpbXBsLmdldCgpLCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpKTsKICAgICByZXR1cm4gYXJn
cy5Ib2xkZXIoKTsKIEVORAogCkBAIC0xNzE1LDYgKzE3NDMsNyBAQCBzdWIgR2VuZXJhdGVOYW1l
ZENvbnN0cnVjdG9yQ2FsbGJhY2sKICAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKICAgICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15
ICRzZXJpYWxpemVkQXR0cmlidXRlID0gc2hpZnQ7CiAKICAgICBteSAkcmFpc2VzRXhjZXB0aW9u
cyA9IEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfTsKICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgewpAQCAt
MTc5Myw3ICsxODIyLDggQEAgRU5ECiAKICAgICBteSAkYXJndW1lbnRTdHJpbmcgPSBqb2luKCIs
ICIsIEBiZWZvcmVBcmd1bWVudExpc3QsIEBhcmd1bWVudExpc3QsIEBhZnRlckFyZ3VtZW50TGlz
dCk7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIFJlZlB0cjwke2ltcGxDbGFzc05hbWV9PiBvYmogPSAke2ltcGxDbGFzc05hbWV9Ojpj
cmVhdGVGb3JKU0NvbnN0cnVjdG9yKCR7YXJndW1lbnRTdHJpbmd9KTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFJlZlB0cjwke2ltcGxDbGFzc05hbWV9PiBpbXBsID0gJHtpbXBs
Q2xhc3NOYW1lfTo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcigke2FyZ3VtZW50U3RyaW5nfSk7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBhcmdzLkhvbGRlcigpO1xuIik7CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24ifSkgewogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoZWMpXG4iKTsKQEAgLTE4MTAsOSArMTg0MCwxNCBA
QCBFTkQKICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIAotICAgIFY4RE9N
V3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjgke2ltcGxDbGFzc05hbWV9
Q29uc3RydWN0b3I6OmluZm8sIG9iai5nZXQoKSk7Ci0gICAgb2JqLT5yZWYoKTsKLSAgICBWOERP
TVdyYXBwZXI6OnNldEpTV3JhcHBlckZvciR7RE9NT2JqZWN0fShvYmouZ2V0KCksIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOworICAgIFY4RE9NV3JhcHBl
cjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmVjgke2ltcGxDbGFzc05hbWV9Q29uc3RydWN0b3I6
OmluZm8sIGltcGwuZ2V0KCkpOworICAgIGltcGwtPnJlZigpOworRU5ECisgICAgaWYgKCRzZXJp
YWxpemVkQXR0cmlidXRlKSB7CisgICAgICAgIEdlbmVyYXRlRWFnZXJEZXNlcmlhbGl6YXRpb24o
JHNlcmlhbGl6ZWRBdHRyaWJ1dGUpOworICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxF
TkQpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yJHtET01PYmplY3R9KGltcGwu
Z2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOwogICAgIHJl
dHVybiBhcmdzLkhvbGRlcigpOwogRU5ECiAKQEAgLTI0MDksOSArMjQ0NCw5IEBAIEVORAogICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9IC8vIG5hbWVzcGFjZSAke2ludGVyZmFjZU5hbWV9
SW50ZXJuYWxcblxuIik7CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiTmFtZWRDb25zdHJ1Y3RvciJ9ICYmICEoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiVjhDdXN0b21Db25zdHJ1Y3RvciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbUNvbnN0cnVjdG9yIn0pKSB7Ci0gICAgICAgIEdlbmVyYXRlTmFtZWRDb25zdHJ1
Y3RvckNhbGxiYWNrKCRkYXRhTm9kZS0+Y29uc3RydWN0b3IsICRkYXRhTm9kZSwgJGludGVyZmFj
ZU5hbWUpOworICAgICAgICBHZW5lcmF0ZU5hbWVkQ29uc3RydWN0b3JDYWxsYmFjaygkZGF0YU5v
ZGUtPmNvbnN0cnVjdG9yLCAkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lLCAkc2VyaWFsaXplZEF0
dHJpYnV0ZSk7CiAgICAgfSBlbHNpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q29uc3RydWN0b3IifSAmJiAhKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlY4Q3Vz
dG9tQ29uc3RydWN0b3IifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21Db25zdHJ1Y3RvciJ9KSkgewotICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2so
JGRhdGFOb2RlLT5jb25zdHJ1Y3RvciwgJGRhdGFOb2RlLCAkaW50ZXJmYWNlTmFtZSk7CisgICAg
ICAgIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsYmFjaygkZGF0YU5vZGUtPmNvbnN0cnVjdG9yLCAk
ZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lLCAkc2VyaWFsaXplZEF0dHJpYnV0ZSk7CiAgICAgfSBl
bHNpZiAoSXNDb25zdHJ1Y3RvclRlbXBsYXRlKCRkYXRhTm9kZSwgIkV2ZW50IikpIHsKICAgICAg
ICAgR2VuZXJhdGVFdmVudENvbnN0cnVjdG9yQ2FsbGJhY2soJGRhdGFOb2RlLCAkaW50ZXJmYWNl
TmFtZSk7CiAgICAgfQpAQCAtMzA0NCwyMCArMzA3OSw4IEBAIEVORAogRU5ECiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJcbiAgICBpbXBsLT5yZWYoKTtcbiIpIGlmIElzUmVmUHRyVHlwZSgkaW50
ZXJmYWNlTmFtZSk7CiAKLSAgICAjIEVhZ2VybHkgZGVzZXJpYWxpemUgYXR0cmlidXRlcyBvZiB0
eXBlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQotICAgICMgd2hpbGUgd2UncmUgaW4gdGhlIHJpZ2h0
IGNvbnRleHQuCiAgICAgaWYgKCRzZXJpYWxpemVkQXR0cmlidXRlKSB7Ci0gICAgICAgIGRpZSAi
QXR0cmlidXRlIG9mIHR5cGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGV4cGVjdGVkIiBpZiAkc2Vy
aWFsaXplZEF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIG5lICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUiOwotICAgICAgICBteSAkYXR0ck5hbWUgPSAkc2VyaWFsaXplZEF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5uYW1lOwotICAgICAgICBteSAkYXR0ckF0dHIgPSAidjg6OkRvbnREZWxldGUiOwotICAg
ICAgICBpZiAoJHNlcmlhbGl6ZWRBdHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS8pIHsKLSAg
ICAgICAgICAgICRhdHRyQXR0ciAuPSAiIHwgdjg6OlJlYWRPbmx5IjsKLSAgICAgICAgfQotICAg
ICAgICAkYXR0ckF0dHIgPSAic3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPigkYXR0
ckF0dHIpIjsKLSAgICAgICAgbXkgJGdldHRlckZ1bmMgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNm
aXJzdCgkYXR0ck5hbWUpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAg
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemVBbmRTZXRQcm9wZXJ0eSh3cmFwcGVy
LCAiJHthdHRyTmFtZX0iLCAke2F0dHJBdHRyfSwgaW1wbC0+JHtnZXR0ZXJGdW5jfSgpKTsKLUVO
RAorICAgICAgICBHZW5lcmF0ZUVhZ2VyRGVzZXJpYWxpemF0aW9uKCRzZXJpYWxpemVkQXR0cmli
dXRlKTsKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbAkocmV2aXNp
b24gMTA0MDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiBtb2R1bGUgdGVzdCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0
aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yLAorICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01T
dHJpbmcgaGVsbG8sIGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSksCiAgICAgXSBUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIHsKICAgICAgICAgLy8gVGhlIGNhc2Ugb2Yg
YSBzaW5nbGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGF0dHJpYnV0ZSBpcyBhIGJpdCBvZiBhCiAg
ICAgICAgIC8vIHNwZWNpYWwgY2FzZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAxMDQwNDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMTEg
QEAKIAogI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgog
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNzksNiAr
ODIsMjcgQEAgYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhYwogICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZURlc2NyaXB0b3I8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4oZXhlYywgJkpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yVGFibGUsIHN0YXRpY19jYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yKj4ob2JqZWN0KSwgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3Ry
dWN0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvciog
anNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOworICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgY29uc3QgU3Ry
aW5nJiBoZWxsbyh1c3RyaW5nVG9TdHJpbmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywg
MCwgTWlzc2luZ0lzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiBNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMp
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDEsIE1pc3NpbmdJc1VuZGVmaW5lZCkpKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+
IG9iamVjdCA9IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZShoZWxs
bywgdmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVj
LCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOworfQorCitD
b25zdHJ1Y3RUeXBlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5
cGVIb3N0OworfQorCiAvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KIAogc3RhdGljIGNv
bnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZVRhYmxlVmFsdWVzW10gPQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkocmV2aXNpb24gMTA0MDQzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDggQEAgcHVi
bGljOgogICAgIH0KIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVt
ZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwor
ICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKEpTQzo6RXhlY1N0YXRlKik7CisgICAg
c3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6SlNDZWxsKiwg
SlNDOjpDb25zdHJ1Y3REYXRhJik7CiB9OwogCiAvLyBBdHRyaWJ1dGVzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTA0MDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw2ICsxMDQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0SW50ZXJmYWNlOjpj
CiAKICAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2Rl
OjpXcmFwRXhpc3RpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworCiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90
IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogCkBAIC0xMTUsMTMgKzEx
NiwxNCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0SW50ZXJmYWNlOjpjCiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVGVzdEludGVyZmFjZSBjb25z
dHJ1Y3RvcidzIGFzc29jaWF0ZWQgY29udGV4dCBpcyBub3QgYXZhaWxhYmxlIiwgVjhQcm94eTo6
UmVmZXJlbmNlRXJyb3IpOwogCi0gICAgUmVmUHRyPFRlc3RJbnRlcmZhY2U+IG9iaiA9IFRlc3RJ
bnRlcmZhY2U6OmNyZWF0ZShjb250ZXh0LCBzdHIxLCBzdHIyLCBlYyk7CisgICAgUmVmUHRyPFRl
c3RJbnRlcmZhY2U+IGltcGwgPSBUZXN0SW50ZXJmYWNlOjpjcmVhdGUoY29udGV4dCwgc3RyMSwg
c3RyMiwgZWMpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9s
ZGVyKCk7CiAgICAgaWYgKGVjKQogICAgICAgICBnb3RvIGZhaWw7CiAKLSAgICBWOERPTVdyYXBw
ZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJmluZm8sIG9iai5nZXQoKSk7Ci0gICAg
b2JqLT5yZWYoKTsKLSAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9i
amVjdChvYmouZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xk
ZXIoKSkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmaW5mbywg
aW1wbC5nZXQoKSk7CisgICAgaW1wbC0+cmVmKCk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dy
YXBwZXJGb3JBY3RpdmVET01PYmplY3QoaW1wbC5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD46Ok5ldyh3cmFwcGVyKSk7CiAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiAgIGZhaWw6
CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTA0MDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MSwxMyArNzEsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRl
c3ROYW1lZAogICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJh
bWV0ZXI8Piwgc3RyMiwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgTWlzc2luZ0lz
VW5kZWZpbmVkKSk7CiAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhW
OFBhcmFtZXRlcjw+LCBzdHIzLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBNaXNz
aW5nSXNFbXB0eSkpOwogCi0gICAgUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBvYmogPSBU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgc3Ry
MSwgc3RyMiwgc3RyMywgZWMpOworICAgIFJlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1w
bCA9IFRlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKGRvY3VtZW50
LCBzdHIxLCBzdHIyLCBzdHIzLCBlYyk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gYXJncy5Ib2xkZXIoKTsKICAgICBpZiAoZWMpCiAgICAgICAgIGdvdG8gZmFpbDsKIAot
ICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCAmVjhUZXN0TmFt
ZWRDb25zdHJ1Y3RvckNvbnN0cnVjdG9yOjppbmZvLCBvYmouZ2V0KCkpOwotICAgIG9iai0+cmVm
KCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qob2Jq
LmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJlY4VGVzdE5hbWVkQ29u
c3RydWN0b3JDb25zdHJ1Y3Rvcjo6aW5mbywgaW1wbC5nZXQoKSk7CisgICAgaW1wbC0+cmVmKCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3QoaW1wbC5n
ZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyKSk7CiAgICAgcmV0
dXJuIGFyZ3MuSG9sZGVyKCk7CiAgIGZhaWw6CiAgICAgcmV0dXJuIHRocm93RXJyb3IoZWMpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ4
LDExICsxNTQ4LDEzIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RPYmo6OmNvbnN0cnUK
ICAgICBpZiAoQ29uc3RydWN0b3JNb2RlOjpjdXJyZW50KCkgPT0gQ29uc3RydWN0b3JNb2RlOjpX
cmFwRXhpc3RpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogCi0gICAg
UmVmUHRyPFRlc3RPYmo+IG9iaiA9IFRlc3RPYmo6OmNyZWF0ZSgpOwogCi0gICAgVjhET01XcmFw
cGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBvYmouZ2V0KCkpOwotICAg
IG9iai0+cmVmKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
b2JqLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkp
KTsKKyAgICBSZWZQdHI8VGVzdE9iaj4gaW1wbCA9IFRlc3RPYmo6OmNyZWF0ZSgpOworICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisKKyAgICBWOERP
TVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOworICAg
IGltcGwtPnJlZigpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0
KGltcGwuZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcikpOwog
ICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTA0
MDQzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkg
KzIzLDExIEBACiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIp
CiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgogI2luY2x1ZGUgIlY4
QmluZGluZ1N0YXRlLmgiCiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhJ
c29sYXRlZENvbnRleHQuaCIKQEAgLTQyLDYgKzQ0LDM0IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiB2b2lkIFY4X1VTRShUKSB7IH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUludGVybmFsCiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLkNvbnN0cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXND
b25zdHJ1Y3RDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNv
bnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iLCBWOFByb3h5OjpUeXBl
RXJyb3IpOworCisgICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVj
dG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQorICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIo
KTsKKworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICBTVFJJ
TkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIGhlbGxvLCBN
QVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpKTsKKyAg
ICBib29sIHZhbHVlRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMV0sIDAs
IDAsIHZhbHVlRGlkVGhyb3cpOworICAgIGlmICh2YWx1ZURpZFRocm93KQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U+IGltcGwgPSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpj
cmVhdGUoaGVsbG8sIHZhbHVlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBhcmdzLkhvbGRlcigpOworCisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHdyYXBw
ZXIsICZpbmZvLCBpbXBsLmdldCgpKTsKKyAgICBpbXBsLT5yZWYoKTsKKyAgICBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplQW5kU2V0UHJvcGVydHkod3JhcHBlciwgInZhbHVlIiwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9udERlbGV0ZSB8IHY4OjpS
ZWFkT25seSksIGltcGwtPnZhbHVlKCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVy
Rm9yRE9NT2JqZWN0KGltcGwuZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXco
d3JhcHBlcikpOworICAgIHJldHVybiBhcmdzLkhvbGRlcigpOworfQorCiBzdGF0aWMgdjg6OlBl
cnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBkZXNjKQogewogICAgIGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7CkBAIC01MSw2
ICs4MSw3IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGEKICAgICAg
ICAgMCwgMCwKICAgICAgICAgMCwgMCk7CiAgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1
cmUpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAgIGRlc2MtPlNl
dENhbGxIYW5kbGVyKFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3Ry
dWN0b3JDYWxsYmFjayk7CiAgICAgCiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmgJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgaW5saW5lIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSopOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMg
V3JhcHBlclR5cGVJbmZvIGluZm87CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKICAgICBzdGF0aWMgY29u
c3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxk
Q291bnQgKyAwOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGV4aXN0aW5nV3Jh
cHBlcihUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDYgKzYwOSw4IEBAIG1v
ZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9d2Via2l0
VmlkZW9UcmFja10gVHJhY2tFdmVudENvbnN0cnVjdG9yIFRyYWNrRXZlbnQ7CiAjZW5kaWYKIAor
ICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVdFQl9JTlRFTlRTXSBJbnRlbnRDb25zdHJ1
Y3RvciBJbnRlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKwogICAgICAgICBh
dHRyaWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwogICAgICAgICBhdHRyaWJ1dGUg
RE9NUGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVnaW5BcnJheTsKIApJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDA0MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDEtMDQg
IEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1dlYiBJbnRl
bnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3JlIGltcGxlbWVudGF0aW9uIG9mIG5hdmlnYXRvci5zdGFy
dEFjdGl2aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMi0wMS0wNCAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZS11c2UgVGVzdFNoZWxsTGludXgu
Y3BwIGZvciBBbmRyb2lkCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShy
ZXZpc2lvbiAxMDQwNDMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgICdFTkFCTEVfV0VCR0w9MScs
CiAgICAgICAnRU5BQkxFX1dFQl9TT0NLRVRTPTEnLAogICAgICAgJ0VOQUJMRV9XRUJfVElNSU5H
PTEnLAorICAgICAgJ0VOQUJMRV9XRUJfSU5URU5UUz0xJywKICAgICAgICdFTkFCTEVfV09SS0VS
Uz0xJywKICAgICAgICdFTkFCTEVfWEhSX1JFU1BPTlNFX0JMT0I9MScsCiAgICAgICAnRU5BQkxF
X1hTTFQ9MScsCkBAIC0xNTksNiArMTYwLDExIEBACiAgICAgICAgICAgJ0VOQUJMRV9SRUdJU1RF
Ul9QUk9UT0NPTF9IQU5ETEVSPTEnLAogICAgICAgICBdLAogICAgICAgfV0sCisgICAgICAjIFsn
ZW5hYmxlX3dlYl9pbnRlbnRzPT0xJywgeworICAgICAgIyAgICdmZWF0dXJlX2RlZmluZXMnOiBb
CisgICAgICAjICAgICAnRU5BQkxFX1dFQl9JTlRFTlRTPTEnLAorICAgICAgIyAgIF0sCisgICAg
ICAjIH1dLAogICAgICAgWydPUz09Im1hYyInLCB7CiAgICAgICAgICdmZWF0dXJlX2RlZmluZXMn
OiBbCiAgICAgICAgICAgJ0VOQUJMRV9SVUJCRVJfQkFORElORz0xJywKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL2VmbC9Ta2lwcGVkCShyZXZpc2lvbiAxMDQwNDMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMTkyNyw2ICsxOTI3LDkgQEAgaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS8KICMgTWljcm9kYXRhIERPTSBBUEkgaXMgbm90IHll
dCBlbmFibGVkLgogZmFzdC9kb20vTWljcm9EYXRhCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHll
dCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVu
dGVkLgogcG9pbnRlci1sb2NrLwogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAkocmV2
aXNpb24gMTA0MDQzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzUsNiArMTQzNSw5IEBAIGZhc3QvZnJhbWVzL2ZsYXR0ZW5pbmcvaWZy
YW1lLWZsYXR0ZW5pbmcKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyMjQ4CiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLXVuaWZpZWQtZW11bGF0aW9uLmh0bWwK
IAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBv
aW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiAxMDQwNDMpCisrKyBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDYgKzQ4OCw5IEBAIGZh
c3QvcmVwYWludC90YWJsZS1leHRyYS1ib3R0b20tZ3Jvdy5odG0KICMgRFJUIGRvZXNuJ3Qgc3Vw
cG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4dC9p
bnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRlbnRz
IGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5v
dCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvU2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkCShyZXZpc2lvbiAxMDQwNDMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDgzLDYgKzI0ODMsOSBAQCBjc3MzL2ZsZXhib3gvbGluZS13
cmFwcGluZy5odG1sCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MjQ5MQogaHR0cC90ZXN0cy9taXNjL29ubG9hZC1yZW1vdmUtaWZyYW1lLWNyYXNoLTIuaHRtbAog
CisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9p
bnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luL1NraXBwZWQJKHJldmlzaW9uIDEwNDA0MykKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgzLDYgKzE0ODMsOSBAQCBm
YXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15CiAjIERSVCBkb2Vzbid0IHN1
cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3RleHQv
aW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50ZW50
cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBu
b3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL3dpbmNhaXJvL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luY2Fpcm8vU2tpcHBlZAkocmV2aXNpb24gMTA0MDQzKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjAyMSw2ICsyMDIxLDkgQEAg
ZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteQogIyBEUlQgZG9lc24ndCBz
dXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0
L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIEludGVu
dHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMg
bm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJp
bnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACitQQVNTIGludGVudC5hY3Rpb24gaXMgIiIK
K1BBU1MgbmV3IEludGVudCgnYScpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEludGVudCBj
b25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVycy4KK1BB
U1MgbmV3IEludGVudCgnYScsJ2InLCdjJywnZCcpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IEludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1l
dGVycy4KK1BBU1MgbmV3IEludGVudCgnJywnJywnJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnJywnYicsJ2MnKSB0
aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5LgorUEFTUyBu
ZXcgSW50ZW50KCcnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQWN0aW9uIGNh
bm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnYScsJycsJ2MnKSB0aHJldyBleGNlcHRp
b24gVHlwZUVycm9yOiBUeXBlIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgaW50ZW50MS5hY3Rpb24g
aXMgImEiCitQQVNTIGludGVudDEudHlwZSBpcyAiYiIKK1BBU1MgaW50ZW50MS5kYXRhIGlzIG51
bGwKK1BBU1MgaW50ZW50MS5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDIuYWN0aW9uIGlzICJh
IgorUEFTUyBpbnRlbnQyLnR5cGUgaXMgImIiCitQQVNTIGludGVudDIuZGF0YSBpcyAiYyIKK1BB
U1MgaW50ZW50My5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDMudHlwZSBpcyAiYiIKK1BBU1Mg
aW50ZW50My5kYXRhLmMgaXMgImQiCitQQVNTIGludGVudDQuYWN0aW9uIGlzICJhIgorUEFTUyBp
bnRlbnQ0LnR5cGUgaXMgImIiCitQQVNTIGludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5IGlz
IHRydWUKK1BBU1MgaW50ZW50NC5kYXRhLmxlbmd0aCBpcyAyCitQQVNTIGludGVudDQuZGF0YVsw
XSBpcyAiYyIKK1BBU1MgaW50ZW50NC5kYXRhWzFdIGlzICJkIgorUEFTUyBpbnRlbnQ1LmRhdGEg
aXMgNAorUEFTUyBpbnRlbnQ2LmRhdGEgaXMgNC41CitQQVNTIGludGVudDcuZGF0YSBpcyB0cnVl
CitQQVNTIGludGVudDguZGF0YSBpcyBudWxsCitQQVNTIGludGVudDkuZGF0YSA9PSAnW29iamVj
dCBPYmplY3RdJyBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1h
cGkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LWFwaS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50
ZW50cy1hcGkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgIHNo
b3VsZFRocm93KCJuZXcgSW50ZW50KCkiLCAiJ1R5cGVFcnJvcjogVHlwZSBjYW5ub3QgYmUgZW1w
dHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6
IEludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhhdmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1l
dGVycyciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdhJywnYicsJ2MnLCdkJyki
LCAiJ1R5cGVFcnJvcjogSW50ZW50IGNvbnN0cnVjdG9yIG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBv
ciB0aHJlZSBwYXJhbWV0ZXJzJyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycs
JycsJycpIiwgIidUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHknIik7CisgICAgICBz
aG91bGRUaHJvdygibmV3IEludGVudCgnJywnYicsJ2MnKSIsICInVHlwZUVycm9yOiBBY3Rpb24g
Y2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJycs
J2MnKSIsICInVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hv
dWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCcnLCdjJykiLCAiJ1R5cGVFcnJvcjogVHlwZSBjYW5u
b3QgYmUgZW1wdHknIik7CisKKyAgICAgIHZhciBpbnRlbnQxID0gbmV3IEludGVudCgnYScsICdi
Jyk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsK
KyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS50eXBlIiwgImIiKTsKKyAgICAg
IHNob3VsZEJlTnVsbCgiaW50ZW50MS5kYXRhIik7CisgICAgICBpbnRlbnQxLmFjdGlvbiA9ICJh
YmMiOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7
CisKKyAgICAgIHZhciBpbnRlbnQyID0gbmV3IEludGVudCgiYSIsICJiIiwgImMiKTsKKyAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50Mi5hY3Rpb24nLCAiYSIpOworICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdpbnRlbnQyLmRhdGEnLCAiYyIpOworCisgICAgICB2YXIgaW50ZW50MyA9
IG5ldyBJbnRlbnQoImEiLCAiYiIsIHsiYyI6ICJkIn0pOworICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdpbnRlbnQzLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ2ludGVudDMudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2lu
dGVudDMuZGF0YS5jJywgImQiKTsKKworICAgICAgdmFyIGludGVudDQgPSBuZXcgSW50ZW50KCJh
IiwgImIiLCBbImMiLCAiZCJdKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50
NC5hY3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LnR5
cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVUcnVlKCdpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBB
cnJheScpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50NC5kYXRhLmxlbmd0aCcsIDIp
OworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmRhdGFbMF0nLCAiYyIpOwor
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmRhdGFbMV0nLCAiZCIpOworCisg
ICAgICB2YXIgaW50ZW50NSA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIDQpOworICAgICAgc2hvdWxk
RXZhbHVhdGVUbygnaW50ZW50NS5kYXRhJywgNCk7CisgICAgICB2YXIgaW50ZW50NiA9IG5ldyBJ
bnRlbnQoJ2EnLCAnYicsIDQuNSk7CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ2LmRh
dGEnLCA0LjUpOworICAgICAgdmFyIGludGVudDcgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB0cnVl
KTsKKyAgICAgIHNob3VsZEJlVHJ1ZSgnaW50ZW50Ny5kYXRhJyk7CisgICAgICB2YXIgaW50ZW50
OCA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIG51bGwpOworICAgICAgc2hvdWxkQmVOdWxsKCdpbnRl
bnQ4LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ5ID0gbmV3IEludGVudCgnYScsICdiJywge30p
OworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50OS5kYXRhJywge30pOworPC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121343</attachid>
            <date>2012-01-05 15:14:43 -0800</date>
            <delta_ts>2012-01-05 15:52:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20120105151442.patch</filename>
            <type>text/plain</type>
            <size>21449</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBjYTAyZmRkM2M3Nzdh
Mjk3YTZkY2MzMTQzN2QwZThiM2U0NGM0My4uNDFiZTEyYTg5MGNjYmVlZGQxODhhMDZiNzM0MWI4
ZDI1MjlkNzZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly9kdmNzLncz
Lm9yZy9oZy93ZWItaW50ZW50cy9yYXctZmlsZS90aXAvc3BlYy9PdmVydmlldy5odG1sCisgICAg
ICAgIGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6SW50ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6dHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50
OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0RGF0YSk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbDogQWRkZWQuCisKIDIwMTItMDEtMDQgIElnb3IgT2xpdmVpcmEgIDxpZ29y
Lm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgU2hhcmUgZnJhY3Rpb25hbCB0aW1l
IGNvZGUgYmV0d2VlbiBBbmltYXRpb25CYXNlIGFuZCBLZXlmcmFtZUFuaW1hdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA0YjRkYzRkNjNhMTU5ODdjYTM2OTRiYzA3NWM3ZjViMDIz
MWQzNzUzLi44N2Y4NjIzMDhlMmI5Nzg4ZGIwM2M5NmUzYjUxODNmOGNmY2U3ZWE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTExLTIzICBHcmVnIEJp
bGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFtXZWIgSW50ZW50c10gRmxh
Z2dlZC1vZmYgV2ViQ29yZSBpbXBsZW1lbnRhdGlvbiBvZiBuYXZpZ2F0b3Iuc3RhcnRBY3Rpdml0
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzMwNTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZlYXR1
cmVzLmd5cGk6CisKIDIwMTItMDEtMDMgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQnlwYXNzIHRoZSBzaGFkb3cgdGV4dHVy
ZSBjb3B5IGZvciBhY2NlbGVyYXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbnRlbnRzL0ludGVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jYzhlMWUyZDljMjYyOTljNTg1NGMzNjQ1MjhjMWIxODRlMjE2
ODEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0lu
dGVudC5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRl
bnQuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5n
JiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChhY3Rpb24uaXNFbXB0
eSgpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIGlmICh0eXBlLmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZW50
KGFjdGlvbiwgdHlwZSwgZGF0YSkpOworfQorCitJbnRlbnQ6OkludGVudChjb25zdCBTdHJpbmcm
IGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZGF0YSkKKyAgICA6IG1fYWN0aW9uKGFjdGlvbikKKyAgICAsIG1fdHlwZSh0eXBlKQor
ICAgICwgbV9pZGVudGlmaWVyKDApCit7CisgICAgc2V0RGF0YShkYXRhLmdldCgpKTsKK30KKwor
Y29uc3QgU3RyaW5nJiBJbnRlbnQ6OmFjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWN0
aW9uOworfQorCitjb25zdCBTdHJpbmcmIEludGVudDo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdHlwZTsKK30KKworU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBJbnRlbnQ6OmRhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RhdGEuZ2V0KCk7Cit9CisKK3ZvaWQgSW50ZW50OjpzZXRE
YXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSkKK3sKKyAgICBpZiAoZGF0YSkKKyAgICAg
ICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShkYXRhLT50
b1dpcmVTdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBtX2RhdGEgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6Om51bGxWYWx1ZSgpOworfQorCitpbnQgSW50ZW50OjppZGVudGlmaWVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pZGVudGlmaWVyOworfQorCit2b2lkIEludGVudDo6c2V0SWRl
bnRpZmllcihpbnQgaWQpCit7CisgICAgbV9pZGVudGlmaWVyID0gaWQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2ExZjU4ZDFiMGQxN2Uy
Y2IyNzVjMmM3OWMzYjg3NzcwYTAwNDNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2ds
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEludGVudF9o
CisjZGVmaW5lIEludGVudF9oCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBJ
bnRlbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnRlbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnRlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgY29uc3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdDsKKyAgICBjb25z
dCBTdHJpbmcmIHR5cGUoKSBjb25zdDsKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEo
KSBjb25zdDsKKworICAgIGludCBpZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJZGVu
dGlmaWVyKGludCk7CisKK3ByaXZhdGU6CisgICAgSW50ZW50KGNvbnN0IFN0cmluZyYgYWN0aW9u
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBk
YXRhKTsKKworICAgIHZvaWQgc2V0RGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsKKworICAg
IFN0cmluZyBtX2FjdGlvbjsKKyAgICBTdHJpbmcgbV90eXBlOworICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IG1fZGF0YTsKKyAgICBpbnQgbV9pZGVudGlmaWVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIEludGVudF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhZTdmMTZj
MTUwNWMyNGIyMTIwM2M0NWM5ODJhM2MxODFjYzY2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbApAQCAtMCwwICsxLDM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworbW9kdWxlIHdpbmRvdyB7CisgIGludGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1X
RUJfSU5URU5UUywKKyAgICAgIENvbnN0cnVjdG9yUGFyYW1ldGVycz0zLAorICAgICAgQ29uc3Ry
dWN0b3IoaW4gRE9NU3RyaW5nIGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtPcHRpb25h
bD1DYWxsV2l0aE51bGxWYWx1ZV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEpLAorICAgICAg
Q29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24KKyAgXSBJbnRlbnQgeworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgW0luaXRpYWxpemVkQnlDb25zdHJ1Y3Rvcl0gRE9NU3RyaW5nIGFjdGlvbjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JdIERP
TVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0luaXRpYWxpemVkQnlD
b25zdHJ1Y3Rvcl0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGE7CisgIH07Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3OWM3OThjMTI3MTk5MzczMWFiYTQ5
NmNjMzI3YjQ1YmJiZWI0NmQuLjZhMTg3NmEwYWY4N2ZkNzVjODk2MWNmZWFhYzgxNmYzYTk1MGU0
YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC01MSw2ICs1MSw3
IEBACiAgICAgICAnLi4vJywKICAgICAgICcuLi8uLicsCiAgICAgICAnLi4vTW9kdWxlcy9nYW1l
cGFkJywKKyAgICAgICcuLi9Nb2R1bGVzL2ludGVudHMnLAogICAgICAgJy4uL2FjY2Vzc2liaWxp
dHknLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAogICAgICAgJy4uL2JpbmRp
bmdzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4MzA1ZmNlZDhlYWY2MzA5ZjdlNmJjOWJmNzYxYjAy
MWFjMDQ0ODg1Li4yMWY0OWU2OTdmYWFhNGRkMmUyMGQxNjZjMDYwMzFjY2E2YzE0YTVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC0xMTQ3LDYgKzExNDcsNyBAQAogICAgICAgICAnd2ViY29yZV9iaW5k
aW5nc19pZGxfZmlsZXMnOiBbCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQu
aWRsJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaWRsJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCcsCiAgICAgICAgICAgICAnY3Nz
L0NTU0NoYXJzZXRSdWxlLmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0ZvbnRGYWNlUnVsZS5p
ZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NJbXBvcnRSdWxlLmlkbCcsCkBAIC0xNjkyLDYgKzE2
OTMsOCBAQAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5jcHAnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oJywK
ICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwJywKICAgICAgICAg
ICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAnLAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA1ZWJk
NjIxZGVkZWJhMDc2MThlYjA5YjJiMDcwZjAxNmEyNmI2NTA0Li5hYzZjODUwYTk4NDBkNTNjZmMx
MTg2YzJkNDM2NWZiY2I1Nzk0MmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMTg3MSw3ICsxODcxLDcgQEAgc3ViIEdl
bmVyYXRlU2luZ2xlQmF0Y2hlZEF0dHJpYnV0ZQogCiAgICAgIyBBdHRyaWJ1dGVzIG9mIHR5cGUg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIGFyZSBzZXQgaW4gdGhlCiAgICAgIyBjb25zdHJ1Y3RvciBh
bmQgZG9uJ3QgcmVxdWlyZSBjYWxsYmFja3MuCi0gICAgcmV0dXJuIGlmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpOworIyAgICByZXR1cm4g
aWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
Iik7CiAKICAgICBteSAkYWNjZXNzQ29udHJvbCA9ICJ2ODo6REVGQVVMVCI7CiAgICAgaWYgKCRh
dHRyRXh0LT57IkRvTm90Q2hlY2tEb21haW5TZWN1cml0eU9uR2V0In0pIHsKQEAgLTIyMzgsNyAr
MjIzOCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBkaWUgIk9u
bHkgb25lIGF0dHJpYnV0ZSBvZiB0eXBlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzdXBwb3J0ZWQi
IGlmICRzZXJpYWxpemVkQXR0cmlidXRlOwogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIik7CiAgICAgICAgICAgICAkc2VyaWFsaXplZEF0dHJp
YnV0ZSA9ICRhdHRyaWJ1dGU7Ci0gICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgIyBuZXh0
OwogICAgICAgICB9CiAKICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgYWNjZXNzb3IgaWYgdGhp
cyBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuICBUaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApp
bmRleCBiNjVmNDJjNzk3ZTkyMDBiNjM2ODg0YmI2MzQ3ZmNkYTM4ODc2OTIxLi4wZmVjZjBhNWFm
Y2RiYjYxOTNmMjE1ODJhNjI5ZGVlYjcxYmQxZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsCkBAIC02MDksNiArNjA5LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0
ZSBbRW5hYmxlZEF0UnVudGltZT13ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3RydWN0
b3IgVHJhY2tFdmVudDsKICNlbmRpZgogCisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9
V0VCX0lOVEVOVFNdIEludGVudENvbnN0cnVjdG9yIEludGVudDsgLy8gVXNhYmxlIHdpdGggdGhl
IG5ldyBvcGVyYXRvcgorCiAgICAgICAgIGF0dHJpYnV0ZSBET01QbHVnaW5Db25zdHJ1Y3RvciBQ
bHVnaW47CiAgICAgICAgIGF0dHJpYnV0ZSBET01QbHVnaW5BcnJheUNvbnN0cnVjdG9yIFBsdWdp
bkFycmF5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5
cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggZTdkOWZlYmM0
MDk3ZDRiMmUxZTBlMTE1OTA3ZTEyNzQ1MGU2MWQxYS4uOWQyZTA2MDQ3NTI2NjZlNzkwNTIxOTY0
NGIwZDdlN2Y4MGVkODJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0
dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAt
MTU5LDYgKzE1OSwxMSBAQAogICAgICAgICAgICdFTkFCTEVfUkVHSVNURVJfUFJPVE9DT0xfSEFO
RExFUj0xJywKICAgICAgICAgXSwKICAgICAgIH1dLAorICAgICAgWydlbmFibGVfd2ViX2ludGVu
dHM9PTEnLCB7CisgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCisgICAgICAgICAgJ0VOQUJM
RV9XRUJfSU5URU5UUz0xJywKKyAgICAgICAgXSwKKyAgICAgIH1dLAogICAgICAgWydPUz09Im1h
YyInLCB7CiAgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAgJ0VOQUJMRV9S
VUJCRVJfQkFORElORz0xJywKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggZDY0YTFkNmJm
ODI0NDc3N2JmNzEwYzMzYzEwNjE3ZTllODZmNmE2NS4uZmJhZWZmYjk1ZmM2NDZkY2YyNmU5YWQy
NGU4YWVlZjQyMmQwNTZiMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTE5MjcsNiAr
MTkyNyw5IEBAIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvCiAjIE1pY3JvZGF0YSBE
T00gQVBJIGlzIG5vdCB5ZXQgZW5hYmxlZC4KIGZhc3QvZG9tL01pY3JvRGF0YQogCisjIFdlYiBJ
bnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2Nr
IGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAppbmRleCA0NjgyYWZlZjM0MmIxZWZiZmM1NDhiY2Q0ODIyMGU1NzliOTBlMDU5Li4yMzEz
MDRkMTUxMDYwZTRjYjgyNjI5YjBiNWFjM2FiZmFhNjE2OGMyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZApAQCAtMTQzNSw2ICsxNDM1LDkgQEAgZmFzdC9mcmFtZXMvZmxhdHRlbmluZy9pZnJh
bWUtZmxhdHRlbmluZy1maXhlZC13aWR0aC1hbmQtaGVpZ2h0LW5vLXNjcm9sbGluZy5odG0KICMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjQ4CiBlZGl0aW5nL3Nw
ZWxsaW5nL3NwZWxsaW5nLXVuaWZpZWQtZW11bGF0aW9uLmh0bWwKIAorIyBXZWIgSW50ZW50cyBp
cyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3Qg
aW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5k
ZXggM2I5ODAzZGE4NzBkMWY3OWJhMzk3MGY0YzM5NWJjYTYyNmRjMjZjZi4uZWVmYWY0OGI1YTM1
YjRlYmNkYmM1ZTY4Nzk1NDhhNzIzZjI3OTQ1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQK
QEAgLTQ4OCw2ICs0ODgsOSBAQCBmYXN0L3JlcGFpbnQvdGFibGUtZXh0cmEtYm90dG9tLWdyb3cu
aHRtbAogIyBEUlQgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZv
bnRNYXAiLi4uKQogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250
cy5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8K
KwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCA1ZjAxMjZmOTQyYWViZmU5OGJjNDdjZGQwMTIwNjhl
ODYwMzUxNzYzLi40ZTBlZDlkMmE5Zjk0NmUzMmI3MGNlOTFhODI1MTJiYzFlMzFiNTQzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTI0ODMsNiArMjQ4Myw5IEBAIGNzczMvZmxleGJveC9s
aW5lLXdyYXBwaW5nLmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcyNDkxCiBodHRwL3Rlc3RzL21pc2Mvb25sb2FkLXJlbW92ZS1pZnJhbWUtY3Jhc2gtMi5o
dG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwog
IyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IGVjYmUxOTFkY2ZiNTE4ZWY4NDI3NTRlZGZmNWQ4NWRk
YWZmMTkyNGIuLjc4YTg0MTA5NDE2OTI3MDAyNmE4ZmJjMWIyMDkxMWJjYTQ3MTNiY2YgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xNDgzLDYgKzE0ODMsOSBAQCBmYXN0L2V2ZW50cy9w
bGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJU
IGRvZXNuJ3Qgc3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikK
IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisj
IFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRl
ciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbmNhaXJvL1NraXBwZWQKaW5kZXggZWU3N2ExNzE0NGMyODkyY2E0MjQyY2JiYTZkNTQw
ZjgxN2Q3NjUzNy4uNDgxNmQxMWExYzI2ZTE3ZjcyOTFhOGJlNTc2M2QyNjcyNDE0ZTc5NiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0yMDIxLDYgKzIwMjEsOSBAQCBm
YXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdl
Lmh0bWwKICMgRFJUIGRvZXNuJ3Qgc3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpG
b250TWFwIi4uLikKIGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9u
dHMuaHRtbAogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMv
CisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdjNzYzYmRlZjRiOTg1MjQ2NDlkYWFiYjAwZDQ4MTRhNTE0ZjU2YjQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFw
aS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMiBAQAorUEFTUyBpbnRlbnQuYWN0aW9uIGlzICIi
CitQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQg
Y29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQ
QVNTIG5ldyBJbnRlbnQoJ2EnLCdiJywnYycsJ2QnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFt
ZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJbnRlbnQoJycsJ2InLCdjJykg
dGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1Mg
bmV3IEludGVudCgnJywnJywnYycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBj
YW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJbnRlbnQoJ2EnLCcnLCdjJykgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogVHlwZSBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIGludGVudDEuYWN0aW9u
IGlzICJhIgorUEFTUyBpbnRlbnQxLnR5cGUgaXMgImIiCitQQVNTIGludGVudDEuZGF0YSBpcyBu
dWxsCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQyLmFjdGlvbiBpcyAi
YSIKK1BBU1MgaW50ZW50Mi50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQyLmRhdGEgaXMgImMiCitQ
QVNTIGludGVudDMuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQzLnR5cGUgaXMgImIiCitQQVNT
IGludGVudDMuZGF0YS5jIGlzICJkIgorUEFTUyBpbnRlbnQ0LmFjdGlvbiBpcyAiYSIKK1BBU1Mg
aW50ZW50NC50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheSBp
cyB0cnVlCitQQVNTIGludGVudDQuZGF0YS5sZW5ndGggaXMgMgorUEFTUyBpbnRlbnQ0LmRhdGFb
MF0gaXMgImMiCitQQVNTIGludGVudDQuZGF0YVsxXSBpcyAiZCIKK1BBU1MgaW50ZW50NS5kYXRh
IGlzIDQKK1BBU1MgaW50ZW50Ni5kYXRhIGlzIDQuNQorUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1
ZQorUEFTUyBpbnRlbnQ4LmRhdGEgaXMgbnVsbAorUEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmpl
Y3QgT2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWlu
dGVudHMtYXBpLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjljYmRjMDBiZGY0YTRkYmE4Yjg1NDVhZjUzZGE3Y2RhNTBkNTVhNTUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFw
aS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAvLyBUT0RPKGdiaWxsb2NrKTogZWxp
bWluYXRlIHRoaXMgemVyby1hcmcgY2FzZS4KKyAgICAgIHZhciBpbnRlbnQgPSBuZXcgSW50ZW50
KCk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudC5hY3Rpb24nLCAnJyk7CisK
KyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogSW50ZW50
IGNvbnN0cnVjdG9yIG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyIp
OworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCdiJywnYycsJ2QnKSIsICInVHlw
ZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVl
IHBhcmFtZXRlcnMnIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnJyki
LCAiJ1R5cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAgICAgIHNob3VsZFRo
cm93KCJuZXcgSW50ZW50KCcnLCdiJywnYycpIiwgIidUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3Qg
YmUgZW1wdHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnYycpIiwg
IidUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHknIik7CisgICAgICBzaG91bGRUaHJv
dygibmV3IEludGVudCgnYScsJycsJ2MnKSIsICInVHlwZUVycm9yOiBUeXBlIGNhbm5vdCBiZSBl
bXB0eSciKTsKKworICAgICAgdmFyIGludGVudDEgPSBuZXcgSW50ZW50KCdhJywgJ2InKTsKKyAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS5hY3Rpb24iLCAiYSIpOworICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLnR5cGUiLCAiYiIpOworICAgICAgc2hvdWxk
QmVOdWxsKCJpbnRlbnQxLmRhdGEiKTsKKyAgICAgIGludGVudDEuYWN0aW9uID0gImFiYyI7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsKKworICAg
ICAgdmFyIGludGVudDIgPSBuZXcgSW50ZW50KCJhIiwgImIiLCAiYyIpOworICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2ludGVudDIudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2ludGVudDIuZGF0YScsICJjIik7CisKKyAgICAgIHZhciBpbnRlbnQzID0gbmV3IElu
dGVudCgiYSIsICJiIiwgeyJjIjogImQifSk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDMuYWN0aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50My50eXBlJywgImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My5k
YXRhLmMnLCAiZCIpOworCisgICAgICB2YXIgaW50ZW50NCA9IG5ldyBJbnRlbnQoImEiLCAiYiIs
IFsiYyIsICJkIl0pOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmFjdGlv
bicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQudHlwZScsICJi
Iik7CisgICAgICBzaG91bGRCZVRydWUoJ2ludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5Jyk7
CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ0LmRhdGEubGVuZ3RoJywgMik7CisgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVswXScsICJjIik7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVsxXScsICJkIik7CisKKyAgICAgIHZh
ciBpbnRlbnQ1ID0gbmV3IEludGVudCgiYSIsICJiIiwgNCk7CisgICAgICBzaG91bGRFdmFsdWF0
ZVRvKCdpbnRlbnQ1LmRhdGEnLCA0KTsKKyAgICAgIHZhciBpbnRlbnQ2ID0gbmV3IEludGVudCgn
YScsICdiJywgNC41KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDYuZGF0YScsIDQu
NSk7CisgICAgICB2YXIgaW50ZW50NyA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHRydWUpOworICAg
ICAgc2hvdWxkQmVUcnVlKCdpbnRlbnQ3LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ4ID0gbmV3
IEludGVudCgnYScsICdiJywgbnVsbCk7CisgICAgICBzaG91bGRCZU51bGwoJ2ludGVudDguZGF0
YScpOworICAgICAgdmFyIGludGVudDkgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB7fSk7CisgICAg
ICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ5LmRhdGEnLCB7fSk7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121357</attachid>
            <date>2012-01-05 15:52:51 -0800</date>
            <delta_ts>2012-01-06 10:25:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20120105155250.patch</filename>
            <type>text/plain</type>
            <size>20289</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhlNWZjNTEwMDI2Y2U3
YWJlNmFmYTUzMzlhOGU5ZTQ3ZWY5MmM4MC4uYmQ1ZmQ2MTJhN2VmNTBiYzU2MTU4N2Q2NzNkMWJm
OWEyMjRhOTg0OCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly9kdmNzLncz
Lm9yZy9oZy93ZWItaW50ZW50cy9yYXctZmlsZS90aXAvc3BlYy9PdmVydmlldy5odG1sCisgICAg
ICAgIGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVudDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbDogQWRkZWQuCisKIDIwMTItMDEtMDUgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm0gbmFtZXNwYWNlIGZvciBX
ZWJDb3JlL3BsYXRmb3JtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDBlZDA4N2U5N2Mx
ZTU1MjhkNjhjMjRiZjI3OGNhY2RkZjgzYjA4YjMuLjU3ZDE5NTAyMzU4OTIwYTAyZjUxYzQ1MDJi
MzJhNmQyOTdjOWEwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTEtMTEtMjMgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2NrQGdvb2dsZS5jb20+CisKKyAg
ICAgICAgW1dlYiBJbnRlbnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3JlIGltcGxlbWVudGF0aW9uIG9m
IG5hdmlnYXRvci5zdGFydEFjdGl2aXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAxMi0wMS0wNSAgVy4gSmFtZXMg
TWFjTGVhbiAgPHdqbWFjbGVhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXVth
dXJhXSBXZWJFeHRlcm5hbFRleHR1cmVMYXllckltcGw6OmRyYXdzQ29udGVudCgpIHJldHVybnMg
aW5jb3JyZWN0IHZhbHVlLCBjYXVzaW5nIGFjY2VsZXJhdGVkIGNvbnRlbnQgdG8gbm90IGRpc3Bs
YXkgaW4gQXVyYSBkZXNrdG9wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
dGVudHMvSW50ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmNjOGUxZTJkOWMyNjI5OWM1ODU0YzM2NDUyOGMxYjE4NGUyMTY4MTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludGVudC5o
IgorCisjaWYgRU5BQkxFKFdFQl9JTlRFTlRTKQorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5o
IgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Bhc3NSZWZQdHI8SW50ZW50PiBJbnRlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGFj
dGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGFjdGlvbi5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgaWYgKHR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnRlbnQoYWN0
aW9uLCB0eXBlLCBkYXRhKSk7Cit9CisKK0ludGVudDo6SW50ZW50KGNvbnN0IFN0cmluZyYgYWN0
aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhKQorICAgIDogbV9hY3Rpb24oYWN0aW9uKQorICAgICwgbV90eXBlKHR5cGUpCisgICAg
LCBtX2lkZW50aWZpZXIoMCkKK3sKKyAgICBzZXREYXRhKGRhdGEuZ2V0KCkpOworfQorCitjb25z
dCBTdHJpbmcmIEludGVudDo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3Rpb247
Cit9CisKK2NvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV90eXBlOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKK30KKwordm9pZCBJbnRlbnQ6OnNldERhdGEo
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhKQoreworICAgIGlmIChkYXRhKQorICAgICAgICBt
X2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGRhdGEtPnRvV2ly
ZVN0cmluZygpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVsbFZhbHVlKCk7Cit9CisKK2ludCBJbnRlbnQ6OmlkZW50aWZpZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX2lkZW50aWZpZXI7Cit9CisKK3ZvaWQgSW50ZW50OjpzZXRJZGVudGlm
aWVyKGludCBpZCkKK3sKKyAgICBtX2lkZW50aWZpZXIgPSBpZDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzYTFmNThkMWIwZDE3ZTJjYjI3
NWMyYzc5YzNiODc3NzBhMDA0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ludGVudHMvSW50ZW50LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50X2gKKyNk
ZWZpbmUgSW50ZW50X2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVk
U2NyaXB0VmFsdWU7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEludGVu
dCA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEludGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcm
IHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25D
b2RlJik7CisKKyAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0
cmluZyYgdHlwZSgpIGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNv
bnN0OworCisgICAgaW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZp
ZXIoaW50KTsKKworcHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEp
OworCisgICAgdm9pZCBzZXREYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopOworCisgICAgU3Ry
aW5nIG1fYWN0aW9uOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbV9kYXRhOworICAgIGludCBtX2lkZW50aWZpZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW50ZW50X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM2NTdmNGM4Mzdm
ZGYxZmQ3MWYxNjg1NTVmZTBlNGYxNDM2MTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQuaWRsCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
Cittb2R1bGUgd2luZG93IHsKKyAgaW50ZXJmYWNlIFsKKyAgICAgIENvbmRpdGlvbmFsPVdFQl9J
TlRFTlRTLAorICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIGFjdGlvbiwgaW4gRE9NU3Ry
aW5nIHR5cGUsIGluIFtPcHRpb25hbD1DYWxsV2l0aE51bGxWYWx1ZV0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIGRhdGEpLAorICAgICAgQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24KKyAgXSBJbnRl
bnQgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFjdGlvbjsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGE7CisgIH07Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGEyNGI0NDhmNGIxYjE2Njg4Mjk5YjNjMjNh
MzMwYWViODY4MjI0NWEuLjVkMmI5NWM3ODMxZjA4MWU2MDQ1MzYzNWE5NzE3OWZkODgxMmI4YTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC01MSw2ICs1MSw3IEBA
CiAgICAgICAnLi4vJywKICAgICAgICcuLi8uLicsCiAgICAgICAnLi4vTW9kdWxlcy9nYW1lcGFk
JywKKyAgICAgICcuLi9Nb2R1bGVzL2ludGVudHMnLAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHkn
LAogICAgICAgJy4uL2FjY2Vzc2liaWxpdHkvY2hyb21pdW0nLAogICAgICAgJy4uL2JpbmRpbmdz
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2YTcyZDMyOTgzMWU5ZmY2YmFiYmY4YTI0ZGE4ZTZlODE5
MjVjY2I3Li5hMGVmMjMwMTAyOTI1MjEwNGI5OWY5ODA0YzJiM2NjMWNhNTdmMTAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0xMTQ4LDYgKzExNDgsNyBAQAogICAgICAgICAgICAgJ01vZHVsZXMvZ2Ft
ZXBhZC9HYW1lcGFkLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRM
aXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQu
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmlkbCcsCiAgICAgICAg
ICAgICAnY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCcsCiAgICAgICAgICAgICAnY3NzL0NTU0ZvbnRG
YWNlUnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NJbXBvcnRSdWxlLmlkbCcsCkBAIC0x
Njk0LDYgKzE2OTUsOCBAQAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlz
dC5oJywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAn
LAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgnLAorICAg
ICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwJywKKyAgICAgICAgICAgICdNb2R1
bGVzL2ludGVudHMvSW50ZW50LmgnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFS
SUFHcmlkLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggMTk2NjhlM2Q1NzI1ZDY4
OTk1OWU5Yzk0ZDU2MzYxYzVkMTcxNDY0OC4uODQxNGY3NWYzZGJjOGI5NDM3YTFhNjk4ZjVjMjFl
NDE3N2IwZTYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtNjA3LDYgKzYwNyw4
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWU9
d2Via2l0VmlkZW9UcmFja10gVHJhY2tFdmVudENvbnN0cnVjdG9yIFRyYWNrRXZlbnQ7CiAjZW5k
aWYKIAorICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPVdFQl9JTlRFTlRTXSBJbnRlbnRD
b25zdHJ1Y3RvciBJbnRlbnQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKwogICAg
ICAgICBhdHRyaWJ1dGUgRE9NUGx1Z2luQ29uc3RydWN0b3IgUGx1Z2luOwogICAgICAgICBhdHRy
aWJ1dGUgRE9NUGx1Z2luQXJyYXlDb25zdHJ1Y3RvciBQbHVnaW5BcnJheTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IGU3ZDlmZWJjNDA5N2Q0YjJlMWUwZTExNTkwN2Ux
Mjc0NTBlNjFkMWEuLjlkMmUwNjA0NzUyNjY2ZTc5MDUyMTk2NDRiMGQ3ZTdmODBlZDgyYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTE1OSw2ICsxNTksMTEgQEAKICAg
ICAgICAgICAnRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRMRVI9MScsCiAgICAgICAgIF0s
CiAgICAgICB9XSwKKyAgICAgIFsnZW5hYmxlX3dlYl9pbnRlbnRzPT0xJywgeworICAgICAgICAn
ZmVhdHVyZV9kZWZpbmVzJzogWworICAgICAgICAgICdFTkFCTEVfV0VCX0lOVEVOVFM9MScsCisg
ICAgICAgIF0sCisgICAgICB9XSwKICAgICAgIFsnT1M9PSJtYWMiJywgewogICAgICAgICAnZmVh
dHVyZV9kZWZpbmVzJzogWwogICAgICAgICAgICdFTkFCTEVfUlVCQkVSX0JBTkRJTkc9MScsCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZCBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IGFmOWJlYjZhMGEzMDE5MWI2MWU0ZWU5MzFkNGU2
OGM5ZTZkZjA2ZWUuLjdmZTI3NjMzYmNhMmZmMjc1NmRmYzZhYmViYTU2ZmFiMzM3MTQ0NmMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC0xOTI4LDYgKzE5MjgsOSBAQCBodHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpLwogIyBNaWNyb2RhdGEgRE9NIEFQSSBpcyBub3QgeWV0IGVu
YWJsZWQuCiBmYXN0L2RvbS9NaWNyb0RhdGEKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVu
YWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQu
CiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggNDY4MmFmZWYz
NDJiMWVmYmZjNTQ4YmNkNDgyMjBlNTc5YjkwZTA1OS4uMjMxMzA0ZDE1MTA2MGU0Y2I4MjYyOWIw
YjVhYzNhYmZhYTYxNjhjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTE0MzUsNiAr
MTQzNSw5IEBAIGZhc3QvZnJhbWVzL2ZsYXR0ZW5pbmcvaWZyYW1lLWZsYXR0ZW5pbmctZml4ZWQt
d2lkdGgtYW5kLWhlaWdodC1uby1zY3JvbGxpbmcuaHRtCiAjIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MjI0OAogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy11bmlm
aWVkLWVtdWxhdGlvbi5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgor
d2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRl
ci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDNiOTgwM2RhODcwZDFmNzli
YTM5NzBmNGMzOTViY2E2MjZkYzI2Y2YuLmVlZmFmNDhiNWEzNWI0ZWJjZGJjNWU2ODc5NTQ4YTcy
M2YyNzk0NWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC00ODgsNiArNDg4LDkgQEAg
ZmFzdC9yZXBhaW50L3RhYmxlLWV4dHJhLWJvdHRvbS1ncm93Lmh0bWwKICMgRFJUIGRvZXNuJ3Qg
c3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4
dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRl
bnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlz
IG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQK
aW5kZXggNzQwNGExZGU3MDhjNjI2Nzc3ODNhNTQ1MzI1M2QzN2Y3OTMzNTAyZC4uODNhOGEyZDI5
YTY5ZWQ2MGY3Y2YxMjllMzRkMjFkNWIzNWFmOWY5MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CkBAIC0yNDg0LDYgKzI0ODQsOSBAQCBjc3MzL2ZsZXhib3gvbGluZS13cmFwcGluZy5odG1sCiAj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjQ5MQogaHR0cC90ZXN0
cy9taXNjL29ubG9hZC1yZW1vdmUtaWZyYW1lLWNyYXNoLTIuaHRtbAogCisjIFdlYiBJbnRlbnRz
IGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5v
dCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApp
bmRleCBlY2JlMTkxZGNmYjUxOGVmODQyNzU0ZWRmZjVkODVkZGFmZjE5MjRiLi43OGE4NDEwOTQx
NjkyNzAwMjZhOGZiYzFiMjA5MTFiY2E0NzEzYmNmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW4vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZApAQCAtMTQ4Myw2ICsxNDgzLDkgQEAgZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1w
YWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sCiAjIERSVCBkb2Vzbid0IHN1cHBvcnQgb3Zl
cnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3RleHQvaW50ZXJuYXRp
b25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3Qg
eWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVt
ZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVk
CmluZGV4IGVlNzdhMTcxNDRjMjg5MmNhNDI0MmNiYmE2ZDU0MGY4MTdkNzY1MzcuLjQ4MTZkMTFh
MWMyNmUxN2Y3MjkxYThiZTU3NjNkMjY3MjQxNGU3OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
Y2Fpcm8vU2tpcHBlZApAQCAtMjAyMSw2ICsyMDIxLDkgQEAgZmFzdC9ldmVudHMvcGxhdGZvcm0t
d2hlZWxldmVudC1wYWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sCiAjIERSVCBkb2Vzbid0
IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3Rl
eHQvaW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50
ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBp
cyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Yzc2
M2JkZWY0Yjk4NTI0NjQ5ZGFhYmIwMGQ0ODE0YTUxNGY1NmI0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMzIgQEAKK1BBU1MgaW50ZW50LmFjdGlvbiBpcyAiIgorUEFTUyBuZXcgSW50ZW50KCdh
JykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW50ZW50IGNvbnN0cnVjdG9yIG11c3QgaGF2
ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLgorUEFTUyBuZXcgSW50ZW50KCdhJywn
YicsJ2MnLCdkJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogSW50ZW50IGNvbnN0cnVjdG9y
IG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLgorUEFTUyBuZXcgSW50
ZW50KCcnLCcnLCcnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJl
IGVtcHR5LgorUEFTUyBuZXcgSW50ZW50KCcnLCdiJywnYycpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJbnRlbnQoJycsJycsJ2Mn
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5LgorUEFT
UyBuZXcgSW50ZW50KCdhJywnJywnYycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUg
Y2Fubm90IGJlIGVtcHR5LgorUEFTUyBpbnRlbnQxLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50
MS50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQxLmRhdGEgaXMgbnVsbAorUEFTUyBpbnRlbnQxLmFj
dGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50Mi5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDIudHlw
ZSBpcyAiYiIKK1BBU1MgaW50ZW50Mi5kYXRhIGlzICJjIgorUEFTUyBpbnRlbnQzLmFjdGlvbiBp
cyAiYSIKK1BBU1MgaW50ZW50My50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQzLmRhdGEuYyBpcyAi
ZCIKK1BBU1MgaW50ZW50NC5hY3Rpb24gaXMgImEiCitQQVNTIGludGVudDQudHlwZSBpcyAiYiIK
K1BBU1MgaW50ZW50NC5kYXRhIGluc3RhbmNlb2YgQXJyYXkgaXMgdHJ1ZQorUEFTUyBpbnRlbnQ0
LmRhdGEubGVuZ3RoIGlzIDIKK1BBU1MgaW50ZW50NC5kYXRhWzBdIGlzICJjIgorUEFTUyBpbnRl
bnQ0LmRhdGFbMV0gaXMgImQiCitQQVNTIGludGVudDUuZGF0YSBpcyA0CitQQVNTIGludGVudDYu
ZGF0YSBpcyA0LjUKK1BBU1MgaW50ZW50Ny5kYXRhIGlzIHRydWUKK1BBU1MgaW50ZW50OC5kYXRh
IGlzIG51bGwKK1BBU1MgaW50ZW50OS5kYXRhID09ICdbb2JqZWN0IE9iamVjdF0nIGlzIHRydWUK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Y2Jk
YzAwYmRmNGE0ZGJhOGI4NTQ1YWY1M2RhN2NkYTUwZDU1YTU1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbApAQCAtMCwwICsxLDU3
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICAgICAgLy8gVE9ETyhnYmlsbG9jayk6IGVsaW1pbmF0ZSB0aGlzIHplcm8tYXJn
IGNhc2UuCisgICAgICB2YXIgaW50ZW50ID0gbmV3IEludGVudCgpOworICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdpbnRlbnQuYWN0aW9uJywgJycpOworCisgICAgICBzaG91bGRUaHJvdygi
bmV3IEludGVudCgnYScpIiwgIidUeXBlRXJyb3I6IEludGVudCBjb25zdHJ1Y3RvciBtdXN0IGhh
dmUgemVybyBvciB0d28gb3IgdGhyZWUgcGFyYW1ldGVycyciKTsKKyAgICAgIHNob3VsZFRocm93
KCJuZXcgSW50ZW50KCdhJywnYicsJ2MnLCdkJykiLCAiJ1R5cGVFcnJvcjogSW50ZW50IGNvbnN0
cnVjdG9yIG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyIpOworICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJycsJycpIiwgIidUeXBlRXJyb3I6IEFjdGlv
biBjYW5ub3QgYmUgZW1wdHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywn
YicsJ2MnKSIsICInVHlwZUVycm9yOiBBY3Rpb24gY2Fubm90IGJlIGVtcHR5JyIpOworICAgICAg
c2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJycsJ2MnKSIsICInVHlwZUVycm9yOiBBY3Rpb24g
Y2Fubm90IGJlIGVtcHR5JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCcn
LCdjJykiLCAiJ1R5cGVFcnJvcjogVHlwZSBjYW5ub3QgYmUgZW1wdHknIik7CisKKyAgICAgIHZh
ciBpbnRlbnQxID0gbmV3IEludGVudCgnYScsICdiJyk7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygiaW50ZW50MS50eXBlIiwgImIiKTsKKyAgICAgIHNob3VsZEJlTnVsbCgiaW50ZW50MS5kYXRh
Iik7CisgICAgICBpbnRlbnQxLmFjdGlvbiA9ICJhYmMiOworICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisKKyAgICAgIHZhciBpbnRlbnQyID0gbmV3
IEludGVudCgiYSIsICJiIiwgImMiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50Mi5hY3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQy
LnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLmRhdGEn
LCAiYyIpOworCisgICAgICB2YXIgaW50ZW50MyA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIHsiYyI6
ICJkIn0pOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLmFjdGlvbicsICJh
Iik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDMudHlwZScsICJiIik7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDMuZGF0YS5jJywgImQiKTsKKworICAg
ICAgdmFyIGludGVudDQgPSBuZXcgSW50ZW50KCJhIiwgImIiLCBbImMiLCAiZCJdKTsKKyAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC5hY3Rpb24nLCAiYSIpOworICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVU
cnVlKCdpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheScpOworICAgICAgc2hvdWxkRXZhbHVh
dGVUbygnaW50ZW50NC5kYXRhLmxlbmd0aCcsIDIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdpbnRlbnQ0LmRhdGFbMF0nLCAiYyIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdpbnRlbnQ0LmRhdGFbMV0nLCAiZCIpOworCisgICAgICB2YXIgaW50ZW50NSA9IG5ldyBJbnRl
bnQoImEiLCAiYiIsIDQpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50NS5kYXRhJywg
NCk7CisgICAgICB2YXIgaW50ZW50NiA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIDQuNSk7CisgICAg
ICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ2LmRhdGEnLCA0LjUpOworICAgICAgdmFyIGludGVu
dDcgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB0cnVlKTsKKyAgICAgIHNob3VsZEJlVHJ1ZSgnaW50
ZW50Ny5kYXRhJyk7CisgICAgICB2YXIgaW50ZW50OCA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIG51
bGwpOworICAgICAgc2hvdWxkQmVOdWxsKCdpbnRlbnQ4LmRhdGEnKTsKKyAgICAgIHZhciBpbnRl
bnQ5ID0gbmV3IEludGVudCgnYScsICdiJywge30pOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygn
aW50ZW50OS5kYXRhJywge30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121400</attachid>
            <date>2012-01-05 22:24:23 -0800</date>
            <delta_ts>2012-01-06 11:20:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-73051-20120105222421.patch</filename>
            <type>text/plain</type>
            <size>19277</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNDI2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAxLTA1ICBHcmVnIEJp
bGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVtZW50
YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly9kdmNzLnczLm9y
Zy9oZy93ZWItaW50ZW50cy9yYXctZmlsZS90aXAvc3BlYy9PdmVydmlldy5odG1sCisgICAgICAg
IGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAg
ICAgICAgVGVzdDogd2ViLWludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50
ZW50OjpJbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjphY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZW50OjpzZXRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0VHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlbnQ6OmRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZW50OjpzZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVz
L2ludGVudHMvSW50ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRl
bnQuaWRsOiBBZGRlZC4KKwogMjAxMi0wMS0wNSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5h
cmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBNb3ZlIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUgY2xhc3MgaW4gaXRzIG93biBoZWFkZXIgZmlsZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDEwNDI2OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMTE0OSw2ICsxMTQ5LDcgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
TGlzdC5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFk
LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLAogICAgICAg
ICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVsZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250
RmFjZVJ1bGUuaWRsJywKICAgICAgICAgICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAt
MTY5NSw2ICsxNjk2LDggQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExp
c3QuaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3Bw
JywKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oJywKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ludGVudHMvSW50ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbnRlbnRzL0ludGVudC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlB
UklBR3JpZC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFS
SUFHcmlkLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMvSW50ZW50
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnRlbnQuaCIKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEludGVudD4gSW50ZW50OjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChhY3Rp
b24uaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIGlmICh0eXBlLmlzRW1wdHkoKSkgeworICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW50ZW50KGFjdGlvbiwgdHlwZSwgZGF0YSkpOworfQorCitJbnRlbnQ6OkludGVudChjb25z
dCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gZGF0YSkKKyAgICA6IG1fYWN0aW9uKGFjdGlvbikKKyAgICAsIG1fdHlw
ZSh0eXBlKQoreworICAgIHNldERhdGEoZGF0YS5nZXQoKSk7Cit9CisKK2NvbnN0IFN0cmluZyYg
SW50ZW50OjphY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2FjdGlvbjsKK30KKworY29u
c3QgU3RyaW5nJiBJbnRlbnQ6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3R5cGU7Cit9
CisKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogSW50ZW50OjpkYXRhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kYXRhLmdldCgpOworfQorCit2b2lkIEludGVudDo6c2V0RGF0YShTZXJpYWxpemVk
U2NyaXB0VmFsdWUqIGRhdGEpCit7CisgICAgaWYgKGRhdGEpCisgICAgICAgIG1fZGF0YSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoZGF0YS0+dG9XaXJlU3RyaW5nKCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxs
VmFsdWUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9JTlRFTlRTKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50X2gKKyNkZWZpbmUgSW50
ZW50X2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFs
dWU7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEludGVudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEludGVudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
dGVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisK
KyAgICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlw
ZSgpIGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEludGVudChjb25zdCBTdHJpbmcmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0
eXBlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSk7CisKKyAgICB2b2lk
IHNldERhdGEoU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CisKKyAgICBTdHJpbmcgbV9hY3Rpb247
CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBt
X2RhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYg
Ly8gSW50ZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRlbnQu
aWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgd2luZG93
IHsKKyAgaW50ZXJmYWNlIFsKKyAgICAgIENvbmRpdGlvbmFsPVdFQl9JTlRFTlRTLAorICAgICAg
Q29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIGFjdGlvbiwgaW4gRE9NU3RyaW5nIHR5cGUsIGluIFtP
cHRpb25hbD1DYWxsV2l0aE51bGxWYWx1ZV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEpLAor
ICAgICAgQ29uc3RydWN0b3JSYWlzZXNFeGNlcHRpb24KKyAgXSBJbnRlbnQgeworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFjdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFs
aXplZFNjcmlwdFZhbHVlIGRhdGE7CisgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gMTA0MjY4KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICAg
ICAgICcuLi8nLAogICAgICAgJy4uLy4uJywKICAgICAgICcuLi9Nb2R1bGVzL2dhbWVwYWQnLAor
ICAgICAgJy4uL01vZHVsZXMvaW50ZW50cycsCiAgICAgICAnLi4vYWNjZXNzaWJpbGl0eScsCiAg
ICAgICAnLi4vYWNjZXNzaWJpbGl0eS9jaHJvbWl1bScsCiAgICAgICAnLi4vYmluZGluZ3MnLApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMTA0MjY4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNiAr
NjA3LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbRW5hYmxlZEF0UnVu
dGltZT13ZWJraXRWaWRlb1RyYWNrXSBUcmFja0V2ZW50Q29uc3RydWN0b3IgVHJhY2tFdmVudDsK
ICNlbmRpZgogCisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9V0VCX0lOVEVOVFNdIElu
dGVudENvbnN0cnVjdG9yIEludGVudDsgLy8gVXNhYmxlIHdpdGggdGhlIG5ldyBvcGVyYXRvcgor
CiAgICAgICAgIGF0dHJpYnV0ZSBET01QbHVnaW5Db25zdHJ1Y3RvciBQbHVnaW47CiAgICAgICAg
IGF0dHJpYnV0ZSBET01QbHVnaW5BcnJheUNvbnN0cnVjdG9yIFBsdWdpbkFycmF5OwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTA0MjY4KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAor
MjAxMi0wMS0wNSAgR3JlZyBCaWxsb2NrICA8Z2JpbGxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBbV2ViIEludGVudHNdIEZsYWdnZWQtb2ZmIFdlYkNvcmUgaW1wbGVtZW50YXRpb24gb2YgbmF2
aWdhdG9yLnN0YXJ0QWN0aXZpdHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTczMDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKwor
ICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIwMTItMDEtMDUgIEpvY2hlbiBFaXNpbmdlciAg
PGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2hlY2sgd2hldGhlciBhIFdlYlZpZXcg
ZXhpc3RzIGJlZm9yZSBhY2Nlc3NpbmcgaXQgaW4gU3RvcmFnZUFyZWFQcm94eS4gVGhpcyBpcyBu
b3QgbmVjZXNzYXJpbHkgdGhlIGNhc2UsIGUuZy4gZm9yIGRldGFjaGVkIGlmcmFtZXMuCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCShyZXZpc2lvbiAxMDQyNjgpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE1
OSw2ICsxNTksMTEgQEAKICAgICAgICAgICAnRU5BQkxFX1JFR0lTVEVSX1BST1RPQ09MX0hBTkRM
RVI9MScsCiAgICAgICAgIF0sCiAgICAgICB9XSwKKyAgICAgIFsnZW5hYmxlX3dlYl9pbnRlbnRz
PT0xJywgeworICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWworICAgICAgICAgICdFTkFCTEVf
V0VCX0lOVEVOVFM9MScsCisgICAgICAgIF0sCisgICAgICB9XSwKICAgICAgIFsnT1M9PSJtYWMi
JywgewogICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWwogICAgICAgICAgICdFTkFCTEVfUlVC
QkVSX0JBTkRJTkc9MScsCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAkocmV2aXNpb24g
MTA0MjY4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MjgsNiArMTkyOCw5IEBAIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
CiAjIE1pY3JvZGF0YSBET00gQVBJIGlzIG5vdCB5ZXQgZW5hYmxlZC4KIGZhc3QvZG9tL01pY3Jv
RGF0YQogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisK
ICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDEwNDI2OCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0xNDM1LDYgKzE0MzUs
OSBAQCBmYXN0L2ZyYW1lcy9mbGF0dGVuaW5nL2lmcmFtZS1mbGF0dGVuaW5nCiAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjI0OAogZWRpdGluZy9zcGVsbGluZy9z
cGVsbGluZy11bmlmaWVkLWVtdWxhdGlvbi5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHll
dCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVu
dGVkLgogcG9pbnRlci1sb2NrLwogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tp
cHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkocmV2
aXNpb24gMTA0MjY4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtp
bmcgY29weSkKQEAgLTQ4OCw2ICs0ODgsOSBAQCBmYXN0L3JlcGFpbnQvdGFibGUtZXh0cmEtYm90
dG9tLWdyb3cuaHRtCiAjIERSVCBkb2Vzbid0IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJlbmNlKCJX
ZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9sb2NhbGUtc2Vuc2l0
aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3ZWJp
bnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVyLWxv
Y2svCiAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkocmV2aXNpb24gMTA0MjY4KQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAkod29ya2luZyBjb3B5KQpAQCAtMjQ4NCw2
ICsyNDg0LDkgQEAgY3NzMy9mbGV4Ym94L2xpbmUtd3JhcHBpbmcuaHRtbAogIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0OTEKIGh0dHAvdGVzdHMvbWlzYy9vbmxv
YWQtcmVtb3ZlLWlmcmFtZS1jcmFzaC0yLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0
IGVuYWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50
ZWQuCiBwb2ludGVyLWxvY2svCiAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lw
cGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZp
c2lvbiAxMDQyNjgpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4Myw2ICsxNDgzLDkgQEAgZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxl
dmVudC1wYWdpbmcteQogIyBEUlQgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNp
dGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2Vi
aW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1s
b2NrLwogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQJKHJldmlzaW9u
IDEwNDI2OCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQJKHdvcmtp
bmcgY29weSkKQEAgLTIwMjEsNiArMjAyMSw5IEBAIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVs
ZXZlbnQtcGFnaW5nLXkKICMgRFJUIGRvZXNuJ3Qgc3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5z
aXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dl
YmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXIt
bG9jay8KIApJbmRleDogTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVu
dHMtYXBpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3dlYmludGVu
dHMvd2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MiBAQAorUEFTUyBpbnRlbnQuYWN0aW9uIGlzICIiCitQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8g
b3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJ2EnLCdiJywnYycs
J2QnKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBo
YXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMuCitQQVNTIG5ldyBJbnRlbnQoJycs
JycsJycpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHku
CitQQVNTIG5ldyBJbnRlbnQoJycsJ2InLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QWN0aW9uIGNhbm5vdCBiZSBlbXB0eS4KK1BBU1MgbmV3IEludGVudCgnJywnJywnYycpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHkuCitQQVNTIG5ldyBJ
bnRlbnQoJ2EnLCcnLCdjJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBjYW5ub3Qg
YmUgZW1wdHkuCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQxLnR5cGUg
aXMgImIiCitQQVNTIGludGVudDEuZGF0YSBpcyBudWxsCitQQVNTIGludGVudDEuYWN0aW9uIGlz
ICJhIgorUEFTUyBpbnRlbnQyLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50Mi50eXBlIGlzICJi
IgorUEFTUyBpbnRlbnQyLmRhdGEgaXMgImMiCitQQVNTIGludGVudDMuYWN0aW9uIGlzICJhIgor
UEFTUyBpbnRlbnQzLnR5cGUgaXMgImIiCitQQVNTIGludGVudDMuZGF0YS5jIGlzICJkIgorUEFT
UyBpbnRlbnQ0LmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50NC50eXBlIGlzICJiIgorUEFTUyBp
bnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheSBpcyB0cnVlCitQQVNTIGludGVudDQuZGF0YS5s
ZW5ndGggaXMgMgorUEFTUyBpbnRlbnQ0LmRhdGFbMF0gaXMgImMiCitQQVNTIGludGVudDQuZGF0
YVsxXSBpcyAiZCIKK1BBU1MgaW50ZW50NS5kYXRhIGlzIDQKK1BBU1MgaW50ZW50Ni5kYXRhIGlz
IDQuNQorUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQorUEFTUyBpbnRlbnQ4LmRhdGEgaXMgbnVs
bAorUEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3QgT2JqZWN0XScgaXMgdHJ1ZQorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGkuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAvLyBUT0RPKGdiaWxsb2NrKTogZWxpbWluYXRl
IHRoaXMgemVyby1hcmcgY2FzZS4KKyAgICAgIHZhciBpbnRlbnQgPSBuZXcgSW50ZW50KCk7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudC5hY3Rpb24nLCAnJyk7CisKKyAgICAg
IHNob3VsZFRocm93KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogSW50ZW50IGNvbnN0
cnVjdG9yIG11c3QgaGF2ZSB6ZXJvIG9yIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyIpOworICAg
ICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCdiJywnYycsJ2QnKSIsICInVHlwZUVycm9y
OiBJbnRlbnQgY29uc3RydWN0b3IgbXVzdCBoYXZlIHplcm8gb3IgdHdvIG9yIHRocmVlIHBhcmFt
ZXRlcnMnIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnJykiLCAiJ1R5
cGVFcnJvcjogQWN0aW9uIGNhbm5vdCBiZSBlbXB0eSciKTsKKyAgICAgIHNob3VsZFRocm93KCJu
ZXcgSW50ZW50KCcnLCdiJywnYycpIiwgIidUeXBlRXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1w
dHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnYycpIiwgIidUeXBl
RXJyb3I6IEFjdGlvbiBjYW5ub3QgYmUgZW1wdHknIik7CisgICAgICBzaG91bGRUaHJvdygibmV3
IEludGVudCgnYScsJycsJ2MnKSIsICInVHlwZUVycm9yOiBUeXBlIGNhbm5vdCBiZSBlbXB0eSci
KTsKKworICAgICAgdmFyIGludGVudDEgPSBuZXcgSW50ZW50KCdhJywgJ2InKTsKKyAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS5hY3Rpb24iLCAiYSIpOworICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJpbnRlbnQxLnR5cGUiLCAiYiIpOworICAgICAgc2hvdWxkQmVOdWxs
KCJpbnRlbnQxLmRhdGEiKTsKKyAgICAgIGludGVudDEuYWN0aW9uID0gImFiYyI7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsKKworICAgICAgdmFy
IGludGVudDIgPSBuZXcgSW50ZW50KCJhIiwgImIiLCAiYyIpOworICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdpbnRlbnQyLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2ludGVudDIudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDIuZGF0YScsICJjIik7CisKKyAgICAgIHZhciBpbnRlbnQzID0gbmV3IEludGVudCgi
YSIsICJiIiwgeyJjIjogImQifSk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVu
dDMuYWN0aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My50
eXBlJywgImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My5kYXRhLmMn
LCAiZCIpOworCisgICAgICB2YXIgaW50ZW50NCA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIFsiYyIs
ICJkIl0pOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmFjdGlvbicsICJh
Iik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQudHlwZScsICJiIik7Cisg
ICAgICBzaG91bGRCZVRydWUoJ2ludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5Jyk7CisgICAg
ICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ0LmRhdGEubGVuZ3RoJywgMik7CisgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVswXScsICJjIik7CisgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVsxXScsICJkIik7CisKKyAgICAgIHZhciBpbnRl
bnQ1ID0gbmV3IEludGVudCgiYSIsICJiIiwgNCk7CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdp
bnRlbnQ1LmRhdGEnLCA0KTsKKyAgICAgIHZhciBpbnRlbnQ2ID0gbmV3IEludGVudCgnYScsICdi
JywgNC41KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDYuZGF0YScsIDQuNSk7Cisg
ICAgICB2YXIgaW50ZW50NyA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHRydWUpOworICAgICAgc2hv
dWxkQmVUcnVlKCdpbnRlbnQ3LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ4ID0gbmV3IEludGVu
dCgnYScsICdiJywgbnVsbCk7CisgICAgICBzaG91bGRCZU51bGwoJ2ludGVudDguZGF0YScpOwor
ICAgICAgdmFyIGludGVudDkgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB7fSk7CisgICAgICBzaG91
bGRFdmFsdWF0ZVRvKCdpbnRlbnQ5LmRhdGEnLCB7fSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121451</attachid>
            <date>2012-01-06 11:20:52 -0800</date>
            <delta_ts>2012-01-06 11:25:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20120106112051.patch</filename>
            <type>text/plain</type>
            <size>19682</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1ZTRiYzQ3MGFkZTNl
NWY5ZDk4ZDYzZWY0MzI1NjczMjg2YjYwNy4uMzlkY2VkNGM0ZmFjZGVkMjU5YTE0ZDRiYmU1MDI1
M2Y2M2IyMTZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly9kdmNzLncz
Lm9yZy9oZy93ZWItaW50ZW50cy9yYXctZmlsZS90aXAvc3BlYy9PdmVydmlldy5odG1sCisgICAg
ICAgIGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVudDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbDogQWRkZWQuCisKIDIwMTItMDEtMDUgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDQwNjApOiBmYXN0L2Zvcm1z
L3RleHRhcmVhLW1ldHJpY3MuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDM1OGFhMGM3ZDViMmJlMDNlYmVhNmY3OWMxNGU5NDUzYjczMDdiNTEuLjQxYzI4ZTcx
MDY5MGQwOTdkNDljYTI0YzY5NGE3NjBlZDQ2YmRlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTEtMjMgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2Nr
QGdvb2dsZS5jb20+CisKKyAgICAgICAgW1dlYiBJbnRlbnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3Jl
IGltcGxlbWVudGF0aW9uIG9mIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAx
Mi0wMS0wNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBDaGVjayB3aGV0aGVyIGEgV2ViVmlldyBleGlzdHMgYmVmb3JlIGFjY2Vzc2luZyBpdCBpbiBT
dG9yYWdlQXJlYVByb3h5LiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSwgZS5nLiBm
b3IgZGV0YWNoZWQgaWZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9JbnRlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjBhMzI0OGIwNzI3NmM4OTIxZWMzNTQyNGQ3YTdhMWVhYWYyOWM0
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRl
bnQuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50
LmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
YWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYWN0aW9uLmlzRW1wdHko
KSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChh
Y3Rpb24sIHR5cGUsIGRhdGEpKTsKK30KKworSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEpCisgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX3R5cGUodHlwZSkKK3sK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGVGcm9tV2lyZShkYXRhLT50b1dpcmVTdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBt
X2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpOworfQorCitjb25zdCBT
dHJpbmcmIEludGVudDo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3Rpb247Cit9
CisKK2NvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
eXBlOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YmViZDZlNTY3YWJmMTRmMTBjMTFmNjA3MzMzZDk2
MzllNmU2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50X2gKKyNkZWZpbmUgSW50ZW50
X2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEludGVudCA6IHB1YmxpYyBS
ZWZDb3VudGVkPEludGVudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVu
dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgp
IGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0OworCisgICAg
aW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZpZXIoaW50KTsKKwor
cHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOworCisgICAgU3Ry
aW5nIG1fYWN0aW9uOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKworI2VuZGlmIC8vIEludGVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9J
bnRlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNjU3ZjRjODM3ZmRmMWZkNzFmMTY4NTU1ZmUwZTRmMTQz
NjE5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
SW50ZW50LmlkbApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisgIGlu
dGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIENvbnN0cnVj
dG9yKGluIERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9
Q2FsbFdpdGhOdWxsVmFsdWVdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhKSwKKyAgICAgIENv
bnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCisgIF0gSW50ZW50IHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBhY3Rpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBkYXRhOworICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAppbmRleCBhMjRiNDQ4ZjRiMWIxNjY4ODI5OWIzYzIzYTMzMGFlYjg2ODIyNDVhLi41ZDJiOTVj
NzgzMWYwODFlNjA0NTM2MzVhOTcxNzlmZDg4MTJiOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cApAQCAtNTEsNiArNTEsNyBAQAogICAgICAgJy4uLycsCiAgICAgICAn
Li4vLi4nLAogICAgICAgJy4uL01vZHVsZXMvZ2FtZXBhZCcsCisgICAgICAnLi4vTW9kdWxlcy9p
bnRlbnRzJywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9hY2Nlc3NpYmls
aXR5L2Nocm9taXVtJywKICAgICAgICcuLi9iaW5kaW5ncycsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
ZjM1NTg2OGQ1ODk5ZmFmODVjZTc1OTYwYjI1ZWZkN2VhYmRjYzc4Yi4uY2JhOGFiNmM3YTg5NmYx
N2I4NzA4OWVlYjM2Zjc0YTdiZDkwMmJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTE0OSw2ICsx
MTQ5LDcgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwnLAogICAg
ICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAogICAgICAgICAgICAg
J01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVs
ZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRsJywKICAgICAgICAg
ICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAtMTY5NSw2ICsxNjk2LDggQEAKICAgICAg
ICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaCcsCiAgICAgICAgICAgICAnTW9k
dWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVz
L2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oJywK
ICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwJywKICAgICAgICAg
ICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAnLAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCmluZGV4IDE5NjY4ZTNkNTcyNWQ2ODk5NTllOWM5NGQ1NjM2MWM1ZDE3MTQ2
NDguLjg0MTRmNzVmM2RiYzhiOTQzN2ExYTY5OGY1YzIxZTQxNzdiMGU2MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKQEAgLTYwNyw2ICs2MDcsOCBAQCBtb2R1bGUgd2luZG93IHsKICAg
ICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPXdlYmtpdFZpZGVvVHJhY2tdIFRyYWNr
RXZlbnRDb25zdHJ1Y3RvciBUcmFja0V2ZW50OwogI2VuZGlmCiAKKyAgICAgICAgYXR0cmlidXRl
IFtDb25kaXRpb25hbD1XRUJfSU5URU5UU10gSW50ZW50Q29uc3RydWN0b3IgSW50ZW50OyAvLyBV
c2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisKICAgICAgICAgYXR0cmlidXRlIERPTVBsdWdp
bkNvbnN0cnVjdG9yIFBsdWdpbjsKICAgICAgICAgYXR0cmlidXRlIERPTVBsdWdpbkFycmF5Q29u
c3RydWN0b3IgUGx1Z2luQXJyYXk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpp
bmRleCBlN2Q5ZmViYzQwOTdkNGIyZTFlMGUxMTU5MDdlMTI3NDUwZTYxZDFhLi45ZDJlMDYwNDc1
MjY2NmU3OTA1MjE5NjQ0YjBkN2U3ZjgwZWQ4MmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0
dXJlcy5neXBpCkBAIC0xNTksNiArMTU5LDExIEBACiAgICAgICAgICAgJ0VOQUJMRV9SRUdJU1RF
Ul9QUk9UT0NPTF9IQU5ETEVSPTEnLAogICAgICAgICBdLAogICAgICAgfV0sCisgICAgICBbJ2Vu
YWJsZV93ZWJfaW50ZW50cz09MScsIHsKKyAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKKyAg
ICAgICAgICAnRU5BQkxFX1dFQl9JTlRFTlRTPTEnLAorICAgICAgICBdLAorICAgICAgfV0sCiAg
ICAgICBbJ09TPT0ibWFjIicsIHsKICAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKICAgICAg
ICAgICAnRU5BQkxFX1JVQkJFUl9CQU5ESU5HPTEnLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZApp
bmRleCBhZjliZWI2YTBhMzAxOTFiNjFlNGVlOTMxZDRlNjhjOWU2ZGYwNmVlLi43ZmUyNzYzM2Jj
YTJmZjI3NTZkZmM2YWJlYmE1NmZhYjMzNzE0NDZjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBl
ZApAQCAtMTkyOCw2ICsxOTI4LDkgQEAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS8K
ICMgTWljcm9kYXRhIERPTSBBUEkgaXMgbm90IHlldCBlbmFibGVkLgogZmFzdC9kb20vTWljcm9E
YXRhCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwog
IyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDQ2ODJhZmVmMzQyYjFlZmJmYzU0OGJjZDQ4MjIwZTU3
OWI5MGUwNTkuLjIzMTMwNGQxNTEwNjBlNGNiODI2MjliMGI1YWMzYWJmYWE2MTY4YzIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0xNDM1LDYgKzE0MzUsOSBAQCBmYXN0L2ZyYW1lcy9m
bGF0dGVuaW5nL2lmcmFtZS1mbGF0dGVuaW5nLWZpeGVkLXdpZHRoLWFuZC1oZWlnaHQtbm8tc2Ny
b2xsaW5nLmh0bQogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIy
NDgKIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctdW5pZmllZC1lbXVsYXRpb24uaHRtbAogCisj
IFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRl
ciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZAppbmRleCAzYjk4MDNkYTg3MGQxZjc5YmEzOTcwZjRjMzk1YmNhNjI2ZGMyNmNm
Li5lZWZhZjQ4YjVhMzViNGViY2RiYzVlNjg3OTU0OGE3MjNmMjc5NDViIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvU2tpcHBlZApAQCAtNDg4LDYgKzQ4OCw5IEBAIGZhc3QvcmVwYWludC90YWJsZS1leHRy
YS1ib3R0b20tZ3Jvdy5odG1sCiAjIERSVCBkb2Vzbid0IHN1cHBvcnQgb3ZlcnJpZGVQcmVmZXJl
bmNlKCJXZWJLaXQqRm9udE1hcCIuLi4pCiBmYXN0L3RleHQvaW50ZXJuYXRpb25hbC9sb2NhbGUt
c2Vuc2l0aXZlLWZvbnRzLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQu
Cit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2lu
dGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IDcyYmYzMzM3MWNiNTk0YzQ5
ODM1NmZmY2YyZDM2NDk5Y2ViYTQ5YmYuLjY3NjExNmU5ZmM0Mzk2N2QzZTBlZjEwNjNkYmE1ZTgx
ZTRjMTJkNzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZApAQCAtMjQ4NCw2ICsyNDg0LDkgQEAg
Y3NzMy9mbGV4Ym94L2xpbmUtd3JhcHBpbmcuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzI0OTEKIGh0dHAvdGVzdHMvbWlzYy9vbmxvYWQtcmVtb3ZlLWlm
cmFtZS1jcmFzaC0yLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCit3
ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQuCiBwb2ludGVy
LWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKaW5kZXggZWNiZTE5MWRjZmI1MThlZjg0
Mjc1NGVkZmY1ZDg1ZGRhZmYxOTI0Yi4uNzhhODQxMDk0MTY5MjcwMDI2YThmYmMxYjIwOTExYmNh
NDcxM2JjZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKQEAgLTE0ODMsNiArMTQ4Myw5IEBA
IGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBh
Z2UuaHRtbAogIyBEUlQgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0
KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1m
b250cy5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50
cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAppbmRleCBlZTc3YTE3MTQ0YzI4OTJj
YTQyNDJjYmJhNmQ1NDBmODE3ZDc2NTM3Li40ODE2ZDExYTFjMjZlMTdmNzI5MWE4YmU1NzYzZDI2
NzI0MTRlNzk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9Ta2lw
cGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1NraXBwZWQKQEAgLTIwMjEs
NiArMjAyMSw5IEBAIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4t
c2Nyb2xsaW5nLXBhZ2UuaHRtbAogIyBEUlQgZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVy
ZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQogZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxl
LXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMgV2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVk
Lgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9p
bnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRl
bnRzLWFwaS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRz
LWFwaS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDJlYWZkMTY3ZmE2YzAzNGNlNDM0ZGM2MzUx
MGU0MmVkNWM2MTAxYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmludGVudHMv
d2ViLWludGVudHMtYXBpLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitQQVNTIHZhciBp
bnRlbnQgPSBuZXcgSW50ZW50KCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCitQQVNTIG5ldyBJbnRlbnQoJ2EnKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BBU1MgbmV3IEludGVudCgnJywnJywnJykgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBu
ZXcgSW50ZW50KCcnLCdiJywnYycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IEludGVudCgnJywnJywnYycpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IEludGVu
dCgnYScsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNl
cHRpb24gMTIuCitQQVNTIGludGVudDEuYWN0aW9uIGlzICJhIgorUEFTUyBpbnRlbnQxLnR5cGUg
aXMgImIiCitQQVNTIGludGVudDEuZGF0YSBpcyB1bmRlZmluZWQuCitQQVNTIGludGVudDEuYWN0
aW9uIGlzICJhIgorUEFTUyBpbnRlbnQyLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50Mi50eXBl
IGlzICJiIgorUEFTUyBpbnRlbnQyLmRhdGEgaXMgImMiCitQQVNTIGludGVudDMuYWN0aW9uIGlz
ICJhIgorUEFTUyBpbnRlbnQzLnR5cGUgaXMgImIiCitQQVNTIGludGVudDMuZGF0YS5jIGlzICJk
IgorUEFTUyBpbnRlbnQ0LmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50NC50eXBlIGlzICJiIgor
UEFTUyBpbnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheSBpcyB0cnVlCitQQVNTIGludGVudDQu
ZGF0YS5sZW5ndGggaXMgMgorUEFTUyBpbnRlbnQ0LmRhdGFbMF0gaXMgImMiCitQQVNTIGludGVu
dDQuZGF0YVsxXSBpcyAiZCIKK1BBU1MgaW50ZW50NS5kYXRhIGlzIDQKK1BBU1MgaW50ZW50Ni5k
YXRhIGlzIDQuNQorUEFTUyBpbnRlbnQ3LmRhdGEgaXMgdHJ1ZQorUEFTUyBpbnRlbnQ4LmRhdGEg
aXMgbnVsbAorUEFTUyBpbnRlbnQ5LmRhdGEgPT0gJ1tvYmplY3QgT2JqZWN0XScgaXMgdHJ1ZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmludGVudHMvd2ViLWludGVudHMtYXBpLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNDI2
YjA4NTQwNjBkYzdjZTRjNzBmNzlmMGQyMDVjYWI0OTBjMGIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCkBAIC0wLDAgKzEsNTQg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCI+CisgICAgICBzaG91bGRUaHJvdygidmFyIGludGVudCA9IG5ldyBJbnRlbnQoKSIsICIn
VHlwZUVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cyciKTs7CisKKyAgICAgIHNob3VsZFRocm93
KCJuZXcgSW50ZW50KCdhJykiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMnIik7
CisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnJywnJywnJykiLCAiJ0Vycm9yOiBTWU5U
QVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRl
bnQoJycsJ2InLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIp
OworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJycsJycsJ2MnKSIsICInRXJyb3I6IFNZ
TlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTInIik7CisgICAgICBzaG91bGRUaHJvdygibmV3IElu
dGVudCgnYScsJycsJ2MnKSIsICInRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIn
Iik7CisKKyAgICAgIHZhciBpbnRlbnQxID0gbmV3IEludGVudCgnYScsICdiJyk7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsKKyAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygiaW50ZW50MS50eXBlIiwgImIiKTsKKyAgICAgIHNob3VsZEJlVW5k
ZWZpbmVkKCJpbnRlbnQxLmRhdGEiKTsKKyAgICAgIGludGVudDEuYWN0aW9uID0gImFiYyI7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEuYWN0aW9uIiwgImEiKTsKKworICAg
ICAgdmFyIGludGVudDIgPSBuZXcgSW50ZW50KCJhIiwgImIiLCAiYyIpOworICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLmFjdGlvbicsICJhIik7CisgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ2ludGVudDIudHlwZScsICJiIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ2ludGVudDIuZGF0YScsICJjIik7CisKKyAgICAgIHZhciBpbnRlbnQzID0gbmV3IElu
dGVudCgiYSIsICJiIiwgeyJjIjogImQifSk7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J2ludGVudDMuYWN0aW9uJywgImEiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50
ZW50My50eXBlJywgImIiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50My5k
YXRhLmMnLCAiZCIpOworCisgICAgICB2YXIgaW50ZW50NCA9IG5ldyBJbnRlbnQoImEiLCAiYiIs
IFsiYyIsICJkIl0pOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQ0LmFjdGlv
bicsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQudHlwZScsICJi
Iik7CisgICAgICBzaG91bGRCZVRydWUoJ2ludGVudDQuZGF0YSBpbnN0YW5jZW9mIEFycmF5Jyk7
CisgICAgICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ0LmRhdGEubGVuZ3RoJywgMik7CisgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVswXScsICJjIik7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDQuZGF0YVsxXScsICJkIik7CisKKyAgICAgIHZh
ciBpbnRlbnQ1ID0gbmV3IEludGVudCgiYSIsICJiIiwgNCk7CisgICAgICBzaG91bGRFdmFsdWF0
ZVRvKCdpbnRlbnQ1LmRhdGEnLCA0KTsKKyAgICAgIHZhciBpbnRlbnQ2ID0gbmV3IEludGVudCgn
YScsICdiJywgNC41KTsKKyAgICAgIHNob3VsZEV2YWx1YXRlVG8oJ2ludGVudDYuZGF0YScsIDQu
NSk7CisgICAgICB2YXIgaW50ZW50NyA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIHRydWUpOworICAg
ICAgc2hvdWxkQmVUcnVlKCdpbnRlbnQ3LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ4ID0gbmV3
IEludGVudCgnYScsICdiJywgbnVsbCk7CisgICAgICBzaG91bGRCZU51bGwoJ2ludGVudDguZGF0
YScpOworICAgICAgdmFyIGludGVudDkgPSBuZXcgSW50ZW50KCdhJywgJ2InLCB7fSk7CisgICAg
ICBzaG91bGRFdmFsdWF0ZVRvKCdpbnRlbnQ5LmRhdGEnLCB7fSk7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121453</attachid>
            <date>2012-01-06 11:25:58 -0800</date>
            <delta_ts>2012-01-06 16:53:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73051-20120106112557.patch</filename>
            <type>text/plain</type>
            <size>20511</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWI1ZTRiYzQ3MGFkZTNl
NWY5ZDk4ZDYzZWY0MzI1NjczMjg2YjYwNy4uMzlkY2VkNGM0ZmFjZGVkMjU5YTE0ZDRiYmU1MDI1
M2Y2M2IyMTZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTIzICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFdlYkNvcmUgaW1wbGVt
ZW50YXRpb24gb2YgdGhlIEludGVudCBvYmplY3QKKyAgICAgICAgU2VlIGh0dHA6Ly9kdmNzLncz
Lm9yZy9oZy93ZWItaW50ZW50cy9yYXctZmlsZS90aXAvc3BlYy9PdmVydmlldy5odG1sCisgICAg
ICAgIGZvciBkcmFmdCBzcGVjLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRlc3Q6IHdlYi1pbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvaW50ZW50cy9JbnRlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkludGVudDo6SW50ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6YWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6c2V0QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVudDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OnNldFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZW50OjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVudDo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlbnQ6OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9pbnRlbnRzL0ludGVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmlkbDogQWRkZWQuCisKIDIwMTItMDEtMDUgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMDQwNjApOiBmYXN0L2Zvcm1z
L3RleHRhcmVhLW1ldHJpY3MuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CmluZGV4IDM1OGFhMGM3ZDViMmJlMDNlYmVhNmY3OWMxNGU5NDUzYjczMDdiNTEuLjQxYzI4ZTcx
MDY5MGQwOTdkNDljYTI0YzY5NGE3NjBlZDQ2YmRlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTEtMjMgIEdyZWcgQmlsbG9jayAgPGdiaWxsb2Nr
QGdvb2dsZS5jb20+CisKKyAgICAgICAgW1dlYiBJbnRlbnRzXSBGbGFnZ2VkLW9mZiBXZWJDb3Jl
IGltcGxlbWVudGF0aW9uIG9mIG5hdmlnYXRvci5zdGFydEFjdGl2aXR5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzA1MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmVhdHVyZXMuZ3lwaToKKwogMjAx
Mi0wMS0wNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBDaGVjayB3aGV0aGVyIGEgV2ViVmlldyBleGlzdHMgYmVmb3JlIGFjY2Vzc2luZyBpdCBpbiBT
dG9yYWdlQXJlYVByb3h5LiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgY2FzZSwgZS5nLiBm
b3IgZGV0YWNoZWQgaWZyYW1lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW50ZW50cy9JbnRlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRlbnRzL0ludGVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjBhMzI0OGIwNzI3NmM4OTIxZWMzNTQyNGQ3YTdhMWVhYWYyOWM0
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9JbnRl
bnQuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50
LmgiCisKKyNpZiBFTkFCTEUoV0VCX0lOVEVOVFMpCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGFzc1JlZlB0cjxJbnRlbnQ+IEludGVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
YWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYWN0aW9uLmlzRW1wdHko
KSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBpZiAodHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEludGVudChh
Y3Rpb24sIHR5cGUsIGRhdGEpKTsKK30KKworSW50ZW50OjpJbnRlbnQoY29uc3QgU3RyaW5nJiBh
Y3Rpb24sIGNvbnN0IFN0cmluZyYgdHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEpCisgICAgOiBtX2FjdGlvbihhY3Rpb24pCisgICAgLCBtX3R5cGUodHlwZSkKK3sK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgbV9kYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGVGcm9tV2lyZShkYXRhLT50b1dpcmVTdHJpbmcoKSk7CisgICAgZWxzZQorICAgICAgICBt
X2RhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpOworfQorCitjb25zdCBT
dHJpbmcmIEludGVudDo6YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hY3Rpb247Cit9
CisKK2NvbnN0IFN0cmluZyYgSW50ZW50Ojp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90
eXBlOworfQorCitTZXJpYWxpemVkU2NyaXB0VmFsdWUqIEludGVudDo6ZGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZGF0YS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbnRl
bnRzL0ludGVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2YmViZDZlNTY3YWJmMTRmMTBjMTFmNjA3MzMzZDk2
MzllNmU2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVu
dHMvSW50ZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW50ZW50X2gKKyNkZWZpbmUgSW50ZW50
X2gKKworI2lmIEVOQUJMRShXRUJfSU5URU5UUykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7
CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIEludGVudCA6IHB1YmxpYyBS
ZWZDb3VudGVkPEludGVudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludGVu
dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHR5cGUsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0OworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgp
IGNvbnN0OworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSgpIGNvbnN0OworCisgICAg
aW50IGlkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2b2lkIHNldElkZW50aWZpZXIoaW50KTsKKwor
cHJpdmF0ZToKKyAgICBJbnRlbnQoY29uc3QgU3RyaW5nJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYg
dHlwZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEpOworCisgICAgU3Ry
aW5nIG1fYWN0aW9uOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKworI2VuZGlmIC8vIEludGVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ludGVudHMvSW50ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW50ZW50cy9J
bnRlbnQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzNjU3ZjRjODM3ZmRmMWZkNzFmMTY4NTU1ZmUwZTRmMTQz
NjE5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ludGVudHMv
SW50ZW50LmlkbApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisgIGlu
dGVyZmFjZSBbCisgICAgICBDb25kaXRpb25hbD1XRUJfSU5URU5UUywKKyAgICAgIENvbnN0cnVj
dG9yKGluIERPTVN0cmluZyBhY3Rpb24sIGluIERPTVN0cmluZyB0eXBlLCBpbiBbT3B0aW9uYWw9
Q2FsbFdpdGhOdWxsVmFsdWVdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhKSwKKyAgICAgIENv
bnN0cnVjdG9yUmFpc2VzRXhjZXB0aW9uCisgIF0gSW50ZW50IHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBhY3Rpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBkYXRhOworICB9OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAppbmRleCBhMjRiNDQ4ZjRiMWIxNjY4ODI5OWIzYzIzYTMzMGFlYjg2ODIyNDVhLi41ZDJiOTVj
NzgzMWYwODFlNjA0NTM2MzVhOTcxNzlmZDg4MTJiOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cApAQCAtNTEsNiArNTEsNyBAQAogICAgICAgJy4uLycsCiAgICAgICAn
Li4vLi4nLAogICAgICAgJy4uL01vZHVsZXMvZ2FtZXBhZCcsCisgICAgICAnLi4vTW9kdWxlcy9p
bnRlbnRzJywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9hY2Nlc3NpYmls
aXR5L2Nocm9taXVtJywKICAgICAgICcuLi9iaW5kaW5ncycsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
ZjM1NTg2OGQ1ODk5ZmFmODVjZTc1OTYwYjI1ZWZkN2VhYmRjYzc4Yi4uY2JhOGFiNmM3YTg5NmYx
N2I4NzA4OWVlYjM2Zjc0YTdiZDkwMmJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTE0OSw2ICsx
MTQ5LDcgQEAKICAgICAgICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5pZGwnLAogICAg
ICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTGlzdC5pZGwnLAogICAgICAgICAgICAg
J01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmlkbCcsCisgICAgICAgICAgICAnTW9k
dWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NDaGFyc2V0UnVs
ZS5pZGwnLAogICAgICAgICAgICAgJ2Nzcy9DU1NGb250RmFjZVJ1bGUuaWRsJywKICAgICAgICAg
ICAgICdjc3MvQ1NTSW1wb3J0UnVsZS5pZGwnLApAQCAtMTY5NSw2ICsxNjk2LDggQEAKICAgICAg
ICAgICAgICdNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZExpc3QuaCcsCiAgICAgICAgICAgICAnTW9k
dWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwJywKICAgICAgICAgICAgICdNb2R1bGVz
L2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2ludGVu
dHMvSW50ZW50LmNwcCcsCisgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5oJywK
ICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwJywKICAgICAgICAg
ICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAnLAogICAgICAgICAg
ICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCmluZGV4IDE5NjY4ZTNkNTcyNWQ2ODk5NTllOWM5NGQ1NjM2MWM1ZDE3MTQ2
NDguLjg0MTRmNzVmM2RiYzhiOTQzN2ExYTY5OGY1YzIxZTQxNzdiMGU2MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKQEAgLTYwNyw2ICs2MDcsOCBAQCBtb2R1bGUgd2luZG93IHsKICAg
ICAgICAgYXR0cmlidXRlIFtFbmFibGVkQXRSdW50aW1lPXdlYmtpdFZpZGVvVHJhY2tdIFRyYWNr
RXZlbnRDb25zdHJ1Y3RvciBUcmFja0V2ZW50OwogI2VuZGlmCiAKKyAgICAgICAgYXR0cmlidXRl
IFtDb25kaXRpb25hbD1XRUJfSU5URU5UU10gSW50ZW50Q29uc3RydWN0b3IgSW50ZW50OyAvLyBV
c2FibGUgd2l0aCB0aGUgbmV3IG9wZXJhdG9yCisKICAgICAgICAgYXR0cmlidXRlIERPTVBsdWdp
bkNvbnN0cnVjdG9yIFBsdWdpbjsKICAgICAgICAgYXR0cmlidXRlIERPTVBsdWdpbkFycmF5Q29u
c3RydWN0b3IgUGx1Z2luQXJyYXk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpp
bmRleCBlN2Q5ZmViYzQwOTdkNGIyZTFlMGUxMTU5MDdlMTI3NDUwZTYxZDFhLi45ZDJlMDYwNDc1
MjY2NmU3OTA1MjE5NjQ0YjBkN2U3ZjgwZWQ4MmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0
dXJlcy5neXBpCkBAIC0xNTksNiArMTU5LDExIEBACiAgICAgICAgICAgJ0VOQUJMRV9SRUdJU1RF
Ul9QUk9UT0NPTF9IQU5ETEVSPTEnLAogICAgICAgICBdLAogICAgICAgfV0sCisgICAgICBbJ2Vu
YWJsZV93ZWJfaW50ZW50cz09MScsIHsKKyAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKKyAg
ICAgICAgICAnRU5BQkxFX1dFQl9JTlRFTlRTPTEnLAorICAgICAgICBdLAorICAgICAgfV0sCiAg
ICAgICBbJ09TPT0ibWFjIicsIHsKICAgICAgICAgJ2ZlYXR1cmVfZGVmaW5lcyc6IFsKICAgICAg
ICAgICAnRU5BQkxFX1JVQkJFUl9CQU5ESU5HPTEnLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGEzYmZlY2EwZDBmNTYw
NzY2MmRlNzg1YzY1OTY4OTEzYWUyMWQ2ZjkuLmEwNjZjYjY1Njk5NmRlMmIzMTA4NjliMjBmNzcy
NDJmZDgzMTBiMGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKQEAgLTkxLDYgKzkxLDEwIEBAIEJVR1dLNjg2MTAgU0tJUCA6
IGZhc3QvZG9tL01pY3JvRGF0YSA9IFBBU1MKIC8vIFVuc2tpcCBhZnRlciBjaGFuZ2VzIG9uIGJv
dGggc2lkZXMgaGF2ZSBsYW5kZWQgYW5kIHJvbGxlZCB0b2dldGhlci4KIEJVR0NSMTAzOTM5IFNL
SVAgOiBodHRwL3Rlc3RzL2FwcGNhY2hlL3dyb25nLWNvbnRlbnQtdHlwZS5odG1sID0gVEVYVAog
CisvLyBDdXJyZW50bHkgV2ViIEludGVudHMgaXMgZGlzYWJsZWQuIFRlc3RzIHBhc3Mgd2l0aCB0
aGUgcHJvcGVyCisvLyBidWlsZCBmbGFnIHR1cm5lZCBvbi4KK0JVR0dCSUxMT0NLIFNLSVAgOiB3
ZWJpbnRlbnRzID0gRkFJTAorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gV09OVEZJWCBURVNUUwogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggYWY5YmViNmEwYTMwMTkxYjYxZTRl
ZTkzMWQ0ZTY4YzllNmRmMDZlZS4uN2ZlMjc2MzNiY2EyZmYyNzU2ZGZjNmFiZWJhNTZmYWIzMzcx
NDQ2YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTE5MjgsNiArMTkyOCw5IEBAIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvCiAjIE1pY3JvZGF0YSBET00gQVBJIGlzIG5v
dCB5ZXQgZW5hYmxlZC4KIGZhc3QvZG9tL01pY3JvRGF0YQogCisjIFdlYiBJbnRlbnRzIGlzIG5v
dCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5vdCBpbXBs
ZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA0
NjgyYWZlZjM0MmIxZWZiZmM1NDhiY2Q0ODIyMGU1NzliOTBlMDU5Li4yMzEzMDRkMTUxMDYwZTRj
YjgyNjI5YjBiNWFjM2FiZmFhNjE2OGMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAt
MTQzNSw2ICsxNDM1LDkgQEAgZmFzdC9mcmFtZXMvZmxhdHRlbmluZy9pZnJhbWUtZmxhdHRlbmlu
Zy1maXhlZC13aWR0aC1hbmQtaGVpZ2h0LW5vLXNjcm9sbGluZy5odG0KICMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMjQ4CiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxs
aW5nLXVuaWZpZWQtZW11bGF0aW9uLmh0bWwKIAorIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVu
YWJsZWQuCit3ZWJpbnRlbnRzLworCiAjIFBvaW50ZXIgTG9jayBpcyBub3QgaW1wbGVtZW50ZWQu
CiBwb2ludGVyLWxvY2svCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9T
a2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggM2I5ODAzZGE4
NzBkMWY3OWJhMzk3MGY0YzM5NWJjYTYyNmRjMjZjZi4uZWVmYWY0OGI1YTM1YjRlYmNkYmM1ZTY4
Nzk1NDhhNzIzZjI3OTQ1YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Nr
aXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTQ4OCw2ICs0
ODgsOSBAQCBmYXN0L3JlcGFpbnQvdGFibGUtZXh0cmEtYm90dG9tLWdyb3cuaHRtbAogIyBEUlQg
ZG9lc24ndCBzdXBwb3J0IG92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0KkZvbnRNYXAiLi4uKQog
ZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvbG9jYWxlLXNlbnNpdGl2ZS1mb250cy5odG1sCiAKKyMg
V2ViIEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVy
IExvY2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZAppbmRleCA3MmJmMzMzNzFjYjU5NGM0OTgzNTZmZmNmMmQzNjQ5OWNlYmE0OWJmLi42
NzYxMTZlOWZjNDM5NjdkM2UwZWYxMDYzZGJhNWU4MWU0YzEyZDc5IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L1NraXBwZWQKQEAgLTI0ODQsNiArMjQ4NCw5IEBAIGNzczMvZmxleGJveC9saW5lLXdyYXBwaW5n
Lmh0bWwKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNDkxCiBo
dHRwL3Rlc3RzL21pc2Mvb25sb2FkLXJlbW92ZS1pZnJhbWUtY3Jhc2gtMi5odG1sCiAKKyMgV2Vi
IEludGVudHMgaXMgbm90IHlldCBlbmFibGVkLgord2ViaW50ZW50cy8KKwogIyBQb2ludGVyIExv
Y2sgaXMgbm90IGltcGxlbWVudGVkLgogcG9pbnRlci1sb2NrLwogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9T
a2lwcGVkCmluZGV4IGVjYmUxOTFkY2ZiNTE4ZWY4NDI3NTRlZGZmNWQ4NWRkYWZmMTkyNGIuLjc4
YTg0MTA5NDE2OTI3MDAyNmE4ZmJjMWIyMDkxMWJjYTQ3MTNiY2YgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9Ta2lwcGVkCkBAIC0xNDgzLDYgKzE0ODMsOSBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVl
bGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJUIGRvZXNuJ3Qgc3Vw
cG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikKIGZhc3QvdGV4dC9p
bnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisjIFdlYiBJbnRlbnRz
IGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRlciBMb2NrIGlzIG5v
dCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJv
L1NraXBwZWQKaW5kZXggZWU3N2ExNzE0NGMyODkyY2E0MjQyY2JiYTZkNTQwZjgxN2Q3NjUzNy4u
NDgxNmQxMWExYzI2ZTE3ZjcyOTFhOGJlNTc2M2QyNjcyNDE0ZTc5NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW5jYWlyby9Ta2lwcGVkCkBAIC0yMDIxLDYgKzIwMjEsOSBAQCBmYXN0L2V2ZW50cy9w
bGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWluLXNjcm9sbGluZy1wYWdlLmh0bWwKICMgRFJU
IGRvZXNuJ3Qgc3VwcG9ydCBvdmVycmlkZVByZWZlcmVuY2UoIldlYktpdCpGb250TWFwIi4uLikK
IGZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL2xvY2FsZS1zZW5zaXRpdmUtZm9udHMuaHRtbAogCisj
IFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxlZC4KK3dlYmludGVudHMvCisKICMgUG9pbnRl
ciBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZC4KIHBvaW50ZXItbG9jay8KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50ZW50cy1hcGktZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQyZWFmZDE2N2ZhNmMwMzRjZTQzNGRjNjM1MTBlNDJlZDVjNjEwMWEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJpbnRlbnRzL3dlYi1pbnRlbnRzLWFwaS1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzMSBAQAorUEFTUyB2YXIgaW50ZW50ID0gbmV3IEludGVudCgpIHRocmV3
IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgorUEFTUyBuZXcgSW50
ZW50KCdhJykgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMu
CitQQVNTIG5ldyBJbnRlbnQoJycsJycsJycpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFY
X0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4KK1BBU1MgbmV3IEludGVudCgnJywnYicsJ2MnKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIuCitQQVNTIG5l
dyBJbnRlbnQoJycsJycsJ2MnKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNZTlRBWF9FUlI6IERP
TSBFeGNlcHRpb24gMTIuCitQQVNTIG5ldyBJbnRlbnQoJ2EnLCcnLCdjJykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBpbnRlbnQxLmFj
dGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50MS50eXBlIGlzICJiIgorUEFTUyBpbnRlbnQxLmRhdGEg
aXMgdW5kZWZpbmVkLgorUEFTUyBpbnRlbnQxLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50Mi5h
Y3Rpb24gaXMgImEiCitQQVNTIGludGVudDIudHlwZSBpcyAiYiIKK1BBU1MgaW50ZW50Mi5kYXRh
IGlzICJjIgorUEFTUyBpbnRlbnQzLmFjdGlvbiBpcyAiYSIKK1BBU1MgaW50ZW50My50eXBlIGlz
ICJiIgorUEFTUyBpbnRlbnQzLmRhdGEuYyBpcyAiZCIKK1BBU1MgaW50ZW50NC5hY3Rpb24gaXMg
ImEiCitQQVNTIGludGVudDQudHlwZSBpcyAiYiIKK1BBU1MgaW50ZW50NC5kYXRhIGluc3RhbmNl
b2YgQXJyYXkgaXMgdHJ1ZQorUEFTUyBpbnRlbnQ0LmRhdGEubGVuZ3RoIGlzIDIKK1BBU1MgaW50
ZW50NC5kYXRhWzBdIGlzICJjIgorUEFTUyBpbnRlbnQ0LmRhdGFbMV0gaXMgImQiCitQQVNTIGlu
dGVudDUuZGF0YSBpcyA0CitQQVNTIGludGVudDYuZGF0YSBpcyA0LjUKK1BBU1MgaW50ZW50Ny5k
YXRhIGlzIHRydWUKK1BBU1MgaW50ZW50OC5kYXRhIGlzIG51bGwKK1BBU1MgaW50ZW50OS5kYXRh
ID09ICdbb2JqZWN0IE9iamVjdF0nIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJpbnRl
bnRzL3dlYi1pbnRlbnRzLWFwaS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWItaW50
ZW50cy1hcGkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDQyNmIwODU0MDYwZGM3Y2U0YzcwZjc5ZjBkMjA1
Y2FiNDkwYzBiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViaW50ZW50cy93ZWIt
aW50ZW50cy1hcGkuaHRtbApAQCAtMCwwICsxLDU0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgc2hvdWxkVGhyb3co
InZhciBpbnRlbnQgPSBuZXcgSW50ZW50KCkiLCAiJ1R5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1
bWVudHMnIik7OworCisgICAgICBzaG91bGRUaHJvdygibmV3IEludGVudCgnYScpIiwgIidUeXBl
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzJyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJ
bnRlbnQoJycsJycsJycpIiwgIidFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMici
KTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcgSW50ZW50KCcnLCdiJywnYycpIiwgIidFcnJvcjog
U1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMiciKTsKKyAgICAgIHNob3VsZFRocm93KCJuZXcg
SW50ZW50KCcnLCcnLCdjJykiLCAiJ0Vycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEy
JyIpOworICAgICAgc2hvdWxkVGhyb3coIm5ldyBJbnRlbnQoJ2EnLCcnLCdjJykiLCAiJ0Vycm9y
OiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyJyIpOworCisgICAgICB2YXIgaW50ZW50MSA9
IG5ldyBJbnRlbnQoJ2EnLCAnYicpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJpbnRl
bnQxLmFjdGlvbiIsICJhIik7CisgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImludGVudDEu
dHlwZSIsICJiIik7CisgICAgICBzaG91bGRCZVVuZGVmaW5lZCgiaW50ZW50MS5kYXRhIik7Cisg
ICAgICBpbnRlbnQxLmFjdGlvbiA9ICJhYmMiOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJpbnRlbnQxLmFjdGlvbiIsICJhIik7CisKKyAgICAgIHZhciBpbnRlbnQyID0gbmV3IEludGVu
dCgiYSIsICJiIiwgImMiKTsKKyAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnaW50ZW50Mi5h
Y3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLnR5cGUn
LCAiYiIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQyLmRhdGEnLCAiYyIp
OworCisgICAgICB2YXIgaW50ZW50MyA9IG5ldyBJbnRlbnQoImEiLCAiYiIsIHsiYyI6ICJkIn0p
OworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRlbnQzLmFjdGlvbicsICJhIik7Cisg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDMudHlwZScsICJiIik7CisgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ2ludGVudDMuZGF0YS5jJywgImQiKTsKKworICAgICAgdmFy
IGludGVudDQgPSBuZXcgSW50ZW50KCJhIiwgImIiLCBbImMiLCAiZCJdKTsKKyAgICAgIHNob3Vs
ZEJlRXF1YWxUb1N0cmluZygnaW50ZW50NC5hY3Rpb24nLCAiYSIpOworICAgICAgc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCdpbnRlbnQ0LnR5cGUnLCAiYiIpOworICAgICAgc2hvdWxkQmVUcnVlKCdp
bnRlbnQ0LmRhdGEgaW5zdGFuY2VvZiBBcnJheScpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygn
aW50ZW50NC5kYXRhLmxlbmd0aCcsIDIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdp
bnRlbnQ0LmRhdGFbMF0nLCAiYyIpOworICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdpbnRl
bnQ0LmRhdGFbMV0nLCAiZCIpOworCisgICAgICB2YXIgaW50ZW50NSA9IG5ldyBJbnRlbnQoImEi
LCAiYiIsIDQpOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50NS5kYXRhJywgNCk7Cisg
ICAgICB2YXIgaW50ZW50NiA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIDQuNSk7CisgICAgICBzaG91
bGRFdmFsdWF0ZVRvKCdpbnRlbnQ2LmRhdGEnLCA0LjUpOworICAgICAgdmFyIGludGVudDcgPSBu
ZXcgSW50ZW50KCdhJywgJ2InLCB0cnVlKTsKKyAgICAgIHNob3VsZEJlVHJ1ZSgnaW50ZW50Ny5k
YXRhJyk7CisgICAgICB2YXIgaW50ZW50OCA9IG5ldyBJbnRlbnQoJ2EnLCAnYicsIG51bGwpOwor
ICAgICAgc2hvdWxkQmVOdWxsKCdpbnRlbnQ4LmRhdGEnKTsKKyAgICAgIHZhciBpbnRlbnQ5ID0g
bmV3IEludGVudCgnYScsICdiJywge30pOworICAgICAgc2hvdWxkRXZhbHVhdGVUbygnaW50ZW50
OS5kYXRhJywge30pOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>