<?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>189252</bug_id>
          
          <creation_ts>2018-09-03 16:53:12 -0700</creation_ts>
          <short_desc>Move SystemPreview code from WebKitAdditions to WebKit</short_desc>
          <delta_ts>2018-09-05 09:50:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>darin</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1456236</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-09-03 16:53:12 -0700</bug_when>
    <thetext>Move SystemPreview code from WebKitAdditions to WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456237</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-03 16:53:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/44080245&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456239</commentid>
    <comment_count>2</comment_count>
      <attachid>348796</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-09-03 16:59:06 -0700</bug_when>
    <thetext>Created attachment 348796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456242</commentid>
    <comment_count>3</comment_count>
      <attachid>348796</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-03 17:36:53 -0700</bug_when>
    <thetext>Comment on attachment 348796
Patch

rs=me

You might be intending to remove these in a separate patch, but in any case, it looks like there&apos;s some internal testing support that we don&apos;t need anymore:

  Internals::systemPreviewRelType
  Internals::isSystemPreviewLink
  Internals::isSystemPreviewImage

…as well as its usages in a few LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456243</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-09-03 17:41:21 -0700</bug_when>
    <thetext>You&apos;re right, but just the rel type one should go. The others are still useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456244</commentid>
    <comment_count>5</comment_count>
      <attachid>348796</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2018-09-03 17:41:27 -0700</bug_when>
    <thetext>Comment on attachment 348796
Patch

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

&gt; Source/WebCore/platform/MIMETypeRegistry.cpp:735
&gt; +const HashSet&lt;String, ASCIICaseInsensitiveHash&gt;&amp; MIMETypeRegistry::getSystemPreviewMIMETypes()
&gt; +{
&gt; +    if (!systemPreviewMIMETypes)
&gt; +        initializeSystemPreviewMIMETypes();
&gt; +    return *systemPreviewMIMETypes;
&gt; +}
&gt; +
&gt; +bool MIMETypeRegistry::isSystemPreviewMIMEType(const String&amp; mimeType)
&gt; +{
&gt; +    if (mimeType.isEmpty())
&gt; +        return false;
&gt; +    return getSystemPreviewMIMETypes().contains(mimeType);
&gt; +}

The more common / &quot;modern&quot; idiom for something like this would be to have getSystemPreviewMIMETypes() contain something like:

static NeverDestroyed&lt;HashSet&lt;String, ASCIICaseInsensitiveHash&gt;&gt; systemPreviewMIMETypes = std::initializer_list&lt;String&gt; { &quot;model/vnd.usdz+zip&quot;, ... };
return systemPreviewMIMETypes;

But since that is not idiomatic in this file, that could be left to a follow up cleanup.

&gt; Source/WebCore/rendering/RenderThemeIOS.mm:1869
&gt; +    static NSBundle *arKitBundle;
&gt; +    static dispatch_once_t onceToken;
&gt; +    dispatch_once(&amp;onceToken, ^{
&gt; +#if PLATFORM(IOS_SIMULATOR)
&gt; +        dlopen(&quot;/System/Library/PrivateFrameworks/AssetViewer.framework/AssetViewer&quot;, RTLD_NOW);
&gt; +        arKitBundle = [NSBundle bundleForClass:NSClassFromString(@&quot;ASVThumbnailView&quot;)];
&gt; +#else
&gt; +        arKitBundle = [NSBundle bundleWithURL:[NSURL fileURLWithPath:@&quot;/System/Library/PrivateFrameworks/AssetViewer.framework&quot;]];
&gt; +#endif
&gt; +    });
&gt; +
&gt; +    return arKitBundle;

Is this actually called from different threads? If not, this doesn&apos;t need to be a dispatch once and can just be a normal static initialization.

&gt; Source/WebCore/rendering/RenderThemeIOS.mm:1887
&gt; +};

Unnecessary trailing semicolon.

&gt; Source/WebCore/rendering/RenderThemeIOS.mm:1892
&gt; +    static CGPDFPageRef logoPage;
&gt; +    static dispatch_once_t onceToken;

Same question about threads here.

&gt; Source/WebCore/rendering/RenderThemeIOS.mm:1898
&gt; +};

Unnecessary trailing semicolon.

&gt; Source/WebKit/UIProcess/Cocoa/SystemPreviewControllerCocoa.mm:47
&gt; +static String getUTIForMIMEType(const String&amp; mimeType)

This function feels a bit weird. It&apos;s only caller always passes something that is a SystemPreviewMIMEType and really wants an NSString.  Could this, at least for now while there is only one UTI, just be a function to get the  &quot;SystemPreview&quot; UTI as an NSString?

&gt; Source/WebKit/UIProcess/ios/WKSystemPreviewView.mm:53
&gt; +static String getUTIForMIMEType(const String&amp; mimeType)

This should return an NSString.

&gt; Source/WebKit/UIProcess/ios/WKSystemPreviewView.mm:107
&gt;      NSString *contentType;
&gt; -#if USE(APPLE_INTERNAL_SDK)
&gt; -    contentType = WebKit::getUTIForMIMEType(_mimeType.get());
&gt; -#else
&gt; -    NSString *extension = [[_suggestedFilename.get() pathExtension] lowercaseString];
&gt; -    RetainPtr&lt;CFStringRef&gt; contentTypeCF = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, nil));
&gt; -    contentType = (NSString *)contentTypeCF.get();
&gt; -#endif
&gt; +    contentType = getUTIForMIMEType(_mimeType.get());

