<?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>177788</bug_id>
          
          <creation_ts>2017-10-02 15:16:47 -0700</creation_ts>
          <short_desc>AX: Make video objects accessible on iOS</short_desc>
          <delta_ts>2017-10-05 11:12:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jlewis3</cc>
    
    <cc>n_wang</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1355556</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-02 15:16:47 -0700</bug_when>
    <thetext>We should expose the video object itself so that we are able to provide some general functions to let iOS users interact with the video playback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355557</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-02 15:17:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/34778028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355575</commentid>
    <comment_count>2</comment_count>
      <attachid>322461</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-02 15:38:28 -0700</bug_when>
    <thetext>Created attachment 322461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356680</commentid>
    <comment_count>3</comment_count>
      <attachid>322461</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-10-04 15:01:31 -0700</bug_when>
    <thetext>Comment on attachment 322461
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:449
&gt; +    if (node &amp;&amp; is&lt;HTMLMediaElement&gt;(node) &amp;&amp; nodeHasRole(node, nullAtom()))

I think the is&lt;&gt; check takes care of node == null case, so you can remove that

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:66
&gt; +    if (!node || !is&lt;HTMLMediaElement&gt;(*node))

I think the is&lt;&gt; check takes care of !node

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:73
&gt; +    if (HTMLMediaElement* element = mediaElement()) {

this block can be done in two lines

if (HTMLMediaElement* element = mediaElement())
   return localizedMediaTimeDescription(element-&gt;currentTime())

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:82
&gt; +    if (HTMLMediaElement* element = mediaElement()) {

same comment as above

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:89
&gt; +void AccessibilityMediaObject::fastSeek(bool forward)

fast doesn&apos;t seem like the right descriptor here. 

is this just mediaSeek() or is there something faster about this

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:95
&gt; +    (void)forward;

I think you can use UNUSED_PARAM(forward)

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:100
&gt; +    double timeDelta = ceil(duration * 5.0 / 100.0);

I think we can just do

const double seekStep = .05;
and use that rather than doing the math

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.h:42
&gt; +    String stringValue() const override;

most of these might be able to be moved to private: since they&apos;re overrides

&gt; Source/WebCore/accessibility/AccessibilityMediaObject.h:65
&gt; +    void fastSeek(bool);

instead of using a bool, you might use

enum { SeekForward, SeekBackward }

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:686
&gt; +    return downcast&lt;AccessibilityMediaObject&gt;(m_object)-&gt;duration();

returning the duration for a &quot;videoDescription&quot; seems like a mismatch. maybe this should be named &quot;interactiveVideoDuration&quot;

&gt; LayoutTests/accessibility/ios-simulator/video-elements-ios.html:10
&gt; +  Your browser does not support the video tag.

can you add some of the video cases where we don&apos;t want to expose as an object to verify that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356698</commentid>
    <comment_count>4</comment_count>
      <attachid>322461</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-04 15:48:47 -0700</bug_when>
    <thetext>Comment on attachment 322461
Patch

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

Thanks, will address them.

&gt;&gt; Source/WebCore/accessibility/AccessibilityMediaObject.cpp:95
&gt;&gt; +    (void)forward;
&gt; 
&gt; I think you can use UNUSED_PARAM(forward)

Oh I accidentally left this in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356701</commentid>
    <comment_count>5</comment_count>
      <attachid>322735</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-04 15:59:44 -0700</bug_when>
    <thetext>Created attachment 322735
patch

update from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356721</commentid>
    <comment_count>6</comment_count>
      <attachid>322735</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-04 16:43:16 -0700</bug_when>
    <thetext>Comment on attachment 322735
patch

Clearing flags on attachment: 322735

Committed r222887: &lt;http://trac.webkit.org/changeset/222887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356722</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-04 16:43:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357102</commentid>
    <comment_count>8</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-10-05 11:09:24 -0700</bug_when>
    <thetext>This patch introduced a test that is failing consistently on iOS:

accessibility/ios-simulator/video-elements-ios.html


https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=accessibility%2Fios-simulator%2Fvideo-elements-ios.html

build:

https://build.webkit.org/results/Apple%20iOS%2011%20Simulator%20Release%20WK2%20(Tests)/r222911%20(343)/results.html
https://build.webkit.org/builders/Apple%20iOS%2011%20Simulator%20Release%20WK2%20(Tests)/builds/343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357106</commentid>
    <comment_count>9</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-10-05 11:12:53 -0700</bug_when>
    <thetext>(In reply to Matt Lewis from comment #8)
&gt; This patch introduced a test that is failing consistently on iOS:
&gt; 
&gt; accessibility/ios-simulator/video-elements-ios.html
&gt; 
&gt; 
&gt; https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.
&gt; html#showAllRuns=true&amp;tests=accessibility%2Fios-simulator%2Fvideo-elements-
&gt; ios.html
&gt; 
&gt; build:
&gt; 
&gt; https://build.webkit.org/results/
&gt; Apple%20iOS%2011%20Simulator%20Release%20WK2%20(Tests)/r222911%20(343)/
&gt; results.html
&gt; https://build.webkit.org/builders/
&gt; Apple%20iOS%2011%20Simulator%20Release%20WK2%20(Tests)/builds/343

Ok I&apos;ll look into this in
https://bugs.webkit.org/show_bug.cgi?id=177954</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322461</attachid>
            <date>2017-10-02 15:38:28 -0700</date>
            <delta_ts>2017-10-04 15:59:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26662</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTEwLTAyICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1ha2UgdmlkZW8gb2JqZWN0cyBh
Y2Nlc3NpYmxlIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3Nzg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDc3ODAyOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2VkIGNlcnRh
aW4gPHZpZGVvPiBlbGVtZW50cyBvbiBpT1M6CisgICAgICAgIDEuIElmIHRoZXkgaGF2ZSBubyBj
b250cm9scyBhdHRyaWJ1dGUgc2V0IGFuZCBoYXZlIHBsYXlzaW5saW5lIGF0dHJpYnV0ZSBzZXQs
IHRoYXQgbWVhbnMKKyAgICAgICAgICAgbm9ybWFsbHkgdGhlcmUgYXJlIGN1c3RvbSBjb250cm9s
cyBwcm92aWRlZC4gCisgICAgICAgIDIuIFdpdGhvdXQgYXV0b3BsYXkgYXR0cmlidXRlIHNldC4g
RnJvbSBpT1MgMTAsIHdpdGggdGhlIG1vdGl2YXRpb24gdG8gaW1wcm92ZSBwZXJmb3JtYWNlIGJ5
IAorICAgICAgICAgICByZXBsYWNpbmcgR0lGIHdpdGggPHZpZGVvPiwgZWxlbWVudHMgd2lsbCBu
b3cgaG9ub3IgdGhlIGF1dG9wbGF5IGF0dHJpYnV0ZSBpZiB0aGV5CisgICAgICAgICAgIGhhdmUg
bm8gYXVkaW8uIFNvIG5vcm1hbGx5IHRob3NlIDx2aWRlbz4gZWxlbWVudHMgYXJlIG5vdCBpbnRl
cmFjdGl2ZS4KKyAgICAgICAgCisgICAgICAgIEFsc28gcHJvdmlkZWQgZnVuY3Rpb25zIHRvIGxl
dCBpT1MgdXNlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgdmlkZW8gZWxlbWVudHM6CisgICAgICAgIC0g
UGxheS9QYXVzZTogYWNjZXNzaWJpbGl0eUFjdGl2YXRlCisgICAgICAgIC0gRmFzdCBmb3J3YXJk
OiBhY2Nlc3NpYmlsaXR5SW5jcmVtZW50CisgICAgICAgIC0gUmV3aW5kOiBhY2Nlc3NpYmlsaXR5
RGVjcmVtZW50CisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL3Zp
ZGVvLWVsZW1lbnRzLWlvcy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyb21SZW5kZXJlcik6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6fkFjY2Vzc2li
aWxpdHlNZWRpYU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6bWVkaWFFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6c3RyaW5nVmFsdWUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpkdXJhdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmZhc3RT
ZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6dG9nZ2xl
TXV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmluY3Jl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmRlY3Jl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OnByZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6aGFzQ29udHJv
bHNBdHRyaWJ1dGVTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1l
ZGlhT2JqZWN0Ojppc1BsYXlpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU1lZGlhT2JqZWN0Ojppc011dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdDo6aXNBdXRvcGxheUVuYWJsZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojppc1BsYXlpbmdJbmxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjplbnRlckZ1bGxz
Y3JlZW4gY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlh
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc01lZGlhT2JqZWN0IGNv
bnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUlzV2ViSW50ZXJhY3RpdmVWaWRlb10pOgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBpbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRpb25dKToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzTWVk
aWFQbGF5aW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlJc01lZGlhTXV0ZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRvZ2dsZU11dGVGb3JNZWRpYV0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5VmlkZW9FbnRlckZ1
bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZGV0
ZXJtaW5lSXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWxdKToKKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUxhYmVsXSk6
CisKIDIwMTctMTAtMDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUGFzdGVJbWFnZSB0ZXN0cyBhcmUgZmFpbGluZyBvbiBkZWJ1ZyBidWlsZHMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIyMjc1MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAzOCw2ICs1MDM4LDcgQEAKIAkJQTkxQzlG
QkYxQjY1ODZERTAwQUZGRDU0IC8qIEFjY2Vzc2liaWxpdHlUcmVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOTFDOUZCRDFCNjU4NkRFMDBBRkZENTQg
LyogQWNjZXNzaWJpbGl0eVRyZWUuaCAqLzsgfTsKIAkJQTkxQzlGQzIxQjY1OUE2NzAwQUZGRDU0
IC8qIEFjY2Vzc2liaWxpdHlUcmVlSXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOTFDOUZDMDFCNjU5QTY3MDBBRkZENTQgLyogQWNjZXNzaWJp
bGl0eVRyZWVJdGVtLmNwcCAqLzsgfTsKIAkJQTkxQzlGQzMxQjY1OUE2NzAwQUZGRDU0IC8qIEFj
Y2Vzc2liaWxpdHlUcmVlSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTkxQzlGQzExQjY1OUE2NzAwQUZGRDU0IC8qIEFjY2Vzc2liaWxpdHlUcmVl
SXRlbS5oICovOyB9OworCQlBOTc4N0NCNDFGNUY1QzY2MDBDNTUxQzYgLyogQWNjZXNzaWJpbGl0
eU1lZGlhT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE5Nzg3Q0IzMUY1RjVDNjUwMEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3QuY3BwICovOyB9OwogCQlBOUM2RTRFMzBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU0
RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmNwcCAqLzsgfTsKIAkJQTlDNkU0RTQw
RDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMjBENzQ1RTA1MDA2NDQyRTkgLyogRE9NTWlt
ZVR5cGUuaCAqLzsgfTsKIAkJQTlDNkU0RTcwRDc0NUUxODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBl
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuY3BwICovOyB9OwpA
QCAtMTM1NzcsNiArMTM1NzgsOCBAQAogCQlBOTFDOUZCRDFCNjU4NkRFMDBBRkZENTQgLyogQWNj
ZXNzaWJpbGl0eVRyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNz
aWJpbGl0eVRyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTkxQzlGQzAxQjY1
OUE2NzAwQUZGRDU0IC8qIEFjY2Vzc2liaWxpdHlUcmVlSXRlbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5VHJlZUl0ZW0uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBOTFDOUZDMTFCNjU5QTY3MDBBRkZENTQgLyogQWNjZXNz
aWJpbGl0eVRyZWVJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vz
c2liaWxpdHlUcmVlSXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOTc4N0NC
MjFGNUY1OTkyMDBDNTUxQzYgLyogQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOTc4N0NCMzFGNUY1QzY1MDBDNTUxQzYgLyogQWNjZXNzaWJpbGl0eU1lZGlhT2Jq
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUxMEQ3NDVFMDUwMDY0NDJFOSAv
KiBET01NaW1lVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RE9NTWltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOUM2RTRFMjBE
NzQ1RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERPTU1pbWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5
QzZFNEU1MEQ3NDVFMTgwMDY0NDJFOSAvKiBET01NaW1lVHlwZUFycmF5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01NaW1lVHlwZUFycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NzYyLDYgKzE3NzY1LDggQEAKIAkJCQkwN0IwQUJD
RTEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuaCAqLywKIAkJ
CQkyOTgxQ0FBNDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMu
Y3BwICovLAogCQkJCTA3QjAxMTNFMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVk
aWFDb250cm9scy5oICovLAorCQkJCUE5Nzg3Q0IyMUY1RjU5OTIwMEM1NTFDNiAvKiBBY2Nlc3Np
YmlsaXR5TWVkaWFPYmplY3QuaCAqLywKKwkJCQlBOTc4N0NCMzFGNUY1QzY1MDBDNTUxQzYgLyog
QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmNwcCAqLywKIAkJCQk3NkNERDJFQzExMDNEQTY2MDA2
ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcCAqLywKIAkJCQk3NkNERDJFRDExMDNE
QTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmggKi8sCiAJCQkJNzZDREQyRjAx
MTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAgKi8sCkBA
IC0zMTMwMSw2ICszMTMwNiw3IEBACiAJCQkJMjlBODEyNDgwRkJCOUNBOTAwNTEwMjkzIC8qIEFj
Y2Vzc2liaWxpdHlPYmplY3RNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FDMzFBNTA3
MjhGMDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTM3RjU3QUM0MUE1MDcyOTMwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5Nzg3Q0I0MUY1RjVDNjYwMEM1NTFD
NiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdG
NTdBQzUxQTUwNzI5NzAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzdGNTdBQzYxQTUwNzI5QjAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlT
Y3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUM4MUE1MDcyQkMwMDg3NkY5
OCAvKiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiAy
MjI3NTApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eUxpc3RCb3hPcHRpb24uaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmgiCisjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0
LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgiCiAjaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaCIKQEAgLTQ0NCw2ICs0NDUsMTEgQEAgc3RhdGlj
IFJlZjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGVGcgogICAgIGlmIChub2RlICYmIGlzPEhU
TUxMYWJlbEVsZW1lbnQ+KG5vZGUpICYmIG5vZGVIYXNSb2xlKG5vZGUsIG51bGxBdG9tKCkpKQog
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eUxhYmVsOjpjcmVhdGUocmVuZGVyZXIpOwogCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIGlmIChub2RlICYmIGlzPEhUTUxNZWRpYUVsZW1lbnQ+KG5v
ZGUpICYmIG5vZGVIYXNSb2xlKG5vZGUsIG51bGxBdG9tKCkpKQorICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpjcmVhdGUocmVuZGVyZXIpOworI2VuZGlmCisKICNpZiBF
TkFCTEUoVklERU8pCiAgICAgLy8gbWVkaWEgY29udHJvbHMKICAgICBpZiAobm9kZSAmJiBub2Rl
LT5pc01lZGlhQ29udHJvbEVsZW1lbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVk
aWFPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFBMQVRGT1JNKElPUykKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Qu
aCIKKworI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CisKK0FjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6QWNjZXNzaWJpbGl0eU1lZGlh
T2JqZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCisgICAgOiBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KHJlbmRlcmVyKQoreworfQorCitBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6On5BY2Nl
c3NpYmlsaXR5TWVkaWFPYmplY3QoKQoreworfQorCitSZWY8QWNjZXNzaWJpbGl0eU1lZGlhT2Jq
ZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dChyZW5kZXJlcikpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6Y29tcHV0
ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAoreworICAgIHJldHVybiBhY2Nlc3NpYmls
aXR5SXNJZ25vcmVkQnlEZWZhdWx0KCk7Cit9CisKK0hUTUxNZWRpYUVsZW1lbnQqIEFjY2Vzc2li
aWxpdHlNZWRpYU9iamVjdDo6bWVkaWFFbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2Rl
ID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhaXM8SFRNTE1lZGlhRWxlbWVudD4o
Km5vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRN
TE1lZGlhRWxlbWVudD4obm9kZSk7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q6OnN0cmluZ1ZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAoSFRNTE1lZGlhRWxlbWVudCogZWxl
bWVudCA9IG1lZGlhRWxlbWVudCgpKSB7CisgICAgICAgIGRvdWJsZSBjdXJyZW50ID0gZWxlbWVu
dC0+Y3VycmVudFRpbWUoKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhVGltZURlc2Ny
aXB0aW9uKGN1cnJlbnQpOworICAgIH0KKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6c3RyaW5nVmFsdWUoKTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dDo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50
ID0gbWVkaWFFbGVtZW50KCkpIHsKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uID0gZWxlbWVudC0+
ZHVyYXRpb24oKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhVGltZURlc2NyaXB0aW9u
KGR1cmF0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIFN0cmluZygpOworfQorICAgIAordm9pZCBB
Y2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmZhc3RTZWVrKGJvb2wgZm9yd2FyZCkKK3sKKyAgICBI
VE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gbWVkaWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVt
ZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgKHZvaWQpZm9yd2FyZDsKKyAgICAKKyAg
ICAvLyBTdGVwIDUlIGVhY2ggdGltZS4KKyAgICBkb3VibGUgY3VycmVudCA9IGVsZW1lbnQtPmN1
cnJlbnRUaW1lKCk7CisgICAgZG91YmxlIGR1cmF0aW9uID0gZWxlbWVudC0+ZHVyYXRpb24oKTsK
KyAgICBkb3VibGUgdGltZURlbHRhID0gY2VpbChkdXJhdGlvbiAqIDUuMCAvIDEwMC4wKTsKKwor
ICAgIGRvdWJsZSB0aW1lID0gZm9yd2FyZCA/IHN0ZDo6bWluKGN1cnJlbnQgKyB0aW1lRGVsdGEs
IGR1cmF0aW9uKSA6IHN0ZDo6bWF4KGN1cnJlbnQgLSB0aW1lRGVsdGEsIDAuMCk7CisgICAgZWxl
bWVudC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU1lZGlh
T2JqZWN0Ojp0b2dnbGVNdXRlKCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0g
bWVkaWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgZWxlbWVudC0+c2V0TXV0ZWQoIWVsZW1lbnQtPm11dGVkKCkpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6aW5jcmVtZW50KCkKK3sKKyAgICBmYXN0U2Vlayh0cnVl
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmRlY3JlbWVudCgpCit7Cisg
ICAgZmFzdFNlZWsoZmFsc2UpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6
cHJlc3MoKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBtZWRpYUVsZW1lbnQo
KTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAv
LyBXZSBjYW4gc2FmZWx5IGNhbGwgdGhlIGludGVybmFsIHRvZ2dsZVBsYXlTdGF0ZSBtZXRob2Qs
IHdoaWNoIGRvZXNuJ3QgY2hlY2sgcmVzdHJpY3Rpb25zLAorICAgIC8vIGJlY2F1c2UgdGhpcyBt
ZXRob2QgaXMgb25seSBjYWxsZWQgZnJvbSB1c2VyIGludGVyYWN0aW9uLgorICAgIGVsZW1lbnQt
PnRvZ2dsZVBsYXlTdGF0ZSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEFjY2Vzc2li
aWxpdHlNZWRpYU9iamVjdDo6aGFzQ29udHJvbHNBdHRyaWJ1dGVTZXQoKSBjb25zdAoreworICAg
IEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBtZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoIWVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZWxlbWVudC0+
Y29udHJvbHMoKTsKK30KKyAgICAKK2Jvb2wgQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojppc1Bs
YXlpbmcoKSBjb25zdAoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBtZWRpYUVs
ZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gZWxlbWVudC0+aXNQbGF5aW5nKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eU1lZGlhT2JqZWN0Ojppc011dGVkKCkgY29uc3QKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBl
bGVtZW50ID0gbWVkaWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGVsZW1lbnQtPm11dGVkKCk7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojppc0F1dG9wbGF5RW5hYmxlZCgpIGNvbnN0Cit7Cisg
ICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IG1lZGlhRWxlbWVudCgpOworICAgIGlmICgh
ZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBlbGVtZW50
LT5hdXRvcGxheSgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6aXNQbGF5
aW5nSW5saW5lKCkgY29uc3QKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gbWVk
aWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgcmV0dXJuICFlbGVtZW50LT5tZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3Jl
ZW5Gb3JWaWRlb1BsYXliYWNrKCplbGVtZW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5TWVk
aWFPYmplY3Q6OmVudGVyRnVsbHNjcmVlbigpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKKyAgICBpZiAoIWlzPEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGUpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgSFRNTFZpZGVvRWxlbWVudCogZWxlbWVudCA9IGRvd25jYXN0
PEhUTUxWaWRlb0VsZW1lbnQ+KG5vZGUpOworICAgIGVsZW1lbnQtPmVudGVyRnVsbHNjcmVlbigp
OworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVk
aWFPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
Y2xhc3MgQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0IGZpbmFsIDogcHVibGljIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU1l
ZGlhT2JqZWN0PiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7CisgICAgdmlydHVhbCB+QWNjZXNzaWJp
bGl0eU1lZGlhT2JqZWN0KCk7CisgICAgCisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIGR1cmF0aW9uKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBo
YXNDb250cm9sc0F0dHJpYnV0ZVNldCgpIGNvbnN0OworICAgIAorICAgIGJvb2wgcHJlc3MoKSBv
dmVycmlkZTsKKyAgICB2b2lkIGluY3JlbWVudCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGVjcmVt
ZW50KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbnRlckZ1bGxzY3JlZW4oKSBjb25zdDsKKyAgICB2
b2lkIHRvZ2dsZU11dGUoKTsKKyAgICAKKyAgICBib29sIGlzUGxheWluZygpIGNvbnN0OworICAg
IGJvb2wgaXNBdXRvcGxheUVuYWJsZWQoKSBjb25zdDsKKyAgICBib29sIGlzUGxheWluZ0lubGlu
ZSgpIGNvbnN0OworICAgIGJvb2wgaXNNdXRlZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdChSZW5kZXJPYmplY3QqKTsKKyAgICBib29s
IGNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c01lZGlhT2JqZWN0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgZmFz
dFNlZWsoYm9vbCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQUNDRVNTSUJJTElUWShBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QsIGlzTWVk
aWFPYmplY3QoKSkKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlz
aW9uIDIyMjc1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJI
VE1MRGV0YWlsc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDIyMjc1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNiArNTYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1NwaW5CdXR0b25QYXJ0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNNb2NrT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNNZWRpYUNvbnRyb2xMYWJlbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzTWVkaWFPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIGJvb2wgaXNTd2l0Y2goKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBTd2l0Y2hS
b2xlOyB9CiAgICAgYm9vbCBpc1RvZ2dsZUJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIHJvbGVWYWx1
ZSgpID09IFRvZ2dsZUJ1dHRvblJvbGU7IH0KICAgICBib29sIGlzVGV4dENvbnRyb2woKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lv
biAyMjI3NTApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oSU9TKQogCiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5QXR0YWNobWVudC5oIgorI2ltcG9ydCAiQWNjZXNzaWJpbGl0eU1lZGlhT2Jq
ZWN0LmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCiAjaW1wb3J0ICJB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlLmgi
CkBAIC02NjUsNiArNjY2LDcwIEBAIC0gKHVpbnQ2NF90KV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJv
bUFuY2UKICAgICByZXR1cm4gdHJhaXRzOwogfQogCistIChCT09MKWFjY2Vzc2liaWxpdHlJc1dl
YkludGVyYWN0aXZlVmlkZW8KK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgLy8gT25seSBtYWtlIHRoZSB2
aWRlbyBvYmplY3QgaW50ZXJhY3RpdmUgaWYgaXQgcGxheXMgaW5saW5lIGFuZCBoYXMgbm8gbmF0
aXZlIGNvbnRyb2xzLgorICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgIT0gVmlkZW9Sb2xl
IHx8ICFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICAgICAgcmV0
dXJuIE5POworICAgIAorICAgIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdCogbWVkaWFPYmplY3Qg
PSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KTsKKyAgICByZXR1
cm4gIW1lZGlhT2JqZWN0LT5pc0F1dG9wbGF5RW5hYmxlZCgpICYmIG1lZGlhT2JqZWN0LT5pc1Bs
YXlpbmdJbmxpbmUoKSAmJiAhZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29i
amVjdCktPmhhc0NvbnRyb2xzQXR0cmlidXRlU2V0KCk7Cit9CisKKy0gKE5TU3RyaW5nICopaW50
ZXJhY3RpdmVWaWRlb0Rlc2NyaXB0aW9uCit7CisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVk
aWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCktPmR1cmF0aW9uKCk7Cit9
CisKKy0gKEJPT0wpYWNjZXNzaWJpbGl0eUlzTWVkaWFQbGF5aW5nCit7CisgICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAor
ICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCkpCisgICAgICAg
IHJldHVybiBOTzsKKyAgICAKKyAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlh
T2JqZWN0PihtX29iamVjdCktPmlzUGxheWluZygpOworfQorCistIChCT09MKWFjY2Vzc2liaWxp
dHlJc01lZGlhTXV0ZWQKK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNh
bGxdKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5
TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIHJl
dHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KS0+aXNNdXRl
ZCgpOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlUb2dnbGVNdXRlRm9yTWVkaWEKK3sKKyAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0
PihtX29iamVjdCktPnRvZ2dsZU11dGUoKTsKK30KKworLSAodm9pZClhY2Nlc3NpYmlsaXR5Vmlk
ZW9FbnRlckZ1bGxzY3JlZW4KK3sKKyAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5
TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5lbnRlckZ1bGxzY3JlZW4o
KTsKK30KKwogLSAodWludDY0X3QpX2FjY2Vzc2liaWxpdHlUZXh0RW50cnlUcmFpdHMKIHsKICAg
ICB1aW50NjRfdCB0cmFpdHMgPSBbc2VsZiBfYXhUZXh0RW50cnlUcmFpdF07CkBAIC04MjgsNiAr
ODkzLDkgQEAgLSAoQk9PTClkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBWaWRlb1JvbGU6CisgICAgICAgICAgICByZXR1cm4gW3NlbGYg
YWNjZXNzaWJpbGl0eUlzV2ViSW50ZXJhY3RpdmVWaWRlb107CisgICAgICAgICAgICAKICAgICAg
ICAgLy8gTGlua3MgY2FuIHNvbWV0aW1lcyBiZSBlbGVtZW50cyAod2hlbiB0aGV5IG9ubHkgY29u
dGFpbiBzdGF0aWMgdGV4dCBvciBkb24ndCBjb250YWluIGFueXRoaW5nKS4KICAgICAgICAgLy8g
VGhleSBzaG91bGQgbm90IGJlIGVsZW1lbnRzIHdoZW4gY29udGFpbmluZyB0ZXh0IGFuZCBvdGhl
ciB0eXBlcy4KICAgICAgICAgY2FzZSBXZWJDb3JlTGlua1JvbGU6CkBAIC05NDQsNyArMTAxMiw2
IEBAIC0gKEJPT0wpZGV0ZXJtaW5lSXNBY2Nlc3NpYmlsaXR5RWxlbWVudAogICAgICAgICBjYXNl
IFRvb2xiYXJSb2xlOgogICAgICAgICBjYXNlIFVua25vd25Sb2xlOgogICAgICAgICBjYXNlIFVz
ZXJJbnRlcmZhY2VUb29sdGlwUm9sZToKLSAgICAgICAgY2FzZSBWaWRlb1JvbGU6CiAgICAgICAg
IGNhc2UgV2ViQXBwbGljYXRpb25Sb2xlOgogICAgICAgICBjYXNlIFdlYkFyZWFSb2xlOgogICAg
ICAgICBjYXNlIFdpbmRvd1JvbGU6CkBAIC05NzUsNiArMTA0Miw4IEBAIC0gKEJPT0wpc3RyaW5n
VmFsdWVTaG91bGRCZVVzZWRJbkxhYmVsCiAgICAgICAgIHJldHVybiBOTzsKICAgICBpZiAobV9v
YmplY3QtPmlzRmlsZVVwbG9hZEJ1dHRvbigpKQogICAgICAgICByZXR1cm4gTk87CisgICAgaWYg
KFtzZWxmIGFjY2Vzc2liaWxpdHlJc1dlYkludGVyYWN0aXZlVmlkZW9dKQorICAgICAgICByZXR1
cm4gTk87CiAKICAgICByZXR1cm4gWUVTOwogfQpAQCAtMTA0MCw2ICsxMTA5LDcgQEAgLSAoTlNT
dHJpbmcgKilhY2Nlc3NpYmlsaXR5TGFiZWwKICAgICBOU1N0cmluZyAqYXhUaXRsZSA9IFtzZWxm
IGJhc2VBY2Nlc3NpYmlsaXR5VGl0bGVdOwogICAgIE5TU3RyaW5nICpheERlc2NyaXB0aW9uID0g
W3NlbGYgYmFzZUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbl07CiAgICAgTlNTdHJpbmcgKmxhbmRt
YXJrRGVzY3JpcHRpb24gPSBbc2VsZiBhcmlhTGFuZG1hcmtSb2xlRGVzY3JpcHRpb25dOworICAg
IE5TU3RyaW5nICp2aWRlb0Rlc2NyaXB0aW9uID0gW3NlbGYgaW50ZXJhY3RpdmVWaWRlb0Rlc2Ny
aXB0aW9uXTsKICAgICAKICAgICAvLyBXZSBzaG91bGQgZXhwb3NlIHRoZSB2YWx1ZSBvZiB0aGUg
aW5wdXQgdHlwZSBkYXRlIG9yIHRpbWUgdGhyb3VnaCBBWFZhbHVlIGluc3RlYWQgb2YgQVhUaXRs
ZS4KICAgICBpZiAobV9vYmplY3QtPmlzSW5wdXRUeXBlUG9wdXBCdXR0b24oKSAmJiBbYXhUaXRs
ZSBpc0VxdWFsVG9TdHJpbmc6W3NlbGYgYWNjZXNzaWJpbGl0eVZhbHVlXV0pCkBAIC0xMDYxLDYg
KzExMzEsNyBAQCAtIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMYWJlbAogICAgICAgICBhcHBl
bmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIHZhbHVlTGFiZWwpOwogICAgIH0KICAgICBhcHBlbmRT
dHJpbmdUb1Jlc3VsdChyZXN1bHQsIGxhbmRtYXJrRGVzY3JpcHRpb24pOworICAgIGFwcGVuZFN0
cmluZ1RvUmVzdWx0KHJlc3VsdCwgdmlkZW9EZXNjcmlwdGlvbik7CiAgICAgCiAgICAgcmV0dXJu
IFtyZXN1bHQgbGVuZ3RoXSA/IHJlc3VsdCA6IG5pbDsKIH0KSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIy
Mjc1MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDE3LTEwLTAyICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQVg6IE1ha2UgdmlkZW8gb2JqZWN0cyBhY2Nlc3NpYmxlIG9uIGlPUworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3Nzg4CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8zNDc3ODAyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVtZW50
cy1pb3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy1z
aW11bGF0b3IvdmlkZW8tZWxlbWVudHMtaW9zLmh0bWw6IEFkZGVkLgorCiAyMDE3LTEwLTAyICBK
b3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSW5jbHVkZSBCZWFjb24gYW5kIFBpbmcgcmVxdWVzdHMgaW4gTmV0d29yayB0YWIKSW5k
ZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVtZW50
cy1pb3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVtZW50cy1pb3MtZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1l
bGVtZW50cy1pb3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAK
KworVGhpcyB0ZXN0cyB0aGUgdmlkZW8gZWxlbWVudHMgb24gaU9TLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworQVhMYWJlbDogVmlkZW8gbGFiZWwsIDkgc2Vjb25kcworQVhWYWx1
ZTogMCBzZWNvbmRzCitQQVNTIHZpZGVvLmRlc2NyaXB0aW9uIGlzICdBWExhYmVsOiBWaWRlbyBs
YWJlbCwgOSBzZWNvbmRzJworUEFTUyB2aWRlby5zdHJpbmdWYWx1ZSBpcyAnQVhWYWx1ZTogMCBz
ZWNvbmRzJworUEFTUyB2aWQucGF1c2VkIGlzIHRydWUKK1BBU1MgdmlkLnBhdXNlZCBpcyBmYWxz
ZQorUEFTUyB2aWQucGF1c2VkIGlzIHRydWUKK1BBU1MgdmlkZW8uc3RyaW5nVmFsdWUgaXMgJ0FY
VmFsdWU6IDIgc2Vjb25kcycKK1BBU1MgdmlkZW8uc3RyaW5nVmFsdWUgaXMgJ0FYVmFsdWU6IDEg
c2Vjb25kcycKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvdmlkZW8t
ZWxlbWVudHMtaW9zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9pb3Mtc2ltdWxhdG9yL3ZpZGVvLWVsZW1lbnRzLWlvcy5odG1sCShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVtZW50cy1p
b3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBpZD0iYm9keSI+CisKKzx2aWRlbyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjI0MCIgcGxheXNp
bmxpbmUgaWQ9InZpZGVvIiBhcmlhLWxhYmVsPSJWaWRlbyBsYWJlbCI+CisgIDxzb3VyY2Ugc3Jj
PSIuLi8uLi9tZWRpYS9jb250ZW50L2NvdW50aW5nLm1wNCIgdHlwZT0idmlkZW8vbXA0Ij4KKyAg
WW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHZpZGVvIHRhZy4KKzwvdmlkZW8+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2Ny
aXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhlIHZpZGVvIGVsZW1lbnRzIG9u
IGlPUy4iKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAg
ICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgCisgICAgICAgIHZhciB2aWQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidmlkZW8iKTsgCisgICAgICAgIHZhciB2aWRlbyA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidmlkZW8iKTsKKyAgICAg
ICAgdmlkLm9uY2FucGxheXRocm91Z2ggPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRlYnVn
KHZpZGVvLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGRlYnVnKHZpZGVvLnN0cmluZ1ZhbHVl
KTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJ2aWRlby5kZXNjcmlwdGlvbiIsICInQVhMYWJlbDog
VmlkZW8gbGFiZWwsIDkgc2Vjb25kcyciKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJ2aWRlby5z
dHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogMCBzZWNvbmRzJyIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUZXN0IHBsYXkgYW5kIHBhdXNlLgorICAgICAgICAgICAgc2hvdWxkQmVUcnVl
KCJ2aWQucGF1c2VkIik7CisgICAgICAgICAgICB2aWRlby5wcmVzcygpOworICAgICAgICAgICAg
c2hvdWxkQmVGYWxzZSgidmlkLnBhdXNlZCIpOworICAgICAgICAgICAgdmlkZW8ucHJlc3MoKTsK
KyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgidmlkLnBhdXNlZCIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBUZXN0IGZhc3QgZm9yd2FyZCBhbmQgcmV3aW5kLgorICAgICAgICAgICAg
dmlkZW8uaW5jcmVtZW50KCk7CisgICAgICAgICAgICB2aWRlby5pbmNyZW1lbnQoKTsKKyAgICAg
ICAgICAgIHNob3VsZEJlKCJ2aWRlby5zdHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogMiBzZWNvbmRz
JyIpOworICAgICAgICAgICAgdmlkZW8uZGVjcmVtZW50KCk7CisgICAgICAgICAgICBzaG91bGRC
ZSgidmlkZW8uc3RyaW5nVmFsdWUiLCAiJ0FYVmFsdWU6IDEgc2Vjb25kcyciKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH07CisgICAgICAgIAor
ICAgIH0KKyAgICAKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322735</attachid>
            <date>2017-10-04 15:59:44 -0700</date>
            <delta_ts>2017-10-04 16:43:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>27252</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjg4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE3LTEwLTA0ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1ha2UgdmlkZW8gb2JqZWN0cyBh
Y2Nlc3NpYmxlIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc3Nzg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDc3ODAyOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2VkIGNlcnRh
aW4gPHZpZGVvPiBlbGVtZW50cyBvbiBpT1M6CisgICAgICAgIDEuIElmIHRoZXkgaGF2ZSBubyBj
b250cm9scyBhdHRyaWJ1dGUgc2V0IGFuZCBoYXZlIHBsYXlzaW5saW5lIGF0dHJpYnV0ZSBzZXQs
IHRoYXQgbWVhbnMKKyAgICAgICAgICAgbm9ybWFsbHkgdGhlcmUgYXJlIGN1c3RvbSBjb250cm9s
cyBwcm92aWRlZC4gCisgICAgICAgIDIuIFdpdGhvdXQgYXV0b3BsYXkgYXR0cmlidXRlIHNldC4g
RnJvbSBpT1MgMTAsIHdpdGggdGhlIG1vdGl2YXRpb24gdG8gaW1wcm92ZSBwZXJmb3JtYWNlIGJ5
IAorICAgICAgICAgICByZXBsYWNpbmcgR0lGIHdpdGggPHZpZGVvPiwgZWxlbWVudHMgd2lsbCBu
b3cgaG9ub3IgdGhlIGF1dG9wbGF5IGF0dHJpYnV0ZSBpZiB0aGV5CisgICAgICAgICAgIGhhdmUg
bm8gYXVkaW8uIFNvIG5vcm1hbGx5IHRob3NlIDx2aWRlbz4gZWxlbWVudHMgYXJlIG5vdCBpbnRl
cmFjdGl2ZS4KKworICAgICAgICBBbHNvIHByb3ZpZGVkIGZ1bmN0aW9ucyB0byBsZXQgaU9TIHVz
ZXJzIGludGVyYWN0IHdpdGggdGhlIHZpZGVvIGVsZW1lbnRzOgorICAgICAgICAtIFBsYXkvUGF1
c2U6IGFjY2Vzc2liaWxpdHlBY3RpdmF0ZQorICAgICAgICAtIEZhc3QgZm9yd2FyZDogYWNjZXNz
aWJpbGl0eUluY3JlbWVudAorICAgICAgICAtIFJld2luZDogYWNjZXNzaWJpbGl0eURlY3JlbWVu
dAorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVt
ZW50cy1pb3MuaHRtbAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGcm9tUmVuZGVyZXIpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6On5BY2Nlc3NpYmlsaXR5TWVk
aWFPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojpjb21w
dXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5TWVkaWFPYmplY3Q6Om1lZGlhRWxlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OnN0cmluZ1ZhbHVlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6aW50ZXJhY3RpdmVWaWRlb0R1
cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dDo6bWVkaWFTZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dDo6dG9nZ2xlTXV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q6OmluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q6OmRlY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q6OnByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6
aGFzQ29udHJvbHNBdHRyaWJ1dGVTZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU1lZGlhT2JqZWN0Ojppc1BsYXlpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojppc011dGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6aXNBdXRvcGxheUVuYWJsZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojppc1BsYXlpbmdJbmxp
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Ojpl
bnRlckZ1bGxzY3JlZW4gY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lZGlhT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc01lZGlh
T2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUlzV2ViSW50ZXJhY3RpdmVWaWRlb10pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBpbnRlcmFjdGl2ZVZpZGVvRGVzY3JpcHRp
b25dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUlzTWVkaWFQbGF5aW5nXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGFjY2Vzc2liaWxpdHlJc01lZGlhTXV0ZWRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eVRvZ2dsZU11dGVGb3JNZWRpYV0pOgor
ICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5Vmlk
ZW9FbnRlckZ1bGxzY3JlZW5dKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgZGV0ZXJtaW5lSXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWxd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0
eUxhYmVsXSk6CisKIDIwMTctMTAtMDQgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSB2ZXJzaW9uIG9mIERh
dGFUcmFuc2Zlckl0ZW1MaXN0LmFkZCB0aGF0IHRha2VzIGEgRmlsZQpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjIyODg1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MDEyLDYgKzUwMTIsNyBAQAogCQlBOTFDOUZCRjFCNjU4
NkRFMDBBRkZENTQgLyogQWNjZXNzaWJpbGl0eVRyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5MUM5RkJEMUI2NTg2REUwMEFGRkQ1NCAvKiBBY2Nl
c3NpYmlsaXR5VHJlZS5oICovOyB9OwogCQlBOTFDOUZDMjFCNjU5QTY3MDBBRkZENTQgLyogQWNj
ZXNzaWJpbGl0eVRyZWVJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5MUM5RkMwMUI2NTlBNjcwMEFGRkQ1NCAvKiBBY2Nlc3NpYmlsaXR5VHJl
ZUl0ZW0uY3BwICovOyB9OwogCQlBOTFDOUZDMzFCNjU5QTY3MDBBRkZENTQgLyogQWNjZXNzaWJp
bGl0eVRyZWVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOTFDOUZDMTFCNjU5QTY3MDBBRkZENTQgLyogQWNjZXNzaWJpbGl0eVRyZWVJdGVtLmgg
Ki87IH07CisJCUE5Nzg3Q0I0MUY1RjVDNjYwMEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTk3ODdDQjMxRjVGNUM2NTAwQzU1MUM2IC8qIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5jcHAg
Ki87IH07CiAJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMTBENzQ1
RTA1MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuY3BwICovOyB9OwogCQlBOUM2RTRFNDBENzQ1RTA1
MDA2NDQyRTkgLyogRE9NTWltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBET01NaW1lVHlwZS5o
ICovOyB9OwogCQlBOUM2RTRFNzBENzQ1RTE4MDA2NDQyRTkgLyogRE9NTWltZVR5cGVBcnJheS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRF
NTBENzQ1RTE4MDA2NDQyRTkgLyogRE9NTWltZVR5cGVBcnJheS5jcHAgKi87IH07CkBAIC0xMzUy
NCw2ICsxMzUyNSw4IEBACiAJCUE5MUM5RkJEMUI2NTg2REUwMEFGRkQ1NCAvKiBBY2Nlc3NpYmls
aXR5VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5
VHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOTFDOUZDMDFCNjU5QTY3MDBB
RkZENTQgLyogQWNjZXNzaWJpbGl0eVRyZWVJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlUcmVlSXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE5MUM5RkMxMUI2NTlBNjcwMEFGRkQ1NCAvKiBBY2Nlc3NpYmlsaXR5
VHJlZUl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0
eVRyZWVJdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5Nzg3Q0IyMUY1RjU5
OTIwMEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE5Nzg3Q0IzMUY1RjVDNjUwMEM1NTFDNiAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIERPTU1p
bWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01NaW1l
VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE5QzZFNEUyMEQ3NDVFMDUw
MDY0NDJFOSAvKiBET01NaW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NTWltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTlDNkU0RTUw
RDc0NUUxODAwNjQ0MkU5IC8qIERPTU1pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTU1pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTc2OTcsNiArMTc3MDAsOCBAQAogCQkJCTA3QjBBQkNFMTAzMjI0
MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oICovLAogCQkJCTI5ODFD
QUE0MTMxODIyRUMwMEQxMkYyQSAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAgKi8s
CiAJCQkJMDdCMDExM0UxMDMyMjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzLmggKi8sCisJCQkJQTk3ODdDQjIxRjVGNTk5MjAwQzU1MUM2IC8qIEFjY2Vzc2liaWxpdHlN
ZWRpYU9iamVjdC5oICovLAorCQkJCUE5Nzg3Q0IzMUY1RjVDNjUwMEM1NTFDNiAvKiBBY2Nlc3Np
YmlsaXR5TWVkaWFPYmplY3QuY3BwICovLAogCQkJCTc2Q0REMkVDMTEwM0RBNjYwMDY4MDUyMSAv
KiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwICovLAogCQkJCTc2Q0REMkVEMTEwM0RBNjYwMDY4
MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3QuaCAqLywKIAkJCQk3NkNERDJGMDExMDNEQTY2
MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcCAqLywKQEAgLTMxMjAx
LDYgKzMxMjA2LDcgQEAKIAkJCQkyOUE4MTI0ODBGQkI5Q0E5MDA1MTAyOTMgLyogQWNjZXNzaWJp
bGl0eU9iamVjdE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3RjU3QUMzMUE1MDcyOEYwMDg3
NkY5OCAvKiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzdGNTdBQzQxQTUwNzI5MzAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTk3ODdDQjQxRjVGNUM2NjAwQzU1MUM2IC8qIEFj
Y2Vzc2liaWxpdHlNZWRpYU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FDNTFB
NTA3Mjk3MDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzN0Y1N0FDNjFBNTA3MjlCMDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdGNTdBQzgxQTUwNzJCQzAwODc2Rjk4IC8qIEFj
Y2Vzc2liaWxpdHlTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDIyMjg4NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbi5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5TWVkaWFPYmplY3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVudUxpc3QuaCIKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaCIKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5TWVudUxpc3RQb3B1cC5oIgpAQCAtNDQ0LDYgKzQ0NSwxMSBAQCBzdGF0aWMgUmVmPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyCiAgICAgaWYgKG5vZGUgJiYgaXM8SFRNTExhYmVs
RWxlbWVudD4obm9kZSkgJiYgbm9kZUhhc1JvbGUobm9kZSwgbnVsbEF0b20oKSkpCiAgICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5TGFiZWw6OmNyZWF0ZShyZW5kZXJlcik7CiAKKyNpZiBQTEFU
Rk9STShJT1MpCisgICAgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+KG5vZGUpICYmIG5vZGVIYXNS
b2xlKG5vZGUsIG51bGxBdG9tKCkpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlh
T2JqZWN0OjpjcmVhdGUocmVuZGVyZXIpOworI2VuZGlmCisKICNpZiBFTkFCTEUoVklERU8pCiAg
ICAgLy8gbWVkaWEgY29udHJvbHMKICAgICBpZiAobm9kZSAmJiBub2RlLT5pc01lZGlhQ29udHJv
bEVsZW1lbnQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1lZGlhT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JN
KElPUykKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QuaCIKKworI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0Fj
Y2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0KFJlbmRlck9i
amVjdCogcmVuZGVyZXIpCisgICAgOiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVy
KQoreworfQorCitBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6On5BY2Nlc3NpYmlsaXR5TWVkaWFP
YmplY3QoKQoreworfQorCitSZWY8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PiBBY2Nlc3NpYmls
aXR5TWVkaWFPYmplY3Q6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdChyZW5kZXJlcikpOwor
fQorCitib29sIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSBjb25zdAoreworICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlE
ZWZhdWx0KCk7Cit9CisKK0hUTUxNZWRpYUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlNZWRpYU9iamVj
dDo6bWVkaWFFbGVtZW50KCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgp
OworICAgIGlmICghaXM8SFRNTE1lZGlhRWxlbWVudD4oKm5vZGUpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4obm9kZSk7Cit9
CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OnN0cmluZ1ZhbHVlKCkgY29uc3QK
K3sKKyAgICBpZiAoSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IG1lZGlhRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gbG9jYWxpemVkTWVkaWFUaW1lRGVzY3JpcHRpb24oZWxlbWVudC0+Y3Vy
cmVudFRpbWUoKSk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmlu
Z1ZhbHVlKCk7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmludGVyYWN0
aXZlVmlkZW9EdXJhdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIGVs
ZW1lbnQgPSBtZWRpYUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGxvY2FsaXplZE1lZGlhVGlt
ZURlc2NyaXB0aW9uKGVsZW1lbnQtPmR1cmF0aW9uKCkpOworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjptZWRpYVNlZWsoQVhTZWVr
RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0g
bWVkaWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gU3RlcCA1JSBlYWNoIHRpbWUuCisgICAgY29uc3QgZG91YmxlIHNlZWtTdGVwID0g
LjA1OworICAgIGRvdWJsZSBjdXJyZW50ID0gZWxlbWVudC0+Y3VycmVudFRpbWUoKTsKKyAgICBk
b3VibGUgZHVyYXRpb24gPSBlbGVtZW50LT5kdXJhdGlvbigpOworICAgIGRvdWJsZSB0aW1lRGVs
dGEgPSBjZWlsKGR1cmF0aW9uICogc2Vla1N0ZXApOworCisgICAgZG91YmxlIHRpbWUgPSBkaXJl
Y3Rpb24gPT0gQVhTZWVrRm9yd2FyZCA/IHN0ZDo6bWluKGN1cnJlbnQgKyB0aW1lRGVsdGEsIGR1
cmF0aW9uKSA6IHN0ZDo6bWF4KGN1cnJlbnQgLSB0aW1lRGVsdGEsIDAuMCk7CisgICAgZWxlbWVu
dC0+c2V0Q3VycmVudFRpbWUodGltZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU1lZGlhT2Jq
ZWN0Ojp0b2dnbGVNdXRlKCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gbWVk
aWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgZWxlbWVudC0+c2V0TXV0ZWQoIWVsZW1lbnQtPm11dGVkKCkpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlNZWRpYU9iamVjdDo6aW5jcmVtZW50KCkKK3sKKyAgICBtZWRpYVNlZWsoQVhTZWVr
Rm9yd2FyZCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpkZWNyZW1lbnQo
KQoreworICAgIG1lZGlhU2VlayhBWFNlZWtCYWNrd2FyZCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJp
bGl0eU1lZGlhT2JqZWN0OjpwcmVzcygpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVu
dCA9IG1lZGlhRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIC8vIFdlIGNhbiBzYWZlbHkgY2FsbCB0aGUgaW50ZXJuYWwgdG9nZ2xl
UGxheVN0YXRlIG1ldGhvZCwgd2hpY2ggZG9lc24ndCBjaGVjayByZXN0cmljdGlvbnMsCisgICAg
Ly8gYmVjYXVzZSB0aGlzIG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBmcm9tIHVzZXIgaW50ZXJhY3Rp
b24uCisgICAgZWxlbWVudC0+dG9nZ2xlUGxheVN0YXRlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0OjpoYXNDb250cm9sc0F0dHJpYnV0ZVNl
dCgpIGNvbnN0Cit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVudCA9IG1lZGlhRWxlbWVu
dCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiBlbGVtZW50LT5jb250cm9scygpOworfQorICAgIAorYm9vbCBBY2Nlc3NpYmlsaXR5
TWVkaWFPYmplY3Q6OmlzUGxheWluZygpIGNvbnN0Cit7CisgICAgSFRNTE1lZGlhRWxlbWVudCog
ZWxlbWVudCA9IG1lZGlhRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBlbGVtZW50LT5pc1BsYXlpbmcoKTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmlzTXV0ZWQoKSBjb25zdAoreworICAgIEhU
TUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQgPSBtZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1l
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZWxlbWVudC0+bXV0
ZWQoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q6OmlzQXV0b3BsYXlFbmFi
bGVkKCkgY29uc3QKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gbWVkaWFFbGVt
ZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgcmV0dXJuIGVsZW1lbnQtPmF1dG9wbGF5KCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1l
ZGlhT2JqZWN0Ojppc1BsYXlpbmdJbmxpbmUoKSBjb25zdAoreworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIGVsZW1lbnQgPSBtZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gIWVsZW1lbnQtPm1lZGlhU2Vzc2lvbigp
LnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKmVsZW1lbnQpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdDo6ZW50ZXJGdWxsc2NyZWVuKCkgY29uc3QKK3sKKyAg
ICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghaXM8SFRNTFZpZGVvRWxlbWVu
dD4obm9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBIVE1MVmlkZW9FbGVtZW50KiBl
bGVtZW50ID0gZG93bmNhc3Q8SFRNTFZpZGVvRWxlbWVudD4obm9kZSk7CisgICAgZWxlbWVudC0+
ZW50ZXJGdWxsc2NyZWVuKCk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oSU9T
KQorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgCitjbGFzcyBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QgZmluYWwgOiBw
dWJsaWMgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKKyAgICB2
aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QoKTsKKyAgICAKKyAgICB2b2lkIGVudGVy
RnVsbHNjcmVlbigpIGNvbnN0OworICAgIHZvaWQgdG9nZ2xlTXV0ZSgpOworICAgIAorICAgIGJv
b2wgaGFzQ29udHJvbHNBdHRyaWJ1dGVTZXQoKSBjb25zdDsKKyAgICBTdHJpbmcgaW50ZXJhY3Rp
dmVWaWRlb0R1cmF0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc1BsYXlpbmcoKSBjb25zdDsKKyAg
ICBib29sIGlzQXV0b3BsYXlFbmFibGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc1BsYXlpbmdJbmxp
bmUoKSBjb25zdDsKKyAgICBib29sIGlzTXV0ZWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBl
bnVtIEFYU2Vla0RpcmVjdGlvbiB7IEFYU2Vla0ZvcndhcmQsIEFYU2Vla0JhY2t3YXJkIH07Cisg
ICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0KFJlbmRlck9iamVjdCopOworICAg
IGJvb2wgY29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIGlzTWVkaWFPYmplY3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgCisg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBwcmVzcygp
IG92ZXJyaWRlOworICAgIHZvaWQgaW5jcmVtZW50KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWNy
ZW1lbnQoKSBvdmVycmlkZTsKKyAgICAKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQoKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIG1lZGlhU2VlayhBWFNlZWtEaXJlY3Rpb24pOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0FD
Q0VTU0lCSUxJVFkoQWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0LCBpc01lZGlhT2JqZWN0KCkpCisj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMjI4ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSFRNTERldGFpbHNFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiAyMjI4ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYzLDYgKzU2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGluQnV0
dG9uUGFydCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTW9j
a09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTWVk
aWFDb250cm9sTGFiZWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc01lZGlhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzU3dp
dGNoKCkgY29uc3QgeyByZXR1cm4gcm9sZVZhbHVlKCkgPT0gU3dpdGNoUm9sZTsgfQogICAgIGJv
b2wgaXNUb2dnbGVCdXR0b24oKSBjb25zdCB7IHJldHVybiByb2xlVmFsdWUoKSA9PSBUb2dnbGVC
dXR0b25Sb2xlOyB9CiAgICAgYm9vbCBpc1RleHRDb250cm9sKCkgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjIyODg1KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBIQVZFKEFD
Q0VTU0lCSUxJVFkpICYmIFBMQVRGT1JNKElPUykKIAogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eUF0
dGFjaG1lbnQuaCIKKyNpbXBvcnQgIkFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdC5oIgogI2ltcG9y
dCAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgpAQCAtNjY1LDYgKzY2
Niw3MCBAQCAtICh1aW50NjRfdClfYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21BbmNlCiAgICAgcmV0
dXJuIHRyYWl0czsKIH0KIAorLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNXZWJJbnRlcmFjdGl2ZVZp
ZGVvCit7CisgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKKyAgICAg
ICAgcmV0dXJuIE5POworICAgIAorICAgIC8vIE9ubHkgbWFrZSB0aGUgdmlkZW8gb2JqZWN0IGlu
dGVyYWN0aXZlIGlmIGl0IHBsYXlzIGlubGluZSBhbmQgaGFzIG5vIG5hdGl2ZSBjb250cm9scy4K
KyAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpICE9IFZpZGVvUm9sZSB8fCAhaXM8QWNjZXNz
aWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCkpCisgICAgICAgIHJldHVybiBOTzsKKyAgICAK
KyAgICBBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3QqIG1lZGlhT2JqZWN0ID0gZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCk7CisgICAgcmV0dXJuICFtZWRpYU9iamVj
dC0+aXNBdXRvcGxheUVuYWJsZWQoKSAmJiBtZWRpYU9iamVjdC0+aXNQbGF5aW5nSW5saW5lKCkg
JiYgIWRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5oYXNDb250
cm9sc0F0dHJpYnV0ZVNldCgpOworfQorCistIChOU1N0cmluZyAqKWludGVyYWN0aXZlVmlkZW9E
ZXNjcmlwdGlvbgoreworICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29i
amVjdCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5pbnRlcmFjdGl2ZVZpZGVvRHVyYXRpb24oKTsK
K30KKworLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNNZWRpYVBsYXlpbmcKK3sKKyAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQorICAgICAgICByZXR1cm4gTk87CisgICAg
CisgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5TWVkaWFPYmplY3Q+KG1fb2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuIE5POworICAgIAorICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVk
aWFPYmplY3Q+KG1fb2JqZWN0KS0+aXNQbGF5aW5nKCk7Cit9CisKKy0gKEJPT0wpYWNjZXNzaWJp
bGl0eUlzTWVkaWFNdXRlZAoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5
Q2FsbF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxp
dHlNZWRpYU9iamVjdD4obV9vYmplY3QpKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAg
cmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3QpLT5pc011
dGVkKCk7Cit9CisKKy0gKHZvaWQpYWNjZXNzaWJpbGl0eVRvZ2dsZU11dGVGb3JNZWRpYQorewor
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlNZWRpYU9iamVjdD4obV9vYmplY3Qp
KQorICAgICAgICByZXR1cm47CisKKyAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5TWVkaWFPYmpl
Y3Q+KG1fb2JqZWN0KS0+dG9nZ2xlTXV0ZSgpOworfQorCistICh2b2lkKWFjY2Vzc2liaWxpdHlW
aWRlb0VudGVyRnVsbHNjcmVlbgoreworICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWlzPEFjY2Vzc2liaWxp
dHlNZWRpYU9iamVjdD4obV9vYmplY3QpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG93
bmNhc3Q8QWNjZXNzaWJpbGl0eU1lZGlhT2JqZWN0PihtX29iamVjdCktPmVudGVyRnVsbHNjcmVl
bigpOworfQorCiAtICh1aW50NjRfdClfYWNjZXNzaWJpbGl0eVRleHRFbnRyeVRyYWl0cwogewog
ICAgIHVpbnQ2NF90IHRyYWl0cyA9IFtzZWxmIF9heFRleHRFbnRyeVRyYWl0XTsKQEAgLTgyOCw2
ICs4OTMsOSBAQCAtIChCT09MKWRldGVybWluZUlzQWNjZXNzaWJpbGl0eUVsZW1lbnQKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFZpZGVvUm9sZToKKyAgICAgICAgICAgIHJldHVybiBbc2Vs
ZiBhY2Nlc3NpYmlsaXR5SXNXZWJJbnRlcmFjdGl2ZVZpZGVvXTsKKyAgICAgICAgICAgIAogICAg
ICAgICAvLyBMaW5rcyBjYW4gc29tZXRpbWVzIGJlIGVsZW1lbnRzICh3aGVuIHRoZXkgb25seSBj
b250YWluIHN0YXRpYyB0ZXh0IG9yIGRvbid0IGNvbnRhaW4gYW55dGhpbmcpLgogICAgICAgICAv
LyBUaGV5IHNob3VsZCBub3QgYmUgZWxlbWVudHMgd2hlbiBjb250YWluaW5nIHRleHQgYW5kIG90
aGVyIHR5cGVzLgogICAgICAgICBjYXNlIFdlYkNvcmVMaW5rUm9sZToKQEAgLTk0NCw3ICsxMDEy
LDYgQEAgLSAoQk9PTClkZXRlcm1pbmVJc0FjY2Vzc2liaWxpdHlFbGVtZW50CiAgICAgICAgIGNh
c2UgVG9vbGJhclJvbGU6CiAgICAgICAgIGNhc2UgVW5rbm93blJvbGU6CiAgICAgICAgIGNhc2Ug
VXNlckludGVyZmFjZVRvb2x0aXBSb2xlOgotICAgICAgICBjYXNlIFZpZGVvUm9sZToKICAgICAg
ICAgY2FzZSBXZWJBcHBsaWNhdGlvblJvbGU6CiAgICAgICAgIGNhc2UgV2ViQXJlYVJvbGU6CiAg
ICAgICAgIGNhc2UgV2luZG93Um9sZToKQEAgLTk3NSw2ICsxMDQyLDggQEAgLSAoQk9PTClzdHJp
bmdWYWx1ZVNob3VsZEJlVXNlZEluTGFiZWwKICAgICAgICAgcmV0dXJuIE5POwogICAgIGlmICht
X29iamVjdC0+aXNGaWxlVXBsb2FkQnV0dG9uKCkpCiAgICAgICAgIHJldHVybiBOTzsKKyAgICBp
ZiAoW3NlbGYgYWNjZXNzaWJpbGl0eUlzV2ViSW50ZXJhY3RpdmVWaWRlb10pCisgICAgICAgIHJl
dHVybiBOTzsKIAogICAgIHJldHVybiBZRVM7CiB9CkBAIC0xMDQwLDYgKzExMDksNyBAQCAtIChO
U1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMYWJlbAogICAgIE5TU3RyaW5nICpheFRpdGxlID0gW3Nl
bGYgYmFzZUFjY2Vzc2liaWxpdHlUaXRsZV07CiAgICAgTlNTdHJpbmcgKmF4RGVzY3JpcHRpb24g
PSBbc2VsZiBiYXNlQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uXTsKICAgICBOU1N0cmluZyAqbGFu
ZG1hcmtEZXNjcmlwdGlvbiA9IFtzZWxmIGFyaWFMYW5kbWFya1JvbGVEZXNjcmlwdGlvbl07Cisg
ICAgTlNTdHJpbmcgKmludGVyYWN0aXZlVmlkZW9EZXNjcmlwdGlvbiA9IFtzZWxmIGludGVyYWN0
aXZlVmlkZW9EZXNjcmlwdGlvbl07CiAgICAgCiAgICAgLy8gV2Ugc2hvdWxkIGV4cG9zZSB0aGUg
dmFsdWUgb2YgdGhlIGlucHV0IHR5cGUgZGF0ZSBvciB0aW1lIHRocm91Z2ggQVhWYWx1ZSBpbnN0
ZWFkIG9mIEFYVGl0bGUuCiAgICAgaWYgKG1fb2JqZWN0LT5pc0lucHV0VHlwZVBvcHVwQnV0dG9u
KCkgJiYgW2F4VGl0bGUgaXNFcXVhbFRvU3RyaW5nOltzZWxmIGFjY2Vzc2liaWxpdHlWYWx1ZV1d
KQpAQCAtMTA2MSw2ICsxMTMxLDcgQEAgLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5TGFiZWwK
ICAgICAgICAgYXBwZW5kU3RyaW5nVG9SZXN1bHQocmVzdWx0LCB2YWx1ZUxhYmVsKTsKICAgICB9
CiAgICAgYXBwZW5kU3RyaW5nVG9SZXN1bHQocmVzdWx0LCBsYW5kbWFya0Rlc2NyaXB0aW9uKTsK
KyAgICBhcHBlbmRTdHJpbmdUb1Jlc3VsdChyZXN1bHQsIGludGVyYWN0aXZlVmlkZW9EZXNjcmlw
dGlvbik7CiAgICAgCiAgICAgcmV0dXJuIFtyZXN1bHQgbGVuZ3RoXSA/IHJlc3VsdCA6IG5pbDsK
IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjg4NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE3LTEwLTA0ICBOYW4gV2FuZyAgPG5f
d2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1ha2UgdmlkZW8gb2JqZWN0cyBhY2Nlc3Np
YmxlIG9uIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc3Nzg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNDc3ODAyOD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9z
LXNpbXVsYXRvci92aWRlby1lbGVtZW50cy1pb3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvdmlkZW8tZWxlbWVudHMtaW9zLmh0bWw6
IEFkZGVkLgorCiAyMDE3LTEwLTA0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBiYXNpYyBzdXBwb3J0IGZvciB0aGUgdmVyc2lvbiBvZiBEYXRh
VHJhbnNmZXJJdGVtTGlzdC5hZGQgdGhhdCB0YWtlcyBhIEZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVtZW50cy1pb3MtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRv
ci92aWRlby1lbGVtZW50cy1pb3MtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRvci92aWRlby1lbGVtZW50cy1pb3MtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKKyAgCitUaGlzIHRlc3Rz
IHRoZSB2aWRlbyBlbGVtZW50cyBvbiBpT1MuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIHZpZGVvMiBpcyBudWxsCitBWExhYmVsOiBWaWRlbyBsYWJlbCwgOSBzZWNvbmRz
CitBWFZhbHVlOiAwIHNlY29uZHMKK1BBU1MgdmlkZW8uZGVzY3JpcHRpb24gaXMgJ0FYTGFiZWw6
IFZpZGVvIGxhYmVsLCA5IHNlY29uZHMnCitQQVNTIHZpZGVvLnN0cmluZ1ZhbHVlIGlzICdBWFZh
bHVlOiAwIHNlY29uZHMnCitQQVNTIHZpZC5wYXVzZWQgaXMgdHJ1ZQorUEFTUyB2aWQucGF1c2Vk
IGlzIGZhbHNlCitQQVNTIHZpZC5wYXVzZWQgaXMgdHJ1ZQorUEFTUyB2aWRlby5zdHJpbmdWYWx1
ZSBpcyAnQVhWYWx1ZTogMiBzZWNvbmRzJworUEFTUyB2aWRlby5zdHJpbmdWYWx1ZSBpcyAnQVhW
YWx1ZTogMSBzZWNvbmRzJworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW9zLXNpbXVsYXRv
ci92aWRlby1lbGVtZW50cy1pb3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L2lvcy1zaW11bGF0b3IvdmlkZW8tZWxlbWVudHMtaW9zLmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pb3Mtc2ltdWxhdG9yL3ZpZGVvLWVs
ZW1lbnRzLWlvcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPHZpZGVvIHdpZHRoPSIzMjAiIGhlaWdodD0iMjQw
IiBwbGF5c2lubGluZSBpZD0idmlkZW8iIGFyaWEtbGFiZWw9IlZpZGVvIGxhYmVsIj4KKyAgPHNv
dXJjZSBzcmM9Ii4uLy4uL21lZGlhL2NvbnRlbnQvY291bnRpbmcubXA0IiB0eXBlPSJ2aWRlby9t
cDQiPgorICBZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdmlkZW8gdGFnLgorPC92
aWRlbz4KKworPHZpZGVvIHdpZHRoPSIzMjAiIGhlaWdodD0iMjQwIiBjb250cm9scyBpZD0idmlk
ZW8yIiBhcmlhLWxhYmVsPSJWaWRlbyBsYWJlbDIiPgorICA8c291cmNlIHNyYz0iLi4vLi4vbWVk
aWEvY29udGVudC9jb3VudGluZy5tcDQiIHR5cGU9InZpZGVvL21wNCI+CisgIFlvdXIgYnJvd3Nl
ciBkb2VzIG5vdCBzdXBwb3J0IHRoZSB2aWRlbyB0YWcuCis8L3ZpZGVvPgorCis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisg
ICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhlIHZpZGVvIGVsZW1lbnRzIG9uIGlPUy4iKTsK
KworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAganNU
ZXN0SXNBc3luYyA9IHRydWU7CisgICAgCisgICAgICAgIHZhciB2aWQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgidmlkZW8iKTsgCisgICAgICAgIHZhciB2aWRlbyA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidmlkZW8iKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIHNob3VsZG4ndCBleHBvc2UgdmlkZW8gZWxlbWVudHMgd2l0aCBuYXRpdmUgY29u
dHJvbHMKKyAgICAgICAgdmFyIHZpZGVvMiA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgidmlkZW8yIik7CisgICAgICAgIHNob3VsZEJlTnVsbCgidmlkZW8y
Iik7CisgICAgICAgIAorICAgICAgICB2aWQub25jYW5wbGF5dGhyb3VnaCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgZGVidWcodmlkZW8uZGVzY3JpcHRpb24pOworICAgICAgICAgICAgZGVi
dWcodmlkZW8uc3RyaW5nVmFsdWUpOworICAgICAgICAgICAgc2hvdWxkQmUoInZpZGVvLmRlc2Ny
aXB0aW9uIiwgIidBWExhYmVsOiBWaWRlbyBsYWJlbCwgOSBzZWNvbmRzJyIpOworICAgICAgICAg
ICAgc2hvdWxkQmUoInZpZGVvLnN0cmluZ1ZhbHVlIiwgIidBWFZhbHVlOiAwIHNlY29uZHMnIik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRlc3QgcGxheSBhbmQgcGF1c2UuCisgICAg
ICAgICAgICBzaG91bGRCZVRydWUoInZpZC5wYXVzZWQiKTsKKyAgICAgICAgICAgIHZpZGVvLnBy
ZXNzKCk7CisgICAgICAgICAgICBzaG91bGRCZUZhbHNlKCJ2aWQucGF1c2VkIik7CisgICAgICAg
ICAgICB2aWRlby5wcmVzcygpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCJ2aWQucGF1c2Vk
Iik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRlc3QgZmFzdCBmb3J3YXJkIGFuZCBy
ZXdpbmQuCisgICAgICAgICAgICB2aWRlby5pbmNyZW1lbnQoKTsKKyAgICAgICAgICAgIHZpZGVv
LmluY3JlbWVudCgpOworICAgICAgICAgICAgc2hvdWxkQmUoInZpZGVvLnN0cmluZ1ZhbHVlIiwg
IidBWFZhbHVlOiAyIHNlY29uZHMnIik7CisgICAgICAgICAgICB2aWRlby5kZWNyZW1lbnQoKTsK
KyAgICAgICAgICAgIHNob3VsZEJlKCJ2aWRlby5zdHJpbmdWYWx1ZSIsICInQVhWYWx1ZTogMSBz
ZWNvbmRzJyIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICAgICAgfTsKKyAgICAgICAgCisgICAgfQorICAgIAorPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>