<?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>78554</bug_id>
          
          <creation_ts>2012-02-13 16:58:56 -0800</creation_ts>
          <short_desc>Refactor ClipboardMac class to use PlatformStrategies</short_desc>
          <delta_ts>2012-02-15 15:09:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>andersca</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555773</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-13 16:58:56 -0800</bug_when>
    <thetext>This bug track another step in the direction of removing access to NSPasteboard from the WebProcess.
The Mac implementation of the Clipboard class needs to be redesigned to use a platform strategy that can provide different implementations for WebKit and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555788</commentid>
    <comment_count>1</comment_count>
      <attachid>126872</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-13 17:14:57 -0800</bug_when>
    <thetext>Created attachment 126872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557542</commentid>
    <comment_count>2</comment_count>
      <attachid>126872</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-02-15 14:19:33 -0800</bug_when>
    <thetext>Comment on attachment 126872
Patch

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

&gt; Source/WebCore/platform/PasteboardStrategy.h:46
&gt; +    virtual const String uniqueName() = 0;

This doesn&apos;t need to return a const String.

&gt; Source/WebCore/platform/PlatformPasteboard.h:43
&gt; +    static const String uniqueName();

Ditto.

&gt; Source/WebCore/platform/PlatformPasteboard.h:49
&gt; +    int changeCount();

Can this member function be const?

&gt; Source/WebCore/platform/mac/ClipboardMac.mm:73
&gt; +static const String cocoaTypeFromHTMLClipboardType(const String&amp; type)

No need for const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557557</commentid>
    <comment_count>3</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-15 14:36:39 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 126872 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126872&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/PasteboardStrategy.h:46
&gt; &gt; +    virtual const String uniqueName() = 0;
&gt; 
&gt; This doesn&apos;t need to return a const String.
&gt; 
&gt; &gt; Source/WebCore/platform/PlatformPasteboard.h:43
&gt; &gt; +    static const String uniqueName();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/PlatformPasteboard.h:49
&gt; &gt; +    int changeCount();
&gt; 
&gt; Can this member function be const?
&gt; 
&gt; &gt; Source/WebCore/platform/mac/ClipboardMac.mm:73
&gt; &gt; +static const String cocoaTypeFromHTMLClipboardType(const String&amp; type)
&gt; 
&gt; No need for const.

Thanks for the review! I&apos;ll address your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557610</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-15 15:09:21 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/107844</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126872</attachid>
            <date>2012-02-13 17:14:57 -0800</date>
            <delta_ts>2012-02-15 14:19:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>usestrategies3.txt</filename>
            <type>text/plain</type>
            <size>42524</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzY0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDEyLTAyLTEzICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgQ2xpcGJvYXJk
