<?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>78768</bug_id>
          
          <creation_ts>2012-02-15 18:03:14 -0800</creation_ts>
          <short_desc>Refactor DragData class to use PlatformStrategies in the Mac implementation</short_desc>
          <delta_ts>2012-02-17 11:54:46 -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>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>557787</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-15 18:03:14 -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 DragData class needs to be redesigned to use a platform strategy that can provide different implementations for WebKit and WebKit2 and remove direct access to the NSPasteboard object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557791</commentid>
    <comment_count>1</comment_count>
      <attachid>127289</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-15 18:12:26 -0800</bug_when>
    <thetext>Created attachment 127289
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557797</commentid>
    <comment_count>2</comment_count>
      <attachid>127289</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-15 18:19:37 -0800</bug_when>
    <thetext>Comment on attachment 127289
patch

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

&gt; Source/WebCore/platform/DragData.h:124
&gt; -    NSPasteboard *pasteboard() { return m_pasteboard.get(); }
&gt; +    const String&amp; pasteboardName() { return m_pasteboardName; }

Yay! one less dependency on NSPasteboard in WebCore.

LGTM. I&apos;ll let someone from Mac port review this patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558332</commentid>
    <comment_count>3</comment_count>
      <attachid>127289</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-16 11:00:36 -0800</bug_when>
    <thetext>Comment on attachment 127289
patch

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

&gt; Source/WebCore/platform/PasteboardStrategy.h:31
&gt; +#include &quot;Color.h&quot;

Having a return type of Color requires only a forward declaration of the Color type, not an include. Files with call sites that actually call the function can include Color.h but the header need not.

&gt; Source/WebCore/platform/PlatformPasteboard.h:29
&gt; +#include &quot;Color.h&quot;

Ditto.

&gt; Source/WebCore/platform/mac/DragDataMac.mm:70
&gt; +    Pasteboard pasteboard(m_pasteboardName);
&gt; +    return pasteboard.canSmartReplace();

I think this would read better without a local variable:

    return Pasteboard(m_pasteboardName).canSmartReplace();

&gt; Source/WebCore/platform/mac/DragDataMac.mm:77
&gt; +    return types.contains(String(NSColorPboardType));

Is the explicit String() needed? I am surprised it is. Did you try compiling without it?

&gt; Source/WebCore/platform/mac/DragDataMac.mm:84
&gt; +    return types.contains(String(NSFilenamesPboardType));

Ditto. Lots more examples of this below.

&gt; Source/WebCore/platform/mac/DragDataMac.mm:90
&gt; +    platformStrategies()-&gt;pasteboardStrategy()-&gt;getPathnamesForType(files, String(NSFilenamesPboardType), m_pasteboardName);

Ditto.

&gt; Source/WebCore/platform/mac/DragDataMac.mm:114
&gt; +    Pasteboard pasteboard(m_pasteboardName);
&gt;      return pasteboard.plainText(frame);

Same comment about not reading better without a local variable.

&gt; Source/WebCore/platform/mac/DragDataMac.mm:136
&gt; +    return types.contains(String(WebArchivePboardType))
&gt; +        || types.contains(String(NSHTMLPboardType))
&gt; +        || types.contains(String(NSFilenamesPboardType))
&gt; +        || types.contains(String(NSTIFFPboardType))
&gt; +        || types.contains(String(NSPDFPboardType))
&gt; +        || types.contains(String(NSURLPboardType))
&gt; +        || types.contains(String(NSRTFDPboardType))
&gt; +        || types.contains(String(NSRTFPboardType))
&gt; +        || types.contains(String(NSStringPboardType))
&gt; +        || types.contains(String(NSColorPboardType))
&gt; +        || types.contains(String(kUTTypePNG));

This function is going to be really slow, creating and destroying lots of String objects. That might not matter, but if there is a chance it does matter we might want to allocate the String objects only once instead of making them every time.

&gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:86
&gt; +    return makeRGBA((int)([color redComponent] * 255.0 + 0.5), (int)([color greenComponent] * 255.0 + 0.5), 
&gt; +                    (int)([color blueComponent] * 255.0 + 0.5), (int)([color alphaComponent] * 255.0 + 0.5));    

I am really puzzled by the * 255 + 0.5 math here. Not at all new to this patch, but also does not seem to be the correct way to convert floating point RGBA colors to RGBA 8/8/8/8 colors.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:181
&gt; +    PlatformPasteboard pasteboard(pasteboardName);
&gt; +    return pasteboard.color();    

