<?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>23430</bug_id>
          
          <creation_ts>2009-01-20 03:58:53 -0800</creation_ts>
          <short_desc>Frame Refactor: Move methods from Frame to Editor</short_desc>
          <delta_ts>2012-05-30 00:54:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>45218</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Holger Freyther">zecke</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106316</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-20 03:58:53 -0800</bug_when>
    <thetext>const Selection&amp; mark() const; // Mark, to be used as emacs uses it.
void setMark(const Selection&amp;);

void computeAndSetTypingStyle(CSSStyleDeclaration* , EditAction = EditActionUnspecified);
String selectionStartStylePropertyValue(int stylePropertyID) const;
void applyEditingStyleToBodyElement() const;
void applyEditingStyleToElement(Element*) const;

IntRect firstRectForRange(Range*) const;

void respondToChangedSelection(const Selection&amp; oldSelection, bool closeTyping);
bool shouldChangeSelection(const Selection&amp; oldSelection, const Selection&amp; newSelection, EAffinity, bool stillSelecting) const;

RenderStyle* styleForSelectionStart(Node*&amp; nodeToRemove) const;

unsigned markAllMatchesForText(const String&amp;, bool caseFlag, unsigned limit);
bool markedTextMatchesAreHighlighted() const;
void setMarkedTextMatchesAreHighlighted(bool flag);

PassRefPtr&lt;CSSComputedStyleDeclaration&gt; selectionComputedStyle(Node*&amp; nodeToRemove) const;

void textFieldDidBeginEditing(Element*);
void textFieldDidEndEditing(Element*);
void textDidChangeInTextField(Element*);
bool doTextFieldCommandFromEvent(Element*, KeyboardEvent*);
void textWillBeDeletedInTextField(Element* input);
void textDidChangeInTextArea(Element*);

DragImageRef dragImageForSelection();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106324</commentid>
    <comment_count>1</comment_count>
      <attachid>26862</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-01-20 04:43:30 -0800</bug_when>
    <thetext>Created attachment 26862
Do the moving

Tests pass on the mac. I need to verify the result o git rebase and manual merging as I was hit hard by Sam&apos;s work on killing FramePrivate. Review and comments are appreciated right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122491</commentid>
    <comment_count>2</comment_count>
      <attachid>26862</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-21 18:32:55 -0700</bug_when>
    <thetext>Comment on attachment 26862
Do the moving

So long as you&apos;re just moving code, this looks great.  I worry that this patch is long-since rotten (that the methods you&apos;re moving may have changed).

It seems a little strange that selectedText() is on Editor instead of say SelectionController, but it seems fine.

r=me, if you make sure the patch is updated to compile with TOT with all the LayoutTests passing and that you&apos;re certain that the code you are moving is up-to-date.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126114</commentid>
    <comment_count>3</comment_count>
      <attachid>26862</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-15 18:57:08 -0700</bug_when>
    <thetext>Comment on attachment 26862
Do the moving

Not much use having this in the commit queue.  You have my r+ if this is updated to work on TOT.  I guess I&apos;ll mark it r- for now and you can re-post a patch which applies on TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636983</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-30 00:54:10 -0700</bug_when>
    <thetext>Fixed in http://trac.webkit.org/changeset/67122.

*** This bug has been marked as a duplicate of bug 45218 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26862</attachid>
            <date>2009-01-20 04:43:30 -0800</date>
            <delta_ts>2010-06-10 17:38:19 -0700</delta_ts>
            <desc>Do the moving</desc>
            <filename>0005-Carry-out-the-move-of-items-from-Frame-to-Editor.patch</filename>
            <type>text/plain</type>
            <size>89040</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSA2NWVmODM0NTRiYmU2NmQzMmU0MzFlN2VkZjQwOGQ0OWEwMTgxYjYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IFRodSwgMjUgRGVjIDIwMDggMjI6MjM6NTUgKzAxMDAKU3ViamVjdDog