TWFjIGNsYXNzIHRvIHVzZSBQbGF0Zm9ybVN0cmF0ZWdpZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJl
aGF2aW9yLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEFkZGVkIG5ldyBleHBvcnRlZCBt
ZXRob2RzIG9mIHRoZSBQbGF0Zm9ybVBhc3RlYm9hcmQgY2xhc3MKKyAgICAgICAgKiBlZGl0aW5n
L21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om5ld0dlbmVyYWxD
bGlwYm9hcmQpOiBVc2UgbmFtZSBiYXNlZCBwYXN0ZWJvYXJkIHJlZmVyZW5jZXMuCisgICAgICAg
ICogcGFnZS9EcmFnQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50OjpkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdn
aW5nQ2xpcGJvYXJkKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0
ZWd5Lmg6IEFkZGVkIG5ldyBtZXRob2RzIHRvIGdldCBhIHVuaXF1ZSBwYXN0ZWJvYXJkIG5hbWUK
KyAgICAgICAgYW5kIHRoZSBwYXN0ZWJvYXJkIGNoYW5nZSBjb3VudC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9QbGF0Zm9ybVBhc3RlYm9hcmQuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFj
L0NsaXBib2FyZE1hYy5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpjcmVhdGUp
OiBVc2luZyBuYW1lIGJhc2VkIHBhc3RlYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRNYWM6OnBhc3RlYm9hcmROYW1lKTogUmVwbGFjaW5nIHRoZSBvbGQgcGFzdGVib2FyZCgpIG1l
dGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOiBBbGwgdGhlIG1l
dGhvZHMgYmVsb3cgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIGF2b2lkCisgICAgICAgIHVzaW5nIE9i
amVjdGl2ZS1DIHR5cGVzIGFuZCBkaXJlY3QgYWNjZXNzIHRvIE5TUGFzdGVib2FyZCBvYmplY3Qu
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRNYWM6OkNsaXBib2FyZE1hYyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRNYWM6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Y29jb2FUeXBlRnJvbUhUTUxDbGlw
Ym9hcmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aVR5cGVGcm9tQ29jb2FUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OmNsZWFyRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRNYWM6OmNsZWFyQWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0
ZVVSTHNGcm9tUGFzdGVib2FyZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0
ZVVSTHNGcm9tUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6Omdl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkTWFjOjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OnNldERy
YWdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OndyaXRlUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OndyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZE1hYzo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6Ondy
aXRlQ2xpcGJvYXJkKTogVXNpbmcgbmFtZSBiYXNlZCBwYXN0ZWJvYXJkIHJlZmVyZW5jZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpnZXRQYXRobmFtZXNGb3JUeXBlKTogRml4ZWQg
dG8gc3VwcG9ydCBOU0FycmF5IGFuZCBOU3RyaW5nIGNvbnRlbnQuCisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVuaXF1ZU5hbWUpOiBBZGRlZC4KKwogMjAxMi0wMi0x
MyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIFtD
dXN0b21Ub0pTT2JqZWN0XSB0byBpbnRlcmZhY2VzIHdoaWNoIGhhdmUgY3VzdG9tIHRvSlMoKSBh
bmQgdG9WOCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTA3NjEzKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU1OSw2ICs1
NTksOCBAQCBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDhnZXRUeXBlCiBfX1pON1dl
YkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDRjb3B5RVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJD
b3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQxNnNldEJ1ZmZlckZvclR5cGVFTjNXVEYxMFBhc3NSZWZQ
dHJJTlNfMTJTaGFyZWRCdWZmZXJFRUVSS05TMV82U3RyaW5nRQogX19aTjdXZWJDb3JlMThQbGF0
Zm9ybVBhc3RlYm9hcmQxNnNldFN0cmluZ0ZvclR5cGVFUktOM1dURjZTdHJpbmdFUzRfCitfX1pO
N1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEwdW5pcXVlTmFtZUV2CitfX1pON1dlYkNvcmUx
OFBsYXRmb3JtUGFzdGVib2FyZDExY2hhbmdlQ291bnRFdgogX19aTjdXZWJDb3JlMThTZWFyY2hQ
b3B1cE1lbnVNYWNDMUVQTlNfMTVQb3B1cE1lbnVDbGllbnRFCiBfX1pON1dlYkNvcmUxOGlzU3Rh
cnRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3JlMThwbHVnaW5TY3JpcHRPYmplY3RFUE4zSlNDOUV4
ZWNTdGF0ZUVQTlNfMTNKU0hUTUxFbGVtZW50RQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTA3NjEzKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBACiAj
aW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAiUGFz
dGVib2FyZC5oIgorI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCisjaW1wb3J0ICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbXBvcnQgIlJlbmRlckJsb2NrLmgiCiAjaW1wb3J0ICJSdW50
aW1lQXBwbGljYXRpb25DaGVja3MuaCIKICNpbXBvcnQgIlNvdW5kLmgiCkBAIC00OSw3ICs1MSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRp
dG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZy
YW1lKiBmcmFtZSkKIHsKICAgICByZXR1cm4gQ2xpcGJvYXJkTWFjOjpjcmVhdGUoQ2xpcGJvYXJk
OjpDb3B5QW5kUGFzdGUsCi0gICAgICAgIHBvbGljeSA9PSBDbGlwYm9hcmRXcml0YWJsZSA/IFtO
U1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhVbmlxdWVOYW1lXSA6IFtOU1Bhc3RlYm9hcmQgZ2Vu
ZXJhbFBhc3RlYm9hcmRdLCBwb2xpY3ksIGZyYW1lKTsKKyAgICAgICAgcG9saWN5ID09IENsaXBi
b2FyZFdyaXRhYmxlID8gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT51bmlxdWVOYW1lKCkgOiBTdHJpbmcoTlNHZW5lcmFsUGJvYXJkKSwgcG9saWN5LCBmcmFtZSk7
CiB9CiAKIHZvaWQgRWRpdG9yOjpzaG93Rm9udFBhbmVsKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NsaWVudC5oCShyZXZpc2lvbiAxMDc2MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAvLyBNYWMtc3BlY2lmaWMgaGVscGVyIGZ1
bmN0aW9uIHRvIGFsbG93IGFjY2VzcyB0byB3ZWIgYXJjaGl2ZXMgYW5kIE5TUGFzdGVib2FyZCBl
eHRyYXMgaW4gV2ViS2l0LgogICAgICAgICAvLyBUaGlzIGlzIG5vdCBhYnN0cmFjdCBhcyB0aGF0
IHdvdWxkIHJlcXVpcmUgYW5vdGhlciAjaWYgUExBVEZPUk0oTUFDKSBmb3IgdGhlIFNWR0ltYWdl
IGNsaWVudCBlbXB0eSBpbXBsZW50YXRpb24uCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0ZWJvYXJkICosIERPTUVsZW1lbnQqLCBOU1VSTCAqLCBO
U1N0cmluZyAqLCBGcmFtZSopIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdy
aXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYsIERPTUVsZW1lbnQqLCBOU1VSTCAqLCBOU1N0cmlu
ZyAqLCBGcmFtZSopIHsgfQogI2VuZGlmCiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZHJhZ0VuZGVkKCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCShyZXZpc2lvbiAxMDc2MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0
LmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCkBAIC02NjgsMTEgKzY2
OSwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvCiAKIFBhc3NS
ZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkg
Y29uc3QKIHsKLSAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBh
c3RlYm9hcmRXaXRoTmFtZTpOU0RyYWdQYm9hcmRdOwogICAgIC8vIE11c3QgYmUgZG9uZSBiZWZv
cmUgb25kcmFnc3RhcnQgYWRkcyB0eXBlcyBhbmQgZGF0YSB0byB0aGUgcGJvYXJkLAogICAgIC8v
IGFsc28gZG9uZSBmb3Igc2VjdXJpdHksIGFzIGl0IGVyYXNlcyBkYXRhIGZyb20gdGhlIGxhc3Qg
ZHJhZwotICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheV0gb3duZXI6
bmlsXTsKLSAgICByZXR1cm4gQ2xpcGJvYXJkTWFjOjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5k
RHJvcCwgcGFzdGVib2FyZCwgQ2xpcGJvYXJkV3JpdGFibGUsIG1fZnJhbWUpOworICAgIFBhc3Rl
Ym9hcmQgcGFzdGVib2FyZChOU0RyYWdQYm9hcmQpOworICAgIHBhc3RlYm9hcmQuY2xlYXIoKTsK
KyAgICByZXR1cm4gQ2xpcGJvYXJkTWFjOjpjcmVhdGUoQ2xpcGJvYXJkOjpEcmFnQW5kRHJvcCwg
U3RyaW5nKE5TRHJhZ1Bib2FyZCksIENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0KIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRlZ3ku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkU3RyYXRl
Z3kuaAkocmV2aXNpb24gMTA3NjE0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZFN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBw
YXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpID0g
MDsKKyAgICB2aXJ0dWFsIGludCBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcgdW5pcXVlTmFtZSgpID0gMDsKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBj
b25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVBhc3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVBhc3RlYm9hcmQuaAkocmV2aXNpb24gMTA3NjEzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGxhdGZvcm1QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBQbGF0Zm9ybVBhc3RlYm9hcmQgewogcHVi
bGljOgogICAgIFBsYXRmb3JtUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KTsKKyAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHVuaXF1ZU5hbWUoKTsKICAgICAKICAgICB2b2lk
IGdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcyk7CiAgICAgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSk7CiAgICAg
dm9pZCBnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOwogICAgIFN0cmluZyBzdHJpbmdGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUpOworICAgIGludCBjaGFuZ2VDb3VudCgpOwogICAgIAog
ICAgIHZvaWQgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKTsKICAgICB2b2lkIHNl
dFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaAkocmV2aXNpb24gMTA3NjEz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw5ICs0MSw5IEBAIGNsYXNzIEZpbGVMaXN0OwogY2xhc3MgQ2xpcGJvYXJk
TWFjIDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZEltYWdlQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
bGlwYm9hcmRNYWM+IGNyZWF0ZShDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIE5TUGFzdGVi
b2FyZCAqcGFzdGVib2FyZCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZy
YW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZE1hYz4gY3JlYXRlKENsaXBib2Fy
ZFR5cGUgY2xpcGJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRNYWMoY2xpcGJvYXJkVHlwZSwgcGFzdGVib2FyZCwg
cG9saWN5LCBmcmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZE1h
YyhjbGlwYm9hcmRUeXBlLCBwYXN0ZWJvYXJkTmFtZSwgcG9saWN5LCBmcmFtZSkpOwogICAgIH0K
IAogICAgIHZpcnR1YWwgfkNsaXBib2FyZE1hYygpOwpAQCAtNzIsMTQgKzcyLDE0IEBAIHB1Ymxp
YzoKICAgICAKICAgICAvLyBNZXRob2RzIGZvciBnZXR0aW5nIGluZm8gaW4gQ29jb2EncyB0eXBl
IHN5c3RlbQogICAgIE5TSW1hZ2UgKmRyYWdOU0ltYWdlKE5TUG9pbnQmKSBjb25zdDsgLy8gbG9j
IGNvbnZlcnRlZCBmcm9tIGRyYWdMb2MsIGJhc2VkIG9uIHdob2xlIGltYWdlIHNpemUKLSAgICBO
U1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQoKSB7IHJldHVybiBtX3Bhc3RlYm9hcmQuZ2V0KCk7IH0K
KyAgICBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKCkgeyByZXR1cm4gbV9wYXN0ZWJvYXJk
TmFtZTsgfQogCiBwcml2YXRlOgotICAgIENsaXBib2FyZE1hYyhDbGlwYm9hcmRUeXBlLCBOU1Bh
c3RlYm9hcmQgKiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOworICAgIENsaXBib2Fy
ZE1hYyhDbGlwYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJ
bWFnZSosIE5vZGUqLCBjb25zdCBJbnRQb2ludCYpOwogCi0gICAgUmV0YWluUHRyPE5TUGFzdGVi
b2FyZD4gbV9wYXN0ZWJvYXJkOworICAgIFN0cmluZyBtX3Bhc3RlYm9hcmROYW1lOwogICAgIGlu
dCBtX2NoYW5nZUNvdW50OwogICAgIEZyYW1lKiBtX2ZyYW1lOyAvLyB1c2VkIG9uIHRoZSBzb3Vy
Y2Ugc2lkZSB0byBnZW5lcmF0ZSBkcmFnZ2luZyBpbWFnZXMKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHJldmlzaW9uIDEwNzYxMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJQYWdlLmgi
CiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCisjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRlZ3kuaCIK
KyNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIK
ICNpbXBvcnQgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbXBvcnQgIlNlY3VyaXR5T3Jp
Z2luLmgiCkBAIC00NiwxNSArNDgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIENs
aXBib2FyZE1hYzo6Y3JlYXRlKERyYWdBbmREcm9wLCBkcmFnRGF0YS0+cGFzdGVib2FyZCgpLCBw
b2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkTWFjOjpjcmVhdGUoRHJhZ0FuZERy
b3AsIFtkcmFnRGF0YS0+cGFzdGVib2FyZCgpIG5hbWVdLCBwb2xpY3ksIGZyYW1lKTsKIH0KIAot
Q2xpcGJvYXJkTWFjOjpDbGlwYm9hcmRNYWMoQ2xpcGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlLCBO
U1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZy
YW1lICpmcmFtZSkKK0NsaXBib2FyZE1hYzo6Q2xpcGJvYXJkTWFjKENsaXBib2FyZFR5cGUgY2xp
cGJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSwgRnJhbWUgKmZyYW1lKQogICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgY2xp
cGJvYXJkVHlwZSkKLSAgICAsIG1fcGFzdGVib2FyZChwYXN0ZWJvYXJkKQorICAgICwgbV9wYXN0
ZWJvYXJkTmFtZShwYXN0ZWJvYXJkTmFtZSkKICAgICAsIG1fZnJhbWUoZnJhbWUpCiB7Ci0gICAg
bV9jaGFuZ2VDb3VudCA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgY2hhbmdlQ291bnRdOworICAgIG1f
Y2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpOwogfQogCiBDbGlwYm9hcmRNYWM6On5DbGlw
Ym9hcmRNYWMoKQpAQCAtNjMsMTAgKzY1LDEyIEBAIENsaXBib2FyZE1hYzo6fkNsaXBib2FyZE1h
YygpCiAKIGJvb2wgQ2xpcGJvYXJkTWFjOjpoYXNEYXRhKCkKIHsKLSAgICByZXR1cm4gbV9wYXN0
ZWJvYXJkICYmIFttX3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdICYmIFtbbV9wYXN0ZWJvYXJkLmdl
dCgpIHR5cGVzXSBjb3VudF0gPiAwOworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMs
IG1fcGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiAhdHlwZXMuaXNFbXB0eSgpOwogfQogICAg
IAotc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3N0YXRpYyBjb25zdCBTdHJpbmcgY29jb2FUeXBlRnJv
bUhUTUxDbGlwYm9hcmRUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICAvLyBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kbmQu
aHRtbCNkb20tZGF0YXRyYW5zZmVyLXNldGRhdGEKICAgICBTdHJpbmcgcVR5cGUgPSB0eXBlLmxv
d2VyKCk7CkBAIC03OCwyNyArODIsMjcgQEAgc3RhdGljIFJldGFpblB0cjxOU1N0cmluZz4gY29j
b2FUeXBlRnJvbQogCiAgICAgLy8gSWdub3JlIGFueSB0cmFpbGluZyBjaGFyc2V0IC0gSlMgc3Ry
aW5ncyBhcmUgVW5pY29kZSwgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBjaGFyc2V0IGlzc3VlCiAg
ICAgaWYgKHFUeXBlID09ICJ0ZXh0L3BsYWluIiB8fCBxVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3Bs
YWluOyIpKQotICAgICAgICByZXR1cm4gTlNTdHJpbmdQYm9hcmRUeXBlOworICAgICAgICByZXR1
cm4gU3RyaW5nKE5TU3RyaW5nUGJvYXJkVHlwZSk7CiAgICAgaWYgKHFUeXBlID09ICJ0ZXh0L3Vy
aS1saXN0IikKICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGJlY2F1c2UgVVRJIGRvZXNuJ3Qgd29y
ayB3aXRoIENvY29hJ3MgVVJMIHR5cGUKLSAgICAgICAgcmV0dXJuIE5TVVJMUGJvYXJkVHlwZTsg
Ly8gbm90ZSBzcGVjaWFsIGNhc2UgaW4gZ2V0RGF0YSB0byByZWFkIE5TRmlsZW5hbWVzVHlwZQor
ICAgICAgICByZXR1cm4gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSk7IC8vIG5vdGUgc3BlY2lhbCBj
YXNlIGluIGdldERhdGEgdG8gcmVhZCBOU0ZpbGVuYW1lc1R5cGUKIAogICAgIC8vIFRyeSBVVEkg
bm93Ci0gICAgTlNTdHJpbmcgKm1pbWVUeXBlID0gcVR5cGU7Ci0gICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB1dGlUeXBlKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJG
b3JUYWcoa1VUVGFnQ2xhc3NNSU1FVHlwZSwgKENGU3RyaW5nUmVmKW1pbWVUeXBlLCBOVUxMKSk7
CisgICAgU3RyaW5nIG1pbWVUeXBlID0gcVR5cGU7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1dGlUeXBlKEFkb3B0Q0YsIFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWco
a1VUVGFnQ2xhc3NNSU1FVHlwZSwgbWltZVR5cGUuY3JlYXRlQ0ZTdHJpbmcoKSwgTlVMTCkpOwog
ICAgIGlmICh1dGlUeXBlKSB7CiAgICAgICAgIENGU3RyaW5nUmVmIHBiVHlwZSA9IFVUVHlwZUNv
cHlQcmVmZXJyZWRUYWdXaXRoQ2xhc3ModXRpVHlwZS5nZXQoKSwga1VUVGFnQ2xhc3NOU1Bib2Fy
ZFR5cGUpOwogICAgICAgICBpZiAocGJUeXBlKQotICAgICAgICAgICAgcmV0dXJuIChOU1N0cmlu
ZyAqKXBiVHlwZTsKKyAgICAgICAgICAgIHJldHVybiBwYlR5cGU7CiAgICAgfQogCiAgICAgLy8g
Tm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoCi0gICAgcmV0dXJu
IChOU1N0cmluZyAqKXFUeXBlOworICAgIHJldHVybiBxVHlwZTsKIH0KIAotc3RhdGljIFN0cmlu
ZyB1dGlUeXBlRnJvbUNvY29hVHlwZShOU1N0cmluZyAqdHlwZSkKK3N0YXRpYyBTdHJpbmcgdXRp
VHlwZUZyb21Db2NvYVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gdXRpVHlwZShBZG9wdENGLCBVVFR5cGVDcmVhdGVQcmVmZXJyZWRJZGVudGlm
aWVyRm9yVGFnKGtVVFRhZ0NsYXNzTlNQYm9hcmRUeXBlLCAoQ0ZTdHJpbmdSZWYpdHlwZSwgTlVM
TCkpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpVHlwZShBZG9wdENGLCBVVFR5cGVD
cmVhdGVQcmVmZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzTlNQYm9hcmRUeXBlLCB0
eXBlLmNyZWF0ZUNGU3RyaW5nKCksIE5VTEwpKTsKICAgICBpZiAodXRpVHlwZSkgewogICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IG1pbWVUeXBlKEFkb3B0Q0YsIFVUVHlwZUNvcHlQcmVm
ZXJyZWRUYWdXaXRoQ2xhc3ModXRpVHlwZS5nZXQoKSwga1VUVGFnQ2xhc3NNSU1FVHlwZSkpOwog
ICAgICAgICBpZiAobWltZVR5cGUpCkBAIC0xMDcsMjMgKzExMSwyNCBAQCBzdGF0aWMgU3RyaW5n
IHV0aVR5cGVGcm9tQ29jb2FUeXBlKE5TU3RyCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1z
dGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoSGFzaFNldDxTdHJp
bmc+JiByZXN1bHRUeXBlcywgTlNTdHJpbmcgKmNvY29hVHlwZSwgTlNQYXN0ZWJvYXJkICpwYXN0
ZWJvYXJkKQorc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKEhh
c2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIC8vIFVUSSBtYXkgbm90IGRvIHRoZXNl
IHJpZ2h0LCBzbyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCwgcHJlZGljdGFibGUgcmVzdWx0
Ci0gICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0p
IHsKKyAgICBpZiAoY29jb2FUeXBlID09IFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKSB7CiAg
ICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1VSTFBib2FyZFR5cGVd
KSB7CisgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSkgewogICAg
ICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNGaWxlbmFtZXNQYm9h
cmRUeXBlXSkgeworICAgIGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TRmlsZW5hbWVzUGJvYXJk
VHlwZSkpIHsKICAgICAgICAgLy8gSWYgZmlsZSBsaXN0IGlzIGVtcHR5LCBhZGQgbm90aGluZy4K
ICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlIGZpbGUgbGlz
dCBjb3VudCBjb3VsZCBoYXZlIGNoYW5nZWQgc2luY2Ugd2UgZ3JhYmJlZCB0aGUgdHlwZXMgYXJy
YXkuCiAgICAgICAgIC8vIEhvd2V2ZXIsIHRoaXMgaXMgbm90IHJlYWxseSBhbiBpc3N1ZSBmb3Ig
dXMgZG9pbmcgYSBzYW5pdHkgY2hlY2sgaGVyZS4KLSAgICAgICAgTlNBcnJheSAqZmlsZUxpc3Qg
PSBbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV07
Ci0gICAgICAgIGlmIChbZmlsZUxpc3QgY291bnRdKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGZpbGVMaXN0OworICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPmdldFBhdGhuYW1lc0ZvclR5cGUoZmlsZUxpc3QsIFN0cmluZyhOU0ZpbGVuYW1lc1Bi
b2FyZFR5cGUpLCBwYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIGlmICghZmlsZUxpc3QuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAvLyBJdCBpcyB1bmtub3duIGlmIE5TRmlsZW5hbWVzUGJvYXJk
VHlwZSBhbHdheXMgaW1wbGllcyBOU1VSTFBib2FyZFR5cGUgaW4gQ29jb2EsCiAgICAgICAgICAg
ICAvLyBidXQgTlNGaWxlbmFtZXNQYm9hcmRUeXBlIHNob3VsZCBpbXBseSBib3RoICd0ZXh0L3Vy
aS1saXN0JyBhbmQgJ0ZpbGVzJwogICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3Vy
aS1saXN0Iik7CkBAIC0xNDcsOCArMTUyLDkgQEAgdm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyRGF0
YShjb25zdCBTdHJpbgogCiAgICAgLy8gbm90ZSBOU1Bhc3RlYm9hcmQgZW5mb3JjZXMgY2hhbmdl
Q291bnQgaXRzZWxmIG9uIHdyaXRpbmcgLSBjYW4ndCB3cml0ZSBpZiBub3QgdGhlIG93bmVyCiAK
LSAgICBpZiAoUmV0YWluUHRyPE5TU3RyaW5nPiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVGcm9tSFRN
TENsaXBib2FyZFR5cGUodHlwZSkpCi0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3Ry
aW5nOkAiIiBmb3JUeXBlOmNvY29hVHlwZS5nZXQoKV07CisgICAgU3RyaW5nIGNvY29hVHlwZSA9
IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0eXBlKTsKKyAgICBpZiAoIWNvY29hVHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZSgiIiwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1l
KTsKIH0KIAogdm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyQWxsRGF0YSgpCkBAIC0xNTgsNTMgKzE2
NCw1MSBAQCB2b2lkIENsaXBib2FyZE1hYzo6Y2xlYXJBbGxEYXRhKCkKIAogICAgIC8vIG5vdGUg
TlNQYXN0ZWJvYXJkIGVuZm9yY2VzIGNoYW5nZUNvdW50IGl0c2VsZiBvbiB3cml0aW5nIC0gY2Fu
J3Qgd3JpdGUgaWYgbm90IHRoZSBvd25lcgogCi0gICAgW21fcGFzdGVib2FyZC5nZXQoKSBkZWNs
YXJlVHlwZXM6W05TQXJyYXkgYXJyYXldIG93bmVyOm5pbF07CisgICAgUGFzdGVib2FyZCBwYXN0
ZWJvYXJkKG1fcGFzdGVib2FyZE5hbWUpOworICAgIHBhc3RlYm9hcmQuY2xlYXIoKTsKIH0KIAot
c3RhdGljIE5TQXJyYXkgKmFic29sdXRlVVJMc0Zyb21QYXN0ZWJvYXJkRmlsZW5hbWVzKE5TUGFz
dGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBvbmx5Rmlyc3RVUkwgPSBmYWxzZSkKK3N0YXRpYyBW
ZWN0b3I8U3RyaW5nPiBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVib2FyZEZpbGVuYW1lcyhjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBib29sIG9ubHlGaXJzdFVSTCA9IGZhbHNlKQogewotICAg
IE5TQXJyYXkgKmZpbGVMaXN0ID0gW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0Zp
bGVuYW1lc1Bib2FyZFR5cGVdOworICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVMaXN0OworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0UGF0aG5hbWVzRm9y
VHlwZShmaWxlTGlzdCwgU3RyaW5nKE5TRmlsZW5hbWVzUGJvYXJkVHlwZSksIHBhc3RlYm9hcmRO
YW1lKTsKIAotICAgIC8vIEZJWE1FOiBXaHkgZG9lcyB0aGlzIGNvZGUgbmVlZCB0byBndWFyZCBh
Z2FpbnN0IGJhZCB2YWx1ZXMgb24gdGhlIHBhc3RlYm9hcmQ/Ci0gICAgQVNTRVJUKCFmaWxlTGlz
dCB8fCBbZmlsZUxpc3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKTsKLSAgICBpZiAo
IWZpbGVMaXN0IHx8ICFbZmlsZUxpc3QgaXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dIHx8
ICFbZmlsZUxpc3QgY291bnRdKQotICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChmaWxlTGlz
dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmaWxlTGlzdDsKIAotICAgIE5TVUludGVnZXIg
Y291bnQgPSBvbmx5Rmlyc3RVUkwgPyAxIDogW2ZpbGVMaXN0IGNvdW50XTsKLSAgICBOU011dGFi
bGVBcnJheSAqdXJscyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0g
W2ZpbGVMaXN0IG9iamVjdEF0SW5kZXg6aV07Ci0KLSAgICAgICAgQVNTRVJUKFtzdHJpbmcgaXNL
aW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSk7ICAvLyBBZGRlZCB0byB1bmRlcnN0YW5kIHdo
eSB0aGlzIGlmIGNvZGUgaXMgaGVyZQotICAgICAgICBpZiAoIVtzdHJpbmcgaXNLaW5kT2ZDbGFz
czpbTlNTdHJpbmcgY2xhc3NdXSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7IC8vIE5vbi1zdHJp
bmcgb2JqZWN0IGluIHRoZSBsaXN0LCBiYWlsIG91dCEgIEZJWE1FOiBXaGVuIGNhbiB0aGlzIGhh
cHBlbj8KLQotICAgICAgICBOU1VSTCAqdXJsID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpzdHJp
bmddOwotICAgICAgICBbdXJscyBhZGRPYmplY3Q6W3VybCBhYnNvbHV0ZVN0cmluZ11dOworICAg
IHNpemVfdCBjb3VudCA9IG9ubHlGaXJzdFVSTCA/IDEgOiBmaWxlTGlzdC5zaXplKCk7CisgICAg
VmVjdG9yPFN0cmluZz4gdXJsczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgTlNVUkwgKnVybCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6ZmlsZUxp
c3RbaV1dOworICAgICAgICB1cmxzLmFwcGVuZChTdHJpbmcoW3VybCBhYnNvbHV0ZVN0cmluZ10p
KTsKICAgICB9CiAgICAgcmV0dXJuIHVybHM7CiB9CiAKLXN0YXRpYyBOU0FycmF5ICphYnNvbHV0
ZVVSTHNGcm9tUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIGJvb2wgb25seUZp
cnN0VVJMID0gZmFsc2UpCitzdGF0aWMgVmVjdG9yPFN0cmluZz4gYWJzb2x1dGVVUkxzRnJvbVBh
c3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgYm9vbCBvbmx5Rmlyc3RVUkwg
PSBmYWxzZSkKIHsKICAgICAvLyBOT1RFOiBXZSBtdXN0IGFsd2F5cyBjaGVjayBbYXZhaWxhYmxl
VHlwZXMgY29udGFpbnNPYmplY3Q6XSBiZWZvcmUgYWNjZXNzaW5nIHBhc3RlYm9hcmQgZGF0YQog
ICAgIC8vIG9yIENvcmVGb3VuZGF0aW9uIHdpbGwgcHJpbnRmIHdoZW4gdGhlcmUgaXMgbm90IGRh
dGEgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZS4KLSAgICBOU0FycmF5ICphdmFpbGFibGVUeXBl
cyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVUeXBl
czsKKyAgICBWZWN0b3I8U3RyaW5nPiBhYnNvbHV0ZVVSTHM7CisgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyhhdmFpbGFibGVUeXBlcywgcGFz
dGVib2FyZE5hbWUpOwogCiAgICAgLy8gVHJ5IE5TRmlsZW5hbWVzUGJvYXJkVHlwZSBiZWNhdXNl
IGl0IGNvbnRhaW5zIGEgbGlzdAotICAgIGlmIChbYXZhaWxhYmxlVHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkgewotICAgICAgICBpZiAoTlNBcnJheSogYWJzb2x1
dGVVUkxzID0gYWJzb2x1dGVVUkxzRnJvbVBhc3RlYm9hcmRGaWxlbmFtZXMocGFzdGVib2FyZCwg
b25seUZpcnN0VVJMKSkKKyAgICBpZiAoYXZhaWxhYmxlVHlwZXMuY29udGFpbnMoU3RyaW5nKE5T
RmlsZW5hbWVzUGJvYXJkVHlwZSkpKSB7CisgICAgICAgIGFic29sdXRlVVJMcyA9IGFic29sdXRl
VVJMc0Zyb21QYXN0ZWJvYXJkRmlsZW5hbWVzKHBhc3RlYm9hcmROYW1lLCBvbmx5Rmlyc3RVUkwp
OworICAgICAgICBpZiAoIWFic29sdXRlVVJMcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gYWJzb2x1dGVVUkxzOwogICAgIH0KIAogICAgIC8vIEZhbGxiYWNrIHRvIE5TVVJMUGJvYXJk
VHlwZSAod2hpY2ggaXMgYSBzaW5nbGUgVVJMKQotICAgIGlmIChbYXZhaWxhYmxlVHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSkgewotICAgICAgICBpZiAoTlNVUkwgKnVybCA9
IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSkKLSAgICAgICAgICAgIHJldHVy
biBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3VybCBhYnNvbHV0ZVN0cmluZ11dOworICAgIGlm
IChhdmFpbGFibGVUeXBlcy5jb250YWlucyhTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSkpIHsKKyAg
ICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRo
bmFtZXNGb3JUeXBlKGFic29sdXRlVVJMcywgU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSksIHBhc3Rl
Ym9hcmROYW1lKTsKKyAgICAgICAgaWYgKCFhYnNvbHV0ZVVSTHMuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGFic29sdXRlVVJMczsKICAgICB9CiAKICAgICAvLyBObyBmaWxlIHBhdGhz
IG9uIHRoZSBwYXN0ZWJvYXJkLCByZXR1cm4gbmlsCi0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKIH0KIAogU3RyaW5nIENsaXBib2FyZE1hYzo6Z2V0RGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CkBAIC0yMTMsMjMgKzIxNywy
NCBAQCBTdHJpbmcgQ2xpcGJvYXJkTWFjOjpnZXREYXRhKGNvbnN0IFN0cmluCiAgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xp
cGJvYXJkVHlwZSh0eXBlKTsKLSAgICBOU1N0cmluZyAqY29jb2FWYWx1ZSA9IG5pbDsKKyAgICBj
b25zdCBTdHJpbmcmIGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZSh0
eXBlKTsKKyAgICBTdHJpbmcgY29jb2FWYWx1ZTsKIAogICAgIC8vIEdyYWIgdGhlIHZhbHVlIG9m
ZiB0aGUgcGFzdGVib2FyZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb2NvYVR5cGUKLSAgICBpZiAo
W2NvY29hVHlwZS5nZXQoKSBpc0VxdWFsVG9TdHJpbmc6TlNVUkxQYm9hcmRUeXBlXSkgeworICAg
IGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSkpIHsKICAgICAgICAgLy8g
InVybCIgYW5kICJ0ZXh0L3VybC1saXN0IiBib3RoIG1hcCB0byBOU1VSTFBib2FyZFR5cGUgaW4g
Y29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKCksICJ1cmwiIG9ubHkgd2FudHMgdGhlIGZp
cnN0IFVSTAogICAgICAgICBib29sIG9ubHlGaXJzdFVSTCA9IChlcXVhbElnbm9yaW5nQ2FzZSh0
eXBlLCAidXJsIikpOwotICAgICAgICBOU0FycmF5ICphYnNvbHV0ZVVSTHMgPSBhYnNvbHV0ZVVS
THNGcm9tUGFzdGVib2FyZChtX3Bhc3RlYm9hcmQuZ2V0KCksIG9ubHlGaXJzdFVSTCk7Ci0gICAg
ICAgIGNvY29hVmFsdWUgPSBbYWJzb2x1dGVVUkxzIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpA
IlxuIl07Ci0gICAgfSBlbHNlIGlmIChbY29jb2FUeXBlLmdldCgpIGlzRXF1YWxUb1N0cmluZzpO
U1N0cmluZ1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIGNvY29hVmFsdWUgPSBbW21fcGFzdGVib2Fy
ZC5nZXQoKSBzdHJpbmdGb3JUeXBlOmNvY29hVHlwZS5nZXQoKV0gcHJlY29tcG9zZWRTdHJpbmdX
aXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAgfSBlbHNlIGlmIChjb2NvYVR5cGUpCi0gICAgICAg
IGNvY29hVmFsdWUgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6Y29jb2FUeXBl
LmdldCgpXTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYWJzb2x1dGVVUkxzID0gYWJzb2x1dGVV
UkxzRnJvbVBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSwgb25seUZpcnN0VVJMKTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhYnNvbHV0ZVVSTHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgICAgICBjb2NvYVZhbHVlID0gaSA/ICJcbiIgKyBhYnNvbHV0ZVVSTHNbaV06IGFic29sdXRl
VVJMc1tpXTsKKyAgICB9IGVsc2UgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNTdHJpbmdQYm9h
cmRUeXBlKSkKKyAgICAgICAgY29jb2FWYWx1ZSA9IFtwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUoY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmRO
YW1lKSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICBlbHNlIGlm
ICghY29jb2FUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgY29jb2FWYWx1ZSA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlwZShjb2NvYVR5cGUs
IG1fcGFzdGVib2FyZE5hbWUpOwogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2
ZXMgZm9yIHNlY3VyaXR5LiAgV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9y
ZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGlu
ZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKGNvY29h
VmFsdWUgJiYgbV9jaGFuZ2VDb3VudCA9PSBbbV9wYXN0ZWJvYXJkLmdldCgpIGNoYW5nZUNvdW50
XSkgeworICAgIGlmICghY29jb2FWYWx1ZS5pc0VtcHR5KCkgJiYgbV9jaGFuZ2VDb3VudCA9PSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1f
cGFzdGVib2FyZE5hbWUpKSB7CiAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICByZXR1
cm4gY29jb2FWYWx1ZTsKICAgICB9CkBAIC0yNDMsMjggKzI0OCwzNiBAQCBib29sIENsaXBib2Fy
ZE1hYzo6c2V0RGF0YShjb25zdCBTdHJpbmcgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAv
LyBub3RlIE5TUGFzdGVib2FyZCBlbmZvcmNlcyBjaGFuZ2VDb3VudCBpdHNlbGYgb24gd3JpdGlu
ZyAtIGNhbid0IHdyaXRlIGlmIG5vdCB0aGUgb3duZXIKIAotICAgIFJldGFpblB0cjxOU1N0cmlu
Zz4gY29jb2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOwotICAg
IE5TU3RyaW5nICpjb2NvYURhdGEgPSBkYXRhOworICAgIGNvbnN0IFN0cmluZyYgY29jb2FUeXBl
ID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKHR5cGUpOworICAgIFN0cmluZyBjb2Nv
YURhdGEgPSBkYXRhOwogCi0gICAgaWYgKFtjb2NvYVR5cGUuZ2V0KCkgaXNFcXVhbFRvU3RyaW5n
Ok5TVVJMUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgW21fcGFzdGVib2FyZC5nZXQoKSBhZGRUeXBl
czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSBvd25lcjpuaWxdOwor
ICAgIGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSkpIHsKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgICAgIHR5cGVzLmFwcGVuZChTdHJpbmcoTlNVUkxQ
Ym9hcmRUeXBlKSk7CisKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlw
ZShjb2NvYURhdGEsIFN0cmluZyhOU1VSTFBib2FyZFR5cGUpLCBtX3Bhc3RlYm9hcmROYW1lKTsK
ICAgICAgICAgTlNVUkwgKnVybCA9IFtbTlNVUkwgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmNvY29h
RGF0YV07Ci0gICAgICAgIFt1cmwgd3JpdGVUb1Bhc3RlYm9hcmQ6bV9wYXN0ZWJvYXJkLmdldCgp
XTsKIAogICAgICAgICBpZiAoW3VybCBpc0ZpbGVVUkxdICYmIG1fZnJhbWUtPmRvY3VtZW50KCkt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkxvYWRMb2NhbFJlc291cmNlcygpKSB7Ci0gICAgICAgICAg
ICBbbV9wYXN0ZWJvYXJkLmdldCgpIGFkZFR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpO
U0ZpbGVuYW1lc1Bib2FyZFR5cGVdIG93bmVyOm5pbF07Ci0gICAgICAgICAgICBOU0FycmF5ICpm
aWxlTGlzdCA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbdXJsIHBhdGhdXTsKLSAgICAgICAg
ICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0UHJvcGVydHlMaXN0OmZpbGVMaXN0IGZvclR5cGU6
TlNGaWxlbmFtZXNQYm9hcmRUeXBlXTsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChTdHJpbmco
TlNGaWxlbmFtZXNQYm9hcmRUeXBlKSk7CisgICAgICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1l
KTsKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVMaXN0OworICAgICAgICAgICAgZmls
ZUxpc3QuYXBwZW5kKFN0cmluZyhbdXJsIHBhdGhdKSk7CisgICAgICAgICAgICBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFBhdGhuYW1lc0ZvclR5cGUoZmls
ZUxpc3QsIFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpLCBtX3Bhc3RlYm9hcmROYW1lKTsK
ICAgICAgICAgfQogCiAgICAgICAgIFt1cmwgcmVsZWFzZV07CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGlmIChjb2NvYVR5cGUpIHsKKyAgICBpZiAoIWNvY29hVHlwZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIHdlIGtub3cgb2YgZ29lcyBvbiB0
aGUgcGJvYXJkIGFzIGEgc3RyaW5nCi0gICAgICAgIFttX3Bhc3RlYm9hcmQuZ2V0KCkgYWRkVHlw
ZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmNvY29hVHlwZS5nZXQoKV0gb3duZXI6bmlsXTsK
LSAgICAgICAgcmV0dXJuIFttX3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOmNvY29hRGF0YSBm
b3JUeXBlOmNvY29hVHlwZS5nZXQoKV07CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwor
ICAgICAgICB0eXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+c2V0U3RyaW5nRm9yVHlwZShjb2NvYURhdGEsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFt
ZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAg
LTI3NSwyMyArMjg4LDIyIEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkg
Y28KICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0g
Q2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigp
OwogCi0gICAgTlNBcnJheSAqdHlwZXMgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKIAogICAg
IC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNr
IGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKICAgICAvLyBzdXJlIGl0IGRv
ZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNj
ZXNzaW5nIHRoZSBkYXRhLgotICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IFttX3Bhc3RlYm9hcmQu
Z2V0KCkgY2hhbmdlQ291bnRdKQorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJk
TmFtZSkpCiAgICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKIAogICAgIEhhc2hTZXQ8
U3RyaW5nPiByZXN1bHQ7Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFt0eXBlcyBjb3VudF07CiAg
ICAgLy8gRklYTUU6IFRoaXMgbG9vcCBjb3VsZCBiZSBzcGxpdCBpbnRvIHR3byBzdGFnZXMuIE9u
ZSB3aGljaCBhZGRzIGFsbCB0aGUgSFRNTDUgc3BlY2lmaWVkIHR5cGVzCiAgICAgLy8gYW5kIGEg
c2Vjb25kIHdoaWNoIGFkZHMgYWxsIHRoZSBleHRyYSB0eXBlcyBmcm9tIHRoZSBjb2NvYSBjbGlw
Ym9hcmQgKHdoaWNoIGlzIE1hYy1vbmx5IGJlaGF2aW9yKS4KLSAgICBmb3IgKE5TVUludGVnZXIg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIE5TU3RyaW5nICpwYlR5cGUgPSBbdHlw
ZXMgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAgaWYgKFtwYlR5cGUgaXNFcXVhbFRvU3RyaW5n
OkAiTmVYVCBwbGFpbiBhc2NpaSBwYXN0ZWJvYXJkIHR5cGUiXSkKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmICh0eXBlc1tpXSA9PSAi
TmVYVCBwbGFpbiBhc2NpaSBwYXN0ZWJvYXJkIHR5cGUiKQogICAgICAgICAgICAgY29udGludWU7
ICAgLy8gc2tpcCB0aGlzIGFuY2llbnQgdHlwZSB0aGF0IGdldHMgYXV0by1zdXBwbGllZCBieSBz
b21lIHN5c3RlbSBjb252ZXJzaW9uCiAKLSAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9y
Q29jb2FUeXBlKHJlc3VsdCwgcGJUeXBlLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpOworICAgICAgICBh
ZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUocmVzdWx0LCB0eXBlc1tpXSwgbV9wYXN0
ZWJvYXJkTmFtZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTMwNSwxMiArMzE3
LDExIEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZE1hYzo6ZmlsZXMKICAgICBpZiAo
cG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6
Y3JlYXRlKCk7CiAKLSAgICBOU0FycmF5ICphYnNvbHV0ZVVSTHMgPSBhYnNvbHV0ZVVSTHNGcm9t
UGFzdGVib2FyZEZpbGVuYW1lcyhtX3Bhc3RlYm9hcmQuZ2V0KCkpOwotICAgIE5TVUludGVnZXIg
Y291bnQgPSBbYWJzb2x1dGVVUkxzIGNvdW50XTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhYnNvbHV0
ZVVSTHMgPSBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVib2FyZEZpbGVuYW1lcyhtX3Bhc3RlYm9hcmRO
YW1lKTsKIAogICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRl
KCk7Ci0gICAgZm9yIChOU1VJbnRlZ2VyIHggPSAwOyB4IDwgY291bnQ7IHgrKykgewotICAgICAg
ICBOU1VSTCAqYWJzb2x1dGVVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbYWJzb2x1dGVVUkxz
IG9iamVjdEF0SW5kZXg6eF1dOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVV
UkxzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIE5TVVJMICphYnNvbHV0ZVVSTCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOmFic29sdXRlVVJMc1tpXV07CiAgICAgICAgIEFTU0VSVChbYWJzb2x1dGVV
UkwgaXNGaWxlVVJMXSk7CiAgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKFth
YnNvbHV0ZVVSTCBwYXRoXSkpOwogICAgIH0KQEAgLTM0MSw3ICszNTIsNyBAQCB2b2lkIENsaXBi
b2FyZE1hYzo6c2V0RHJhZ0ltYWdlKENhY2hlZEltCiAgICAgICAgIG1fZHJhZ0xvYyA9IGxvYzsK
ICAgICAgICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gbm9kZTsKICAgICAgICAgCi0gICAgICAgIGlm
IChkcmFnU3RhcnRlZCgpICYmIG1fY2hhbmdlQ291bnQgPT0gW21fcGFzdGVib2FyZC5nZXQoKSBj
aGFuZ2VDb3VudF0pIHsKKyAgICAgICAgaWYgKGRyYWdTdGFydGVkKCkgJiYgbV9jaGFuZ2VDb3Vu
dCA9PSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNv
dW50KG1fcGFzdGVib2FyZE5hbWUpKSB7CiAgICAgICAgICAgICBOU1BvaW50IGNvY29hTG9jOwog
ICAgICAgICAgICAgTlNJbWFnZSogY29jb2FJbWFnZSA9IGRyYWdOU0ltYWdlKGNvY29hTG9jKTsK
ICAgICAgICAgICAgIGlmIChjb2NvYUltYWdlKSB7CkBAIC0zNjcsMjEgKzM3OCwyMSBAQCB2b2lk
IENsaXBib2FyZE1hYzo6d3JpdGVSYW5nZShSYW5nZSogcmFuCiB7CiAgICAgQVNTRVJUKHJhbmdl
KTsKICAgICBBU1NFUlQoZnJhbWUpOwotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChbbV9wYXN0
ZWJvYXJkLmdldCgpIG5hbWVdKTsKKyAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQobV9wYXN0ZWJv
YXJkTmFtZSk7CiAgICAgcGFzdGVib2FyZC53cml0ZVNlbGVjdGlvbihyYW5nZSwgZnJhbWUtPmVk
aXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkt
PmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5LCBmcmFtZSk7CiB9CiAKIHZvaWQgQ2xp
cGJvYXJkTWFjOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgUGFz
dGVib2FyZCBwYXN0ZWJvYXJkKFttX3Bhc3RlYm9hcmQuZ2V0KCkgbmFtZV0pOworICAgIFBhc3Rl
Ym9hcmQgcGFzdGVib2FyZChtX3Bhc3RlYm9hcmROYW1lKTsKICAgICBwYXN0ZWJvYXJkLndyaXRl
UGxhaW5UZXh0KHRleHQpOwogfQogCiB2b2lkIENsaXBib2FyZE1hYzo6d3JpdGVVUkwoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCiB7ICAgCiAgICAg
QVNTRVJUKGZyYW1lKTsKLSAgICBBU1NFUlQobV9wYXN0ZWJvYXJkKTsKLSAgICBQYXN0ZWJvYXJk
IHBhc3RlYm9hcmQoW21fcGFzdGVib2FyZC5nZXQoKSBuYW1lXSk7CisgICAgQVNTRVJUKG1fcGFz
dGVib2FyZE5hbWUpOworICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChtX3Bhc3RlYm9hcmROYW1l
KTsKICAgICBwYXN0ZWJvYXJkLndyaXRlVVJMKHVybCwgdGl0bGUsIGZyYW1lKTsKIH0KICAgICAK
QEAgLTM5MCw3ICs0MDEsNyBAQCB2b2lkIENsaXBib2FyZE1hYzo6ZGVjbGFyZUFuZFdyaXRlRHJh
Z0ltCiB7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpCi0gICAgICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmNsaWVudCgpLT5kZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UobV9wYXN0ZWJvYXJkLmdldCgpLCBraXQoZWxlbWVudCksIHVybCwg
dGl0bGUsIGZyYW1lKTsKKyAgICAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+Y2xpZW50KCkt
PmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShtX3Bhc3RlYm9hcmROYW1lLCBraXQoZWxlbWVudCks
IHVybCwgdGl0bGUsIGZyYW1lKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQog
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0JKHJldmlzaW9uIDEwNzYxMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTAgKzI5Nyw3IEBAIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUNsaXBib2FyZChDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBp
cyB0aGUgbGFzdCBhY2Nlc3MgdG8gTlNQYXN0ZWJvYXJkLiBJdCB3aWxsIHJlbW92ZWQgd2hlbiB0
aGUgQ2xpcGJvYXJkTWFjCi0gICAgLy8gY2xhc3MgaXMgcmVmYWN0b3JlZC4KLSAgICBOU1Bhc3Rl
Ym9hcmQqIHBhc3RlYm9hcmQgPSBzdGF0aWNfY2FzdDxDbGlwYm9hcmRNYWMqPihjbGlwYm9hcmQp
LT5wYXN0ZWJvYXJkKCk7Ci0gICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5jb3B5KFtwYXN0ZWJvYXJkIG5hbWVdLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNvcHkoc3RhdGljX2Nh
c3Q8Q2xpcGJvYXJkTWFjKj4oY2xpcGJvYXJkKS0+cGFzdGVib2FyZE5hbWUoKSwgbV9wYXN0ZWJv
YXJkTmFtZSk7CiB9CiAKIGJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBsYWNlKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2Fy
ZE1hYy5tbQkocmV2aXNpb24gMTA3NjE0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsMTAg
QEAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFBsYXRmb3JtUGFzdGVibwogdm9pZCBQbGF0Zm9y
bVBhc3RlYm9hcmQ6OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1l
cywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKIHsKICAgICBOU0FycmF5KiBwYXRocyA9
IFttX3Bhc3RlYm9hcmQuZ2V0KCkgcHJvcGVydHlMaXN0Rm9yVHlwZTpwYXN0ZWJvYXJkVHlwZV07
CisgICAgaWYgKFtwYXRocyBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKSB7CisgICAg
ICAgIHBhdGhuYW1lcy5hcHBlbmQoKE5TU3RyaW5nICopcGF0aHMpOworICAgICAgICByZXR1cm47
ICAgICAgICAKKyAgICB9CiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgW3BhdGhzIGNv
dW50XTsgaSsrKQogICAgICAgICBwYXRobmFtZXMuYXBwZW5kKFtwYXRocyBvYmplY3RBdEluZGV4
OmldKTsKIH0KQEAgLTU5LDYgKzYzLDE2IEBAIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnN0
cmluZ0ZvclR5cGUKICAgICByZXR1cm4gW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBl
OnBhc3RlYm9hcmRUeXBlXTsKIH0KIAoraW50IFBsYXRmb3JtUGFzdGVib2FyZDo6Y2hhbmdlQ291
bnQoKQoreworICAgIHJldHVybiBbbV9wYXN0ZWJvYXJkLmdldCgpIGNoYW5nZUNvdW50XTsKK30K
KworY29uc3QgU3RyaW5nIFBsYXRmb3JtUGFzdGVib2FyZDo6dW5pcXVlTmFtZSgpCit7CisgICAg
cmV0dXJuIFtbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoVW5pcXVlTmFtZV0gbmFtZV07Cit9
CisKIHZvaWQgUGxhdGZvcm1QYXN0ZWJvYXJkOjpjb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3Rl
Ym9hcmQpCiB7CiAgICAgTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBw
YXN0ZWJvYXJkV2l0aE5hbWU6ZnJvbVBhc3RlYm9hcmRdOwpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMTA3NjQyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTItMDItMTMgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZWZhY3RvciBDbGlwYm9hcmRNYWMgY2xhc3MgdG8gdXNlIFBsYXRm
b3JtU3RyYXRlZ2llcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4NTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDogQ2hhbmdl
ZCBtZXRob2Qgc2lnbmF0dXJlIHRvIHJlZmVyZW5jZQorICAgICAgICB0aGUgcGFzdGVib2FyZCBi
eSBuYW1lLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcDogQWRkZWQgbmV3IG1ldGhvZHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OnVuaXF1ZU5hbWUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6IERpdHRvLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6IENoYW5nZWQg
bWV0aG9kIHNpZ25hdHVyZSB0byByZWZlcmVuY2UKKyAgICAgICAgdGhlIHBhc3RlYm9hcmQgYnkg
bmFtZS4KKwogMjAxMi0wMi0xMyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIFJlZmFjdG9yIE1hYyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUGFz
dGVib2FyZCBjbGFzcyB0byB1c2UgUGxhdGZvcm0gU3RyYXRlZ2llcy4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5oCShyZXZpc2lvbiAxMDc2MTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0lt
YWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6
OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKSBPVkVSUklERTsKIAogI2lmIFBMQVRGT1JN
KE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKE5TUGFzdGVi
b2FyZCosIERPTUVsZW1lbnQqLCBOU1VSTCosIE5TU3RyaW5nKiwgV2ViQ29yZTo6RnJhbWUqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQqLCBOU1VSTCosIE5TU3RyaW5nKiwg
V2ViQ29yZTo6RnJhbWUqKSBPVkVSUklERTsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRy
YWdFbmRlZCgpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVz
LmNwcAkocmV2aXNpb24gMTA3NjEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjQsNiArMTY0LDE3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFMK
ICAgICByZXR1cm4gcGFzdGVib2FyZC5jb3B5KGZyb21QYXN0ZWJvYXJkKTsKIH0KIAoraW50IFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQoY29uc3QgV1RGOjpTdHJpbmcgJnBhc3Rl
Ym9hcmROYW1lKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKTsKKyAgICByZXR1cm4gcGFzdGVib2FyZC5jaGFuZ2VDb3VudCgpOworfQorCitjb25z
dCBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1bmlxdWVOYW1lKCkKK3sKKyAgICByZXR1
cm4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1lKCk7Cit9CisKIHZvaWQgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIFBsYXRmb3JtUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaAkocmV2aXNpb24gMTA3NjEzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNiArNjcsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGludCBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyB1bmlxdWVOYW1lKCkgT1ZFUlJJ
REU7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVi
b2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RHJhZ0NsaWVudE1hYy5tbQkocmV2aXNpb24gMTA3NjEzKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTI1LDEwICsxMjUsMTAgQEAgc3RhdGljIE5TQXJyYXkgKmFycmF5Rm9yVVJMc1dp
dGhUaXRsZXMoTgogICAgICAgICBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3RpdGxlIF93ZWJr
aXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdXSwgbmlsXTsKIH0KIAotdm9pZCBXZWJEcmFn
Q2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJk
LCBET01FbGVtZW50ICplbGVtZW50LCBOU1VSTCAqVVJMLCBOU1N0cmluZyAqdGl0bGUsIFdlYkNv
cmU6OkZyYW1lKikKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdl
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQgKmVsZW1lbnQsIE5TVVJM
ICpVUkwsIE5TU3RyaW5nICp0aXRsZSwgV2ViQ29yZTo6RnJhbWUqKQogewogICAgIEFTU0VSVChl
bGVtZW50KTsKLSAgICBBU1NFUlQocGFzdGVib2FyZCAmJiBwYXN0ZWJvYXJkID09IFtOU1Bhc3Rl
Ym9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRHJhZ1Bib2FyZF0pOworICAgIEFTU0VSVChwYXN0
ZWJvYXJkTmFtZSA9PSBTdHJpbmcoTlNEcmFnUGJvYXJkKSk7CiAKICAgICBFbGVtZW50KiBjb3Jl
RWxlbWVudCA9IGNvcmUoZWxlbWVudCk7CiAKQEAgLTE1NSw2ICsxNTUsNyBAQCB2b2lkIFdlYkRy
YWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJCiAgICAgbV9wYXN0ZWJvYXJkT3duZXIuYWRv
cHROUyhbW1dLUGFzdGVib2FyZE93bmVyIGFsbG9jXSBpbml0V2l0aEltYWdlOmltYWdlXSk7CiAg
ICAgbV9maWxlUHJvbWlzZU93bmVyLmFkb3B0TlMoWyhXS1Bhc3RlYm9hcmRGaWxlUHJvbWlzZU93
bmVyICopW1dLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXIgYWxsb2NdIGluaXRXaXRoU291cmNl
Om1fcGFzdGVib2FyZE93bmVyLmdldCgpXSk7CiAKKyAgICBOU1Bhc3RlYm9hcmQqIHBhc3RlYm9h
cmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFtZV07CiAg
ICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzLmdldCgpIG93bmVyOm1fcGFzdGVib2Fy
ZE93bmVyLmxlYWtSZWYoKV07ICAgIAogCiAgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0
OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpleHRlbnNpb25dIGZvclR5cGU6TlNGaWxlc1Byb21p
c2VQYm9hcmRUeXBlXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzY0MikKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDEyLTAyLTEzICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmVmYWN0b3IgQ2xpcGJvYXJkTWFjIGNsYXNzIHRvIHVzZSBQbGF0Zm9ybVN0cmF0ZWdp
ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oOiBDaGFuZ2VkIG1ldGhvZHMgc2lnbmF0dXJlIHRv
IHVzZSBuYW1lIGJhc2VkIHBhc3RlYm9hcmQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RHJhZ0NsaWVudC5tbTogRGl0dG8uCisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9y
bURyYWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToK
KyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmg6IEFkZGVkIG5ldyBt
ZXRob2RzLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5t
bToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQpOgorICAgICAg
ICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1bmlxdWVOYW1lKToKKwogMjAxMi0wMi0xMyAgRW5y
aWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgICBSZWZhY3RvciBNYWMg
cGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2YgdGhlIFBhc3RlYm9hcmQgY2xhc3MgdG8gdXNlIFBs
YXRmb3JtIFN0cmF0ZWdpZXMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJEcmFnQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZpc2lvbiAxMDc2MTMpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRl
c3Ryb3llZCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
biBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3
aW5kb3dQb2ludCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3Jl
OjpEcmFnSW1hZ2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnUG9zLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6
OkZyYW1lKiwgYm9vbCBsaW5rRHJhZykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZShOU1Bhc3RlYm9hcmQqLCBET01FbGVtZW50KiwgTlNVUkwqLCBO
U1N0cmluZyosIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRl
Y2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBET01F
bGVtZW50KiwgTlNVUkwqLCBOU1N0cmluZyosIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CiBw
cml2YXRlOgogICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHJldmlzaW9uIDEw
NzYxMykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgV2ViQ29yZTo6RHJhZ1NvdXJjZUFj
dGlvbiBXZWJEcmFnQ2xpZW50Ogogdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24sIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBtb3VzZURvd25Qb2ludCwgV2ViQ29yZTo6Q2xpcGJvYXJkKiBjbGlwYm9h
cmQpCiB7CiAgICAgQVNTRVJUKGNsaXBib2FyZCk7Ci0gICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlv
bjooV2ViRHJhZ1NvdXJjZUFjdGlvbilhY3Rpb24gZnJvbVBvaW50Om1vdXNlRG93blBvaW50IHdp
dGhQYXN0ZWJvYXJkOnN0YXRpY19jYXN0PFdlYkNvcmU6OkNsaXBib2FyZE1hYyo+KGNsaXBib2Fy
ZCktPnBhc3RlYm9hcmQoKV07CisgICAgW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6bV93ZWJWaWV3IHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbjooV2ViRHJhZ1Nv
dXJjZUFjdGlvbilhY3Rpb24gZnJvbVBvaW50Om1vdXNlRG93blBvaW50IHdpdGhQYXN0ZWJvYXJk
OltOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnN0YXRpY19jYXN0PFdlYkNvcmU6OkNs
aXBib2FyZE1hYyo+KGNsaXBib2FyZCktPnBhc3RlYm9hcmROYW1lKCldXTsKIH0KIAogdm9pZCBX
ZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50
UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJk
LCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBX
ZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUgogICAgIFJldGFpblB0cjxXZWJIVE1M
Vmlldz4gdG9wVmlld1Byb3RlY3RvciA9IHRvcEhUTUxWaWV3OwogICAgIAogICAgIFt0b3BIVE1M
VmlldyBfc3RvcEF1dG9zY3JvbGxUaW1lcl07Ci0gICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJk
ID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkTWFjKj4oY2xpcGJvYXJkKS0+cGFzdGVib2FyZCgpOwor
ICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdp
dGhOYW1lOnN0YXRpY19jYXN0PENsaXBib2FyZE1hYyo+KGNsaXBib2FyZCktPnBhc3RlYm9hcmRO
YW1lKCldOwogCiAgICAgTlNJbWFnZSAqZHJhZ05TSW1hZ2UgPSBkcmFnSW1hZ2UuZ2V0KCk7CiAg
ICAgV2ViSFRNTFZpZXcgKnNvdXJjZUhUTUxWaWV3ID0gaHRtbFZpZXcuZ2V0KCk7CkBAIC0xMjAs
MTQgKzEyMCwxNCBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSCiAg
ICAgICAgIFt0b3BIVE1MVmlldyBkcmFnSW1hZ2U6ZHJhZ05TSW1hZ2UgYXQ6YXQgb2Zmc2V0Ok5T
WmVyb1NpemUgZXZlbnQ6ZXZlbnQgcGFzdGVib2FyZDpwYXN0ZWJvYXJkIHNvdXJjZTpzb3VyY2VI
VE1MVmlldyBzbGlkZUJhY2s6WUVTXTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBET01FbGVtZW50KiBl
bGVtZW50LCBOU1VSTCogVVJMLCBOU1N0cmluZyogdGl0bGUsIFdlYkNvcmU6OkZyYW1lKiBmcmFt
ZSkgCit2b2lkIFdlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVtZW50KiBlbGVtZW50LCBOU1VSTCogVVJMLCBO
U1N0cmluZyogdGl0bGUsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkgCiB7Ci0gICAgQVNTRVJUKHBh
c3RlYm9hcmQpOworICAgIEFTU0VSVChwYXN0ZWJvYXJkTmFtZSk7CiAgICAgQVNTRVJUKGVsZW1l
bnQpOwogICAgIFdlYkhUTUxWaWV3ICpzb3VyY2UgPSBnZXRUb3BIVE1MVmlldyhmcmFtZSk7ICAg
ICAgCiAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtlbGVtZW50IHdlYkFyY2hpdmVdOwogICAg
IAotICAgIFtwYXN0ZWJvYXJkIF93ZWJfZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlRm9yRWxlbWVu
dDplbGVtZW50IFVSTDpVUkwgdGl0bGU6dGl0bGUgYXJjaGl2ZTphcmNoaXZlIHNvdXJjZTpzb3Vy
Y2VdOworICAgIFtbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFt
ZV0gX3dlYl9kZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2VGb3JFbGVtZW50OmVsZW1lbnQgVVJMOlVS
TCB0aXRsZTp0aXRsZSBhcmNoaXZlOmFyY2hpdmUgc291cmNlOnNvdXJjZV07CiB9CiAKIHZvaWQg
V2ViRHJhZ0NsaWVudDo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKSAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5oCShyZXZpc2lvbiAxMDc2MTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+IGJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGdldFBhdGhu
YW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGlu
dCBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IFN0cmluZyB1bmlxdWVOYW1lKCkgT1ZFUlJJREU7CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3Ry
aW5nJiB0b1Bhc3RlYm9hcmQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0JKHJldmlzaW9uIDEw
NzYxMykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywxNyBAQCB2b2lkIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29weShjb25zdCBTCiAgICAgcmV0dXJuIHBhc3RlYm9hcmQuY29w
eShmcm9tUGFzdGVib2FyZCk7CiB9CiAKK2ludCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5n
ZUNvdW50KGNvbnN0IFN0cmluZyAmcGFzdGVib2FyZE5hbWUpCit7CisgICAgUGxhdGZvcm1QYXN0
ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiBwYXN0ZWJvYXJk
LmNoYW5nZUNvdW50KCk7Cit9CisKK2NvbnN0IFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnVuaXF1ZU5hbWUoKQoreworICAgIHJldHVybiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVuaXF1ZU5h
bWUoKTsKK30KKwogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpCiB7CiAgICAgUGxhdGZvcm1QYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUp
Owo=
</data>
<flag name="review"
          id="128822"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>