This can be on one line now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456418</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2018-09-04 12:38:49 -0700</bug_when>
    <thetext>Committed r235626: &lt;https://trac.webkit.org/changeset/235626&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1456745</commentid>
    <comment_count>7</comment_count>
      <attachid>348796</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-09-05 09:50:46 -0700</bug_when>
    <thetext>Comment on attachment 348796
Patch

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

&gt;&gt; Source/WebCore/platform/MIMETypeRegistry.cpp:735
&gt;&gt; +}
&gt; 
&gt; The more common / &quot;modern&quot; idiom for something like this would be to have getSystemPreviewMIMETypes() contain something like:
&gt; 
&gt; static NeverDestroyed&lt;HashSet&lt;String, ASCIICaseInsensitiveHash&gt;&gt; systemPreviewMIMETypes = std::initializer_list&lt;String&gt; { &quot;model/vnd.usdz+zip&quot;, ... };
&gt; return systemPreviewMIMETypes;
&gt; 
&gt; But since that is not idiomatic in this file, that could be left to a follow up cleanup.

Slightly better to add the &quot;&quot;_s suffixes so we get the ASCIILiteral optimization when creating those WTF::String objects.

&gt;&gt; Source/WebKit/UIProcess/ios/WKSystemPreviewView.mm:53
&gt;&gt; +static String getUTIForMIMEType(const String&amp; mimeType)
&gt; 
&gt; This should return an NSString.

WebKit coding style specifies that we don’t use the word &quot;get&quot; in the name of functions like this one. Maybe call this preferredUTIForMIMEType?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348796</attachid>
            <date>2018-09-03 16:59:06 -0700</date>
            <delta_ts>2018-09-03 17:36:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189252-20180904095904.patch</filename>
            <type>text/plain</type>
            <size>18360</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTI1NDQyMTFjZTMwYTA5