Again, probably better without a local variable.

&gt; Source/WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm:144
&gt; +    PlatformPasteboard pasteboard(pasteboardName);
&gt; +    return pasteboard.color();    

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559305</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-17 10:34:09 -0800</bug_when>
    <thetext>Thanks for the review.
I&apos;ve addressed your comments on the inclusion of &quot;Color.h&quot;. I&apos;ve avoided using a local variable for Pasteboard and PlatformPasteboard, also in other places landed as part of a previous patch.

&gt; Is the explicit String() needed? I am surprised it is. Did you try compiling without it?
&gt; 
Yes, it fails to compile without it.

&gt; 
&gt; &gt; Source/WebCore/platform/mac/DragDataMac.mm:136
&gt; &gt; +    return types.contains(String(WebArchivePboardType))
&gt; &gt; +        || types.contains(String(NSHTMLPboardType))
&gt; &gt; +        || types.contains(String(NSFilenamesPboardType))
&gt; &gt; +        || types.contains(String(NSTIFFPboardType))
&gt; &gt; +        || types.contains(String(NSPDFPboardType))
&gt; &gt; +        || types.contains(String(NSURLPboardType))
&gt; &gt; +        || types.contains(String(NSRTFDPboardType))
&gt; &gt; +        || types.contains(String(NSRTFPboardType))
&gt; &gt; +        || types.contains(String(NSStringPboardType))
&gt; &gt; +        || types.contains(String(NSColorPboardType))
&gt; &gt; +        || types.contains(String(kUTTypePNG));
&gt; 
&gt; This function is going to be really slow, creating and destroying lots of String objects. That might not matter, but if there is a chance it does matter we might want to allocate the String objects only once instead of making them every time.

I want to change all this in a separate patch. There are still several places where we need to convert from NSString to String and I want to do it once and for all.
&gt; 
&gt; &gt; Source/WebCore/platform/mac/PlatformPasteboardMac.mm:86
&gt; &gt; +    return makeRGBA((int)([color redComponent] * 255.0 + 0.5), (int)([color greenComponent] * 255.0 + 0.5), 
&gt; &gt; +                    (int)([color blueComponent] * 255.0 + 0.5), (int)([color alphaComponent] * 255.0 + 0.5));    
&gt; 
&gt; I am really puzzled by the * 255 + 0.5 math here. Not at all new to this patch, but also does not seem to be the correct way to convert floating point RGBA colors to RGBA 8/8/8/8 colors.

I&apos;m not sure about this code either, but I didn&apos;t want to change it without fully understanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559398</commentid>
    <comment_count>5</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-02-17 11:54:46 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/108101</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127289</attachid>
            <date>2012-02-15 18:12:26 -0800</date>
            <delta_ts>2012-02-16 11:00:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>usestrategies4.txt</filename>
            <type>text/plain</type>
            <size>21306</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzg2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAyLTE1ICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgRHJhZ0RhdGEg