W1BBVENIXSBDYXJyeSBvdXQgdGhlIG1vdmUgb2YgaXRlbXMgZnJvbSBGcmFtZSB0byBFZGl0b3IK
ClJlbW92ZSBGcmFtZTo6cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQgYW5kCkZyYW1lOjpy
ZW1vdmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQgdGhleSB3ZXJlIG1hZGUgbm8tb3Ancwph
dCB0aGUgZW5kIG9mIDIwMDYuCgpJIHRoaW5rIHRoaXMgaXMgYSBnb29kIG1vdmUsIHRoZSBudWxs
IGNoZWNraW5nIG9mIEVkaXRvckNsaWVudAppcyBub3QgY29uc2lzdGVudCAoRWRpdG9yQ2xpZW50
IG1heSBub3QgYmUgemVybyksIHRoaXMgbmVlZHMgY29tcGlsZQpmaXhlcyBmb3IgdGhlIGRpZmZl
cmVudCBwb3J0cy4uLgotLS0KIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDE5ICstCiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUxMiArKysrKysrKysrKysrKysrKysrLQog
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM2
ICsrCiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgICAgICAgICAgICAgICAgICB8
ICAgMTggKy0KIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcCAgICAgICAg
ICAgIHwgICAgMiArLQogV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwICAgICAgICAg
ICAgICAgICAgfCAgIDM3ICsrCiBXZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSAgICAg
ICAgICAgICAgICAgICB8ICAgIDcgKwogV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcCAg
ICAgICAgICAgICAgICAgICAgfCAgICA1ICsKIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcCAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MDggKy0tLS0tLS0tLS0tLS0tLS0t
LS0KIFdlYkNvcmUvcGFnZS9GcmFtZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA0MCAtLQogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICA5ICstCiBXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3RrLmNwcCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMzcgLS0KIFdlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgOSArLQogV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIFdlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNw
cCAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAgICAgICAgICAgICAgfCAgICA1ICstCiBXZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcCAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIFdlYkNvcmUvcGxhdGZv
cm0vcXQvUGFzdGVib2FyZFF0LmNwcCAgICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcCAgICAgICAgICAgICB8ICAgIDMgKy0K
IFdlYkNvcmUvcGxhdGZvcm0vd3gvUGFzdGVib2FyZFd4LmNwcCAgICAgICAgICAgICAgIHwgICAg
MiArLQogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgICAgICAgICAgICAgICAg
fCAgICAyICstCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAgICB8ICAgIDIgKy0KIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAgIHwgICAgNCArLQogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAg
ICAgICAgICAgICAgICAgfCAgICA5ICstCiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
ICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKy0KIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
UmVwcmVzZW50YXRpb24ubW0gICAgICAgIHwgICAgMyArLQogV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tICAgICAgICAgICAgICAgICAgfCAgICA4ICstCiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIFdlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAgfCAgICAzICstCiBX
ZWJLaXQvd2luL1dlYlZpZXcuY3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIg
Ky0KIDM2IGZpbGVzIGNoYW5nZWQsIDY2MSBpbnNlcnRpb25zKCspLCA2NzEgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCiBk
ZWxldGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCBhZmJhYzY1Li42MGM1M2UzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE2NzUsMTMgKzE2NzUsMTMgQEAgd2ViY29y
ZWd0a19zb3VyY2VzICs9IFwKIGVuZGlmCiAKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCisJV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0FYT2Jq
ZWN0Q2FjaGVBdGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RB
dGsuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcCBcCiAJV2ViQ29yZS9wYWdlL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5o
IFwKIAlXZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcCBcCiAJV2ViQ29yZS9w
YWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwIFwKLQlXZWJDb3JlL3BhZ2UvZ3RrL0ZyYW1lR3Rr
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwIFwKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRl
eCA1OTkyMGZmLi4xYTQ2YjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC00NzIsMjAgKzQ3MiwxNiBAQCBfX1pO
N1dlYkNvcmU0UGFnZUQxRXYKIF9fWk43V2ViQ29yZTVDYWNoZTExc2V0RGlzYWJsZWRFYgogX19a
TjdXZWJDb3JlNUNhY2hlMTNnZXRTdGF0aXN0aWNzRXYKIF9fWk43V2ViQ29yZTVDYWNoZTEzc2V0
Q2FwYWNpdGllc0VqamoKLV9fWk43V2ViQ29yZTVGcmFtZTEwZmluZFN0cmluZ0VSS05TXzZTdHJp
bmdFYmJiYgogX19aTjdXZWJDb3JlNUZyYW1lMTNyZWFwcGx5U3R5bGVzRXYKIF9fWk43V2ViQ29y
ZTVGcmFtZTEzc2V0Wm9vbUZhY3RvckVmYgogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldp
ZGdldEVQS05TXzZXaWRnZXRFCiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldElzRGlzY29ubmVjdGVk
RWIKIF9fWk43V2ViQ29yZTVGcmFtZTE5c2V0SW5WaWV3U291cmNlTW9kZUViCiBfX1pON1dlYkNv
cmU1RnJhbWUyMHNldFNlbGVjdGlvbkZyb21Ob25lRXYKLV9fWk43V2ViQ29yZTVGcmFtZTIxbWFy
a0FsbE1hdGNoZXNGb3JUZXh0RVJLTlNfNlN0cmluZ0ViagogX19aTjdXZWJDb3JlNUZyYW1lMjN2
aXNpYmxlUG9zaXRpb25Gb3JQb2ludEVSS05TXzhJbnRQb2ludEUKLV9fWk43V2ViQ29yZTVGcmFt
ZTI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNf
MTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNUZyYW1lMjRzZXRFeGNsdWRlRnJvbVRleHRTZWFy
Y2hFYgogX19aTjdXZWJDb3JlNUZyYW1lMjVtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50RVA3TlNB
cnJheVBOU183RWxlbWVudEUKIF9fWk43V2ViQ29yZTVGcmFtZTI4c2VhcmNoRm9yTGFiZWxzQmVm
b3JlRWxlbWVudEVQN05TQXJyYXlQTlNfN0VsZW1lbnRFCi1fX1pON1dlYkNvcmU1RnJhbWUzNHNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNUZyYW1lNGlu
aXRFdgogX19aTjdXZWJDb3JlNUZyYW1lNnNjcmlwdEV2CiBfX1pON1dlYkNvcmU1RnJhbWU3c2V0
Vmlld0VQTlNfOUZyYW1lVmlld0UKQEAgLTUzOCw2ICs1MzQsMTAgQEAgX19aTjdXZWJDb3JlNkVk
aXRvcjdjb21tYW5kRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTZFZGl0b3I3Y29tbWFuZEVS
S05TXzZTdHJpbmdFTlNfMTlFZGl0b3JDb21tYW5kU291cmNlRQogX19aTjdXZWJDb3JlNkVkaXRv
cjdjb3B5VVJMRVJLTlNfNEtVUkxFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlNkVkaXRvcjdv
dXRkZW50RXYKK19fWk43V2ViQ29yZTZFZGl0b3IyMW1hcmtBbGxNYXRjaGVzRm9yVGV4dEVSS05T
XzZTdHJpbmdFYmoKK19fWk43V2ViQ29yZTZFZGl0b3IzNHNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWRFYgorX19aTjdXZWJDb3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0
eWxlRVBOU18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQorX19aTjdXZWJD
b3JlNkVkaXRvcjEwZmluZFN0cmluZ0VSS05TXzZTdHJpbmdFYmJiYgogX19aTjdXZWJDb3JlNlN0
cmluZzZhcHBlbmRFUktTMF8KIF9fWk43V2ViQ29yZTZTdHJpbmc2YXBwZW5kRWMKIF9fWk43V2Vi
Q29yZTZTdHJpbmdDMUVQOE5TU3RyaW5nCkBAIC04MTQsMjMgKzgxNCwxNyBAQCBfX1pOSzdXZWJD
b3JlNUZyYW1lMTFjdXJyZW50Rm9ybUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTF0eXBpbmdTdHls
ZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTJldmVudEhhbmRsZXJFdgogX19aTks3V2ViQ29yZTVG
cmFtZTEyb3duZXJFbGVtZW50RXYKLV9fWk5LN1dlYkNvcmU1RnJhbWUxMnNlbGVjdGVkVGV4dEV2
CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNvd25lclJlbmRlcmVyRXYKIF9fWk5LN1dlYkNvcmU1RnJh
bWUxNHNlbGVjdGlvbkltYWdlRWIKIF9fWk5LN1dlYkNvcmU1RnJhbWUxNWNvbnRlbnRSZW5kZXJl
ckV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVyZXZlYWxTZWxlY3Rpb25FUktOU18xMVJlbmRlckxh
eWVyMTVTY3JvbGxBbGlnbm1lbnRFCiBfX1pOSzdXZWJDb3JlNUZyYW1lMTVzZWxlY3Rpb25Cb3Vu
ZHNFYgogX19aTks3V2ViQ29yZTVGcmFtZTE2aW5WaWV3U291cmNlTW9kZUV2Ci1fX1pOSzdXZWJD
b3JlNUZyYW1lMTdmaXJzdFJlY3RGb3JSYW5nZUVQTlNfNVJhbmdlRQogX19aTks3V2ViQ29yZTVG
cmFtZTE4ZG9jdW1lbnRUeXBlU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxOHNlbGVjdGlv
blRleHRSZWN0c0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRUVFYgogX19aTks3V2Vi
Q29yZTVGcmFtZTIwc2VsZWN0aW9uR3JhbnVsYXJpdHlFdgotX19aTks3V2ViQ29yZTVGcmFtZTMw
YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUzMWZv
bnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnRFdgotX19aTks3V2ViQ29yZTVGcmFtZTMxbWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZEV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1lMzNyZW1v
dmVFZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnRFdgogX19aTks3V2ViQ29yZTVGcmFtZTM3YmFz
ZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydEV2Ci1fX1pOSzdXZWJDb3JlNUZyYW1l
NG1hcmtFdgogX19aTks3V2ViQ29yZTVGcmFtZTRwYWdlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWU0
dHJlZUV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lNHZpZXdFdgpAQCAtODY1LDYgKzg1OSwxMSBAQCBf
X1pOSzdXZWJDb3JlNkVkaXRvcjdjYW5Db3B5RXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9yN2NhbkVk
aXRFdgogX19aTks3V2ViQ29yZTZFZGl0b3I4Y2FuUGFzdGVFdgogX19aTks3V2ViQ29yZTZFZGl0
b3I5Y2FuRGVsZXRlRXYKK19fWk5LN1dlYkNvcmU2RWRpdG9yMzBhcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnRFdgorX19aTks3V2ViQ29yZTZFZGl0b3IxN2ZpcnN0UmVjdEZvclJhbmdlRVBO
U181UmFuZ2VFCitfX1pOSzdXZWJDb3JlNkVkaXRvcjEyc2VsZWN0ZWRUZXh0RXYKK19fWk5LN1dl
YkNvcmU2RWRpdG9yMzFtYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRXYKK19fWk5LN1dl
YkNvcmU2RWRpdG9yNG1hcmtFdgogX19aTks3V2ViQ29yZTZTdHJpbmcxMGNoYXJhY3RlcnNFdgog
X19aTks3V2ViQ29yZTZTdHJpbmcxNGNyZWF0ZUNGU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmU2U3Ry
aW5nNmxlbmd0aEV2CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
aW5kZXggNzM4Y2U2NC4uYmQxNGViNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcApAQCAtNzIzLDcgKzcyMyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChhbmNlc3Rvck5vZGUgJiYgYW5jZXN0b3JOb2Rl
LT5oYXNUYWdOYW1lKGlucHV0VGFnKQogICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihhbmNlc3Rvck5vZGUpLT5pc1RleHRGaWVsZCgpCiAgICAgICAgICAg
ICAgICAgJiYgYW5jZXN0b3JOb2RlLT5mb2N1c2VkKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1l
bnQqPihhbmNlc3Rvck5vZGUpKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVk
aXRvcigpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKHN0YXRpY19jYXN0PEVsZW1lbnQq
PihhbmNlc3Rvck5vZGUpKTsKICAgICB9CiAKICAgICAvLyBzYXZlIHRoaXMgdG8gbGF0ZXIgbWFr
ZSB0aGUgc2VsZWN0aW9uIHdpdGgKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMDU0MTZjYi4uZDVhN2ZlMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50Lmgi
CisjaW5jbHVkZSAiRWRpdGluZ1RleHQuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCkBAIC01
Miw4ICs1MywxMCBAQAogI2luY2x1ZGUgIkluc2VydExpc3RDb21tYW5kLmgiCiAjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIgor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW1vdmVG
b3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5k
ZXJQYXJ0LmgiCkBAIC00MDIsNyArNDA1LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRv
cjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAogCiAgICAg
aWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7CiAgICAgICAgIE5vZGUqIG5v
ZGVUb1JlbW92ZTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9mcmFtZS0+c3R5bGVG
b3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOyAvLyBzZXRzIG5vZGVUb1JlbW92ZQorICAg
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1Jl
bW92ZSk7IC8vIHNldHMgbm9kZVRvUmVtb3ZlCiAKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIHJlc3VsdCA9IDA7CiAgICAgICAgIGlmIChzdHlsZSkKQEAgLTcxNSw3ICs3MTgsNyBAQCB2
b2lkIEVkaXRvcjo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW5nQWN0aW9uKQogICAgICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKLSAgICAgICAgICAgIG1f
ZnJhbWUtPmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7Cisg
ICAgICAgICAgICBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIHN0eWxlKQpAQCAtNzY5LDcgKzc3
Miw3IEBAIGJvb2wgRWRpdG9yOjpjbGllbnRJc0VkaXRhYmxlKCkgY29uc3QKIGJvb2wgRWRpdG9y
OjpzZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dAogewogICAgIE5vZGUqIG5vZGVUb1JlbW92ZTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25TdHlsZSA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbXB1dGVk
U3R5bGUobm9kZVRvUmVtb3ZlKTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBzZWxlY3Rpb25TdHlsZSA9IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3Zl
KTsKICAgICBpZiAoIXNlbGVjdGlvblN0eWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CkBAIC04MjIsNyArODI1LDcgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QKIAogICAgIGlmICghbV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzUmFuZ2UoKSkgewogICAgICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAg
ICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvblN0eWxlID0g
bV9mcmFtZS0+c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShub2RlVG9SZW1vdmUpOworICAgICAgICBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBzZWxlY3Rpb25TdHlsZSA9IHNlbGVj
dGlvbkNvbXB1dGVkU3R5bGUobm9kZVRvUmVtb3ZlKTsKICAgICAgICAgaWYgKCFzZWxlY3Rpb25T
dHlsZSkKICAgICAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwogICAgICAgICB1cGRhdGVT
dGF0ZShtdXRhYmxlU3R5bGUuZ2V0KCksIHNlbGVjdGlvblN0eWxlLmdldCgpLCBhdFN0YXJ0LCBz
dGF0ZSk7CkBAIC05MzYsNiArOTM5LDcgQEAgRWRpdG9yOjpFZGl0b3IoRnJhbWUqIGZyYW1lKQog
ICAgICwgbV9kZWxldGVCdXR0b25Db250cm9sbGVyKG5ldyBEZWxldGVCdXR0b25Db250cm9sbGVy
KGZyYW1lKSkKICAgICAsIG1faWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoZmFsc2Up
CiAgICAgLCBtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZShmYWxzZSkKKyAgICAsIG1f
aGlnaGxpZ2h0VGV4dE1hdGNoZXMoZmFsc2UpCiB7IAogfQogCkBAIC0xMzM4LDcgKzEzNDIsNyBA
QCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmIChzZWxlY3RlZFJhbmdlKQog
ICAgICAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHNlbGVjdGVkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKLSAgICBTdHJpbmcgdGV4dCA9IGZy
YW1lKCktPnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7
CiAgICAgQVNTRVJUKHRleHQubGVuZ3RoKCkgIT0gMCk7CiAgICAgY2xpZW50KCktPmlnbm9yZVdv
cmRJblNwZWxsRG9jdW1lbnQodGV4dCk7CiB9CkBAIC0xMzUxLDcgKzEzNTUsNyBAQCB2b2lkIEVk
aXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgdGhpcyBv
biB0aGUgTWFjLCBhbmQgaXQgc2hvdWxkIHJlbW92ZSBtaXNwcGVsbGluZyBtYXJrZXJzIGFyb3Vu
ZCB0aGUgCiAgICAgLy8gbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+
LgogCi0gICAgU3RyaW5nIHRleHQgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJp
bmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwogICAgIEFTU0VSVCh0ZXh0Lmxlbmd0aCgpICE9IDAp
OwogICAgIGNsaWVudCgpLT5sZWFybldvcmQodGV4dCk7CiB9CkBAIC0xNjkyLDcgKzE2OTYsNyBA
QCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVT
ZWxlY3Rpb24pCiAKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogewotICAg
IFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IGZyYW1lKCktPnNlbGVjdGVkVGV4dCgpOworICAgIFN0
cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVkVGV4dCgpOwogICAgIGludCBsZW5ndGggPSBz
ZWxlY3RlZFN0cmluZy5sZW5ndGgoKTsKICAgICBpZiAobGVuZ3RoID09IDApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE3ODgsNyArMTc5Miw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6
Z3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKQogCiBWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKIHsKLSAgICBTdHJpbmcgc2VsZWN0
ZWRTdHJpbmcgPSBmcmFtZSgpLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRT
dHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKICAgICBBU1NFUlQoc2VsZWN0ZWRTdHJpbmcubGVuZ3Ro
KCkgIT0gMCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwpAQCAtMjE4Niw0ICsyMTkw
LDQ5NiBAQCBQYXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6Om5leHRWaXNpYmxlUmFuZ2UoUmFuZ2Uq
IGN1cnJlbnRSYW5nZSwgY29uc3QgU3RyaW5nJiB0YQogICAgIHJldHVybiBsYXN0VmlzaWJsZVJh
bmdlKHRhcmdldCwgY2FzZUZsYWcpOwogfQogCitTdHJpbmcgRWRpdG9yOjpzZWxlY3RlZFRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBwbGFpblRleHQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnRv
UmFuZ2UoKS5nZXQoKSk7Cit9CisKKy8vIFNlYXJjaGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0
aGUgZG9jdW1lbnQgaWYgbm90aGluZyBpcyBzZWxlY3RlZC4KK2Jvb2wgRWRpdG9yOjpmaW5kU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBib29sIGZvcndhcmQsIGJvb2wgY2FzZUZsYWcsIGJv
b2wgd3JhcEZsYWcsIGJvb2wgc3RhcnRJblNlbGVjdGlvbikKK3sKKyAgICBpZiAodGFyZ2V0Lmlz
RW1wdHkoKSB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG1fZnJhbWUtPmV4Y2x1ZGVGcm9tVGV4dFNlYXJjaCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiwg
aWYgdGhlcmUncyBhIHNlbGVjdGlvbiB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250ZW50LiBXaGlj
aCBlZGdlCisgICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgc2VhcmNoaW5n
IGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rpb24gaXMgc2V0
LgorICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKG1fZnJhbWUt
PmRvY3VtZW50KCkpKTsKKyAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpOworCisgICAgaWYgKGZvcndhcmQpCisgICAgICAgIHNldFN0YXJ0
KHNlYXJjaFJhbmdlLmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVT
dGFydCgpIDogc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgZWxzZQorICAgICAgICBzZXRF
bmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJs
ZUVuZCgpIDogc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKTsKKworICAgIE5vZGUqIHNoYWRvd1Ry
ZWVSb290ID0gc2VsZWN0aW9uLnNoYWRvd1RyZWVSb290Tm9kZSgpOworICAgIGlmIChzaGFkb3dU
cmVlUm9vdCkgeworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgaWYgKGZv
cndhcmQpCisgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBz
aGFkb3dUcmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QsIDAsIGVjKTsKKyAg
ICB9CisKKyAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNo
UmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpKTsKKyAgICAvLyBJZiB3ZSBz
dGFydGVkIGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNo
ZXMgdGhlIGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KKyAgICAvLyBCdWlsZCBhIHNl
bGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3Bh
Y2UuCisgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0
byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KKyAg
ICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiAqU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50
b1JhbmdlKCkgPT0gKnNlbGVjdGlvbi50b1JhbmdlKCkpIHsKKyAgICAgICAgc2VhcmNoUmFuZ2Ug
PSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChmb3J3
YXJkKQorICAgICAgICAgICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFu
Z2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CisKKyAgICAgICAgaWYgKHNoYWRv
d1RyZWVSb290KSB7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAg
ICAgIGlmIChmb3J3YXJkKQorICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hh
ZG93VHJlZVJvb3QsIHNoYWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgpLCBlYyk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRv
d1RyZWVSb290LCAwLCBlYyk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHRSYW5nZSA9IGZp
bmRQbGFpblRleHQoc2VhcmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcp
OworICAgIH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKKworICAgIC8vIElm
IG5vdGhpbmcgd2FzIGZvdW5kIGluIHRoZSBzaGFkb3cgdHJlZSwgc2VhcmNoIGluIG1haW4gY29u
dGVudCBmb2xsb3dpbmcgdGhlIHNoYWRvdyB0cmVlLgorICAgIGlmIChyZXN1bHRSYW5nZS0+Y29s
bGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpIHsKKyAgICAgICAgc2VhcmNoUmFu
Z2UgPSByYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChm
b3J3YXJkKQorICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0QWZ0ZXIoc2hhZG93VHJl
ZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldEVuZEJlZm9yZShzaGFkb3dUcmVlUm9vdC0+c2hhZG93
UGFyZW50Tm9kZSgpLCBleGNlcHRpb24pOworCisgICAgICAgIHJlc3VsdFJhbmdlID0gZmluZFBs
YWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZyk7Cisg
ICAgfQorCisgICAgaWYgKCFpbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsK
KyAgICAgICAgcmVzdWx0UmFuZ2UgPSBuZXh0VmlzaWJsZVJhbmdlKHJlc3VsdFJhbmdlLmdldCgp
LCB0YXJnZXQsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZyk7CisgICAgICAgIGlmICghcmVz
dWx0UmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gSWYg
d2UgZGlkbid0IGZpbmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBzZWFyY2ggYWdhaW4g
aW4gdGhlIGVudGlyZSBkb2N1bWVudCAodGhpcyB3aWxsCisgICAgLy8gcmVkdW5kYW50bHkgcmUt
c2VhcmNoIHRoZSBhcmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNlcykuCisgICAgaWYg
KHJlc3VsdFJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uKSAmJiB3cmFwRmxhZykgeworICAgICAg
ICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAg
ICAgICAgcmVzdWx0UmFuZ2UgPSBmaW5kUGxhaW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJn
ZXQsIGZvcndhcmQsIGNhc2VGbGFnKTsKKyAgICAgICAgLy8gV2UgdXNlZCB0byByZXR1cm4gZmFs
c2UgaGVyZSBpZiB3ZSBlbmRlZCB1cCB3aXRoIHRoZSBzYW1lIHJhbmdlIHRoYXQgd2Ugc3RhcnRl
ZCB3aXRoCisgICAgICAgIC8vIChlLmcuLCB0aGUgc2VsZWN0aW9uIHdhcyBhbHJlYWR5IHRoZSBv
bmx5IGluc3RhbmNlIG9mIHRoaXMgdGV4dCkuIEJ1dCB3ZSBkZWNpZGVkIHRoYXQKKyAgICAgICAg
Ly8gdGhpcyBzaG91bGQgYmUgYSBzdWNjZXNzIGNhc2UgaW5zdGVhZCwgc28gd2UnbGwganVzdCBm
YWxsIHRocm91Z2ggaW4gdGhhdCBjYXNlLgorICAgIH0KKworICAgIGlmIChyZXN1bHRSYW5nZS0+
Y29sbGFwc2VkKGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgp
LCBET1dOU1RSRUFNKSk7CisgICAgbV9mcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2NvbnN0IFNlbGVjdGlvbiYgRWRpdG9yOjptYXJrKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9tYXJrOworfQorCit2b2lkIEVkaXRvcjo6c2V0TWFyayhjb25zdCBTZWxl
Y3Rpb24mIHMpCit7CisgICAgQVNTRVJUKCFzLmJhc2UoKS5ub2RlKCkgfHwgcy5iYXNlKCkubm9k
ZSgpLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkpOworICAgIEFTU0VSVCghcy5leHRlbnQoKS5u
b2RlKCkgfHwgcy5leHRlbnQoKS5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQoKSk7Cisg
ICAgQVNTRVJUKCFzLnN0YXJ0KCkubm9kZSgpIHx8IHMuc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50
KCkgPT0gZG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKCFzLmVuZCgpLm5vZGUoKSB8fCBzLmVuZCgp
Lm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKKworICAgIG1fbWFyayA9IHM7Cit9
CisKK3ZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdAor
eworICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNC
eVRhZ05hbWUoImJvZHkiKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgYXBwbHlFZGl0
aW5nU3R5bGVUb0VsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpKTsK
KyAgICB9Cit9CisKK3ZvaWQgRWRpdG9yOjphcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudChFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5zdHlsZSgpOwor
ICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXb3JkV3JhcCwgImJyZWFrLXdvcmQiLCBmYWxzZSwg
ZWMpOworICAgIEFTU0VSVChlYyA9PSAwKTsKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlXZWJraXROYnNwTW9kZSwgInNwYWNlIiwgZmFsc2UsIGVjKTsKKyAgICBBU1NFUlQoZWMg
PT0gMCk7CisgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TGluZUJyZWFr
LCAiYWZ0ZXItd2hpdGUtc3BhY2UiLCBmYWxzZSwgZWMpOworICAgIEFTU0VSVChlYyA9PSAwKTsK
K30KKworSW50UmVjdCBFZGl0b3I6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29u
c3QKK3sKKyAgICBpbnQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBBU1NFUlQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSk7CisgICAg
QVNTRVJUKHJhbmdlLT5lbmRDb250YWluZXIoZWMpKTsKKworICAgIElubGluZUJveCogc3RhcnRJ
bmxpbmVCb3g7CisgICAgaW50IHN0YXJ0Q2FyZXRPZmZzZXQ7CisgICAgcmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKS5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxpbmVCb3gs
IHN0YXJ0Q2FyZXRPZmZzZXQpOworCisgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0g
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKTsKKyAgICBJbnRSZWN0IHN0YXJ0
Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qoc3RhcnRJbmxpbmVCb3gs
IHN0YXJ0Q2FyZXRPZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOworICAgIGlmIChzdGFy
dENhcmV0UmVjdCAhPSBJbnRSZWN0KCkpCisgICAgICAgIHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRS
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qoc3RhcnRDYXJldFJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworCisgICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7Cisg
ICAgaW50IGVuZENhcmV0T2Zmc2V0OworICAgIHJhbmdlLT5lbmRQb3NpdGlvbigpLmdldElubGlu
ZUJveEFuZE9mZnNldChVUFNUUkVBTSwgZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CisK
KyAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYykt
PnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9j
YWxDYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CisgICAgaWYgKGVuZENh
cmV0UmVjdCAhPSBJbnRSZWN0KCkpCisgICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpOworCisgICAgaWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJldFJl
Y3QueSgpKSB7CisgICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxpbmUK
KyAgICAgICAgcmV0dXJuIEludFJlY3QobWluKHN0YXJ0Q2FyZXRSZWN0LngoKSwgZW5kQ2FyZXRS
ZWN0LngoKSksCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FyZXRSZWN0LnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgYWJzKGVuZENhcmV0UmVjdC54KCkgLSBzdGFydENhcmV0UmVj
dC54KCkpLAorICAgICAgICAgICAgICAgICAgICAgICBtYXgoc3RhcnRDYXJldFJlY3QuaGVpZ2h0
KCksIGVuZENhcmV0UmVjdC5oZWlnaHQoKSkpOworICAgIH0KKworICAgIC8vIHN0YXJ0IGFuZCBl
bmQgYXJlbid0IG9uIHRoZSBzYW1lIGxpbmUsIHNvIGdvIGZyb20gc3RhcnQgdG8gdGhlIGVuZCBv
ZiBpdHMgbGluZQorICAgIHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwKKyAgICAg
ICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgc3Rh
cnRDYXJldFJlY3Qud2lkdGgoKSArIGV4dHJhV2lkdGhUb0VuZE9mTGluZSwKKyAgICAgICAgICAg
ICAgICAgICBzdGFydENhcmV0UmVjdC5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgRWRpdG9yOjpyZXNw
b25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29s
IGNsb3NlVHlwaW5nKQoreworICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAg
IGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSB0aGlzLT5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgICAgICBib29sIGlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCAmJiB0
aGlzLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7CisgICAgICAgICAgICBTZWxlY3Rpb24gbmV3QWRqYWNl
bnRXb3JkczsKKyAgICAgICAgICAgIFNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRlbmNlOworICAg
ICAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CisgICAgICAg
ICAgICAgICAgbmV3QWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFy
dCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElm
T25Cb3VuZGFyeSkpOworICAgICAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKQorICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFNlbnRlbmNlID0g
U2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVuZE9mU2VudGVuY2UobmV3U3Rh
cnQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hl
Y2sgc3BlbGxpbmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCisgICAgICAgICAg
ICAvLyBJZiB0aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRl
bGV0ZSBvcGVyYXRpb24sCisgICAgICAgICAgICAvLyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdl
ciBiZSBpbiB0aGUgZG9jdW1lbnQuCisgICAgICAgICAgICBpZiAoY2xvc2VUeXBpbmcgJiYgb2xk
U2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9k
ZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAg
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKSk7CisgICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBT
ZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5k
T2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgICAg
ICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1hcmtNaXNzcGVsbGluZ3Mob2xkQWRqYWNlbnRXb3Jkcyk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb24gb2xkU2VsZWN0ZWRTZW50ZW5jZSA9IFNlbGVj
dGlvbihzdGFydE9mU2VudGVuY2Uob2xkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKG9sZFN0YXJ0KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkU2VsZWN0ZWRTZW50ZW5jZSAhPSBuZXdT
ZWxlY3RlZFNlbnRlbmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtCYWRHcmFt
bWFyKG9sZFNlbGVjdGVkU2VudGVuY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGlzIG9ubHkgZXJh
c2VzIG1hcmtlcnMgdGhhdCBhcmUgaW4gdGhlIGZpcnN0IHVuaXQgKHdvcmQgb3Igc2VudGVuY2Up
IG9mIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICAvLyBQZXJoYXBzIHBlY3VsaWFyLCBidXQg
aXQgbWF0Y2hlcyBBcHBLaXQuCisgICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2UgPSBuZXdBZGphY2VudFdvcmRzLnRvUmFuZ2UoKSkKKyAgICAgICAgICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFu
Z2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvUmFuZ2UoKSkKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHNlbnRlbmNlUmFuZ2UuZ2V0KCksIERvY3Vt
ZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gY29udGlu
dW91cyBzcGVsbCBjaGVja2luZyBpcyBvZmYsIGV4aXN0aW5nIG1hcmtlcnMgZGlzYXBwZWFyIGFm
dGVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy4KKyAgICAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbW92
ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgaWYgKCFpc0NvbnRp
bnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgfQorCisg
ICAgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOworfQorCitib29sIEVk
aXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
LCBjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAoreworICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rp
b24udG9SYW5nZSgpLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKK30KKworUmVu
ZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiAmbm9kZVRvUmVt
b3ZlKSBjb25zdAoreworICAgIG5vZGVUb1JlbW92ZSA9IDA7CisKKyAgICBpZiAoIW1fZnJhbWUt
PmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNOb25lKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUG9zaXRpb24gcG9zID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgaWYgKCFwb3MuaXNDYW5kaWRhdGUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgTm9kZSAqbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGlmICghbV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkKKyAgICAgICAgcmV0
dXJuIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAic3BhbiIsIGVjKTsKKyAgICBB
U1NFUlQoZWMgPT0gMCk7CisKKyAgICBTdHJpbmcgc3R5bGVUZXh0ID0gbV9mcmFtZS0+dHlwaW5n
U3R5bGUoKS0+Y3NzVGV4dCgpICsgIiBkaXNwbGF5OiBpbmxpbmUiOworICAgIHN0eWxlRWxlbWVu
dC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5bGVUZXh0LmltcGwoKSwgZWMpOworICAgIEFT
U0VSVChlYyA9PSAwKTsKKworICAgIHN0eWxlRWxlbWVudC0+YXBwZW5kQ2hpbGQobV9mcmFtZS0+
ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIiKSwgZWMpOworICAgIEFTU0VSVChl
YyA9PSAwKTsKKworICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVt
ZW50LCBlYyk7CisgICAgQVNTRVJUKGVjID09IDApOworCisgICAgbm9kZVRvUmVtb3ZlID0gc3R5
bGVFbGVtZW50LmdldCgpOworICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnJlbmRlcmVyKCkgPyBz
dHlsZUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkgOiAwOworfQorCit1bnNpZ25lZCBFZGl0
b3I6Om1hcmtBbGxNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBjYXNl
RmxhZywgdW5zaWduZWQgbGltaXQpCit7CisgICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIW1f
ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPFJhbmdl
PiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOworCisg
ICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgIHVuc2lnbmVkIG1hdGNoQ291bnQg
PSAwOworICAgIGRvIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZShmaW5kUGxh
aW5UZXh0KHNlYXJjaFJhbmdlLmdldCgpLCB0YXJnZXQsIHRydWUsIGNhc2VGbGFnKSk7CisgICAg
ICAgIGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikpIHsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlzSW5TaGFkb3dUcmVlKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VP
ZkNvbnRlbnRzKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0QWZ0ZXIocmVzdWx0UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpLCBleGNlcHRpb24pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBzb21lIGZ1
bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90CisgICAgICAgIC8vIGFkdmFuY2UgdGhlIHJh
bmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZpbml0ZSBs
b29wLgorICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxlUG9zaXRp
b24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAgICAgICBpZiAobmV3U3RhcnQg
PT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gT25seSB0cmVhdCB0aGUgcmVzdWx0IGFz
IGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQorICAgICAgICBpZiAoaW5zaWRlVmlzaWJsZUFyZWEo
cmVzdWx0UmFuZ2UuZ2V0KCkpKSB7CisgICAgICAgICAgICArK21hdGNoQ291bnQ7CisgICAgICAg
ICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5hZGRNYXJrZXIocmVzdWx0UmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RvcCBs
b29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9mIDAgbWVhbnMg
bm8gbGltaXQuCisgICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+PSBsaW1pdCkK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHNldFN0YXJ0KHNlYXJjaFJhbmdlLmdldCgp
LCBuZXdTdGFydCk7CisgICAgICAgIE5vZGUqIHNoYWRvd1RyZWVSb290ID0gc2VhcmNoUmFuZ2Ut
PnNoYWRvd1RyZWVSb290Tm9kZSgpOworICAgICAgICBpZiAoc2VhcmNoUmFuZ2UtPmNvbGxhcHNl
ZChleGNlcHRpb24pICYmIHNoYWRvd1RyZWVSb290KQorICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldEVuZChzaGFkb3dUcmVlUm9vdCwgc2hhZG93VHJlZVJvb3QtPmNoaWxkTm9kZUNvdW50KCks
IGV4Y2VwdGlvbik7CisgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICAvLyBEbyBhICJmYWtlIiBw
YWludCBpbiBvcmRlciB0byBleGVjdXRlIHRoZSBjb2RlIHRoYXQgY29tcHV0ZXMgdGhlIHJlbmRl
cmVkIHJlY3QgZm9yCisgICAgLy8gZWFjaCB0ZXh0IG1hdGNoLgorICAgIERvY3VtZW50KiBkb2Mg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmIChkb2MgJiYgbV9mcmFtZS0+dmlldygpICYm
IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKSB7CisgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
KCk7IC8vIEVuc3VyZSBsYXlvdXQgaXMgdXAgdG8gZGF0ZS4KKyAgICAgICAgSW50UmVjdCB2aXNp
YmxlUmVjdCA9IG1fZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAg
IGlmICghdmlzaWJsZVJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOworICAgICAgICAgICAgY29u
dGV4dC5zZXRQYWludGluZ0Rpc2FibGVkKHRydWUpOworICAgICAgICAgICAgbV9mcmFtZS0+dmll
dygpLT5wYWludENvbnRlbnRzKCZjb250ZXh0LCB2aXNpYmxlUmVjdCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gbWF0Y2hDb3VudDsKK30KKworYm9vbCBFZGl0b3I6Om1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2hpZ2hsaWdo
dFRleHRNYXRjaGVzOworfQorCit2b2lkIEVkaXRvcjo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZChib29sIGZsYWcpCit7CisgICAgaWYgKGZsYWcgPT0gbV9oaWdobGlnaHRUZXh0
TWF0Y2hlcyB8fCAhbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9oaWdobGlnaHRUZXh0TWF0Y2hlcyA9IGZsYWc7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
cmVwYWludE1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7Cit9CisKK3ZvaWQgRWRp
dG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUs
IEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK3sKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5s
ZW5ndGgoKSA9PSAwKSB7CisgICAgICAgIG1fZnJhbWUtPmNsZWFyVHlwaW5nU3R5bGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgY3VycmVudCB0eXBp
bmcgc3R5bGUuCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtdXRhYmxl
U3R5bGUgPSBzdHlsZS0+bWFrZU11dGFibGUoKTsKKyAgICBpZiAobV9mcmFtZS0+dHlwaW5nU3R5
bGUoKSkgeworICAgICAgICBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpLT5tZXJnZShtdXRhYmxlU3R5
bGUuZ2V0KCkpOworICAgICAgICBtdXRhYmxlU3R5bGUgPSBtX2ZyYW1lLT50eXBpbmdTdHlsZSgp
OworICAgIH0KKworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7CisgICAgUmVmUHRy
PENTU1ZhbHVlPiBkaXJlY3Rpb247CisgICAgaWYgKGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlv
blNldFdyaXRpbmdEaXJlY3Rpb24pIHsKKyAgICAgICAgdW5pY29kZUJpZGkgPSBtdXRhYmxlU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CisgICAgICAg
IGRpcmVjdGlvbiA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eURpcmVjdGlvbik7CisgICAgfQorCisgICAgTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsK
KyAgICBjb21wdXRlZFN0eWxlKG5vZGUpLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7CisKKyAg
ICBpZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbiAmJiB1
bmljb2RlQmlkaSkgeworICAgICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFs
dWUoKSk7CisgICAgICAgIG11dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmlj
b2RlQmlkaSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih1bmljb2RlQmlkaS5nZXQo
KSktPmdldElkZW50KCkpOworICAgICAgICBpZiAoZGlyZWN0aW9uKSB7CisgICAgICAgICAgICBB
U1NFUlQoZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOworICAgICAgICAgICAgbXV0YWJs
ZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihkaXJlY3Rpb24uZ2V0KCkpLT5nZXRJZGVudCgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVz
ZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBibG9ja1N0eWxlID0gbXV0YWJsZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7
CisgICAgYmxvY2tTdHlsZS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIGlmIChtX2Zy
YW1lLT5kb2N1bWVudCgpICYmIGJsb2NrU3R5bGUtPmxlbmd0aCgpID4gMCkKKyAgICAgICAgYXBw
bHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
YmxvY2tTdHlsZS5nZXQoKSwgZWRpdGluZ0FjdGlvbikpOworCisgICAgLy8gU2V0IHRoZSByZW1h
aW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KKyAgICBtX2ZyYW1lLT5zZXRUeXBpbmdT
dHlsZShtdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIG11dGFibGVTdHlsZS5jbGVhcigpOworfQor
CitTdHJpbmcgRWRpdG9yOjpzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydHlWYWx1ZShpbnQgc3R5
bGVQcm9wZXJ0eUlEKSBjb25zdAoreworICAgIE5vZGUgKm5vZGVUb1JlbW92ZTsKKyAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25Db21wdXRl
ZFN0eWxlKG5vZGVUb1JlbW92ZSk7CisgICAgaWYgKCFzZWxlY3Rpb25TdHlsZSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eUlEKTsKKworICAgIGlmIChub2RlVG9SZW1vdmUp
IHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIG5vZGVUb1JlbW92ZS0+
cmVtb3ZlKGVjKTsKKyAgICAgICAgQVNTRVJUKGVjID09IDApOworICAgIH0KKworICAgIHJldHVy
biB2YWx1ZTsKK30KKworCitQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
RWRpdG9yOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0
Cit7CisgICAgbm9kZVRvUmVtb3ZlID0gMDsKKworICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlz
Tm9uZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKSk7CisgICAgUG9zaXRpb24gcG9zID0gcmFuZ2Ut
PmVkaXRpbmdTdGFydFBvc2l0aW9uKCk7CisKKyAgICBFbGVtZW50ICplbGVtID0gcG9zLmVsZW1l
bnQoKTsKKyAgICBpZiAoIWVsZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEVs
ZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGVsZW07CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisK
KyAgICBpZiAobV9mcmFtZS0+dHlwaW5nU3R5bGUoKSkgeworICAgICAgICBzdHlsZUVsZW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoeGh0bWxOYW1lc3BhY2VVUkks
ICJzcGFuIiwgZWMpOworICAgICAgICBBU1NFUlQoZWMgPT0gMCk7CisKKyAgICAgICAgc3R5bGVF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBtX2ZyYW1lLT50eXBpbmdTdHlsZSgpLT5j
c3NUZXh0KCkuaW1wbCgpLCBlYyk7CisgICAgICAgIEFTU0VSVChlYyA9PSAwKTsKKworICAgICAg
ICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVk
aXRpbmdUZXh0Tm9kZSgiIiksIGVjKTsKKyAgICAgICAgQVNTRVJUKGVjID09IDApOworCisgICAg
ICAgIGlmIChlbGVtLT5yZW5kZXJlcigpICYmIGVsZW0tPnJlbmRlcmVyKCktPmNhbkhhdmVDaGls
ZHJlbigpKSB7CisgICAgICAgICAgICBlbGVtLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVj
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5vZGUgKnBhcmVudCA9IGVsZW0tPnBh
cmVudCgpOworICAgICAgICAgICAgTm9kZSAqbmV4dCA9IGVsZW0tPm5leHRTaWJsaW5nKCk7CisK
KyAgICAgICAgICAgIGlmIChuZXh0KSB7CisgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUoc3R5bGVFbGVtZW50LCBuZXh0LCBlYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGVjID09IDApOworCisgICAgICAg
IG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Y29tcHV0ZWRTdHlsZShzdHlsZUVsZW1lbnQucmVsZWFzZSgpKTsKK30KKwordm9pZCBFZGl0b3I6
OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlKQoreworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhlKTsKK30KKwor
dm9pZCBFZGl0b3I6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKK3sKKyAgICBp
ZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGUp
OworfQorCit2b2lkIEVkaXRvcjo6dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqIGUp
Cit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+dGV4dERpZENoYW5nZUlu
VGV4dEZpZWxkKGUpOworfQorCitib29sIEVkaXRvcjo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KEVsZW1lbnQqIGUsIEtleWJvYXJkRXZlbnQqIGtlKQoreworICAgIGlmIChjbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5kb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoZSwg
a2UpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEVkaXRvcjo6dGV4dFdpbGxCZURl
bGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCkKK3sKKyAgICBpZiAoY2xpZW50KCkpCisg
ICAgICAgIGNsaWVudCgpLT50ZXh0V2lsbEJlRGVsZXRlZEluVGV4dEZpZWxkKGlucHV0KTsKK30K
Kwordm9pZCBFZGl0b3I6OnRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqIGUpCit7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+dGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGQ5N2Y2
NzAuLjVmZjE0OTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNs
aXBib2FyZEFjY2Vzc1BvbGljeS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRHJh
Z0ltYWdlLmgiCiAjaW5jbHVkZSAiRWRpdEFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckRlbGV0
ZUFjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvckluc2VydEFjdGlvbi5oIgpAQCAtMjY2LDYgKzI2
NywzOSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gbmV4dFZpc2libGVSYW5nZShS
YW5nZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3
cmFwRmxhZyk7CiAgICAgCiAgICAgdm9pZCBhZGRUb0tpbGxSaW5nKFJhbmdlKiwgYm9vbCBwcmVw
ZW5kKTsKKworICAgIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdDsKKyAgICBib29sIGZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCBmb3J3YXJkLCBib29sIGNhc2VGbGFnLCBib29sIHdy
YXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24pOworCisgICAgY29uc3QgU2VsZWN0aW9uJiBt
YXJrKCkgY29uc3Q7IC8vIE1hcmssIHRvIGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBpdC4KKyAgICB2
b2lkIHNldE1hcmsoY29uc3QgU2VsZWN0aW9uJik7CisKKyAgICB2b2lkIGNvbXB1dGVBbmRTZXRU
eXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiAsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9u
VW5zcGVjaWZpZWQpOworICAgIFN0cmluZyBzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydHlWYWx1
ZShpbnQgc3R5bGVQcm9wZXJ0eUlEKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5RWRpdGluZ1N0eWxl
VG9Cb2R5RWxlbWVudCgpIGNvbnN0OworICAgIHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1l
bnQoRWxlbWVudCopIGNvbnN0OworCisgICAgSW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5n
ZSopIGNvbnN0OworCisgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICBib29sIHNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgU2Vs
ZWN0aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29u
c3Q7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChOb2RlKiYgbm9k
ZVRvUmVtb3ZlKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG1hcmtBbGxNYXRjaGVzRm9yVGV4dChj
b25zdCBTdHJpbmcmLCBib29sIGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCk7CisgICAgYm9vbCBt
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZyk7CisKKyAgICBQYXNzUmVmUHRy
PENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2Rl
KiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKKworICAgIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0
aW5nKEVsZW1lbnQqKTsKKyAgICB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCop
OworICAgIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEZpZWxkKEVsZW1lbnQqKTsKKyAgICBib29s
IGRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiwgS2V5Ym9hcmRFdmVudCopOwor
ICAgIHZvaWQgdGV4dFdpbGxCZURlbGV0ZWRJblRleHRGaWVsZChFbGVtZW50KiBpbnB1dCk7Cisg
ICAgdm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50Kik7CisKKyAgICBEcmFnSW1h
Z2VSZWYgZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCk7CiBwcml2YXRlOgogICAgIEZyYW1lKiBtX2Zy
YW1lOwogICAgIE93blB0cjxEZWxldGVCdXR0b25Db250cm9sbGVyPiBtX2RlbGV0ZUJ1dHRvbkNv
bnRyb2xsZXI7CkBAIC0yNzgsNiArMzEyLDggQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbmU+IG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzOwogICAgIGJvb2wg
bV9pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZTsKICAgICBib29sIG1fc2hvdWxkU3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlOworICAgIFNlbGVjdGlvbiBtX21hcms7CisgICAgYm9vbCBt
X2hpZ2hsaWdodFRleHRNYXRjaGVzOwogCiAgICAgYm9vbCBjYW5EZWxldGVSYW5nZShSYW5nZSop
IGNvbnN0OwogICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2Fy
ZCopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IGNjNjgwYTYuLmY4YWEzY2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgVHJp
U3RhdGUgc3RhdGVTdHlsZShGcmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBjaGFy
KiBkZXNpcmVkVmFsdQogCiBzdGF0aWMgU3RyaW5nIHZhbHVlU3R5bGUoRnJhbWUqIGZyYW1lLCBp
bnQgcHJvcGVydHlJRCkKIHsKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvblN0YXJ0U3R5bGVQ
cm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCktPnNl
bGVjdGlvblN0YXJ0U3R5bGVQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOwogfQogCiBzdGF0aWMg
VHJpU3RhdGUgc3RhdGVUZXh0V3JpdGluZ0RpcmVjdGlvbihGcmFtZSogZnJhbWUsIFdyaXRpbmdE
aXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMzQyLDcgKzM0Miw3IEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVEZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiBtYXJrID0gZnJhbWUtPm1hcmsoKS50b1JhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdl
PiBtYXJrID0gZnJhbWUtPmVkaXRvcigpLT5tYXJrKCkudG9SYW5nZSgpOwogICAgIGlmIChtYXJr
KSB7CiAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKTsKICAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi0+c2V0U2VsZWN0ZWRS
YW5nZSh1bmlvbkRPTVJhbmdlcyhtYXJrLmdldCgpLCBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVk
UmFuZ2UoKS5nZXQoKSkuZ2V0KCksIERPV05TVFJFQU0sIHRydWUpOwpAQCAtMzUxLDcgKzM1MSw3
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUqIGZyYW1lLCBFdmVudCos
IEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGZyYW1lLT5lZGl0b3IoKS0+cGVyZm9ybURlbGV0ZSgpOwotICAgIGZyYW1lLT5z
ZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOworICAgIGZyYW1lLT5lZGl0
b3IoKS0+c2V0TWFyayhmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMzY5LDcgKzM2OSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxl
dGVXb3JkRm9yd2FyZChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwK
IAogc3RhdGljIGJvb2wgZXhlY3V0ZUZpbmRTdHJpbmcoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGZy
YW1lLT5maW5kU3RyaW5nKHZhbHVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpOworICAgIHJl
dHVybiBmcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodmFsdWUsIHRydWUsIGZhbHNlLCB0cnVl
LCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVGb250TmFtZShGcmFtZSogZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CkBAIC04ODgsNyArODg4LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNlKEZy
YW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb24KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFt
ZS0+bWFyaygpLnRvUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS0+ZWRp
dG9yKCktPm1hcmsoKS50b1JhbmdlKCk7CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBm
cmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIW1hcmsgfHwgIXNlbGVj
dGlvbikgewogICAgICAgICBzeXN0ZW1CZWVwKCk7CkBAIC05MDUsNyArOTA1LDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZVNlbGVjdFdvcmQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFMKIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNldE1hcmsoRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
ZnJhbWUtPnNldE1hcmsoZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CisgICAgZnJh
bWUtPmVkaXRvcigpLT5zZXRNYXJrKGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MjYsMTQgKzkyNiwxNCBAQCBzdGF0aWMgYm9vbCBl
eGVjdXRlU3VwZXJzY3JpcHQoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2Ugc291cmNlLAogCiBzdGF0aWMgYm9vbCBleGVjdXRlU3dhcFdpdGhNYXJrKEZyYW1lKiBmcmFt
ZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIGNv
bnN0IFNlbGVjdGlvbiYgbWFyayA9IGZyYW1lLT5tYXJrKCk7CisgICAgY29uc3QgU2VsZWN0aW9u
JiBtYXJrID0gZnJhbWUtPmVkaXRvcigpLT5tYXJrKCk7CiAgICAgY29uc3QgU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJr
LmlzTm9uZSgpIHx8IHNlbGVjdGlvbi5pc05vbmUoKSkgewogICAgICAgICBzeXN0ZW1CZWVwKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5z
ZXRTZWxlY3Rpb24obWFyayk7Ci0gICAgZnJhbWUtPnNldE1hcmsoc2VsZWN0aW9uKTsKKyAgICBm
cmFtZS0+ZWRpdG9yKCktPnNldE1hcmsoc2VsZWN0aW9uKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTA0MSw3ICsxMDQxLDcgQEAgc3RhdGljIGJvb2wgZW5hYmxlZFZpc2libGVTZWxlY3Rp
b25BbmRNYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JDb20KIHsKICAgICBj
b25zdCBTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uRm9y
Q29tbWFuZChldmVudCk7CiAgICAgcmV0dXJuICgoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBzZWxl
Y3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAg
ICAgJiYgZnJhbWUtPm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOworICAgICAgICAmJiBmcmFtZS0+
ZWRpdG9yKCktPm1hcmsoKS5pc0NhcmV0T3JSYW5nZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFi
bGVDYXJldEluRWRpdGFibGVUZXh0KEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2ZW50LCBFZGl0b3JD
b21tYW5kU291cmNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4
IGEwMjdhYTQuLjE2ZTkxMmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVj
dGlvbihjb25zdCBTZWxlY3Rpb24mIHMsIGJvb2wgY2xvc2VUeXBpbmcsIGJvbwogICAgIG1feFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uID0gTm9YUG9zRm9yVmVydGljYWxBcnJvd05hdmln
YXRpb247CiAgICAgc2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsK
ICAgICBtX2ZyYW1lLT5ub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKHVzZXJUcmlnZ2Vy
ZWQpOwotICAgIG1fZnJhbWUtPnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24ob2xkU2VsZWN0aW9u
LCBjbG9zZVR5cGluZyk7CisgICAgbV9mcmFtZS0+ZWRpdG9yKCktPnJlc3BvbmRUb0NoYW5nZWRT
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7CiAgICAgaWYgKHVzZXJUcmlnZ2Vy
ZWQpCiAgICAgICAgIG1fZnJhbWUtPnJldmVhbENhcmV0KFJlbmRlckxheWVyOjpnQWxpZ25Ub0Vk
Z2VJZk5lZWRlZCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcCBiL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hMmVjZjNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RyYWdJbWFnZVJlZiBFZGl0b3I6OmRy
YWdJbWFnZUZvclNlbGVjdGlvbigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0gYi9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCBiOThmYzAwLi5jMjgw
ZTk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQpAQCAtMTIxLDQgKzEyMSwxMSBAQCB2b2lk
IEVkaXRvcjo6cGFzdGUoKQogICAgIGxvYWRlci0+c2V0QWxsb3dTdGFsZVJlc291cmNlcyhmYWxz
ZSk7CiB9CiAKK0RyYWdJbWFnZVJlZiBFZGl0b3I6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCit7
CisgICAgaWYgKCFtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIHJldHVybiBtX2ZyYW1lLT5zZWxlY3Rpb25JbWFnZSgpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvcXQvRWRpdG9y
UXQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAppbmRleCA4OWVlNzhlLi4w
NWY2MGYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvcXQvRWRpdG9yUXQuY3BwCisrKyBi
L1dlYkNvcmUvZWRpdGluZy9xdC9FZGl0b3JRdC5jcHAKQEAgLTQ0LDQgKzQ0LDkgQEAgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kgcG9saWN5KQogICAgIHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKHBvbGljeSk7
CiB9CiAKK0RyYWdJbWFnZVJlZiBFZGl0b3I6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAppbmRleCAzY2U3M2U0Li4xOTU1MTdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVG
b2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogewogICAgIGlmIChpc1RleHRGaWVsZCgpICYm
IGZvY3VzZWQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudCgpLT5m
cmFtZSgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOworICAgICAgICBkb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyh0aGlzKTsKIH0KIAog
Ym9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkBAIC0y
NjAsNyArMjYwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgp
CiAgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpOwogICAgICAgICBpZiAoaW5w
dXRUeXBlKCkgPT0gUEFTU1dPUkQpCiAgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRVc2VTZWN1
cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZShmYWxzZSk7Ci0gICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcodGhpcyk7CisgICAgICAgIGRvY3VtZW50KCkt
PmZyYW1lKCktPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOwogICAgIH0K
ICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgp
OwogfQpAQCAtMTE5Niw3ICsxMTk2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgfQogCiAgICAgaWYgKGlzVGV4dEZpZWxkKCkg
JiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCAmJiBldnQtPmlzS2V5
Ym9hcmRFdmVudCgpICYmIGZvY3VzZWQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpCi0gICAgICAg
ICAgICAgICAgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2
ZW50KHRoaXMsIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpKSkgeworICAgICAgICAg
ICAgICAgICYmIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5kb1RleHRGaWVsZENvbW1h
bmRGcm9tRXZlbnQodGhpcywgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCkpKSB7CiAg
ICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAKaW5kZXggY2FiMjEwNC4uODMxZTc0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRE9NU2VsZWN0aW9u
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50
TmFtZXMuaCIKQEAgLTU0OCw3ICs1NDksNyBAQCBib29sIERPTVdpbmRvdzo6ZmluZChjb25zdCBT
dHJpbmcmIHN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGJhY2t3YXJkcywgYgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRSAoMTMwMTYpOiBTdXBwb3J0IHdob2xl
V29yZCwgc2VhcmNoSW5GcmFtZXMgYW5kIHNob3dEaWFsb2cKLSAgICByZXR1cm4gbV9mcmFtZS0+
ZmluZFN0cmluZyhzdHJpbmcsICFiYWNrd2FyZHMsIGNhc2VTZW5zaXRpdmUsIHdyYXAsIGZhbHNl
KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCAhYmFj
a3dhcmRzLCBjYXNlU2Vuc2l0aXZlLCB3cmFwLCBmYWxzZSk7CiB9CiAKIGJvb2wgRE9NV2luZG93
OjpvZmZzY3JlZW5CdWZmZXJpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggNjQzYTdlYS4uYWQxMGRhOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC0xMjIsNyArMTIyLDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZUxvYWRlckNsaWVudCoKICAgICAs
IG1fbGlmZVN1cHBvcnRUaW1lcih0aGlzLCAmRnJhbWU6OmxpZmVTdXBwb3J0VGltZXJGaXJlZCkK
ICAgICAsIG1fY2FyZXRWaXNpYmxlKGZhbHNlKQogICAgICwgbV9jYXJldFBhaW50KHRydWUpCi0g
ICAgLCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzKGZhbHNlKQogICAgICwgbV9pblZpZXdTb3VyY2VN
b2RlKGZhbHNlKQogICAgICwgbV9uZWVkc1JlYXBwbHlTdHlsZXMoZmFsc2UpCiAgICAgLCBtX2lz
RGlzY29ubmVjdGVkKGZhbHNlKQpAQCAtMjcxLDUxICsyNzAsNiBAQCBTZXR0aW5ncyogRnJhbWU6
OnNldHRpbmdzKCkgY29uc3QKICAgICByZXR1cm4gbV9wYWdlID8gbV9wYWdlLT5zZXR0aW5ncygp
IDogMDsKIH0KIAotU3RyaW5nIEZyYW1lOjpzZWxlY3RlZFRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiBwbGFpblRleHQoc2VsZWN0aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSk7Ci19Ci0KLUludFJl
Y3QgRnJhbWU6OmZpcnN0UmVjdEZvclJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKLXsKLSAgICBp
bnQgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBBU1NFUlQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKSk7Ci0gICAgQVNTRVJUKHJhbmdl
LT5lbmRDb250YWluZXIoZWMpKTsKLQotICAgIElubGluZUJveCogc3RhcnRJbmxpbmVCb3g7Ci0g
ICAgaW50IHN0YXJ0Q2FyZXRPZmZzZXQ7Ci0gICAgcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5nZXRJ
bmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRP
ZmZzZXQpOwotCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gcmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKGVjKS0+cmVuZGVyZXIoKTsKLSAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0g
c3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qoc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRP
ZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwotICAgIGlmIChzdGFydENhcmV0UmVjdCAh
PSBJbnRSZWN0KCkpCi0gICAgICAgIHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qoc3RhcnRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOwotCi0gICAgSW5saW5lQm94KiBlbmRJbmxpbmVCb3g7Ci0gICAgaW50IGVuZENh
cmV0T2Zmc2V0OwotICAgIHJhbmdlLT5lbmRQb3NpdGlvbigpLmdldElubGluZUJveEFuZE9mZnNl
dChVUFNUUkVBTSwgZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7Ci0KLSAgICBSZW5kZXJP
YmplY3QqIGVuZFJlbmRlcmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYyktPnJlbmRlcmVyKCk7
Ci0gICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
ZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7Ci0gICAgaWYgKGVuZENhcmV0UmVjdCAhPSBJ
bnRSZWN0KCkpCi0gICAgICAgIGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKEZsb2F0UmVjdChlbmRDYXJldFJlY3QpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OwotCi0gICAgaWYgKHN0YXJ0Q2FyZXRSZWN0LnkoKSA9PSBlbmRDYXJldFJlY3QueSgpKSB7Ci0g
ICAgICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJlIG9uIHRoZSBzYW1lIGxpbmUKLSAgICAgICAgcmV0
dXJuIEludFJlY3QobWluKHN0YXJ0Q2FyZXRSZWN0LngoKSwgZW5kQ2FyZXRSZWN0LngoKSksIAot
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC55KCksIAotICAgICAgICAgICAg
ICAgICAgICAgICBhYnMoZW5kQ2FyZXRSZWN0LngoKSAtIHN0YXJ0Q2FyZXRSZWN0LngoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgIG1heChzdGFydENhcmV0UmVjdC5oZWlnaHQoKSwgZW5kQ2Fy
ZXRSZWN0LmhlaWdodCgpKSk7Ci0gICAgfQotICAgIAotICAgIC8vIHN0YXJ0IGFuZCBlbmQgYXJl
bid0IG9uIHRoZSBzYW1lIGxpbmUsIHNvIGdvIGZyb20gc3RhcnQgdG8gdGhlIGVuZCBvZiBpdHMg
bGluZQotICAgIHJldHVybiBJbnRSZWN0KHN0YXJ0Q2FyZXRSZWN0LngoKSwgCi0gICAgICAgICAg
ICAgICAgICAgc3RhcnRDYXJldFJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2Fy
ZXRSZWN0LndpZHRoKCkgKyBleHRyYVdpZHRoVG9FbmRPZkxpbmUsCi0gICAgICAgICAgICAgICAg
ICAgc3RhcnRDYXJldFJlY3QuaGVpZ2h0KCkpOwotfQotCiBTZWxlY3Rpb25Db250cm9sbGVyKiBG
cmFtZTo6c2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gJm1fc2VsZWN0aW9uQ29udHJv
bGxlcjsKQEAgLTQ5OSwyMSArNDUzLDYgQEAgU3RyaW5nIEZyYW1lOjptYXRjaExhYmVsc0FnYWlu
c3RFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqIGUKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWNvbnN0IFNlbGVjdGlvbiYgRnJhbWU6Om1hcmsoKSBjb25z
dAotewotICAgIHJldHVybiBtX21hcms7Ci19Ci0KLXZvaWQgRnJhbWU6OnNldE1hcmsoY29uc3Qg
U2VsZWN0aW9uJiBzKQotewotICAgIEFTU0VSVCghcy5iYXNlKCkubm9kZSgpIHx8IHMuYmFzZSgp
Lm5vZGUoKS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoIXMuZXh0ZW50
KCkubm9kZSgpIHx8IHMuZXh0ZW50KCkubm9kZSgpLT5kb2N1bWVudCgpID09IGRvY3VtZW50KCkp
OwotICAgIEFTU0VSVCghcy5zdGFydCgpLm5vZGUoKSB8fCBzLnN0YXJ0KCkubm9kZSgpLT5kb2N1
bWVudCgpID09IGRvY3VtZW50KCkpOwotICAgIEFTU0VSVCghcy5lbmQoKS5ub2RlKCkgfHwgcy5l
bmQoKS5ub2RlKCktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQoKSk7Ci0KLSAgICBtX21hcmsgPSBz
OwotfQotCiB2b2lkIEZyYW1lOjpub3RpZnlSZW5kZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wg
dXNlclRyaWdnZXJlZCkKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gMDsKQEAgLTgy
OCwxMyArNzY3LDcgQEAgdm9pZCBGcmFtZTo6cmVhcHBseVN0eWxlcygpCiAKIGJvb2wgRnJhbWU6
OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbikgY29u
c3QKIHsKLSAgICByZXR1cm4gc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKSwgbmV3U2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24uYWZmaW5pdHkoKSwgZmFsc2UpOwot
fQotCi1ib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uJiBv
bGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVkaXRvcigp
LT5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9SYW5n
ZSgpLmdldCgpLCBuZXdTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHksIHN0aWxs
U2VsZWN0aW5nKTsKKyAgICByZXR1cm4gZWRpdG9yKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihz
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCksIG5ld1NlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLmFmZmlu
aXR5KCksIGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZTo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNv
bnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjb25zdApAQCAtODgwLDIwMCArODEzLDYgQEAgdm9p
ZCBGcmFtZTo6Y2xlYXJUeXBpbmdTdHlsZSgpCiAgICAgbV90eXBpbmdTdHlsZSA9IDA7CiB9CiAK
LXZvaWQgRnJhbWU6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
ICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQotewotICAgIGlmICghc3R5bGUgfHwg
c3R5bGUtPmxlbmd0aCgpID09IDApIHsKLSAgICAgICAgY2xlYXJUeXBpbmdTdHlsZSgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHR5cGlu
ZyBzdHlsZS4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG11dGFibGVT
dHlsZSA9IHN0eWxlLT5tYWtlTXV0YWJsZSgpOwotICAgIGlmICh0eXBpbmdTdHlsZSgpKSB7Ci0g
ICAgICAgIHR5cGluZ1N0eWxlKCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgICAg
IG11dGFibGVTdHlsZSA9IHR5cGluZ1N0eWxlKCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPENTU1Zh
bHVlPiB1bmljb2RlQmlkaTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbjsKLSAgICBp
ZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbikgewotICAg
ICAgICB1bmljb2RlQmlkaSA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgZGlyZWN0aW9uID0gbXV0YWJsZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBO
b2RlKiBub2RlID0gc2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpOwotICAgIGNvbXB1dGVkU3R5bGUobm9kZSktPmRpZmYobXV0YWJs
ZVN0eWxlLmdldCgpKTsKLQotICAgIGlmIChlZGl0aW5nQWN0aW9uID09IEVkaXRBY3Rpb25TZXRX
cml0aW5nRGlyZWN0aW9uICYmIHVuaWNvZGVCaWRpKSB7Ci0gICAgICAgIEFTU0VSVCh1bmljb2Rl
QmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0SWRlbnQoKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rp
b24pIHsKLSAgICAgICAgICAgIEFTU0VSVChkaXJlY3Rpb24tPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGRpcmVjdGlvbi5nZXQoKSktPmdl
dElkZW50KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxl
cywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20gdGhlIHR5cGluZyBzdHlsZS4KLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNv
cHlCbG9ja1Byb3BlcnRpZXMoKTsKLSAgICBibG9ja1N0eWxlLT5kaWZmKG11dGFibGVTdHlsZS5n
ZXQoKSk7Ci0gICAgaWYgKGRvY3VtZW50KCkgJiYgYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKQot
ICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7Ci0gICAgCi0gICAgLy8gU2V0IHRo
ZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGluZyBzdHlsZS4KLSAgICBtX3R5cGluZ1N0eWxl
ID0gbXV0YWJsZVN0eWxlLnJlbGVhc2UoKTsKLX0KLQotU3RyaW5nIEZyYW1lOjpzZWxlY3Rpb25T
dGFydFN0eWxlUHJvcGVydHlWYWx1ZShpbnQgc3R5bGVQcm9wZXJ0eUlEKSBjb25zdAotewotICAg
IE5vZGUgKm5vZGVUb1JlbW92ZTsKLSAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc2Vs
ZWN0aW9uU3R5bGUgPSBzZWxlY3Rpb25Db21wdXRlZFN0eWxlKG5vZGVUb1JlbW92ZSk7Ci0gICAg
aWYgKCFzZWxlY3Rpb25TdHlsZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3Ry
aW5nIHZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0
eUlEKTsKLQotICAgIGlmIChub2RlVG9SZW1vdmUpIHsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIG5vZGVUb1JlbW92ZS0+cmVtb3ZlKGVjKTsKLSAgICAgICAgQVNTRVJU
KGVjID09IDApOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotUGFzc1JlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IEZyYW1lOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxl
KE5vZGUqJiBub2RlVG9SZW1vdmUpIGNvbnN0Ci17Ci0gICAgbm9kZVRvUmVtb3ZlID0gMDsKLQot
ICAgIGlmICghZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoc2VsZWN0
aW9uKCktPmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2Uoc2VsZWN0aW9uKCktPnRvUmFuZ2UoKSk7Ci0gICAgUG9zaXRpb24gcG9zID0gcmFuZ2Ut
PmVkaXRpbmdTdGFydFBvc2l0aW9uKCk7Ci0KLSAgICBFbGVtZW50ICplbGVtID0gcG9zLmVsZW1l
bnQoKTsKLSAgICBpZiAoIWVsZW0pCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0
cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBlbGVtOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotCi0gICAgaWYgKG1fdHlwaW5nU3R5bGUpIHsKLSAgICAgICAgc3R5bGVFbGVtZW50ID0gZG9j
dW1lbnQoKS0+Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAic3BhbiIsIGVjKTsK
LSAgICAgICAgQVNTRVJUKGVjID09IDApOwotCi0gICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0
cmlidXRlKHN0eWxlQXR0ciwgbV90eXBpbmdTdHlsZS0+Y3NzVGV4dCgpLmltcGwoKSwgZWMpOwot
ICAgICAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgICAgIAotICAgICAgICBzdHlsZUVsZW1lbnQt
PmFwcGVuZENoaWxkKGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIiksIGVjKTsK
LSAgICAgICAgQVNTRVJUKGVjID09IDApOwotCi0gICAgICAgIGlmIChlbGVtLT5yZW5kZXJlcigp
ICYmIGVsZW0tPnJlbmRlcmVyKCktPmNhbkhhdmVDaGlsZHJlbigpKSB7Ci0gICAgICAgICAgICBl
bGVtLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIE5vZGUgKnBhcmVudCA9IGVsZW0tPnBhcmVudCgpOwotICAgICAgICAgICAgTm9k
ZSAqbmV4dCA9IGVsZW0tPm5leHRTaWJsaW5nKCk7Ci0KLSAgICAgICAgICAgIGlmIChuZXh0KSB7
Ci0gICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtZW50LCBuZXh0
LCBlYyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBhcmVudC0+YXBw
ZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgQVNTRVJUKGVjID09IDApOwotCi0gICAgICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxl
bWVudC5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29tcHV0ZWRTdHlsZShzdHlsZUVsZW1l
bnQucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBGcmFtZTo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5n
KEVsZW1lbnQqIGUpCi17Ci0gICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkKLSAgICAgICAgZWRp
dG9yKCktPmNsaWVudCgpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoZSk7Ci19Ci0KLXZvaWQg
RnJhbWU6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZSkKLXsKLSAgICBpZiAoZWRp
dG9yKCktPmNsaWVudCgpKQotICAgICAgICBlZGl0b3IoKS0+Y2xpZW50KCktPnRleHRGaWVsZERp
ZEVuZEVkaXRpbmcoZSk7Ci19Ci0KLXZvaWQgRnJhbWU6OnRleHREaWRDaGFuZ2VJblRleHRGaWVs
ZChFbGVtZW50KiBlKQotewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVk
aXRvcigpLT5jbGllbnQoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKGUpOwotfQotCi1ib29s
IEZyYW1lOjpkb1RleHRGaWVsZENvbW1hbmRGcm9tRXZlbnQoRWxlbWVudCogZSwgS2V5Ym9hcmRF
dmVudCoga2UpCi17Ci0gICAgaWYgKGVkaXRvcigpLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJu
IGVkaXRvcigpLT5jbGllbnQoKS0+ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KGUsIGtlKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBGcmFtZTo6dGV4dFdpbGxCZURlbGV0ZWRJ
blRleHRGaWVsZChFbGVtZW50KiBpbnB1dCkKLXsKLSAgICBpZiAoZWRpdG9yKCktPmNsaWVudCgp
KQotICAgICAgICBlZGl0b3IoKS0+Y2xpZW50KCktPnRleHRXaWxsQmVEZWxldGVkSW5UZXh0Rmll
bGQoaW5wdXQpOwotfQotCi12b2lkIEZyYW1lOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVt
ZW50KiBlKQotewotICAgIGlmIChlZGl0b3IoKS0+Y2xpZW50KCkpCi0gICAgICAgIGVkaXRvcigp
LT5jbGllbnQoKS0+dGV4dERpZENoYW5nZUluVGV4dEFyZWEoZSk7Ci19Ci0KLXZvaWQgRnJhbWU6
OmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Rv
YykKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBSZWZQdHI8Tm9kZUxpc3Q+IGxpc3Qg
PSBtX2RvYy0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKTsKLSAgICB1bnNpZ25lZCBsZW4g
PSBsaXN0LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKLSAgICAgICAgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KGxpc3QtPml0ZW0oaSkpKTsgICAgCi0gICAgfQotfQotCi12b2lkIEZyYW1lOjpyZW1vdmVF
ZGl0aW5nU3R5bGVGcm9tQm9keUVsZW1lbnQoKSBjb25zdAotewotICAgIGlmICghbV9kb2MpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gbV9k
b2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7Ci0gICAgdW5zaWduZWQgbGVuID0gbGlz
dC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0g
ICAgICAgIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
PihsaXN0LT5pdGVtKGkpKSk7ICAgIAotICAgIH0KLX0KLQotdm9pZCBGcmFtZTo6YXBwbHlFZGl0
aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBpZiAoIWVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
ID0gZWxlbWVudC0+c3R5bGUoKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V29yZFdyYXAs
ICJicmVhay13b3JkIiwgZmFsc2UsIGVjKTsKLSAgICBBU1NFUlQoZWMgPT0gMCk7Ci0gICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGUsICJzcGFjZSIsIGZhbHNl
LCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdExpbmVCcmVhaywgImFmdGVyLXdoaXRlLXNwYWNlIiwgZmFsc2UsIGVjKTsK
LSAgICBBU1NFUlQoZWMgPT0gMCk7Ci19Ci0KLXZvaWQgRnJhbWU6OnJlbW92ZUVkaXRpbmdTdHls
ZUZyb21FbGVtZW50KEVsZW1lbnQqKSBjb25zdAotewotfQotCiAjaWZuZGVmIE5ERUJVRwogc3Rh
dGljIEhhc2hTZXQ8RnJhbWUqPiYga2VlcEFsaXZlU2V0KCkKIHsKQEAgLTEzMjYsNDMgKzEwNjUs
NiBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycygpCiAgICAgY2xlYXJUaW1lcnMobV92aWV3Lmdl
dCgpLCBkb2N1bWVudCgpKTsKIH0KIAotUmVuZGVyU3R5bGUgKkZyYW1lOjpzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KE5vZGUgKiZub2RlVG9SZW1vdmUpIGNvbnN0Ci17Ci0gICAgbm9kZVRvUmVtb3Zl
ID0gMDsKLSAgICAKLSAgICBpZiAoIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChzZWxlY3Rpb24oKS0+aXNOb25lKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAg
IFBvc2l0aW9uIHBvcyA9IHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpOwotICAgIGlmICghcG9zLmlzQ2FuZGlkYXRlKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIE5vZGUgKm5vZGUgPSBwb3Mubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaWYgKCFtX3R5cGluZ1N0eWxlKQotICAgICAgICBy
ZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICAKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQoKS0+
Y3JlYXRlRWxlbWVudE5TKHhodG1sTmFtZXNwYWNlVVJJLCAic3BhbiIsIGVjKTsKLSAgICBBU1NF
UlQoZWMgPT0gMCk7Ci0gICAgCi0gICAgU3RyaW5nIHN0eWxlVGV4dCA9IG1fdHlwaW5nU3R5bGUt
PmNzc1RleHQoKSArICIgZGlzcGxheTogaW5saW5lIjsKLSAgICBzdHlsZUVsZW1lbnQtPnNldEF0
dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVGV4dC5pbXBsKCksIGVjKTsKLSAgICBBU1NFUlQoZWMg
PT0gMCk7Ci0gICAgCi0gICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAg
IAotICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7
Ci0gICAgQVNTRVJUKGVjID09IDApOwotICAgIAotICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxl
bWVudC5nZXQoKTsgICAgCi0gICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVuZGVyZXIoKSA/IHN0
eWxlRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IDA7Ci19Ci0KIHZvaWQgRnJhbWU6OnNl
dFNlbGVjdGlvbkZyb21Ob25lKCkKIHsKICAgICAvLyBQdXQgYSBjYXJldCBpbnNpZGUgdGhlIGJv
ZHkgaWYgdGhlIGVudGlyZSBmcmFtZSBpcyBlZGl0YWJsZSAoZWl0aGVyIHRoZSAKQEAgLTEzODgs
MTY1ICsxMDkwLDYgQEAgdm9pZCBGcmFtZTo6c2V0SW5WaWV3U291cmNlTW9kZShib29sIG1vZGUp
CiAgICAgbV9pblZpZXdTb3VyY2VNb2RlID0gbW9kZTsKIH0KIAotLy8gU2VhcmNoZXMgZnJvbSB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCBpZiBub3RoaW5nIGlzIHNlbGVjdGVkLgotYm9v
bCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJkLCBi
b29sIGNhc2VGbGFnLCBib29sIHdyYXBGbGFnLCBib29sIHN0YXJ0SW5TZWxlY3Rpb24pCi17Ci0g
ICAgaWYgKHRhcmdldC5pc0VtcHR5KCkgfHwgIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBpZiAoZXhjbHVkZUZyb21UZXh0U2VhcmNoKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBTdGFydCBmcm9tIGFuIGVkZ2Ugb2YgdGhlIHNlbGVj
dGlvbiwgaWYgdGhlcmUncyBhIHNlbGVjdGlvbiB0aGF0J3Mgbm90IGluIHNoYWRvdyBjb250ZW50
LiBXaGljaCBlZGdlCi0gICAgLy8gaXMgdXNlZCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgc2Vh
cmNoaW5nIGZvcndhcmQgb3IgYmFja3dhcmQsIGFuZCB3aGV0aGVyIHN0YXJ0SW5TZWxlY3Rpb24g
aXMgc2V0LgotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGRv
Y3VtZW50KCkpKTsKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gdGhpcy0+c2VsZWN0aW9uKCkt
PnNlbGVjdGlvbigpOwotCi0gICAgaWYgKGZvcndhcmQpCi0gICAgICAgIHNldFN0YXJ0KHNlYXJj
aFJhbmdlLmdldCgpLCBzdGFydEluU2VsZWN0aW9uID8gc2VsZWN0aW9uLnZpc2libGVTdGFydCgp
IDogc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRFbmQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIHN0YXJ0SW5TZWxlY3Rpb24gPyBzZWxlY3Rpb24udmlzaWJsZUVuZCgp
IDogc2VsZWN0aW9uLnZpc2libGVTdGFydCgpKTsKLQotICAgIE5vZGUqIHNoYWRvd1RyZWVSb290
ID0gc2VsZWN0aW9uLnNoYWRvd1RyZWVSb290Tm9kZSgpOwotICAgIGlmIChzaGFkb3dUcmVlUm9v
dCkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgaWYgKGZvcndhcmQp
Ci0gICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dU
cmVlUm9vdC0+Y2hpbGROb2RlQ291bnQoKSwgZWMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc2hhZG93VHJlZVJvb3QsIDAsIGVjKTsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlKGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2Uu
Z2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpKTsKLSAgICAvLyBJZiB3ZSBzdGFydGVk
IGluIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhl
IGV4aXN0aW5nIHNlbGVjdGlvbiwgZmluZCBhZ2Fpbi4KLSAgICAvLyBCdWlsZCBhIHNlbGVjdGlv
biB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCi0g
ICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25v
cmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAo
c3RhcnRJblNlbGVjdGlvbiAmJiAqU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50b1Jhbmdl
KCkgPT0gKnNlbGVjdGlvbi50b1JhbmdlKCkpIHsKLSAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5n
ZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGlmIChmb3J3YXJkKQotICAgICAgICAg
ICAgc2V0U3RhcnQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRFbmQoc2VhcmNoUmFuZ2UuZ2V0KCksIHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKSk7Ci0KLSAgICAgICAgaWYgKHNoYWRvd1RyZWVSb290KSB7Ci0g
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgIGlmIChmb3J3YXJk
KQotICAgICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoc2hhZG93VHJlZVJvb3QsIHNo
YWRvd1RyZWVSb290LT5jaGlsZE5vZGVDb3VudCgpLCBlYyk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHNoYWRvd1RyZWVSb290LCAwLCBl
Yyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2Vh
cmNoUmFuZ2UuZ2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOwotICAgIH0KLSAgICAK
LSAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7Ci0KLSAgICAvLyBJZiBub3RoaW5nIHdh
cyBmb3VuZCBpbiB0aGUgc2hhZG93IHRyZWUsIHNlYXJjaCBpbiBtYWluIGNvbnRlbnQgZm9sbG93
aW5nIHRoZSBzaGFkb3cgdHJlZS4KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNl
cHRpb24pICYmIHNoYWRvd1RyZWVSb290KSB7Ci0gICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VP
ZkNvbnRlbnRzKGRvY3VtZW50KCkpOwotICAgICAgICBpZiAoZm9yd2FyZCkKLSAgICAgICAgICAg
IHNlYXJjaFJhbmdlLT5zZXRTdGFydEFmdGVyKHNoYWRvd1RyZWVSb290LT5zaGFkb3dQYXJlbnRO
b2RlKCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFJhbmdl
LT5zZXRFbmRCZWZvcmUoc2hhZG93VHJlZVJvb3QtPnNoYWRvd1BhcmVudE5vZGUoKSwgZXhjZXB0
aW9uKTsKLQotICAgICAgICByZXN1bHRSYW5nZSA9IGZpbmRQbGFpblRleHQoc2VhcmNoUmFuZ2Uu
Z2V0KCksIHRhcmdldCwgZm9yd2FyZCwgY2FzZUZsYWcpOwotICAgIH0KLSAgICAKLSAgICBpZiAo
IWVkaXRvcigpLT5pbnNpZGVWaXNpYmxlQXJlYShyZXN1bHRSYW5nZS5nZXQoKSkpIHsKLSAgICAg
ICAgcmVzdWx0UmFuZ2UgPSBlZGl0b3IoKS0+bmV4dFZpc2libGVSYW5nZShyZXN1bHRSYW5nZS5n
ZXQoKSwgdGFyZ2V0LCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcpOwotICAgICAgICBpZiAo
IXJlc3VsdFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIGFuZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFn
YWluIGluIHRoZSBlbnRpcmUgZG9jdW1lbnQgKHRoaXMgd2lsbAotICAgIC8vIHJlZHVuZGFudGx5
IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJlYWR5IHNlYXJjaGVkIGluIHNvbWUgY2FzZXMpLgotICAg
IGlmIChyZXN1bHRSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgd3JhcEZsYWcpIHsKLSAg
ICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7Ci0gICAgICAg
IHJlc3VsdFJhbmdlID0gZmluZFBsYWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCBm
b3J3YXJkLCBjYXNlRmxhZyk7Ci0gICAgICAgIC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhl
cmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUgc2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0
aAotICAgICAgICAvLyAoZS5nLiwgdGhlIHNlbGVjdGlvbiB3YXMgYWxyZWFkeSB0aGUgb25seSBp
bnN0YW5jZSBvZiB0aGlzIHRleHQpLiBCdXQgd2UgZGVjaWRlZCB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgc2hvdWxkIGJlIGEgc3VjY2VzcyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0
aHJvdWdoIGluIHRoYXQgY2FzZS4KLSAgICB9Ci0KLSAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxh
cHNlZChleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB0aGlzLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbihyZXN1bHRSYW5nZS5nZXQoKSwgRE9XTlNU
UkVBTSkpOwotICAgIHJldmVhbFNlbGVjdGlvbigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi11
bnNpZ25lZCBGcmFtZTo6bWFya0FsbE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBib29sIGNhc2VGbGFnLCB1bnNpZ25lZCBsaW1pdCkKLXsKLSAgICBpZiAodGFyZ2V0LmlzRW1w
dHkoKSB8fCAhZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBzZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSkpOwotICAgIAot
ICAgIEV4Y2VwdGlvbkNvZGUgZXhjZXB0aW9uID0gMDsKLSAgICB1bnNpZ25lZCBtYXRjaENvdW50
ID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UoZmluZFBs
YWluVGV4dChzZWFyY2hSYW5nZS5nZXQoKSwgdGFyZ2V0LCB0cnVlLCBjYXNlRmxhZykpOwotICAg
ICAgICBpZiAocmVzdWx0UmFuZ2UtPmNvbGxhcHNlZChleGNlcHRpb24pKSB7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5pc0luU2hhZG93VHJlZSgpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdl
T2ZDb250ZW50cyhkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dEFmdGVyKHJlc3VsdFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAvLyBBIG5vbi1jb2xsYXBzZWQgcmVzdWx0IHJhbmdlIGNhbiBpbiBzb21lIGZ1
bmt5IHdoaXRlc3BhY2UgY2FzZXMgc3RpbGwgbm90Ci0gICAgICAgIC8vIGFkdmFuY2UgdGhlIHJh
bmdlJ3Mgc3RhcnQgcG9zaXRpb24gKDQ1MDkzMjgpLiBCcmVhayB0byBhdm9pZCBpbmZpbml0ZSBs
b29wLgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3U3RhcnQgPSBlbmRWaXNpYmxlUG9zaXRp
b24ocmVzdWx0UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3U3RhcnQg
PT0gc3RhcnRWaXNpYmxlUG9zaXRpb24oc2VhcmNoUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gT25seSB0cmVhdCB0aGUgcmVzdWx0IGFz
IGEgbWF0Y2ggaWYgaXQgaXMgdmlzaWJsZQotICAgICAgICBpZiAoZWRpdG9yKCktPmluc2lkZVZp
c2libGVBcmVhKHJlc3VsdFJhbmdlLmdldCgpKSkgewotICAgICAgICAgICAgKyttYXRjaENvdW50
OwotICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWRkTWFya2VyKHJlc3VsdFJhbmdlLmdldCgpLCBE
b2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Ly8gU3RvcCBsb29raW5nIGlmIHdlIGhpdCB0aGUgc3BlY2lmaWVkIGxpbWl0LiBBIGxpbWl0IG9m
IDAgbWVhbnMgbm8gbGltaXQuCi0gICAgICAgIGlmIChsaW1pdCA+IDAgJiYgbWF0Y2hDb3VudCA+
PSBsaW1pdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgc2V0U3RhcnQo
c2VhcmNoUmFuZ2UuZ2V0KCksIG5ld1N0YXJ0KTsKLSAgICAgICAgTm9kZSogc2hhZG93VHJlZVJv
b3QgPSBzZWFyY2hSYW5nZS0+c2hhZG93VHJlZVJvb3ROb2RlKCk7Ci0gICAgICAgIGlmIChzZWFy
Y2hSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbikgJiYgc2hhZG93VHJlZVJvb3QpCi0gICAgICAg
ICAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKHNoYWRvd1RyZWVSb290LCBzaGFkb3dUcmVlUm9vdC0+
Y2hpbGROb2RlQ291bnQoKSwgZXhjZXB0aW9uKTsKLSAgICB9IHdoaWxlICh0cnVlKTsKLSAgICAK
LSAgICAvLyBEbyBhICJmYWtlIiBwYWludCBpbiBvcmRlciB0byBleGVjdXRlIHRoZSBjb2RlIHRo
YXQgY29tcHV0ZXMgdGhlIHJlbmRlcmVkIHJlY3QgZm9yIAotICAgIC8vIGVhY2ggdGV4dCBtYXRj
aC4KLSAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jICYmIG1fdmll
dyAmJiBjb250ZW50UmVuZGVyZXIoKSkgewotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dCgpOyAv
LyBFbnN1cmUgbGF5b3V0IGlzIHVwIHRvIGRhdGUuCi0gICAgICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSBtX3ZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAgICAgICBpZiAoIXZpc2libGVS
ZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoKFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KikwKTsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0UGFpbnRp
bmdEaXNhYmxlZCh0cnVlKTsKLSAgICAgICAgICAgIG1fdmlldy0+cGFpbnRDb250ZW50cygmY29u
dGV4dCwgdmlzaWJsZVJlY3QpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBt
YXRjaENvdW50OwotfQotCi1ib29sIEZyYW1lOjptYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oaWdobGlnaHRUZXh0TWF0Y2hlczsKLX0KLQot
dm9pZCBGcmFtZTo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcp
Ci17Ci0gICAgaWYgKGZsYWcgPT0gbV9oaWdobGlnaHRUZXh0TWF0Y2hlcyB8fCAhZG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1faGlnaGxpZ2h0VGV4dE1hdGNoZXMgPSBm
bGFnOwotICAgIGRvY3VtZW50KCktPnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0
TWF0Y2gpOwotfQotCiBGcmFtZVRyZWUqIEZyYW1lOjp0cmVlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gJm1fdHJlZU5vZGU7CkBAIC0xNjI4LDU1ICsxMTcxLDYgQEAgU3RyaW5nIEZyYW1lOjpkb2N1
bWVudFR5cGVTdHJpbmcoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBG
cmFtZTo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVj
dGlvbiwgYm9vbCBjbG9zZVR5cGluZykKLXsKLSAgICBpZiAoZG9jdW1lbnQoKSkgewotICAgICAg
ICBib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZWRpdG9yKCktPmlzQ29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgICAgIGJvb2wgaXNDb250aW51b3Vz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ICYmIGVkaXRvcigpLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKLSAgICAgICAgaWYgKGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgICAgICBTZWxlY3Rpb24g
bmV3QWRqYWNlbnRXb3JkczsKLSAgICAgICAgICAgIFNlbGVjdGlvbiBuZXdTZWxlY3RlZFNlbnRl
bmNlOwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1N0YXJ0KHNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAg
bmV3QWRqYWNlbnRXb3JkcyA9IFNlbGVjdGlvbihzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFy
eSkpOwotICAgICAgICAgICAgICAgIGlmIChpc0NvbnRpbnVvdXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKQotICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFNlbnRlbmNlID0gU2VsZWN0aW9u
KHN0YXJ0T2ZTZW50ZW5jZShuZXdTdGFydCksIGVuZE9mU2VudGVuY2UobmV3U3RhcnQpKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxp
bmcgZWxzZXdoZXJlLCBzbyBkb24ndCByZWRvIGl0IGhlcmUuCi0gICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIGEgY2hhbmdlIGluIHNlbGVjdGlvbiByZXN1bHRpbmcgZnJvbSBhIGRlbGV0ZSBvcGVy
YXRpb24sCi0gICAgICAgICAgICAvLyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdlciBiZSBpbiB0
aGUgZG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAoY2xvc2VUeXBpbmcgJiYgb2xkU2VsZWN0aW9u
LmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpICYmIG9s
ZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIG9sZFN0YXJ0KG9sZFNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7
Ci0gICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZEFkamFjZW50V29yZHMgPSBTZWxlY3Rpb24o
c3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9s
ZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsgICAKLSAgICAgICAgICAgICAgICBpZiAo
b2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGVkaXRvcigpLT5tYXJrTWlzc3BlbGxpbmdzKG9sZEFkamFjZW50V29yZHMpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNDb250aW51b3VzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uIG9sZFNlbGVjdGVkU2VudGVuY2UgPSBT
ZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKG9sZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZShvbGRTdGFy
dCkpOyAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFNlbGVjdGVkU2VudGVuY2Ug
IT0gbmV3U2VsZWN0ZWRTZW50ZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0
b3IoKS0+bWFya0JhZEdyYW1tYXIob2xkU2VsZWN0ZWRTZW50ZW5jZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IC8vIFRoaXMgb25seSBlcmFzZXMgbWFya2VycyB0aGF0IGFyZSBpbiB0aGUgZmlyc3QgdW5pdCAo
d29yZCBvciBzZW50ZW5jZSkgb2YgdGhlIHNlbGVjdGlvbi4KLSAgICAgICAgICAgIC8vIFBlcmhh
cHMgcGVjdWxpYXIsIGJ1dCBpdCBtYXRjaGVzIEFwcEtpdC4KLSAgICAgICAgICAgIGlmIChSZWZQ
dHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9SYW5nZSgpKQotICAgICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2Vu
dGVuY2VSYW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9SYW5nZSgpKQotICAgICAgICAgICAg
ICAgIGRvY3VtZW50KCktPnJlbW92ZU1hcmtlcnMoc2VudGVuY2VSYW5nZS5nZXQoKSwgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBjb250aW51
b3VzIHNwZWxsIGNoZWNraW5nIGlzIG9mZiwgZXhpc3RpbmcgbWFya2VycyBkaXNhcHBlYXIgYWZ0
ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLgotICAgICAgICBpZiAoIWlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlTWFya2VycyhE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBpZiAoIWlzQ29udGludW91c0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJz
KERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKLSAgICB9Ci0KLSAgICBlZGl0b3IoKS0+cmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwotfQotCiBWaXNpYmxlUG9zaXRpb24g
RnJhbWU6OnZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50
KQogewogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RS
ZXN1bHRBdFBvaW50KGZyYW1lUG9pbnQsIHRydWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA1N2YwMmNlLi5iYTQ2MGM3IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUu
aApAQCAtMjksNyArMjksNiBAQAogI2RlZmluZSBGcmFtZV9oCiAKICNpbmNsdWRlICJBbmltYXRp
b25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiRWRpdEFj
dGlvbi5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpA
QCAtMTkxLDQzICsxOTAsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGpzU3RhdHVzQmFyVGV4dCgp
IGNvbnN0OwogICAgIFN0cmluZyBqc0RlZmF1bHRTdGF0dXNCYXJUZXh0KCkgY29uc3Q7CiAKLS8v
ID09PSB0byBiZSBtb3ZlZCBpbnRvIEVkaXRvcgotCi1wdWJsaWM6Ci0gICAgU3RyaW5nIHNlbGVj
dGVkVGV4dCgpIGNvbnN0OyAgCi0gICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJv
b2wgZm9yd2FyZCwgYm9vbCBjYXNlRmxhZywgYm9vbCB3cmFwRmxhZywgYm9vbCBzdGFydEluU2Vs
ZWN0aW9uKTsKLQotICAgIGNvbnN0IFNlbGVjdGlvbiYgbWFyaygpIGNvbnN0OyAvLyBNYXJrLCB0
byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCi0gICAgdm9pZCBzZXRNYXJrKGNvbnN0IFNlbGVj
dGlvbiYpOwotCi0gICAgdm9pZCBjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblVuc3BlY2lmaWVkKTsKLSAgICBTdHJp
bmcgc2VsZWN0aW9uU3RhcnRTdHlsZVByb3BlcnR5VmFsdWUoaW50IHN0eWxlUHJvcGVydHlJRCkg
Y29uc3Q7Ci0gICAgdm9pZCBhcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKSBjb25zdDsK
LSAgICB2b2lkIHJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpIGNvbnN0OwotICAg
IHZvaWQgYXBwbHlFZGl0aW5nU3R5bGVUb0VsZW1lbnQoRWxlbWVudCopIGNvbnN0OwotICAgIHZv
aWQgcmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUVsZW1lbnQoRWxlbWVudCopIGNvbnN0OwotCi0gICAg
SW50UmVjdCBmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSopIGNvbnN0OwotICAgIAotICAgIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwg
Ym9vbCBjbG9zZVR5cGluZyk7Ci0gICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qg
U2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlvbiYgbmV3U2VsZWN0aW9uLCBF
QWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7Ci0KLSAg
ICB1bnNpZ25lZCBtYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBjYXNl
RmxhZywgdW5zaWduZWQgbGltaXQpOwotICAgIGJvb2wgbWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZChib29sIGZsYWcpOwotCi0gICAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7
Ci0KLSAgICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50Kik7Ci0gICAgdm9p
ZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKLSAgICB2b2lkIHRleHREaWRDaGFu
Z2VJblRleHRGaWVsZChFbGVtZW50Kik7Ci0gICAgYm9vbCBkb1RleHRGaWVsZENvbW1hbmRGcm9t
RXZlbnQoRWxlbWVudCosIEtleWJvYXJkRXZlbnQqKTsKLSAgICB2b2lkIHRleHRXaWxsQmVEZWxl
dGVkSW5UZXh0RmllbGQoRWxlbWVudCogaW5wdXQpOwotICAgIHZvaWQgdGV4dERpZENoYW5nZUlu
VGV4dEFyZWEoRWxlbWVudCopOwotCi0gICAgRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZUZvclNlbGVj
dGlvbigpOwogICAgIAogLy8gPT09IHRvIGJlIG1vdmVkIGludG8gU2VsZWN0aW9uQ29udHJvbGxl
cgogCkBAIC0zMzgsNyArMzAwLDYgQEAgcHJpdmF0ZToKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9z
ZWxlY3Rpb25HcmFudWxhcml0eTsKIAogICAgIG11dGFibGUgU2VsZWN0aW9uQ29udHJvbGxlciBt
X3NlbGVjdGlvbkNvbnRyb2xsZXI7Ci0gICAgbXV0YWJsZSBTZWxlY3Rpb24gbV9tYXJrOwogICAg
IFRpbWVyPEZyYW1lPiBtX2NhcmV0QmxpbmtUaW1lcjsKICAgICBtdXRhYmxlIEVkaXRvciBtX2Vk
aXRvcjsKICAgICBtdXRhYmxlIEV2ZW50SGFuZGxlciBtX2V2ZW50SGFuZGxlcjsKQEAgLTM1MSw3
ICszMTIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jYXJldFZpc2libGU7CiAgICAgYm9vbCBt
X2NhcmV0UGFpbnQ7CiAgICAgCi0gICAgYm9vbCBtX2hpZ2hsaWdodFRleHRNYXRjaGVzOwogICAg
IGJvb2wgbV9pblZpZXdTb3VyY2VNb2RlOwogICAgIGJvb2wgbV9uZWVkc1JlYXBwbHlTdHlsZXM7
CiAgICAgYm9vbCBtX2lzRGlzY29ubmVjdGVkOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDQ2MDE4M2EuLjg3ZTE4ZmUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNp
bmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgpAQCAtMzE0
LDcgKzMxNSw3IEBAIGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwg
VGV4dENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0aXZpdHksCiAgICAgRnJhbWUqIGZyYW1lID0g
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIEZyYW1lKiBzdGFy
dEZyYW1lID0gZnJhbWU7CiAgICAgZG8gewotICAgICAgICBpZiAoZnJhbWUtPmZpbmRTdHJpbmco
dGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlvbkZvcndhcmQsIGNhc2VTZW5zaXRpdml0
eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIHRydWUpKSB7CisgICAgICAgIGlmIChmcmFt
ZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERpcmVjdGlv
bkZvcndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgZmFsc2UsIHRy
dWUpKSB7CiAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gc3RhcnRGcmFtZSkKICAgICAgICAgICAg
ICAgICBzdGFydEZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXIoKTsKICAgICAgICAgICAgIGZvY3Vz
Q29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOwpAQCAtMzI2LDcgKzMyNyw3IEBA
IGJvb2wgUGFnZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgVGV4dENhc2VTZW5z
aXRpdml0eSBjYXNlU2Vuc2l0aXZpdHksCiAgICAgLy8gU2VhcmNoIGNvbnRlbnRzIG9mIHN0YXJ0
RnJhbWUsIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBzZWxlY3Rpb24gdGhhdCB3ZSBkaWQgZWFy
bGllci4KICAgICAvLyBXZSBjaGVhdCBhIGJpdCBhbmQganVzdCByZXNlYXJjaCB3aXRoIHdyYXAg
b24KICAgICBpZiAoc2hvdWxkV3JhcCAmJiAhc3RhcnRGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9u
ZSgpKSB7Ci0gICAgICAgIGJvb2wgZm91bmQgPSBzdGFydEZyYW1lLT5maW5kU3RyaW5nKHRhcmdl
dCwgZGlyZWN0aW9uID09IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBjYXNlU2Vuc2l0aXZpdHkgPT0g
VGV4dENhc2VTZW5zaXRpdmUsIHRydWUsIHRydWUpOworICAgICAgICBib29sIGZvdW5kID0gc3Rh
cnRGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcodGFyZ2V0LCBkaXJlY3Rpb24gPT0gRmluZERp
cmVjdGlvbkZvcndhcmQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2ZSwgdHJ1
ZSwgdHJ1ZSk7CiAgICAgICAgIGZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJh
bWUpOwogICAgICAgICByZXR1cm4gZm91bmQ7CiAgICAgfQpAQCAtMzQzLDggKzM0NCw4IEBAIHVu
c2lnbmVkIGludCBQYWdlOjptYXJrQWxsTWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIFRleHRDYXNlU2Vuc2l0aXZpCiAKICAgICBGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsK
ICAgICBkbyB7Ci0gICAgICAgIGZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKHNob3VsZEhpZ2hsaWdodCk7Ci0gICAgICAgIG1hdGNoZXMgKz0gZnJhbWUtPm1hcmtBbGxN
YXRjaGVzRm9yVGV4dCh0YXJnZXQsIGNhc2VTZW5zaXRpdml0eSA9PSBUZXh0Q2FzZVNlbnNpdGl2
ZSwgKGxpbWl0ID09IDApID8gMCA6IChsaW1pdCAtIG1hdGNoZXMpKTsKKyAgICAgICAgZnJhbWUt
PmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKHNob3VsZEhpZ2hs
aWdodCk7CisgICAgICAgIG1hdGNoZXMgKz0gZnJhbWUtPmVkaXRvcigpLT5tYXJrQWxsTWF0Y2hl
c0ZvclRleHQodGFyZ2V0LCBjYXNlU2Vuc2l0aXZpdHkgPT0gVGV4dENhc2VTZW5zaXRpdmUsIChs
aW1pdCA9PSAwKSA/IDAgOiAobGltaXQgLSBtYXRjaGVzKSk7CiAgICAgICAgIGZyYW1lID0gaW5j
cmVtZW50RnJhbWUoZnJhbWUsIHRydWUsIGZhbHNlKTsKICAgICB9IHdoaWxlIChmcmFtZSk7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ndGsvRnJhbWVHdGsuY3BwIGIvV2ViQ29yZS9wYWdl
L2d0ay9GcmFtZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYWI1YTAu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wYWdlL2d0ay9GcmFtZUd0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNyArMCwwIEBACi0vKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi19CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbQppbmRleCBiNTY2YWJiLi44ZjE2ZTNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAgLTM2Nyw3
ICszNjcsNyBAQCBOU0ltYWdlKiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUpIGNvbnN0CiBO
U0RpY3Rpb25hcnkqIEZyYW1lOjpmb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgY29u
c3QKIHsKICAgICBOb2RlKiBub2RlVG9SZW1vdmU7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
c3R5bGVGb3JTZWxlY3Rpb25TdGFydChub2RlVG9SZW1vdmUpOworICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IGVkaXRvcigpLT5zdHlsZUZvclNlbGVjdGlvblN0YXJ0KG5vZGVUb1JlbW92ZSk7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtNTI3LDEzICs1MjcsNiBA
QCBOU011dGFibGVEaWN0aW9uYXJ5KiBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0RpY3Rpb25hcnko
KQogfQogI2VuZGlmCiAKLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9u
KCkgCi17Ci0gICAgaWYgKCFzZWxlY3Rpb24oKS0+aXNSYW5nZSgpKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiBzZWxlY3Rpb25JbWFnZSgpOwotfQotCiB2b2lkIEZyYW1lOjpzZXRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBkZWxldGUgbV91
c2VyU3R5bGVTaGVldExvYWRlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0
LmNwcCBiL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAppbmRleCAzODhiZjY2Li5jYzAzNWJh
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL3F0L0ZyYW1lUXQuY3BwCkBAIC0yOCwxMSArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCi17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgRnJhbWU6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24o
Y29uc3QgS1VSTCYgdXJsKQogewogICAgIGRlbGV0ZSBtX3VzZXJTdHlsZVNoZWV0TG9hZGVyOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IGFkZjlhNTcuLjg5MGYxNjMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJ
bWFnZS5jcHAKQEAgLTI1LDggKzI1LDkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkRyYWdJbWFnZS5oIgotI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRl
ICJEcmFnQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY1LDcgKzY2LDcgQEAgRHJhZ0ltYWdlUmVm
IGZpdERyYWdJbWFnZVRvTWF4U2l6ZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUm
IHNyY1NpemUsIGMKICAgICAKIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JTZWxlY3Rp
b24oRnJhbWUqIGZyYW1lKQogewotICAgIERyYWdJbWFnZVJlZiBpbWFnZSA9IGZyYW1lLT5kcmFn
SW1hZ2VGb3JTZWxlY3Rpb24oKTsKKyAgICBEcmFnSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZS0+ZWRp
dG9yKCktPmRyYWdJbWFnZUZvclNlbGVjdGlvbigpOwogICAgIGlmIChpbWFnZSkKICAgICAgICAg
ZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKGltYWdlLCBEcmFnQ29udHJvbGxlcjo6RHJhZ0lt
YWdlQWxwaGEpOwogICAgIHJldHVybiBpbWFnZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2Fy
ZEd0ay5jcHAKaW5kZXggMTVhN2U2NC4uNjQ0NWU1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIK
ICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCkBAIC0xMDQsNyArMTA1LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0
ZSwKIHsKICAgICBHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCA9IG1faGVscGVyLT5nZXRDbGlwYm9h
cmQoZnJhbWUpOwogI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMTAsMCkKLSAgICBnY2hhciogdGV4
dCA9IGdfc3RyZHVwKGZyYW1lLT5zZWxlY3RlZFRleHQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBn
Y2hhciogdGV4dCA9IGdfc3RyZHVwKGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRm
OCgpLmRhdGEoKSk7CiAgICAgZ2NoYXIqIG1hcmt1cCA9IGdfc3RyZHVwKGNyZWF0ZU1hcmt1cChz
ZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKS51dGY4KCkuZGF0YSgpKTsK
ICAgICBQYXN0ZWJvYXJkU2VsZWN0aW9uRGF0YSogZGF0YSA9IG5ldyBQYXN0ZWJvYXJkU2VsZWN0
aW9uRGF0YSh0ZXh0LCBtYXJrdXApOwogCkBAIC0xMTQsNyArMTE1LDcgQEAgdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENv
cHlPckRlbGV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkX2dl
dF9jb250ZW50c19jYiwgY2xpcGJvYXJkX2NsZWFyX2NvbnRlbnRzX2NiLCBkYXRhKTsKICAgICBn
dGtfdGFyZ2V0X3RhYmxlX2ZyZWUodGFyZ2V0cywgbl90YXJnZXRzKTsKICNlbHNlCi0gICAgZ3Rr
X2NsaXBib2FyZF9zZXRfdGV4dChjbGlwYm9hcmQsIGZyYW1lLT5zZWxlY3RlZFRleHQoKS51dGY4
KCkuZGF0YSgpLCBmcmFtZS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpLmxlbmd0aCgpKTsKKyAgICBn
dGtfY2xpcGJvYXJkX3NldF90ZXh0KGNsaXBib2FyZCwgZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rl
ZFRleHQoKS51dGY4KCkuZGF0YSgpLCBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0
ZjgoKS5sZW5ndGgoKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNw
cAppbmRleCAxYmRlMTBiLi43M2ZiNWJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNw
cApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAi
Q1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKQEAgLTI4NCw3ICsyODUsNyBAQCB2b2lkIENsaXBib2FyZFF0Ojp3cml0ZVJhbmdl
KFJhbmdlKiByYW5nZSwgRnJhbWUqIGZyYW1lKQogICAgIAogICAgIGlmICghbV93cml0YWJsZURh
dGEpCiAgICAgICAgIG1fd3JpdGFibGVEYXRhID0gbmV3IFFNaW1lRGF0YTsKLSAgICBRU3RyaW5n
IHRleHQgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgUVN0cmluZyB0ZXh0ID0gZnJhbWUt
PmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICB0ZXh0LnJlcGxhY2UoUUNoYXIoMHhhMCks
IFFMYXRpbjFDaGFyKCcgJykpOwogICAgIG1fd3JpdGFibGVEYXRhLT5zZXRUZXh0KHRleHQpOwog
ICAgIG1fd3JpdGFibGVEYXRhLT5zZXRIdG1sKGNyZWF0ZU1hcmt1cChyYW5nZSwgMCwgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0
ZWJvYXJkUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCmluZGV4
IGI1MzVhNzQuLjNiMjY3YmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVi
b2FyZFF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAKQEAg
LTYxLDcgKzYxLDcgQEAgUGFzdGVib2FyZCogUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQo
KQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
Ym9vbCwgRnJhbWUqIGZyYW1lKQogewogICAgIFFNaW1lRGF0YSogbWQgPSBuZXcgUU1pbWVEYXRh
OwotICAgIFFTdHJpbmcgdGV4dCA9IGZyYW1lLT5zZWxlY3RlZFRleHQoKTsKKyAgICBRU3RyaW5n
IHRleHQgPSBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogICAgIHRleHQucmVwbGFj
ZShRQ2hhcigweGEwKSwgUUxhdGluMUNoYXIoJyAnKSk7CiAgICAgbWQtPnNldFRleHQodGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IDdhODhjM2EuLjI5MDZl
YTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcApAQCAtNzM1LDcgKzczNSw3
IEBAIHZvaWQgQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBG
cmFtZSogZnJhbWUpCiAgICAgaWYgKG1lZGl1bS5oR2xvYmFsICYmIEZBSUxFRChtX3dyaXRhYmxl
RGF0YU9iamVjdC0+U2V0RGF0YShodG1sRm9ybWF0KCksICZtZWRpdW0sIFRSVUUpKSkKICAgICAg
ICAgOjpHbG9iYWxGcmVlKG1lZGl1bS5oR2xvYmFsKTsKIAotICAgIFN0cmluZyBzdHIgPSBmcmFt
ZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2Vs
ZWN0ZWRUZXh0KCk7CiAgICAgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVz
KHN0cik7CiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2Uoc3RyKTsKICAgICBtZWRpdW0uaEdsb2Jh
bCA9IGNyZWF0ZUdsb2JhbERhdGEoc3RyKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAKaW5kZXggNTA2Y2M3Yi4uZjIxYWE0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRp
ZXNXaW4uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC0xMjUsNyArMTI2LDcg
QEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwg
Ym9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwKICAgICB9CiAgICAgCiAgICAgLy8gUHV0IHBsYWlu
IHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZC4gQ0ZfVU5JQ09ERVRFWFQgY292ZXJzIENGX1RFWFQg
YXMgd2VsbAotICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgU3Ry
aW5nIHN0ciA9IGZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCk7CiAgICAgcmVwbGFjZU5l
d2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAgICAgcmVwbGFjZU5CU1BXaXRo
U3BhY2Uoc3RyKTsKICAgICBpZiAoOjpPcGVuQ2xpcGJvYXJkKG1fb3duZXIpKSB7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Bhc3RlYm9hcmRXeC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL3d4L1Bhc3RlYm9hcmRXeC5jcHAKaW5kZXggYzUwZGY2Ny4uZTVhNzc0ZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS93eC9QYXN0ZWJvYXJkV3guY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vd3gvUGFzdGVib2FyZFd4LmNwcApAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29w
eU9yRGVsZXRlLAogewogICAgIGlmICh3eFRoZUNsaXBib2FyZC0+T3BlbigpKQogICAgIHsKLSAg
ICAgICAgU3RyaW5nIHRleHQgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CisgICAgICAgIFN0cmlu
ZyB0ZXh0ID0gZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICAgICAgdGV4dC5y
ZXBsYWNlKCdcXCcsIGZyYW1lLT5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogICAgICAg
ICAKICAgICAgICAgd3hUaGVDbGlwYm9hcmQtPlNldERhdGEoIG5ldyB3eFRleHREYXRhT2JqZWN0
KHRleHQpICk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cCBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGNiZWUxMTcuLjVj
NjNkMDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC03MTYsNyArNzE2LDcg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRl
eHQqIHB0LCBpbnQgdHgsIGludCB0eSwgRG8KICAgICBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+c2V0
UmVuZGVyZWRSZWN0Rm9yTWFya2VyKG9iamVjdCgpLT5ub2RlKCksIG1hcmtlciwgbWFya2VyUmVj
dCk7CiAgICAgIAogICAgIC8vIE9wdGlvbmFsbHkgaGlnaGxpZ2h0IHRoZSB0ZXh0Ci0gICAgaWYg
KG9iamVjdCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCkpIHsKKyAgICBpZiAob2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkpIHsKICAgICAgICAgQ29sb3Ig
Y29sb3IgPSB0aGVtZSgpLT5wbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAg
ICAgICBwdC0+c2F2ZSgpOwogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQocHQsIGNvbG9y
LCBjb2xvciwgMCk7ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCmluZGV4IGY4NjA1MjQuLjE4
NzVmZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVs
dGlMaW5lLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZTo6c3VidHJlZUhhc0NoYW5nZWQoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgZnJhbWUtPnRleHREaWRDaGFu
Z2VJblRleHRBcmVhKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT50ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obm9kZSgpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmxheW91
dCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAppbmRleCAzNTFjNWVlLi42YWQxZDNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTE3OCwxMiArMTc4LDEyIEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiAKICAg
ICBpZiAoIXdhc0VkaXRlZCAmJiBpbnB1dC0+Zm9jdXNlZCgpKSB7CiAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPnRleHRG
aWVsZERpZEJlZ2luRWRpdGluZyhpbnB1dCk7CisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkt
PnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhpbnB1dCk7CiAgICAgfQogCiAgICAgaWYgKGlucHV0
LT5mb2N1c2VkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxkKGlucHV0
KTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dERpZENoYW5nZUluVGV4dEZpZWxk
KGlucHV0KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXgg
Y2U4MjBmOC4uYTQ2MDQ2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTIx
NjUsNyArMjE2NSw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9oaWdobGlnaHRfdGV4dF9t
YXRjaGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFuCiB7CiAgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwogCi0gICAgY29yZSh3ZWJWaWV3
KS0+bWFpbkZyYW1lKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxk
SGlnaGxpZ2h0KTsKKyAgICBjb3JlKHdlYlZpZXcpLT5tYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoc2hvdWxkSGlnaGxpZ2h0KTsKIH0KIAog
LyoqCkBAIC0yMzQ2LDcgKzIzNDYsNyBAQCBnY2hhciogd2Via2l0X3dlYl92aWV3X2dldF9zZWxl
Y3RlZF90ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
LSAgICByZXR1cm4gZ19zdHJkdXAoZnJhbWUtPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHJldHVybiBnX3N0cmR1cChmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0
ZjgoKS5kYXRhKCkpOwogfQogCiAvKioKQEAgLTI0MTgsMTIgKzI0MTgsMTEgQEAgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFu
IGZsYWcpCiAgICAgcHJpdi0+ZWRpdGFibGUgPSBmbGFnOwogCiAgICAgaWYgKGZsYWcpIHsKLSAg
ICAgICAgZnJhbWUtPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOworICAgICAgICBm
cmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAg
ICAvLyBUT0RPOiBJZiB0aGUgV2ViS2l0V2ViVmlldyBpcyBtYWRlIGVkaXRhYmxlIGFuZCB0aGUg
c2VsZWN0aW9uIGlzIGVtcHR5LCBzZXQgaXQgdG8gc29tZXRoaW5nLgogICAgICAgICAvL2lmICgh
d2Via2l0X3dlYl92aWV3X2dldF9zZWxlY3RlZF9kb21fcmFuZ2Uod2ViVmlldykpCiAgICAgICAg
IC8vICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9uRnJvbU5vbmUoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgZnJhbWUtPnJlbW92ZUVkaXRpbmdTdHlsZUZyb21Cb2R5RWxlbWVudCgpOworICAgIH0K
ICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJlZGl0YWJsZSIpOwogfQog
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggODc5YTljYy4uNThjZTVmZiAxMDA2NDQKLS0tIGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQpAQCAtNTcsNiArNTcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9ET01JbXBsZW1l
bnRhdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2NMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CkBAIC01NTQsNyArNTU1LDcgQEAgc3RhdGlj
IGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAKIC0gKE5TU3RyaW5nICopX3NlbGVjdGVkU3RyaW5nCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRl
LT5jb3JlRnJhbWUtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0ZWRUZXh0KCkpOworICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVk
aXRvcigpLT5zZWxlY3RlZFRleHQoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopX3N0cmluZ0ZvclJh
bmdlOihET01SYW5nZSAqKXJhbmdlCkBAIC02NzIsNyArNjczLDcgQEAgc3RhdGljIGlubGluZSBX
ZWJEYXRhU291cmNlICpkYXRhU291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKE5T
UmVjdClfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgIHJldHVy
biBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5maXJzdFJlY3RGb3JSYW5nZShbcmFuZ2UgX3JhbmdlXSk7
CisgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJh
bmdlKFtyYW5nZSBfcmFuZ2VdKTsKIH0KIAogLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6KERPTVJhbmdlICopcmFuZ2UKQEAgLTc5OCw3ICs3OTksNyBAQCBzdGF0aWMgaW5saW5lIFdl
YkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIAogLSAoRE9N
UmFuZ2UgKilfbWFya0RPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfd3JhcFJhbmdl
Ol9wcml2YXRlLT5jb3JlRnJhbWUtPm1hcmsoKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVy
biBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS0+bWFy
aygpLnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC8vIEdpdmVuIHByb3Bvc2VkUmFuZ2UsIHJldHVy
bnMgYW4gZXh0ZW5kZWQgcmFuZ2UgdGhhdCBpbmNsdWRlcyBhZGphY2VudCB3aGl0ZXNwYWNlIHRo
YXQgc2hvdWxkCkBAIC0xMDAzLDcgKzEwMDQsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3Vy
Y2UgKmRhdGFTb3VyY2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAoIV9wcml2
YXRlLT5jb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKLSAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5jb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoW3N0eWxlIF9DU1NTdHlsZURlY2xhcmF0aW9uXSwg
dW5kb0FjdGlvbik7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbXB1dGVB
bmRTZXRUeXBpbmdTdHlsZShbc3R5bGUgX0NTU1N0eWxlRGVjbGFyYXRpb25dLCB1bmRvQWN0aW9u
KTsKIH0KIAogLSAodm9pZClfZHJhZ1NvdXJjZU1vdmVkVG86KE5TUG9pbnQpd2luZG93TG9jCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCA2MDRhMTdh
Li44OWZhMjY0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24u
bW0KQEAgLTQzLDYgKzQzLDcgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxSZXNwb25zZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVu
dExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KQEAgLTIwMiw3ICsyMDMsNyBAQCBzdGF0aWMgTlNBcnJh
eSAqY29uY2F0ZW5hdGVBcnJheXMoTlNBcnJheSAqZmlyc3QsIE5TQXJyYXkgKnNlY29uZCkKICAg
ICAgICAgCiAgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbZnJhbWUgd2ViVmlld107CiAgICAg
ICAgIGlmIChbd2ViVmlldyBpc0VkaXRhYmxlXSkKLSAgICAgICAgICAgIGNvcmUoZnJhbWUpLT5h
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGNvcmUoZnJhbWUp
LT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggNjZmYjRlNy4uMDdlZjgyMCAxMDA2NDQK
LS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtNTc2Miw3ICs1NzYyLDcgQEAgc3RhdGljIHZvaWQg
ZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21w
b3NpdGlvblVuZGUKICAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKICAgICAgICAgcmV0dXJuIE5P
OwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVy
biBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2Fz
ZUZsYWcsIHdyYXBGbGFnLCBzdGFydEluU2VsZWN0aW9uKTsKKyAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNl
RmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOwogfQogCiBAZW5kCkBAIC01Nzg3LDcg
KzU3ODcsNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJp
bmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY29yZUZyYW1lLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5n
LCBjYXNlRmxhZywgbGltaXQpOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5tYXJr
QWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQpOwogfQogCiAtICh2b2lk
KXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFsdWUKQEAgLTU3
OTUsMTMgKzU3OTUsMTMgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1
dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGNvcmVGcmFtZS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGln
aHRlZChuZXdWYWx1ZSk7CisgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZChuZXdWYWx1ZSk7CiB9CiAKIC0gKEJPT0wpbWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZAogewogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5tYXJrZWRUZXh0
TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CiB9CiAKIC0g
KHZvaWQpdW5tYXJrQWxsVGV4dE1hdGNoZXMKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYmQyN2Y3
Yy4uZWI4ZmQzMyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTQxMjcsMTIgKzQxMjcsMTEgQEAg
c3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZVB0ciBqc1YKICAgICAgICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUo
W3NlbGYgbWFpbkZyYW1lXSk7CiAgICAgICAgIGlmIChtYWluRnJhbWUpIHsKICAgICAgICAgICAg
IGlmIChmbGFnKSB7Ci0gICAgICAgICAgICAgICAgbWFpbkZyYW1lLT5hcHBseUVkaXRpbmdTdHls
ZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBtYWluRnJhbWUtPmVkaXRvcigpLT5h
cHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgV2ViVmlldyBpcyBtYWRlIGVkaXRhYmxlIGFuZCB0aGUgc2VsZWN0aW9uIGlzIGVtcHR5LCBz
ZXQgaXQgdG8gc29tZXRoaW5nLgogICAgICAgICAgICAgICAgIGlmICghW3NlbGYgc2VsZWN0ZWRE
T01SYW5nZV0pCiAgICAgICAgICAgICAgICAgICAgIG1haW5GcmFtZS0+c2V0U2VsZWN0aW9uRnJv
bU5vbmUoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1haW5GcmFtZS0+
cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlFbGVtZW50KCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBi
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDUyZDliNjYuLmVlOTcxZmUgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwCkBAIC0xNjUxLDcgKzE2NTEsNyBAQCBib29sIFFXZWJQYWdlOjphY2NlcHROYXZp
Z2F0aW9uUmVxdWVzdChRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRV2ViTmV0d29ya1JlcXVlcwog
Ki8KIFFTdHJpbmcgUVdlYlBhZ2U6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0
ZWRUZXh0KCk7CisgICAgcmV0dXJuIGQtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpOwogfQogCiAvKiEKQEAgLTIw
MTcsMTEgKzIwMTcsOSBAQCB2b2lkIFFXZWJQYWdlOjpzZXRDb250ZW50RWRpdGFibGUoYm9vbCBl
ZGl0YWJsZSkKICAgICAgICAgaWYgKGQtPm1haW5GcmFtZSkgewogICAgICAgICAgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gZC0+bWFpbkZyYW1lLT5kLT5mcmFtZTsKICAgICAgICAgICAgIGlm
IChlZGl0YWJsZSkgewotICAgICAgICAgICAgICAgIGZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRp
dGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBtYWMg
cG9ydCBjYWxscyB0aGlzIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkRE9NUmFuZ2UKICAgICAgICAg
ICAgICAgICAvL2ZyYW1lLT5zZXRTZWxlY3Rpb25Gcm9tTm9uZSgpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBmcmFtZS0+cmVtb3ZlRWRpdGluZ1N0eWxlRnJvbUJvZHlF
bGVtZW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5jcHAgYi9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmNwcAppbmRleCBiZTdiNDgzLi4y
OGYxMDM1IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50LmNwcAorKysgYi9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjcHJhZ21hIHdhcm5pbmcocHVzaCwg
MCkKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9F
ZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CkBAIC0x
NDksNyArMTUwLDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudUNsaWVudDo6ZG93bmxvYWRVUkwoY29u
c3QgS1VSTCYgdXJsKQogCiB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50OjpzZWFyY2hXaXRoR29v
Z2xlKGNvbnN0IEZyYW1lKiBmcmFtZSkKIHsKLSAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gZnJh
bWUtPnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBmcmFtZS0+ZWRp
dG9yKCktPnNlbGVjdGVkVGV4dCgpOwogICAgIHNlYXJjaFN0cmluZy5zdHJpcFdoaXRlU3BhY2Uo
KTsKICAgICBTdHJpbmcgZW5jb2RlZCA9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoc2Vh
cmNoU3RyaW5nKTsKICAgICBlbmNvZGVkLnJlcGxhY2UoIiUyMCIsICIrIik7CmRpZmYgLS1naXQg
YS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwIGIvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCBl
M2M5ZDExLi40MzAyZGMzIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBi
L1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTMxMDYsNyArMzEwNiw3IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6c2VsZWN0ZWRUZXh0KAogICAgIGlmICghZm9jdXNlZEZy
YW1lKQogICAgICAgICByZXR1cm4gRV9GQUlMOwogCi0gICAgU3RyaW5nIGZyYW1lU2VsZWN0ZWRU
ZXh0ID0gZm9jdXNlZEZyYW1lLT5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgZnJhbWVTZWxl
Y3RlZFRleHQgPSBmb2N1c2VkRnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKTsKICAgICAq
dGV4dCA9IFN5c0FsbG9jU3RyaW5nTGVuKGZyYW1lU2VsZWN0ZWRUZXh0LmNoYXJhY3RlcnMoKSwg
ZnJhbWVTZWxlY3RlZFRleHQubGVuZ3RoKCkpOwogICAgIGlmICghKnRleHQgJiYgZnJhbWVTZWxl
Y3RlZFRleHQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwotLSAKMS42
LjAuMgoK
</data>
<flag name="review"
          id="12844"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>