NjYzNmFhNGJmNWY3MzdiNmVmYzAxYWNiNC4uMjgxZDQ1MDQ2NzUxZjcwMjIwYTgxYmM3ODY2ZDVi
ZDVkMTBhZmRkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE4LTA5LTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFN5c3RlbVByZXZpZXcg
Y29kZSBmcm9tIFdlYktpdEFkZGl0aW9ucyB0byBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4OTI1MgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNDQwODAyNDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSB0aGUgV2ViS2l0QWRkaXRpb25zIGNvZGUgaW50byBXZWJLaXQvV2ViQ29yZS4K
KworICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnJlbExpc3QgY29uc3QpOiBMb29rIGZvciAiYXIiLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmlzU3lzdGVtUHJldmlld0xpbmsgY29u
c3QpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOiBB
ZGQgYSBjb3VwbGUgb2YgbmV3IHN0YXRpYyBtZXRob2RzCisgICAgICAgIGZvciBTeXN0ZW0gUHJl
dmlldyBNSU1FIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6ZVN5c3RlbVByZXZp
ZXdNSU1FVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0U3lz
dGVtUHJldmlld01JTUVUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N5c3RlbVByZXZpZXdNSU1FVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVS
ZWdpc3RyeS5oOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tOiBMb2Fk
IHRoZSBBUktpdCBhcnR3b3JrIGZyb20gdGhlIGZyYW1ld29yay4KKyAgICAgICAgKFdlYkNvcmU6
OmFyS2l0QnVuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRBUktpdFBERlBhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6c3lzdGVtUHJldmlld0xvZ28pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKwogMjAxOC0wOS0wMyAgQW5k
eSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW1BheW1lbnQgUmVxdWVzdF0g
SW1wbGVtZW50IHRoZSBNZXJjaGFudFZhbGlkYXRpb25FdmVudCBjb25zdHJ1Y3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpp
bmRleCBhNDM5N2QyZmQ2NDRmZmQxMWUyMDdhMjk5ZTQzOTJjNDkzMjE3YTA1Li4yNjM1MjFlNDI3
ZWNiYjE0OTlhMzM2NDM3ZGQ5ODFjM2IxN2M4NjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBA
CisyMDE4LTA5LTAzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBN
b3ZlIFN5c3RlbVByZXZpZXcgY29kZSBmcm9tIFdlYktpdEFkZGl0aW9ucyB0byBXZWJLaXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4OTI1MgorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNDQwODAyNDU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgV2ViS2l0QWRkaXRpb25zIGNvZGUgaW50
byBXZWJLaXQvV2ViQ29yZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2
aWV3Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAoZ2V0VVRJRm9yTUlNRVR5cGUpOiBIZWxw
ZXIgdG8gZ2V0IHRoZSBzeXN0ZW0gVVRJIGZvciBVU0RaIGZpbGVzLgorICAgICAgICAoLVtfV0tQ
cmV2aWV3Q29udHJvbGxlckRhdGFTb3VyY2UgcHJldmlld0NvbnRyb2xsZXI6cHJldmlld0l0ZW1B
dEluZGV4Ol0pOgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dLV2ViVmlld0NvbnRlbnRQ
cm92aWRlclJlZ2lzdHJ5Lm1tOiBVc2UgdGhlIG5ldyBtZXRob2RzCisgICAgICAgIGluIE1JTUVU
eXBlUmVnaXN0cnkuCisgICAgICAgICgtW1dLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5
IGluaXRXaXRoQ29uZmlndXJhdGlvbjpdKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9TeXN0ZW1Q
cmV2aWV3Q29udHJvbGxlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTeXN0ZW1QcmV2
aWV3Q29udHJvbGxlcjo6Y2FuUHJldmlldyBjb25zdCk6CisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dLU3lzdGVtUHJldmlld1ZpZXcubW06CisgICAgICAgIChnZXRVVElGb3JNSU1FVHlwZSk6
IFNpbWlsYXIgaGVscGVyIHRvIGFib3ZlLgorICAgICAgICAoLVtXS1N5c3RlbVByZXZpZXdWaWV3
IHdlYl9zZXRDb250ZW50UHJvdmlkZXJEYXRhOnN1Z2dlc3RlZEZpbGVuYW1lOl0pOgorCiAyMDE4
LTA5LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ0ZOZXR3
b3JrXSBVcGRhdGUgQ0ZOZXR3b3JrIFNQSSB1c2UgdG8gdXNlIENGTmV0d29ya1NQSS5oIG1vcmUg
Y29uc2lzdGVudGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCmlu
ZGV4IGMzMTBjZjIzZTdhZDBhNTg1MjBmMGViN2Q5MDMwNjg3NWE5YzE5NjAuLjI3YzBhMGQyM2E3
ZjA1NzgxZWU0MDJiM2UxMTc2YTU5YzJkOTQ5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCkBAIC01MywxMCArNTMsNiBAQAogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi0j
aWYgVVNFKFNZU1RFTV9QUkVWSUVXKSAmJiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9y
dCA8V2ViS2l0QWRkaXRpb25zL1N5c3RlbVByZXZpZXdEZXRlY3Rpb24uY3BwPgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEhUTUxB
bmNob3JFbGVtZW50KTsKQEAgLTMxNCwxMiArMzEwLDcgQEAgRE9NVG9rZW5MaXN0JiBIVE1MQW5j
aG9yRWxlbWVudDo6cmVsTGlzdCgpIGNvbnN0CiAgICAgaWYgKCFtX3JlbExpc3QpIHsKICAgICAg
ICAgbV9yZWxMaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxET01Ub2tlbkxpc3Q+KGNvbnN0X2Nhc3Q8
SFRNTEFuY2hvckVsZW1lbnQmPigqdGhpcyksIEhUTUxOYW1lczo6cmVsQXR0ciwgW10oRG9jdW1l
bnQmLCBTdHJpbmdWaWV3IHRva2VuKSB7CiAjaWYgVVNFKFNZU1RFTV9QUkVWSUVXKQotI2lmIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCi0gICAgICAgICAgICBhdXRvIHN5c3RlbVByZXZpZXdSZWxW
YWx1ZSA9IGdldFN5c3RlbVByZXZpZXdSZWxWYWx1ZSgpOwotI2Vsc2UKLSAgICAgICAgICAgIGF1
dG8gc3lzdGVtUHJldmlld1JlbFZhbHVlID0gInN5c3RlbS1wcmV2aWV3Il9zOwotI2VuZGlmCi0g
ICAgICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh0b2tlbiwgIm5vcmVmZXJy
ZXIiKSB8fCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCAibm9vcGVuZXIiKSB8fCBlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKHRva2VuLCBzeXN0ZW1QcmV2aWV3UmVsVmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICJub3JlZmVycmVyIikg
fHwgZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh0b2tlbiwgIm5vb3BlbmVyIikgfHwgZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZSh0b2tlbiwgImFyIik7CiAjZWxzZQogICAgICAgICAgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UodG9rZW4sICJub3JlZmVycmVyIikgfHwgZXF1YWxJZ25vcmlu
Z0FTQ0lJQ2FzZSh0b2tlbiwgIm5vb3BlbmVyIik7CiAjZW5kaWYKQEAgLTM4MywxMSArMzc0LDcg
QEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNTeXN0ZW1QcmV2aWV3TGluaygpIGNvbnN0CiAg
ICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnN5c3RlbVBy
ZXZpZXdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotI2lmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCi0gICAgYXV0byBzeXN0ZW1QcmV2aWV3UmVsVmFsdWUgPSBnZXRTeXN0ZW1Q
cmV2aWV3UmVsVmFsdWUoKTsKLSNlbHNlCi0gICAgYXV0byBzeXN0ZW1QcmV2aWV3UmVsVmFsdWUg
PSBTdHJpbmcgeyAic3lzdGVtLXByZXZpZXciX3MgfTsKLSNlbmRpZgorICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IHN5c3RlbVByZXZpZXdSZWxWYWx1ZSgiYXIiLCBBdG9t
aWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKIAogICAgIGlmICghcmVsTGlzdCgpLmNv
bnRhaW5zKHN5c3RlbVByZXZpZXdSZWxWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTM5NSw3ICszODIsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc1N5c3RlbVByZXZpZXdM
aW5rKCkgY29uc3QKICAgICBpZiAoYXV0byogY2hpbGQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpKSB7
CiAgICAgICAgIGlmIChpczxIVE1MSW1hZ2VFbGVtZW50PihjaGlsZCkgfHwgaXM8SFRNTFBpY3R1
cmVFbGVtZW50PihjaGlsZCkpIHsKICAgICAgICAgICAgIGF1dG8gbnVtQ2hpbGRyZW4gPSBjaGls
ZEVsZW1lbnRDb3VudCgpOwotICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBvbmx5IGJlIDEu
CisgICAgICAgICAgICAvLyBGSVhNRTogV2UndmUgZG9jdW1lbnRlZCB0aGF0IGl0IHNob3VsZCBi
ZSB0aGUgb25seSBjaGlsZCwgYnV0IHNvbWUgZWFybHkgZGVtb3MgaGF2ZSB0d28gY2hpbGRyZW4u
CiAgICAgICAgICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gPT0gMSB8fCBudW1DaGlsZHJlbiA9PSAy
OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TUlNRVR5cGVSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAppbmRleCA3NmM2M2I3NjE4NGJmNzZlYjBhYjA3ZmUxMDNiYjY4ODk2NDYwMDFh
Li44MjliZjBkZTMxZjJmZGQ5OGU2MDk4NjhjZWRiNDQzZWQzZDczOTkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcApAQCAtNjQsNiArNjQsMTAgQEAg
c3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+KiBzdXBwb3J0
ZWRNZWRpYU1JTUVUeXBlczsKIHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5z
aXRpdmVIYXNoPiogcGRmTUlNRVR5cGVzOwogc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNh
c2VJbnNlbnNpdGl2ZUhhc2g+KiB1bnN1cHBvcnRlZFRleHRNSU1FVHlwZXM7CiAKKyNpZiBVU0Uo
U1lTVEVNX1BSRVZJRVcpCitzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4qIHN5c3RlbVByZXZpZXdNSU1FVHlwZXM7CisjZW5kaWYKKwogc3RhdGljIHZvaWQg
aW5pdGlhbGl6ZVN1cHBvcnRlZEltYWdlTUlNRVR5cGVzKCkKIHsKICAgICBzdXBwb3J0ZWRJbWFn
ZVJlc291cmNlTUlNRVR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNp
dGl2ZUhhc2g+OwpAQCAtNzAwLDYgKzcwNCwzNyBAQCBjb25zdCBTdHJpbmcmIGRlZmF1bHRNSU1F
VHlwZSgpCiAgICAgcmV0dXJuIGRlZmF1bHRNSU1FVHlwZTsKIH0KIAorI2lmIFVTRShTWVNURU1f
UFJFVklFVykKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVTeXN0ZW1QcmV2aWV3TUlNRVR5cGVzKCkK
K3sKKyAgICBjb25zdCBjaGFyKiBjb25zdCB0eXBlc1tdID0geworICAgICAgICAvLyBUaGUgb2Zm
aWNpYWwgdHlwZTogaHR0cHM6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMv
bW9kZWwvdm5kLnVzZHoremlwCisgICAgICAgICJtb2RlbC92bmQudXNkeit6aXAiLAorICAgICAg
ICAvLyBVbm9mZmljaWFsLCBidXQgc3VwcG9ydGVkIGJlY2F1c2Ugd2UgZG9jdW1lbnRlZCB0aGVt
LgorICAgICAgICAibW9kZWwvdXNkIiwKKyAgICAgICAgIm1vZGVsL3ZuZC5waXhhci51c2QiCisg
ICAgfTsKKworICAgIHN5c3RlbVByZXZpZXdNSU1FVHlwZXMgPSBuZXcgSGFzaFNldDxTdHJpbmcs
IEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD47CisgICAgZm9yIChhdXRvJiB0eXBlIDogdHlwZXMp
CisgICAgICAgIHN5c3RlbVByZXZpZXdNSU1FVHlwZXMtPmFkZCh0eXBlKTsKK30KKworY29uc3Qg
SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIE1JTUVUeXBlUmVnaXN0
cnk6OmdldFN5c3RlbVByZXZpZXdNSU1FVHlwZXMoKQoreworICAgIGlmICghc3lzdGVtUHJldmll
d01JTUVUeXBlcykKKyAgICAgICAgaW5pdGlhbGl6ZVN5c3RlbVByZXZpZXdNSU1FVHlwZXMoKTsK
KyAgICByZXR1cm4gKnN5c3RlbVByZXZpZXdNSU1FVHlwZXM7Cit9CisKK2Jvb2wgTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTeXN0ZW1QcmV2aWV3TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGdldFN5c3RlbVByZXZpZXdNSU1FVHlwZXMoKS5jb250YWlucyhtaW1lVHlwZSk7
Cit9CisjZW5kaWYKKwogI2lmICFVU0UoQ1VSTCkKIAogLy8gRklYTUU6IE5vdCBzdXJlIHdoeSBp
dCBtYWtlcyBzZW5zZSB0byBoYXZlIGEgY3Jvc3MtcGxhdGZvcm0gZnVuY3Rpb24gd2hlbiBvbmx5
IENVUkwgaGFzIHRoZSBjb25jZXB0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9NSU1FVHlwZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmgKaW5kZXggOTI0NDk3M2UxZGRmNGFkMmEwYjM1ZDU5NGQ0NTY3ZmEyOTMxNDBlMC4u
OGQ1YTBkZGM1Yzk0NjRjMGU1NTg2OWIxMWMyZGIyMzdmYWM0YzNmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaApAQCAtODgsNiArODgsMTAgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBib29sIGlzUG9zdFNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzUERGT3JQb3N0U2NyaXB0
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CiAKKyNpZiBVU0UoU1lTVEVNX1BSRVZJ
RVcpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgaXNTeXN0ZW1QcmV2aWV3TUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisjZW5kaWYKKwogICAgIC8vIENoZWNrIHRvIHNl
ZSBpZiBhIE1JTUUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVpbmcgc2hvd24gaW5zaWRlIGEgcGFn
ZS4KICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZSgpLCBpc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoKSwKICAgICAvLyBpc1N1cHBvcnRlZE1l
ZGlhTUlNRVR5cGUoKSwgaXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoKSwgaXNTdXBwb3J0
ZWRKU09OTUlNRVR5cGUoKSwKQEAgLTExNCw2ICsxMTgsMTAgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIGNvbnN0IHN0YXRpYyBIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiYgZ2V0UERGTUlNRVR5cGVzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qgc3Rh
dGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnZXRVbnN1cHBv
cnRlZFRleHRNSU1FVHlwZXMoKTsKIAorI2lmIFVTRShTWVNURU1fUFJFVklFVykKKyAgICBXRUJD
T1JFX0VYUE9SVCBjb25zdCBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0
aXZlSGFzaD4mIGdldFN5c3RlbVByZXZpZXdNSU1FVHlwZXMoKTsKKyNlbmRpZgorCiAgICAgLy8g
RklYTUU6IFdlYktpdCBjb2Rpbmcgc3R5bGUgc2F5cyB3ZSBzaG91bGQgbm90IGhhdmUgdGhlIHdv
cmQgImdldCIgaW4gdGhlIG5hbWUgb2YgdGhpcyBmdW5jdGlvbi4KICAgICAvLyBGSVhNRTogVW5j
bGVhciB3aGF0IHRoZSBjb25jZXB0IG9mIGEgbm9ybWFsaXplZCBNSU1FIHR5cGUgaXM7IGN1cnJl
bnRseSBpdCdzIGEgcGxhdGZvcm0tc3BlY2lmaWMgbm90aW9uLgogICAgIHN0YXRpYyBTdHJpbmcg
Z2V0Tm9ybWFsaXplZE1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IGI4NjI3MzQxMjZmYmQxZDUzZWRlMjVmOWYx
MzgxY2RkNjJjNDQxN2EuLjI3Mzc4ODIxZTY2OTcwZmJiYjQ5NDQxMzk1YWRhYTUzNDg5NWIzOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KQEAgLTc3LDEw
ICs3Nyw2IEBACiAjaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KICNpbXBvcnQgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIAotI2lmIFVTRShTWVNURU1fUFJFVklFVykgJiYgVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9TeXN0ZW1QcmV2aWV3QXJ0d29yay5j
cHA+Ci0jZW5kaWYKLQogU09GVF9MSU5LX0ZSQU1FV09SSyhVSUtpdCkKIFNPRlRfTElOS19DTEFT
UyhVSUtpdCwgVUlBcHBsaWNhdGlvbikKIFNPRlRfTElOS19DTEFTUyhVSUtpdCwgVUlDb2xvcikK
QEAgLTE4NTcsNiArMTg1Myw1MCBAQCBTdHJpbmcgUmVuZGVyVGhlbWVJT1M6OmV4dHJhRGVmYXVs
dFN0eWxlU2hlZXQoKQogI2VuZGlmCiAKICNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCitzdGF0aWMg
TlNCdW5kbGUgKmFyS2l0QnVuZGxlKCkKK3sKKyAgICBzdGF0aWMgTlNCdW5kbGUgKmFyS2l0QnVu
ZGxlOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNo
X29uY2UoJm9uY2VUb2tlbiwgXnsKKyNpZiBQTEFURk9STShJT1NfU0lNVUxBVE9SKQorICAgICAg
ICBkbG9wZW4oIi9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy9Bc3NldFZpZXdlci5m
cmFtZXdvcmsvQXNzZXRWaWV3ZXIiLCBSVExEX05PVyk7CisgICAgICAgIGFyS2l0QnVuZGxlID0g
W05TQnVuZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiQVNWVGh1bWJuYWls
VmlldyIpXTsKKyNlbHNlCisgICAgICAgIGFyS2l0QnVuZGxlID0gW05TQnVuZGxlIGJ1bmRsZVdp
dGhVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJh
bWV3b3Jrcy9Bc3NldFZpZXdlci5mcmFtZXdvcmsiXV07CisjZW5kaWYKKyAgICB9KTsKKworICAg
IHJldHVybiBhcktpdEJ1bmRsZTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR1BERlBhZ2VSZWY+
IGxvYWRBUktpdFBERlBhZ2UoTlNTdHJpbmcgKmltYWdlTmFtZSkKK3sKKyAgICBOU1VSTCAqdXJs
ID0gW2FyS2l0QnVuZGxlKCkgVVJMRm9yUmVzb3VyY2U6aW1hZ2VOYW1lIHdpdGhFeHRlbnNpb246
QCJwZGYiXTsKKworICAgIGlmICghdXJsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gZG9jdW1lbnQgPSBhZG9wdENGKENHUERGRG9jdW1lbnRDcmVhdGVXaXRoVVJMKChDRlVS
TFJlZil1cmwpKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGlmICghQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoZG9jdW1lbnQuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBDR1BERkRvY3VtZW50R2V0
UGFnZShkb2N1bWVudC5nZXQoKSwgMSk7Cit9OworCitzdGF0aWMgQ0dQREZQYWdlUmVmIHN5c3Rl
bVByZXZpZXdMb2dvKCkKK3sKKyAgICBzdGF0aWMgQ0dQREZQYWdlUmVmIGxvZ29QYWdlOworICAg
IHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2VUb2tlbiwgXnsKKyAgICAgICAgbG9nb1BhZ2UgPSBsb2FkQVJLaXRQREZQYWdlKEAiQVJLaXRC
YWRnZSIpLmxlYWtSZWYoKTsKKyAgICB9KTsKKworICAgIHJldHVybiBsb2dvUGFnZTsKK307CisK
IHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
ICAgICBzdGF0aWMgY29uc3QgaW50IGxhcmdlQmFkZ2VEaW1lbnNpb24gPSA3MDsKQEAgLTE5OTAs
NyArMjAzMCw2IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdl
KEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgQ0dDb250ZXh0U2NhbGVD
VE0oY3R4LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGN0eCwgYmFkZ2VSZWN0LCBj
Z0ltYWdlLmdldCgpKTsKIAotI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAgICAgaWYgKGF1
dG8gbG9nbyA9IHN5c3RlbVByZXZpZXdMb2dvKCkpIHsKICAgICAgICAgQ0dTaXplIHBkZlNpemUg
PSBDR1BERlBhZ2VHZXRCb3hSZWN0KGxvZ28sIGtDR1BERk1lZGlhQm94KS5zaXplOwogICAgICAg
ICBDR0Zsb2F0IHNjYWxlWCA9IGJhZGdlRGltZW5zaW9uIC8gcGRmU2l6ZS53aWR0aDsKQEAgLTE5
OTgsNyArMjAzNyw2IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0Jh
ZGdlKEltYWdlJiBpbWFnZSwgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgICAgIENHQ29udGV4
dFNjYWxlQ1RNKGN0eCwgc2NhbGVYLCBzY2FsZVkpOwogICAgICAgICBDR0NvbnRleHREcmF3UERG
UGFnZShjdHgsIGxvZ28pOwogICAgIH0KLSNlbmRpZgogCiAgICAgQ0dDb250ZXh0Rmx1c2goY3R4
KTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGN0eCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU3lzdGVtUHJldmlld0NvbnRyb2xsZXJDb2Nv
YS5tbQppbmRleCBkZmM4MjhlYWViOWFmYTg3YWI3N2U5YzI2MjdjZTlkMzA5YTA3NjAwLi5lYjRh
ZjFkZjNmZWVmMGVkMjc1ZDA5MmViOGFkYmUzMjQ2YThiMzdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1N5c3RlbVByZXZpZXdDb250cm9sbGVy
Q29jb2EubW0KQEAgLTMzLDE4ICszMywyNyBAQAogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2Vz
L01vYmlsZUNvcmVTZXJ2aWNlcy5oPgogI2ltcG9ydCA8UXVpY2tMb29rL1F1aWNrTG9vay5oPgog
I2ltcG9ydCA8VUlLaXQvVUlWaWV3Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9NSU1F
VHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxwYWwvc3BpL2lvcy9RdWlja0xvb2tTUEkuaD4KICNp
bXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CiAK
LSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotI2ltcG9ydCA8V2ViS2l0QWRkaXRpb25zL1N5
c3RlbVByZXZpZXdUeXBlcy5jcHA+Ci0jZW5kaWYKLQogU09GVF9MSU5LX0ZSQU1FV09SSyhRdWlj
a0xvb2spCiBTT0ZUX0xJTktfQ0xBU1MoUXVpY2tMb29rLCBRTFByZXZpZXdDb250cm9sbGVyKTsK
IFNPRlRfTElOS19DTEFTUyhRdWlja0xvb2ssIFFMSXRlbSk7CiAKKy8vIEZJWE1FOiBBdCB0aGUg
bW9tZW50IHdlIG9ubHkgaGF2ZSBvbmUgc3VwcG9ydGVkIFVUSSwgYnV0CisvLyBpZiB3ZSBzdGFy
dCBzdXBwb3J0aW5nIG1vcmUgdHlwZXMsIHRoZW4gd2UnbGwgbmVlZCBhIHRhYmxlLgorc3RhdGlj
IFN0cmluZyBnZXRVVElGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAg
IHN0YXRpYyBjb25zdCBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHV0aSA9IGFkb3B0Q0YoVVRUeXBl
Q3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5z
aW9uLCBDRlNUUigidXNkeiIpLCBuaWwpKS5nZXQoKTsKKworICAgIGlmICghV2ViQ29yZTo6TUlN
RVR5cGVSZWdpc3RyeTo6aXNTeXN0ZW1QcmV2aWV3TUlNRVR5cGUobWltZVR5cGUpKQorICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJldHVybiB1dGk7Cit9CisKIEBpbnRlcmZh
Y2UgX1dLUHJldmlld0NvbnRyb2xsZXJEYXRhU291cmNlIDogTlNPYmplY3QgPFFMUHJldmlld0Nv
bnRyb2xsZXJEYXRhU291cmNlPiB7CiAgICAgUmV0YWluUHRyPE5TSXRlbVByb3ZpZGVyPiBfaXRl
bVByb3ZpZGVyOwogICAgIFJldGFpblB0cjxRTEl0ZW0+IF9pdGVtOwpAQCAtODUsMTIgKzk0LDEw
IEBAIFNPRlRfTElOS19DTEFTUyhRdWlja0xvb2ssIFFMSXRlbSk7CiAgICAgICAgIHJldHVybiBf
aXRlbS5nZXQoKTsKIAogICAgIF9pdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBOU1N0cmluZyAqY29udGVudFR5cGUgPSBAInB1YmxpYy5j
b250ZW50IjsKLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogICAgIC8vIEZJWE1FOiBXZSBh
cmUgbGF1bmNoaW5nIHRoZSBwcmV2aWV3IGNvbnRyb2xsZXIgYmVmb3JlIGdldHRpbmcgYSByZXNw
b25zZSBmcm9tIHRoZSByZXNvdXJjZSwgd2hpY2gKICAgICAvLyBtZWFucyB3ZSBkb24ndCBhY3R1
YWxseSBrbm93IHRoZSByZWFsIE1JTUUgdHlwZSB5ZXQuIEFzc3VtZSBpdCBpcyBvbmUgb2YgdGhv
c2UgdGhhdCB3ZSByZWdpc3RlcmVkLgotICAgIGNvbnRlbnRUeXBlID0gV2ViS2l0OjpnZXRVVElG
b3JNSU1FVHlwZSgqV2ViS2l0OjpnZXRTeXN0ZW1QcmV2aWV3TUlNRVR5cGVzKCkuYmVnaW4oKSk7
Ci0jZW5kaWYKKyAgICBOU1N0cmluZyAqY29udGVudFR5cGUgPSBnZXRVVElGb3JNSU1FVHlwZSgq
V2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0U3lzdGVtUHJldmlld01JTUVUeXBlcygpLmJl
Z2luKCkpOworCiAgICAgX2l0ZW0gPSBhZG9wdE5TKFthbGxvY1FMSXRlbUluc3RhbmNlKCkgaW5p
dFdpdGhQcmV2aWV3SXRlbVByb3ZpZGVyOl9pdGVtUHJvdmlkZXIuZ2V0KCkgY29udGVudFR5cGU6
Y29udGVudFR5cGUgcHJldmlld1RpdGxlOkAiUHJldmlldyIgZmlsZVNpemU6QCgwKV0pOwogICAg
IFtfaXRlbSBzZXRVc2VMb2FkaW5nVGltZW91dDpOT107CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLV2ViVmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Lm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tXZWJWaWV3Q29udGVudFByb3ZpZGVy
UmVnaXN0cnkubW0KaW5kZXggNmE1ZGY0YzA0NTc2MjU2ZDNjNDc4NTZkM2RiNTNmYjJiOGVlZGFl
ZC4uMjNlMzczYzIyYzg4ODI0YTIzZmIwMGJiMzJmM2Y5NDI4NzljYjRhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVn
aXN0cnkubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tXZWJWaWV3Q29u
dGVudFByb3ZpZGVyUmVnaXN0cnkubW0KQEAgLTQyLDEwICs0Miw2IEBACiAjaW1wb3J0IDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lm
IFVTRShTWVNURU1fUFJFVklFVykgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQg
PFdlYktpdEFkZGl0aW9ucy9TeXN0ZW1QcmV2aWV3VHlwZXMuY3BwPgotI2VuZGlmCi0KIEBpbXBs
ZW1lbnRhdGlvbiBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXJSZWdpc3RyeSB7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIENsYXNzIDxXS1dlYlZpZXdDb250ZW50UHJvdmlkZXI+LCBBU0NJSUNhc2VJbnNl
bnNpdGl2ZUhhc2g+IF9jb250ZW50UHJvdmlkZXJGb3JNSU1FVHlwZTsKICAgICBIYXNoQ291bnRl
ZFNldDxXZWJLaXQ6OldlYlBhZ2VQcm94eSo+IF9wYWdlczsKQEAgLTY0LDkgKzYwLDkgQEAKICAg
ICAgICAgW3NlbGYgcmVnaXN0ZXJQcm92aWRlcjpbV0tMZWdhY3lQREZWaWV3IGNsYXNzXSBmb3JN
SU1FVHlwZTptaW1lVHlwZV07CiAjZW5kaWYKIAotI2lmIFVTRShTWVNURU1fUFJFVklFVykgJiYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNpZiBVU0UoU1lTVEVNX1BSRVZJRVcpCiAgICAgaWYg
KGNvbmZpZ3VyYXRpb24uX3N5c3RlbVByZXZpZXdFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgbWltZVR5cGUgOiBXZWJLaXQ6OmdldFN5c3RlbVByZXZpZXdNSU1FVHlwZXMoKSkKKyAgICAg
ICAgZm9yIChhdXRvJiBtaW1lVHlwZSA6IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFN5
c3RlbVByZXZpZXdNSU1FVHlwZXMoKSkKICAgICAgICAgICAgIFtzZWxmIHJlZ2lzdGVyUHJvdmlk
ZXI6W1dLU3lzdGVtUHJldmlld1ZpZXcgY2xhc3NdIGZvck1JTUVUeXBlOm1pbWVUeXBlXTsKICAg
ICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N5c3RlbVBy
ZXZpZXdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1N5c3RlbVByZXZp
ZXdDb250cm9sbGVyLmNwcAppbmRleCBjNzIxMmRjN2QwZWE1Nzg5ODgzMDhkOGNiMDg3ZGVmOWQw
NTYxMWE5Li5iOGJiZjJiN2FhMDUzNTdlODQzZTMwYTQ5ZWQ2MTUyNTk2YjVjZTI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvU3lzdGVtUHJldmlld0NvbnRyb2xsZXIuY3Bw
CkBAIC0yOSwxMCArMjksNyBAQAogI2lmIFVTRShTWVNURU1fUFJFVklFVykKIAogI2luY2x1ZGUg
IldlYlBhZ2VQcm94eS5oIgotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQg
PFdlYktpdEFkZGl0aW9ucy9TeXN0ZW1QcmV2aWV3VHlwZXMuY3BwPgotI2VuZGlmCisjaW5jbHVk
ZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBA
IC00MywxMiArNDAsNyBAQCBTeXN0ZW1QcmV2aWV3Q29udHJvbGxlcjo6U3lzdGVtUHJldmlld0Nv
bnRyb2xsZXIoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCiAKIGJvb2wgU3lzdGVtUHJldmll
d0NvbnRyb2xsZXI6OmNhblByZXZpZXcoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKIHsK
LSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotICAgIHJldHVybiBjYW5TaG93U3lzdGVtUHJl
dmlld0Zvck1JTUVUeXBlKG1pbWVUeXBlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG1pbWVU
eXBlKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKKyAgICByZXR1cm4gV2ViQ29yZTo6TUlN
RVR5cGVSZWdpc3RyeTo6aXNTeXN0ZW1QcmV2aWV3TUlNRVR5cGUobWltZVR5cGUpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tTeXN0ZW1QcmV2aWV3
Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1N5c3RlbVByZXZpZXdWaWV3
Lm1tCmluZGV4IDk0ZDYyNjRkYzgzOGM2YTNmMTcxYTZlM2FjNWMyZjE4OWUxMzJjZmEuLmI4YTU0
MDU0NDg2OGJkYjQyZDA5M2Y4M2IyZTMzMDg1ZjAwZDI3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1N5c3RlbVByZXZpZXdWaWV3Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XS1N5c3RlbVByZXZpZXdWaWV3Lm1tCkBAIC0zNSwyMiArMzUs
MzEgQEAKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2JpbGVDb3JlU2VydmljZXMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXpl
ZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgogI2ltcG9y
dCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPHBhbC9zcGkvaW9zL1N5
c3RlbVByZXZpZXdTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0
Zi9Tb2Z0TGlua2luZy5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCi0jaWYgVVNFKEFQUExF
X0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPFdlYktpdEFkZGl0aW9ucy9TeXN0ZW1QcmV2aWV3VHlw
ZXMuY3BwPgotI2VuZGlmCi0KIFNPRlRfTElOS19GUkFNRVdPUksoUXVpY2tMb29rKTsKIFNPRlRf
TElOS19DTEFTUyhRdWlja0xvb2ssIFFMSXRlbSk7CiAKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1F
V09SSyhBc3NldFZpZXdlcik7CiBTT0ZUX0xJTktfQ0xBU1MoQXNzZXRWaWV3ZXIsIEFTVlRodW1i
bmFpbFZpZXcpOwogCisvLyBGSVhNRTogQXQgdGhlIG1vbWVudCB3ZSBvbmx5IGhhdmUgb25lIHN1
cHBvcnRlZCBVVEksIGJ1dAorLy8gaWYgd2Ugc3RhcnQgc3VwcG9ydGluZyBtb3JlIHR5cGVzLCB0
aGVuIHdlJ2xsIG5lZWQgYSB0YWJsZS4KK3N0YXRpYyBTdHJpbmcgZ2V0VVRJRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiB1dGkgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJG
b3JUYWcoa1VUVGFnQ2xhc3NGaWxlbmFtZUV4dGVuc2lvbiwgQ0ZTVFIoInVzZHoiKSwgbmlsKSku
Z2V0KCk7CisKKyAgICBpZiAoIVdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3lzdGVtUHJl
dmlld01JTUVUeXBlKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisK
KyAgICByZXR1cm4gdXRpOworfQorCiBAaW50ZXJmYWNlIFdLU3lzdGVtUHJldmlld1ZpZXcgKCkg
PEFTVlRodW1ibmFpbFZpZXdEZWxlZ2F0ZT4KIEBlbmQKIApAQCAtOTUsMTMgKzEwNCw3IEBAIFNP
RlRfTElOS19DTEFTUyhBc3NldFZpZXdlciwgQVNWVGh1bWJuYWlsVmlldyk7CiAgICAgX2RhdGEg
PSBhZG9wdE5TKFtkYXRhIGNvcHldKTsKIAogICAgIE5TU3RyaW5nICpjb250ZW50VHlwZTsKLSNp
ZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQotICAgIGNvbnRlbnRUeXBlID0gV2ViS2l0OjpnZXRV
VElGb3JNSU1FVHlwZShfbWltZVR5cGUuZ2V0KCkpOwotI2Vsc2UKLSAgICBOU1N0cmluZyAqZXh0
ZW5zaW9uID0gW1tfc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCkgcGF0aEV4dGVuc2lvbl0gbG93ZXJj
YXNlU3RyaW5nXTsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbnRlbnRUeXBlQ0YgPSBh
ZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NG
aWxlbmFtZUV4dGVuc2lvbiwgKF9fYnJpZGdlIENGU3RyaW5nUmVmKWV4dGVuc2lvbiwgbmlsKSk7
Ci0gICAgY29udGVudFR5cGUgPSAoTlNTdHJpbmcgKiljb250ZW50VHlwZUNGLmdldCgpOwotI2Vu
ZGlmCisgICAgY29udGVudFR5cGUgPSBnZXRVVElGb3JNSU1FVHlwZShfbWltZVR5cGUuZ2V0KCkp
OwogCiAgICAgX2l0ZW0gPSBhZG9wdE5TKFthbGxvY1FMSXRlbUluc3RhbmNlKCkgaW5pdFdpdGhE
YXRhUHJvdmlkZXI6c2VsZiBjb250ZW50VHlwZTpjb250ZW50VHlwZSBwcmV2aWV3VGl0bGU6X3N1
Z2dlc3RlZEZpbGVuYW1lLmdldCgpXSk7CiAgICAgW19pdGVtIHNldFVzZUxvYWRpbmdUaW1lb3V0
Ok5PXTsK
</data>
<flag name="review"
          id="366399"
          type_id="1"
          status="+"
          setter="wenson_hsieh"
    />
          </attachment>
      

    </bug>

</bugzilla>