Y2xhc3MgdG8gdXNlIFBsYXRmb3JtU3RyYXRlZ2llcyBpbiB0aGUgTWFjIGltcGxlbWVudGF0aW9u
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg3NjgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBB
ZGRlZCBuZXcgZXhwb3J0ZWQgbWV0aG9kIG9mIHRoZSBQbGF0Zm9ybVBhc3RlYm9hcmQgY2xhc3Mu
CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdE
YXRhOjpwYXN0ZWJvYXJkTmFtZSk6IEFkZGVkIHBhc3RlYm9hcmROYW1lIGFuZCByZW1vdmVkIHBh
c3RlYm9hcmQuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5Lmg6IEFkZGVk
IGNvbG9yKCkgbWV0aG9kLgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5o
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpjcmVhdGUpOiBDaGFuZ2VkIHRvIHVzZSBwYXN0ZWJvYXJk
TmFtZSgpIG1ldGhvZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW06IEFs
bCB0aGUgbWV0aG9kcyBiZWxvdyBoYXZlIGJlZW4gY2hhbmdlZCB0byB1c2UgcGFzdGVib2FyZE5h
bWUKKyAgICAgICAgYW5kIHRoZSBwYXN0ZWJvYXJkU3RyYXRlZ3koKSBtZXRob2RzLgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdE
YXRhOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRh
aW5zQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6Om51bWJlck9mRmlsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0RhdGE6OmFzRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNQbGFp
blRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjph
c0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpjb2xvcik6IEFkZGVk
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb2xvcigpIG1ldGhvZC4KKwogMjAxMi0wMi0xNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9O
KHIxMDUwNTcpOiBEeW5hbWljYWxseSBjaGFuZ2luZyA8dHNwYW4+IG9mZnNldHMgaXMgYnJva2Vu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTA3ODQ0KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU2MSw2ICs1NjEsNyBAQCBf
X1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDE2c2V0QnVmCiBfX1pON1dlYkNvcmUxOFBs
YXRmb3JtUGFzdGVib2FyZDE2c2V0U3RyaW5nRm9yVHlwZUVSS04zV1RGNlN0cmluZ0VTNF8KIF9f
Wk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTB1bmlxdWVOYW1lRXYKIF9fWk5LN1dlYkNv
cmUxOFBsYXRmb3JtUGFzdGVib2FyZDExY2hhbmdlQ291bnRFdgorX19aTjdXZWJDb3JlMThQbGF0
Zm9ybVBhc3RlYm9hcmQ1Y29sb3JFdgogX19aTjdXZWJDb3JlMThTZWFyY2hQb3B1cE1lbnVNYWND
MUVQTlNfMTVQb3B1cE1lbnVDbGllbnRFCiBfX1pON1dlYkNvcmUxOGlzU3RhcnRPZlBhcmFncmFw
aEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
RQogX19aTjdXZWJDb3JlMThwbHVnaW5TY3JpcHRPYmplY3RFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNf
MTNKU0hUTUxFbGVtZW50RQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCShyZXZp
c2lvbiAxMDc4MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAj
aWZkZWYgX19PQkpDX18gCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KQEAgLTEy
MCw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWluc0ZpbGVzKCkgY29uc3Q7CiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZGaWxlcygpIGNvbnN0OwogI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQoKSB7IHJldHVybiBtX3Bhc3RlYm9hcmQuZ2V0KCk7
IH0KKyAgICBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKCkgeyByZXR1cm4gbV9wYXN0ZWJv
YXJkTmFtZTsgfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQpA
QCAtMTQ2LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgRHJhZ09wZXJhdGlvbiBtX2RyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzazsKICAgICBEcmFnQXBwbGljYXRpb25GbGFncyBtX2FwcGxpY2F0
aW9uRmxhZ3M7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxOU1Bhc3RlYm9hcmQ+
IG1fcGFzdGVib2FyZDsKKyAgICBTdHJpbmcgbV9wYXN0ZWJvYXJkTmFtZTsKICNlbmRpZgogI2lm
IFBMQVRGT1JNKFdJTikKICAgICBEcmFnRGF0YU1hcCBtX2RyYWdEYXRhTWFwOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZFN0cmF0ZWd5LmgJKHJldmlzaW9uIDEw
Nzg0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmRTdHJhdGVneS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRF
R0lFUykKIAorI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
NDQsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSA9IDA7CiAgICAgdmlydHVhbCBpbnQgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIHVuaXF1ZU5hbWUoKSA9IDA7CisgICAg
dmlydHVhbCBDb2xvciBjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSA9IDA7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIGNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwg
Y29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VHlw
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDEwNzg0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtUGFzdGVib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaWZuZGVmIFBsYXRmb3JtUGFzdGVib2FyZF9oCiAjZGVmaW5lIFBsYXRmb3JtUGFzdGVi
b2FyZF9oCiAKKyNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAg
LTQ3LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0
b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKICAg
ICBTdHJpbmcgc3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKTsKICAg
ICBpbnQgY2hhbmdlQ291bnQoKSBjb25zdDsKKyAgICBDb2xvciBjb2xvcigpOwogICAgIAogICAg
IHZvaWQgY29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKTsKICAgICB2b2lkIHNldFR5
cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiAxMDc4NDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0
cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xp
Y3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQogewotICAgIHJldHVybiBDbGlw
Ym9hcmRNYWM6OmNyZWF0ZShEcmFnQW5kRHJvcCwgW2RyYWdEYXRhLT5wYXN0ZWJvYXJkKCkgbmFt
ZV0sIHBvbGljeSwgZnJhbWUpOworICAgIHJldHVybiBDbGlwYm9hcmRNYWM6OmNyZWF0ZShEcmFn
QW5kRHJvcCwgZHJhZ0RhdGEtPnBhc3RlYm9hcmROYW1lKCksIHBvbGljeSwgZnJhbWUpOwogfQog
CiBDbGlwYm9hcmRNYWM6OkNsaXBib2FyZE1hYyhDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUs
IGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xp
Y3ksIEZyYW1lICpmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFn
RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJh
Z0RhdGFNYWMubW0JKHJldmlzaW9uIDEwNzgzMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogI2lt
cG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbXBvcnQgIlBh
c3RlYm9hcmQuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgorI2ltcG9ydCAiUGxh
dGZvcm1TdHJhdGVnaWVzLmgiCiAjaW1wb3J0ICJSYW5nZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00Nyw3ICs0OSw3IEBAIERyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRh
LCBjb24KICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKICAgICAsIG1fYXBwbGljYXRp
b25GbGFncyhmbGFncykKLSAgICAsIG1fcGFzdGVib2FyZChbbV9wbGF0Zm9ybURyYWdEYXRhIGRy
YWdnaW5nUGFzdGVib2FyZF0pCisgICAgLCBtX3Bhc3RlYm9hcmROYW1lKFtbbV9wbGF0Zm9ybURy
YWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pCiB7CiB9CiAKQEAgLTU4LDkyICs2MCw4
MCBAQCBEcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvCiAgICAgLCBtX3Bs
YXRmb3JtRHJhZ0RhdGEoMCkKICAgICAsIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKHNv
dXJjZU9wZXJhdGlvbk1hc2spCiAgICAgLCBtX2FwcGxpY2F0aW9uRmxhZ3MoZmxhZ3MpCi0gICAg
LCBtX3Bhc3RlYm9hcmQoW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6ZHJhZ1N0b3Jh
Z2VOYW1lXSkKKyAgICAsIG1fcGFzdGVib2FyZE5hbWUoZHJhZ1N0b3JhZ2VOYW1lKQogewogfQog
ICAgIAogYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKIHsKLSAgICAvL05l
ZWQgdG8gY2FsbCB0aGlzIHNvIHRoYXQgdGhlIHZhcmlvdXMgUGFzdGVib2FyZCB0eXBlIHN0cmlu
Z3MgYXJlIGludGlhbGlzZWQKLSAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpOwot
ICAgIHJldHVybiBbW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc10gY29udGFpbnNPYmplY3Q6U3Ry
aW5nKFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlKV07CisgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJk
KG1fcGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiBwYXN0ZWJvYXJkLmNhblNtYXJ0UmVwbGFj
ZSgpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQ29sb3JQ
Ym9hcmRUeXBlXTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9h
cmROYW1lKTsKKyAgICByZXR1cm4gdHlwZXMuY29udGFpbnMoU3RyaW5nKE5TQ29sb3JQYm9hcmRU
eXBlKSk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAogewotICAg
IHJldHVybiBbW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNGaWxl
bmFtZXNQYm9hcmRUeXBlXTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bh
c3RlYm9hcmROYW1lKTsKKyAgICByZXR1cm4gdHlwZXMuY29udGFpbnMoU3RyaW5nKE5TRmlsZW5h
bWVzUGJvYXJkVHlwZSkpOwogfQogCiB1bnNpZ25lZCBEcmFnRGF0YTo6bnVtYmVyT2ZGaWxlcygp
IGNvbnN0CiB7Ci0gICAgaWYgKCFbW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc10gY29udGFpbnNP
YmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQ
Ym9hcmRUeXBlXSBjb3VudF07CisgICAgVmVjdG9yPFN0cmluZz4gZmlsZXM7CisgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBl
KGZpbGVzLCBTdHJpbmcoTlNGaWxlbmFtZXNQYm9hcmRUeXBlKSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CisgICAgcmV0dXJuIGZpbGVzLnNpemUoKTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBOU0FycmF5ICpmaWxlbmFt
ZXMgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQ
Ym9hcmRUeXBlXTsKLSAgICBOU0VudW1lcmF0b3IgKmZpbGVFbnVtZXJhdG9yID0gW2ZpbGVuYW1l
cyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAKLSAgICB3aGlsZSAoTlNTdHJpbmcgKmZpbGVuYW1l
ID0gW2ZpbGVFbnVtZXJhdG9yIG5leHRPYmplY3RdKQotICAgICAgICByZXN1bHQuYXBwZW5kKGZp
bGVuYW1lKTsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PmdldFBhdGhuYW1lc0ZvclR5cGUocmVzdWx0LCBTdHJpbmcoTlNGaWxlbmFtZXNQYm9hcmRUeXBl
KSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5U
ZXh0KCkgY29uc3QKIHsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkg
dHlwZXNdOwotICAgIAotICAgIHJldHVybiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQ
Ym9hcmRUeXBlXSAKLSAgICAgICAgfHwgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2Fy
ZFR5cGVdCi0gICAgICAgIHx8IFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVd
Ci0gICAgICAgIHx8IFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVd
Ci0gICAgICAgIHx8IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDptX3Bhc3RlYm9hcmQuZ2V0KCld
OworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOwor
CisgICAgcmV0dXJuIHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKQor
ICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcoTlNSVEZEUGJvYXJkVHlwZSkpCisgICAg
ICAgIHx8IHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1JURlBib2FyZFR5cGUpKQorICAgICAgICB8
fCB0eXBlcy5jb250YWlucyhTdHJpbmcoTlNGaWxlbmFtZXNQYm9hcmRUeXBlKSkKKyAgICAgICAg
fHwgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5zdHJpbmdGb3JU
eXBlKFN0cmluZyhOU1VSTFBib2FyZFR5cGUpLCBtX3Bhc3RlYm9hcmROYW1lKS5sZW5ndGgoKTsK
IH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dChGcmFtZSAqZnJhbWUpIGNvbnN0CiB7
Ci0gICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKFttX3Bhc3RlYm9hcmQuZ2V0KCkgbmFtZV0pOwor
ICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChtX3Bhc3RlYm9hcmROYW1lKTsKICAgICByZXR1cm4g
cGFzdGVib2FyZC5wbGFpblRleHQoZnJhbWUpOwogfQogCiBDb2xvciBEcmFnRGF0YTo6YXNDb2xv
cigpIGNvbnN0CiB7Ci0gICAgTlNDb2xvciAqY29sb3IgPSBbTlNDb2xvciBjb2xvckZyb21QYXN0
ZWJvYXJkOm1fcGFzdGVib2FyZC5nZXQoKV07Ci0gICAgCi0gICAgLy8gVGhlIGNvbG9yIG1heSBu
b3QgYmUgaW4gYW4gUkdCIGNvbG9yc3BhY2UuIFRoaXMgY29tbW9ubHkgb2NjdXJzIHdoZW4gYSBj
b2xvciBpcyAKLSAgICAvLyBkcmFnZ2VkIGZyb20gdGhlIE5TQ29sb3JQYW5lbCBncmF5c2NhbGUg
cGlja2VyLgotICAgIGlmIChbW2NvbG9yIGNvbG9yU3BhY2VdIGNvbG9yU3BhY2VNb2RlbF0gIT0g
TlNSR0JDb2xvclNwYWNlTW9kZWwpCi0gICAgICAgIGNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdD
b2xvclNwYWNlTmFtZTpOU0NhbGlicmF0ZWRSR0JDb2xvclNwYWNlXTsKLSAgICAKLSAgICByZXR1
cm4gbWFrZVJHQkEoKGludCkoW2NvbG9yIHJlZENvbXBvbmVudF0gKiAyNTUuMCArIDAuNSksIChp
bnQpKFtjb2xvciBncmVlbkNvbXBvbmVudF0gKiAyNTUuMCArIDAuNSksIAotICAgICAgICAgICAg
ICAgICAgICAoaW50KShbY29sb3IgYmx1ZUNvbXBvbmVudF0gKiAyNTUuMCArIDAuNSksIChpbnQp
KFtjb2xvciBhbHBoYUNvbXBvbmVudF0gKiAyNTUuMCArIDAuNSkpOwotfQotCi1zdGF0aWMgTlNB
cnJheSAqaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcygpCi17Ci0gICAgc3RhdGljIE5TQXJyYXkg
KnR5cGVzID0gbmlsOwotICAgIGlmICghdHlwZXMpIHsKLSAgICAgICAgdHlwZXMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpTdHJpbmcoV2ViQXJjaGl2ZVBib2FyZFR5cGUpLCBO
U0hUTUxQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUs
IE5TUERGUGJvYXJkVHlwZSwKLSNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECi0gICAgICAgICAg
ICAgICAgIE5TUElDVFBib2FyZFR5cGUsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgTlNVUkxQ
Ym9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJv
YXJkVHlwZSwgTlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07Ci0gICAgICAgIENG
UmV0YWluKHR5cGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGVzOworICAgIHJldHVybiBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNvbG9yKG1fcGFzdGVib2Fy
ZE5hbWUpOwogfQotICAgIAorCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250
ZW50KCkgY29uc3QKIHsKLSAgICBOU011dGFibGVTZXQgKnR5cGVzID0gW05TTXV0YWJsZVNldCBz
ZXRXaXRoQXJyYXk6W21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc11dOwotICAgIFt0eXBlcyBpbnRl
cnNlY3RTZXQ6W05TU2V0IHNldFdpdGhBcnJheTppbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzKCld
XTsKLSAgICByZXR1cm4gW3R5cGVzIGNvdW50XSAhPSAwOworICAgIFZlY3RvcjxTdHJpbmc+IHR5
cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0
VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiB0eXBlcy5jb250YWlu
cyhTdHJpbmcoV2ViQXJjaGl2ZVBib2FyZFR5cGUpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlu
cyhTdHJpbmcoTlNIVE1MUGJvYXJkVHlwZSkpCisgICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKFN0
cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhT
dHJpbmcoTlNUSUZGUGJvYXJkVHlwZSkpCisgICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKFN0cmlu
ZyhOU1BERlBib2FyZFR5cGUpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcoTlNV
UkxQYm9hcmRUeXBlKSkKKyAgICAgICAgfHwgdHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGRFBi
b2FyZFR5cGUpKQorICAgICAgICB8fCB0eXBlcy5jb250YWlucyhTdHJpbmcoTlNSVEZQYm9hcmRU
eXBlKSkKKyAgICAgICAgfHwgdHlwZXMuY29udGFpbnMoU3RyaW5nKE5TU3RyaW5nUGJvYXJkVHlw
ZSkpCisgICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU0NvbG9yUGJvYXJkVHlwZSkp
CisgICAgICAgIHx8IHR5cGVzLmNvbnRhaW5zKFN0cmluZyhrVVRUeXBlUE5HKSk7CiB9CiAgICAg
CiBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSogZnJhbWUsIEZpbGVuYW1lQ29udmVy
c2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKQEAgLTE1NywzOSArMTQ3LDQwIEBAIFN0
cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqIGZyYW1lLCBGaWwKICAgICAodm9pZClmaWxlbmFt
ZVBvbGljeTsKIAogICAgIGlmICh0aXRsZSkgewotICAgICAgICBpZiAoTlNTdHJpbmcgKlVSTFRp
dGxlU3RyaW5nID0gW21fcGFzdGVib2FyZC5nZXQoKSBzdHJpbmdGb3JUeXBlOlN0cmluZyhXZWJV
UkxOYW1lUGJvYXJkVHlwZSldKQorICAgICAgICBTdHJpbmcgVVJMVGl0bGVTdHJpbmcgPSBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUoU3Ry
aW5nKFdlYlVSTE5hbWVQYm9hcmRUeXBlKSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgICAgIGlm
ICghVVJMVGl0bGVTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgKnRpdGxlID0gVVJMVGl0
bGVTdHJpbmc7CiAgICAgfQogICAgIAotICAgIE5TQXJyYXkgKnR5cGVzID0gW21fcGFzdGVib2Fy
ZC5nZXQoKSB0eXBlc107CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0
ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgLy8gRklYTUU6IHVzaW5nIHRoZSBlZGl0b3JDbGllbnQg
dG8gY2FsbCBpbnRvIFdlYktpdCwgZm9yIG5vdywgc2luY2UgCiAgICAgLy8gY2FsbGluZyB3ZWJr
aXRfY2Fub25pY2FsaXplIGZyb20gV2ViQ29yZSBpbnZvbHZlcyBtaWdyYXRpbmcgYSBzaXphYmxl
IGFtb3VudCBvZiAKICAgICAvLyBoZWxwZXIgY29kZSB0aGF0IHNob3VsZCBlaXRoZXIgYmUgZG9u
ZSBpbiBhIHNlcGFyYXRlIHBhdGNoIG9yIGZpZ3VyZWQgb3V0IGluIGFub3RoZXIgd2F5LgogICAg
IAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSkgewotICAg
ICAgICBOU1VSTCAqVVJMRnJvbVBhc3RlYm9hcmQgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6
bV9wYXN0ZWJvYXJkLmdldCgpXTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TVVJM
UGJvYXJkVHlwZSkpKSB7CisgICAgICAgIE5TVVJMICpVUkxGcm9tUGFzdGVib2FyZCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+c3RyaW5nRm9yVHlwZShTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSwgbV9wYXN0ZWJvYXJkTmFt
ZSldOwogICAgICAgICBOU1N0cmluZyAqc2NoZW1lID0gW1VSTEZyb21QYXN0ZWJvYXJkIHNjaGVt
ZV07CiAgICAgICAgIGlmIChbc2NoZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHAiXSB8fCBbc2No
ZW1lIGlzRXF1YWxUb1N0cmluZzpAImh0dHBzIl0pIHsKICAgICAgICAgICAgIHJldHVybiBbZnJh
bWUtPmVkaXRvcigpLT5jbGllbnQoKS0+Y2Fub25pY2FsaXplVVJMKFVSTEZyb21QYXN0ZWJvYXJk
KSBhYnNvbHV0ZVN0cmluZ107CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKFt0eXBl
cyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIE5TU3RyaW5n
ICpVUkxTdHJpbmcgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQ
Ym9hcmRUeXBlXTsKLSAgICAgICAgTlNVUkwgKlVSTCA9IGZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50
KCktPmNhbm9uaWNhbGl6ZVVSTFN0cmluZyhVUkxTdHJpbmcpOworICAgIGlmICh0eXBlcy5jb250
YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpIHsKKyAgICAgICAgTlNVUkwgKlVSTCA9
IGZyYW1lLT5lZGl0b3IoKS0+Y2xpZW50KCktPmNhbm9uaWNhbGl6ZVVSTFN0cmluZyhwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnN0cmluZ0ZvclR5cGUoU3RyaW5n
KE5TU3RyaW5nUGJvYXJkVHlwZSksIG1fcGFzdGVib2FyZE5hbWUpKTsKICAgICAgICAgaWYgKFVS
TCkKICAgICAgICAgICAgIHJldHVybiBbVVJMIGFic29sdXRlU3RyaW5nXTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7
Ci0gICAgICAgIE5TQXJyYXkgKmZpbGVzID0gW21fcGFzdGVib2FyZC5nZXQoKSBwcm9wZXJ0eUxp
c3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV07Ci0gICAgICAgIGlmIChbZmlsZXMgY291
bnRdID09IDEpIHsKLSAgICAgICAgICAgIE5TU3RyaW5nICpmaWxlID0gW2ZpbGVzIG9iamVjdEF0
SW5kZXg6MF07CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU0ZpbGVuYW1lc1Bib2Fy
ZFR5cGUpKSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlczsKKyAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBl
KGZpbGVzLCBTdHJpbmcoTlNGaWxlbmFtZXNQYm9hcmRUeXBlKSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CisgICAgICAgIGlmIChmaWxlcy5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgQk9PTCBpc0Rp
cmVjdG9yeTsKLSAgICAgICAgICAgIGlmIChbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6ZmlsZSBpc0RpcmVjdG9yeTomaXNEaXJlY3RvcnldICYmIGlzRGly
ZWN0b3J5KQorICAgICAgICAgICAgaWYgKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpmaWxlc1swXSBpc0RpcmVjdG9yeTomaXNEaXJlY3RvcnldICYmIGlz
RGlyZWN0b3J5KQogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgICAg
IHJldHVybiBbZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+Y2Fub25pY2FsaXplVVJMKFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6ZmlsZV0pIGFic29sdXRlU3RyaW5nXTsKKyAgICAgICAgICAgIHJl
dHVybiBbZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+Y2Fub25pY2FsaXplVVJMKFtOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6ZmlsZXNbMF1dKSBhYnNvbHV0ZVN0cmluZ107CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCkBAIC0xOTgsNyArMTg5LDcgQEAgU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFt
ZSogZnJhbWUsIEZpbAogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjph
c0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UsIGJvb2wgYWxs
b3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBjb25zdAogewotICAgIFBhc3RlYm9h
cmQgcGFzdGVib2FyZChbbV9wYXN0ZWJvYXJkLmdldCgpIG5hbWVdKTsKKyAgICBQYXN0ZWJvYXJk
IHBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgcmV0dXJuIHBhc3RlYm9h
cmQuZG9jdW1lbnRGcmFnbWVudChmcmFtZSwgcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBs
YWluVGV4dCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDEwNzg0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTczLDYgKzczLDE5IEBAIFN0cmluZyBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVuaXF1ZU5h
bWUoKQogICAgIHJldHVybiBbW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aFVuaXF1ZU5hbWVd
IG5hbWVdOwogfQogCitDb2xvciBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmNvbG9yKCkKK3sKKyAgICBO
U0NvbG9yICpjb2xvciA9IFtOU0NvbG9yIGNvbG9yRnJvbVBhc3RlYm9hcmQ6bV9wYXN0ZWJvYXJk
LmdldCgpXTsKKyAgICAKKyAgICAvLyBUaGUgY29sb3IgbWF5IG5vdCBiZSBpbiBhbiBSR0IgY29s
b3JzcGFjZS4gVGhpcyBjb21tb25seSBvY2N1cnMgd2hlbiBhIGNvbG9yIGlzIAorICAgIC8vIGRy
YWdnZWQgZnJvbSB0aGUgTlNDb2xvclBhbmVsIGdyYXlzY2FsZSBwaWNrZXIuCisgICAgaWYgKFtb
Y29sb3IgY29sb3JTcGFjZV0gY29sb3JTcGFjZU1vZGVsXSAhPSBOU1JHQkNvbG9yU3BhY2VNb2Rl
bCkKKyAgICAgICAgY29sb3IgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TQ2Fs
aWJyYXRlZFJHQkNvbG9yU3BhY2VdOworICAgIAorICAgIHJldHVybiBtYWtlUkdCQSgoaW50KShb
Y29sb3IgcmVkQ29tcG9uZW50XSAqIDI1NS4wICsgMC41KSwgKGludCkoW2NvbG9yIGdyZWVuQ29t
cG9uZW50XSAqIDI1NS4wICsgMC41KSwgCisgICAgICAgICAgICAgICAgICAgIChpbnQpKFtjb2xv
ciBibHVlQ29tcG9uZW50XSAqIDI1NS4wICsgMC41KSwgKGludCkoW2NvbG9yIGFscGhhQ29tcG9u
ZW50XSAqIDI1NS4wICsgMC41KSk7ICAgIAorfQorCiB2b2lkIFBsYXRmb3JtUGFzdGVib2FyZDo6
Y29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkKQogewogICAgIE5TUGFzdGVib2FyZCog
cGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOmZyb21QYXN0ZWJv
YXJkXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzg2MikKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAyLTE1ICBF
bnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgRHJh
Z0RhdGEgY2xhc3MgdG8gdXNlIFBsYXRmb3JtU3RyYXRlZ2llcyBpbiB0aGUgTWFjIGltcGxlbWVu
dGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Nzg3NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDogQWRk
ZWQgY29sb3IoKSBtZXRob2QuCisgICAgICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Y29sb3IpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmg6CisKIDIwMTItMDItMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6
OmZvcmNlUmVwYWludApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAko
cmV2aXNpb24gMTA3ODQ0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiAr
MTc1LDEyIEBAIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVuaXF1ZU5hbWUKICAgICBy
ZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1lKCk7CiB9CiAKK0NvbG9yIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6Y29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3sK
KyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CisgICAg
cmV0dXJuIHBhc3RlYm9hcmQuY29sb3IoKTsgICAgCit9CisKIHZvaWQgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIFBsYXRmb3JtUGFzdGVib2FyZCBw
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaAkocmV2aXNpb24gMTA3ODQ0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjksNiArNjksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIHN0cmluZ0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBpbnQgY2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHJpbmcgdW5pcXVlTmFtZSgp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29sb3IgY29sb3IoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkgT1ZFUlJJREU7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNvcHko
Y29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKSBPVkVSUklE
RTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzg2MikKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAy
LTE1ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0
b3IgRHJhZ0RhdGEgY2xhc3MgdG8gdXNlIFBsYXRmb3JtU3RyYXRlZ2llcyBpbiB0aGUgTWFjIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg3NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oOiBBZGRlZCBjb2xv
cigpIG1ldGhvZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXMubW06CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvbG9yKToKKwogMjAxMi0w
Mi0xNSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFj
dG9yIENsaXBib2FyZE1hYyBjbGFzcyB0byB1c2UgUGxhdGZvcm1TdHJhdGVnaWVzLgpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmgJKHJldmlzaW9uIDEwNzg0NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw2ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGludCBjaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyB1bmlxdWVOYW1lKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpDb2xvciBjb2xvcihjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKSBPVkVSUklERTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY29weShj
b25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpIE9WRVJSSURF
OwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQkocmV2aXNpb24gMTA3ODQ0KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzgsNiArMTM4LDEyIEBAIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnVuaXF1ZU5hbWUKICAgICByZXR1cm4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1lKCk7
CiB9CiAKK0NvbG9yIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29sb3IoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0
ZWJvYXJkTmFtZSk7CisgICAgcmV0dXJuIHBhc3RlYm9hcmQuY29sb3IoKTsgICAgCit9CisKIHZv
aWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIFBs
YXRmb3JtUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsK
</data>
<flag name="review"
          id="129381"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>