<?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>190119</bug_id>
          
          <creation_ts>2018-09-30 14:58:38 -0700</creation_ts>
          <short_desc>[Cocoa] Add SPI to expose typing attributes at the current selection on WKWebView</short_desc>
          <delta_ts>2022-08-02 13:39:33 -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>HTML Editing</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1464877</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-09-30 14:58:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/44767062&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466075</commentid>
    <comment_count>1</comment_count>
      <attachid>351524</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-10-03 08:39:45 -0700</bug_when>
    <thetext>Created attachment 351524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466119</commentid>
    <comment_count>2</comment_count>
      <attachid>351524</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-03 11:07:40 -0700</bug_when>
    <thetext>Comment on attachment 351524
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h:124
&gt; +- (void)_webView:(WKWebView *)webView fontAttributesDidChange:(NSDictionary&lt;NSString *, id&gt; *)fontAttributes WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));

Why not use a KVO observable property on the WKWebView?  This sounds exactly like what KVO is for.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1264
&gt; +    if ([uiDelegate respondsToSelector:@selector(_webView:fontAttributesDidChange:)]) {

We cache the results of all the respondsToSelector booleans in UIDelegate.h for performance.  Reading 1 bit is much faster than respondsToSelector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466183</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-10-03 14:34:53 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; Comment on attachment 351524 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351524&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h:124
&gt; &gt; +- (void)_webView:(WKWebView *)webView fontAttributesDidChange:(NSDictionary&lt;NSString *, id&gt; *)fontAttributes WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
&gt; 
&gt; Why not use a KVO observable property on the WKWebView?  This sounds exactly
&gt; like what KVO is for.

Yes, this would be an elegant interface, but I&apos;d need to know whether or not to compute and propagate font attributes when computing editor state, so I&apos;d need to override -addObserver: and -removeObserver: to know whether we need font attributes in the UI process. Given this, I don&apos;t think adding a new delegate method is worse than this KVO-able property.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1264
&gt; &gt; +    if ([uiDelegate respondsToSelector:@selector(_webView:fontAttributesDidChange:)]) {
&gt; 
&gt; We cache the results of all the respondsToSelector booleans in UIDelegate.h
&gt; for performance.  Reading 1 bit is much faster than respondsToSelector.

Good call! Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466185</commentid>
    <comment_count>4</comment_count>
      <attachid>351547</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-10-03 14:39:51 -0700</bug_when>
    <thetext>Created attachment 351547
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466541</commentid>
    <comment_count>5</comment_count>
      <attachid>351547</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-04 15:07:22 -0700</bug_when>
    <thetext>Comment on attachment 351547
Patch

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

&gt; Source/WebKit/ChangeLog:9
&gt; +        Add support new WebKit2 SPI to notify the UI delegate about font attributes when the editor state changes (e.g.

&quot;add support new&quot;?

&gt; Source/WebKit/Shared/EditorState.cpp:141
&gt; +    encoder &lt;&lt; !!fontAttributes;

Don&apos;t we have the ability to directly encode optionals now?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1255
&gt; +    // FIXME: We should either rename -_webView:editorStateDidChange: to clarify that it&apos;s only intended for use when testing,
&gt; +    // or remove it entirely and use -_webView:fontAttributesDidChange: instead once text alignment is supported in the set of

Are there any clients other than our testing code? If not, maybe just rename it right away?

&gt; Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:156
&gt; +    m_delegateMethods.webViewFontAttributesDidChange = [delegate respondsToSelector:@selector(_webView:fontAttributesDidChange:)];

I think &quot;webView:didChangeFontAttributes:&quot; is more traditional style, but I see you were copying an existing method.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:94
&gt; +enum class Nullability : uint8_t { Null, NonNull };

Is this about nullability (can it be null) or nullity (is it null)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466573</commentid>
    <comment_count>6</comment_count>
      <attachid>351547</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-10-04 16:39:44 -0700</bug_when>
    <thetext>Comment on attachment 351547
Patch

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

&gt;&gt; Source/WebKit/ChangeLog:9
&gt;&gt; +        Add support new WebKit2 SPI to notify the UI delegate about font attributes when the editor state changes (e.g.
&gt; 
&gt; &quot;add support new&quot;?

I accidentally a word :P

&gt;&gt; Source/WebKit/Shared/EditorState.cpp:141
&gt;&gt; +    encoder &lt;&lt; !!fontAttributes;
&gt; 
&gt; Don&apos;t we have the ability to directly encode optionals now?

Sounds good — I changed it to this on the encoding side:

    encoder &lt;&lt; fontAttributes;

...and this on the decoding side:

    std::optional&lt;std::optional&lt;FontAttributes&gt;&gt; optionalFontAttributes;
    decoder &gt;&gt; optionalFontAttributes;
    if (!optionalFontAttributes)
        return false;

    result.fontAttributes = optionalFontAttributes.value();

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1255
&gt;&gt; +    // or remove it entirely and use -_webView:fontAttributesDidChange: instead once text alignment is supported in the set of
&gt; 
&gt; Are there any clients other than our testing code? If not, maybe just rename it right away?

There aren&apos;t any clients apart from our testing code (at least, from what I can tell using internal tooling). I&apos;m going to clean this up in a followup patch, when I decide what I want to do with these. One idea I have is refactoring them to actually test user-facing state (e.g. calling -canPerformAction:withSender:, -textStylingAtPosition:inDirection:, etc.), but I could also repurpose those tests to be about font attributes. Or I could simply rename the delegate hook.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:156
&gt;&gt; +    m_delegateMethods.webViewFontAttributesDidChange = [delegate respondsToSelector:@selector(_webView:fontAttributesDidChange:)];
&gt; 
&gt; I think &quot;webView:didChangeFontAttributes:&quot; is more traditional style, but I see you were copying an existing method.

Sounds good — renamed to `_webView:didChangeFontAttributes:`

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/FontAttributes.mm:94
&gt;&gt; +enum class Nullability : uint8_t { Null, NonNull };
&gt; 
&gt; Is this about nullability (can it be null) or nullity (is it null)

It is indeed about Nullity — renamed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466578</commentid>
    <comment_count>7</comment_count>
      <attachid>351644</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-10-04 16:59:41 -0700</bug_when>
    <thetext>Created attachment 351644
Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466583</commentid>
    <comment_count>8</comment_count>
      <attachid>351644</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-04 17:47:14 -0700</bug_when>
    <thetext>Comment on attachment 351644
Patch for EWS

Clearing flags on attachment: 351644

Committed r236865: &lt;https://trac.webkit.org/changeset/236865&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351524</attachid>
            <date>2018-10-03 08:39:45 -0700</date>
            <delta_ts>2018-10-03 14:35:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190119-20181003083944.patch</filename>
            <type>text/plain</type>
            <size>40656</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFjMTRjZDZlMTBkM2VlNzdh
MTkzMjU5NDFlNzI1MjBiZmJlZjA1ZmYuLjFhNzAxYWFlZWJkZDM5ODRmYTRkMTUzYzM0YWJjMDk3
NjRlMDU5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTgtMTAtMDMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQWRkIFNQSSB0
byBleHBvc2UgdHlwaW5nIGF0dHJpYnV0ZXMgYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9uIFdL
V2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMTE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDc2NzA2Mj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBuZXcgV2ViS2l0
MiBTUEkgdG8gbm90aWZ5IHRoZSBVSSBkZWxlZ2F0ZSBhYm91dCBmb250IGF0dHJpYnV0ZXMgd2hl
biB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMgKGUuZy4KKyAgICAgICAgZHVlIHRvIHNlbGVjdGlv
biBjaGFuZ2VzLCBvciBleGVjdXRpbmcgYW4gZWRpdCBjb21tYW5kKS4gU2VlIGJlbG93IGZvciBt
b3JlIGRldGFpbC4KKworICAgICAgICBUZXN0OiBGb250QXR0cmlidXRlcy5Gb250QXR0cmlidXRl
c0FmdGVyQ2hhbmdpbmdTZWxlY3Rpb24KKworICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjpk
ZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5oOgorCisgICAgICAgIEFkZCBh
IG5ldyBvcHRpb25hbCBgRm9udEF0dHJpYnV0ZXNgIG1lbWJlciB0byBFZGl0b3JTdGF0ZSdzIHBv
c3QtbGF5b3V0IGRhdGEuIEZvbnRBdHRyaWJ1dGVzIGFyZSBjb21wdXRlZCBhbmQKKyAgICAgICAg
c2VudCBvdmVyIElQQyBvbmx5IGlmIHRoZSBVSSBkZWxlZ2F0ZSBpbXBsZW1lbnRzIHRoZSBuZXcg
ZGVsZWdhdGUgaG9vayB3aGljaCByZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCBmb250CisgICAg
ICAgIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaDoK
KworICAgICAgICBBZGQgYSBuZXcgZmxhZyBmb3IgdGhlIFVJIHByb2Nlc3MgdG8gbGV0IGEgbmV3
IHdlYiBwYWdlIGtub3cgd2hldGhlciBpdCBzaG91bGQgYWRkaXRpb25hbGx5IGNvbXB1dGUgZm9u
dAorICAgICAgICBhdHRyaWJ1dGVzIHdoZW4gY29tcHV0aW5nIGVkaXRvciBzdGF0ZS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgc2V0VUlEZWxlZ2F0ZTpdKToKKworICAgICAgICBVcGRhdGUgd2hldGhlciBvciBub3QgdGhl
IFVJIHByb2Nlc3MgbmVlZHMgdG8ga25vdyBhYm91dCBmb250IGF0dHJpYnV0ZXMuIFRoZSBVSSBw
cm9jZXNzIG9ubHkgcmVxdWlyZXMgZm9udAorICAgICAgICBhdHRyaWJ1dGUgaW5mb3JtYXRpb24g
aWYgdGhlIFVJIGRlbGVnYXRlIGltcGxlbWVudHMgYC1fd2ViVmlldzpmb250QXR0cmlidXRlc0Rp
ZENoYW5nZTpgLgorCisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkQ2hhbmdlRWRpdG9yU3RhdGVd
KToKKworICAgICAgICBDYWxsIG91dCB0byB0aGUgVUkgZGVsZWdhdGUgd2l0aCBhIGZvbnQgYXR0
cmlidXRlIGRpY3Rpb25hcnksIGNyZWF0ZWQgdmlhIEZvbnRBdHRyaWJ1dGVzIG9uIEVkaXRvclN0
YXRlJ3MKKyAgICAgICAgcG9zdC1sYXlvdXQgZGF0YS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE5lZWRz
Rm9udEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0aW9u
UGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZWRp
dG9yU3RhdGVDaGFuZ2VkKToKKworICAgICAgICBVcGRhdGUgdGhlIGNhY2hlZCBmb250IGF0dHJp
YnV0ZXMgaW4gdGhlIFVJIHByb2Nlc3Mgd2hlbiByZWNlaXZpbmcgYSBuZXcgZWRpdG9yIHN0YXRl
IHVwZGF0ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWRpdG9yU3RhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKToKKworICAgICAgICBBZGQgYSBu
ZXcgSVBDIGhvb2sgdG8gdXBkYXRlIHdoZXRoZXIgb3Igbm90IHRoZSBwYWdlIHNob3VsZCBhZGRp
dGlvbmFsbHkgY29tcHV0ZSBmb250IGF0dHJpYnV0ZXMuIEluIHRoZSBjYXNlCisgICAgICAgIHdo
ZXJlIHRoZSBVSSBkZWxlZ2F0ZSBjaGFuZ2VzIGZyb20gc29tZXRoaW5nIHRoYXQgZG9lcyBub3Qg
cmVxdWlyZSBmb250IGF0dHJpYnV0ZXMgdG8gb25lIHRoYXQgZG9lcywgd2UKKyAgICAgICAgYWRk
aXRpb25hbGx5IHNjaGVkdWxlIGFuIGVkaXRvciBzdGF0ZSB1cGRhdGUuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE4LTEwLTAyICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIFBhcnNlZFVSTFN0cmlu
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCmluZGV4IDJkZmE1MTg2NmM0M2UxNDQy
NDg2YmExNGExNWJhNWI5ZDhkYjllYjMuLmNmYmMyYzk1NzlhZTJiOTU0Y2M5ZjhkYWVjNzkzMmFl
M2EzZDBiMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKQEAgLTEzOCw2ICsx
MzgsOSBAQCB2b2lkIEVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZW5jb2RlKElQQzo6RW5j
b2RlciYgZW5jb2RlcikgY29uc3QKICAgICBlbmNvZGVyIDw8IHBhcmFncmFwaENvbnRleHRGb3JD
YW5kaWRhdGVSZXF1ZXN0OwogICAgIGVuY29kZXIgPDwgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVz
dDsKICNlbmRpZgorICAgIGVuY29kZXIgPDwgISFmb250QXR0cmlidXRlczsKKyAgICBpZiAoZm9u
dEF0dHJpYnV0ZXMpCisgICAgICAgIGVuY29kZXIgPDwgZm9udEF0dHJpYnV0ZXMudmFsdWUoKTsK
ICAgICBlbmNvZGVyIDw8IGNhbkN1dDsKICAgICBlbmNvZGVyIDw8IGNhbkNvcHk7CiAgICAgZW5j
b2RlciA8PCBjYW5QYXN0ZTsKQEAgLTIwMCw2ICsyMDMsMTcgQEAgYm9vbCBFZGl0b3JTdGF0ZTo6
UG9zdExheW91dERhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFBvc3RMYXlvdXRE
YXRhJgogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorICAgIGJvb2wgaGFzRm9udEF0
dHJpYnV0ZXMgPSBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0ZvbnRBdHRyaWJ1
dGVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGhhc0ZvbnRBdHRyaWJ1dGVz
KSB7CisgICAgICAgIGF1dG8gZm9udEF0dHJpYnV0ZXMgPSBJUEM6OkFyZ3VtZW50Q29kZXI8Rm9u
dEF0dHJpYnV0ZXM+OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgICAgIGlmICghZm9udEF0dHJpYnV0
ZXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJlc3VsdC5mb250QXR0cmli
dXRlcyA9IFdURk1vdmUoZm9udEF0dHJpYnV0ZXMpOworICAgIH0KKwogICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmNhbkN1dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHJlc3VsdC5jYW5Db3B5KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL0VkaXRvclN0YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0
ZS5oCmluZGV4IDIwODVjMTU4Nzc2MDAyMGUwZWJhZTBiOTk2YTkxNGU4ODUwOGU3ODkuLjA4MTUx
YTIwOWZiODdjYTQ4ZjgxYTRmOGFlNjdmYmJmOGIyNjkwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRp
dG9yU3RhdGUuaApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250QXR0
cmlidXRlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xMTQsNiArMTE1LDggQEAgc3RydWN0IEVkaXRvclN0YXRl
IHsKICAgICAgICAgU3RyaW5nIHN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3Q7CiAjZW5kaWYKIAor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzPiBmb250QXR0cmli
dXRlczsKKwogICAgICAgICBib29sIGNhbkN1dCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgY2Fu
Q29weSB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgY2FuUGFzdGUgeyBmYWxzZSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRl
eCA1YzAxYjdmZmU2Y2ViOTg3NGQzNjY5NzY5NTVlMGM2OWFkNGRjNjY2Li5iMWZiNGU1MTQ2ZjY5
ZjU1ODg0YjJlNDMwNzU1OWU3YTA3MzFmODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtMTEwLDYgKzExMCw3IEBAIHZv
aWQgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgZW5jb2RlciA8PCBoYXNS
ZWdpc3RlcmVkU2VydmljZVdvcmtlcnM7CiAjZW5kaWYKKyAgICBlbmNvZGVyIDw8IG5lZWRzRm9u
dEF0dHJpYnV0ZXM7CiAgICAgZW5jb2RlciA8PCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVk
OwogICAgIGVuY29kZXIgPDwgZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQ7
CiAgICAgZW5jb2RlciA8PCB1c2VyQ29udGVudFdvcmxkczsKQEAgLTMwNSw2ICszMDYsOSBAQCBz
dGQ6Om9wdGlvbmFsPFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM+IFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kZShJUEM6OgogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogI2Vu
ZGlmCiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMubmVlZHNGb250QXR0cmli
dXRlcykpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHBhcmFtZXRlcnMuaWNlQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZCkpCiAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCBlMzVhNWY0ZmM1OWNhMWY2NzJkOTI3YzIwYzBj
MjdkMjA2NjIyNWE5Li5kYjRjMDdmMDdjODY2NDNjNjVmNmEwODg3ZmQ4OWIyMzVjMDg5NzI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5o
CkBAIC0xNzMsNiArMTczLDggQEAgc3RydWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgewog
ICAgIGJvb2wgaGFzUmVnaXN0ZXJlZFNlcnZpY2VXb3JrZXJzIHsgdHJ1ZSB9OwogI2VuZGlmCiAK
KyAgICBib29sIG5lZWRzRm9udEF0dHJpYnV0ZXMgeyBmYWxzZSB9OworCiAgICAgLy8gV2ViUlRD
IG1lbWJlcnMuCiAgICAgYm9vbCBpY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkIHsgdHJ1ZSB9
OwogICAgIGJvb2wgZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlE
ZWxlZ2F0ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJ
RGVsZWdhdGVQcml2YXRlLmgKaW5kZXggZjEyMmI3MzU5ZTAyZGZhYzA3ODI0NTgzNTc1NjdjOTE2
NGJlNDJjMS4uNjIyYjhjYzY3Y2EyMTdlZTUyYzIxYWYxMDY2YmZjZmZiZTg1MGI1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRl
UHJpdmF0ZS5oCkBAIC0xMjEsNiArMTIxLDggQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIAogLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyByZXF1ZXN0U3RvcmFnZUFjY2Vzc1Bh
bmVsRm9yRG9tYWluOihOU1N0cmluZyAqKXJlcXVlc3RpbmdEb21haW4gdW5kZXJDdXJyZW50RG9t
YWluOihOU1N0cmluZyAqKWN1cnJlbnREb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4p
KEJPT0wgcmVzdWx0KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgx
MC4xNCksIGlvcygxMi4wKSk7CiAKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZp
ZXcgZm9udEF0dHJpYnV0ZXNEaWRDaGFuZ2U6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
Kilmb250QXR0cmlidXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKKwogI2lmIFRBUkdFVF9PU19JUEhPTkUKIC0gKEJPT0wpX3dlYlZpZXc6
KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVu
dDooX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9z
KDkuMCkpOwogLSAoTlNBcnJheSAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFjdGlv
bnNGb3JFbGVtZW50OihfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQgZGVmYXVsdEFj
dGlvbnM6KE5TQXJyYXk8X1dLRWxlbWVudEFjdGlvbiAqPiAqKWRlZmF1bHRBY3Rpb25zOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggMDky
YzY1NGMyZjRjY2FkMTgxNGE1YzBkZTVlMTU2NGUwMTU5MmZhYy4uNjhlMmViZjRlMzJkMTIwMmNm
MWE1MWZjZDhhYTllZjhlOGIyMWQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC04ODksNiArODg5LDcgQEAgc3RhdGljIHZvaWQgdmFs
aWRhdGUoV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbikKICAgICBfcGFnZS0+
c2V0Q29udGV4dE1lbnVDbGllbnQoX3VpRGVsZWdhdGUtPmNyZWF0ZUNvbnRleHRNZW51Q2xpZW50
KCkpOwogI2VuZGlmCiAgICAgX3BhZ2UtPnNldFVJQ2xpZW50KF91aURlbGVnYXRlLT5jcmVhdGVV
SUNsaWVudCgpKTsKKyAgICBfcGFnZS0+c2V0TmVlZHNGb250QXR0cmlidXRlcyhbVUlEZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmZvbnRBdHRyaWJ1dGVzRGlk
Q2hhbmdlOildKTsKIH0KIAogLSAoaWQgPF9XS0ljb25Mb2FkaW5nRGVsZWdhdGU+KV9pY29uTG9h
ZGluZ0RlbGVnYXRlCkBAIC0xMjUwLDggKzEyNTEsMjAgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAq
ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUoY29uc3QgV2ViS2l0OjpFZGl0
b3IKIC0gKHZvaWQpX2RpZENoYW5nZUVkaXRvclN0YXRlCiB7CiAgICAgaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KXNlbGYuVUlE
ZWxlZ2F0ZTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZWl0aGVyIHJlbmFtZSAtX3dlYlZp
ZXc6ZWRpdG9yU3RhdGVEaWRDaGFuZ2U6IHRvIGNsYXJpZnkgdGhhdCBpdCdzIG9ubHkgaW50ZW5k
ZWQgZm9yIHVzZSB3aGVuIHRlc3RpbmcsCisgICAgLy8gb3IgcmVtb3ZlIGl0IGVudGlyZWx5IGFu
ZCB1c2UgLV93ZWJWaWV3OmZvbnRBdHRyaWJ1dGVzRGlkQ2hhbmdlOiBpbnN0ZWFkIG9uY2UgdGV4
dCBhbGlnbm1lbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBzZXQgb2YKKyAgICAvLyBmb250IGF0dHJp
YnV0ZXMuCiAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6ZWRpdG9yU3RhdGVEaWRDaGFuZ2U6KV0pCiAgICAgICAgIFt1aURlbGVnYXRlIF93
ZWJWaWV3OnNlbGYgZWRpdG9yU3RhdGVEaWRDaGFuZ2U6ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9u
Rm9yRWRpdG9yU3RhdGUoX3BhZ2UtPmVkaXRvclN0YXRlKCkpXTsKKworICAgIGlmIChfcGFnZS0+
ZWRpdG9yU3RhdGUoKS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZp
ZXc6Zm9udEF0dHJpYnV0ZXNEaWRDaGFuZ2U6KV0pIHsKKyAgICAgICAgaWYgKGF1dG8gZm9udEF0
dHJpYnV0ZXMgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpLmZvbnRBdHRy
aWJ1dGVzKQorICAgICAgICAgICAgW3VpRGVsZWdhdGUgX3dlYlZpZXc6c2VsZiBmb250QXR0cmli
dXRlc0RpZENoYW5nZTpmb250QXR0cmlidXRlcy0+Y3JlYXRlRGljdGlvbmFyeSgpLmdldCgpXTsK
KyAgICB9CiB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNDIyZjI2YWVhMTg0OGE0MDlhODI4N2Mz
MjY1NjViM2YzZWQxMzdjMC4uMmMwY2ZkMjFkNjUyY2M1OTBhY2VkOWIyMzU1NzQxMzFmZmZlY2Ri
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzMzLDYg
KzE3MzMsMTcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnZhbGlkYXRlQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQKICAgICBtX3Byb2Nlc3MtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OlZhbGlkYXRlQ29tbWFuZChjb21tYW5kTmFtZSwgY2FsbGJhY2tJ
RCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnNldE5lZWRzRm9udEF0dHJp
YnV0ZXMoYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQoreworICAgIGlmIChtX25lZWRzRm9udEF0
dHJpYnV0ZXMgPT0gbmVlZHNGb250QXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9uZWVkc0ZvbnRBdHRyaWJ1dGVzID0gbmVlZHNGb250QXR0cmlidXRlczsKKworICAgIGlmIChp
c1ZhbGlkKCkpCisgICAgICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0
TmVlZHNGb250QXR0cmlidXRlcyhuZWVkc0ZvbnRBdHRyaWJ1dGVzKSwgbV9wYWdlSUQpOworfQor
CiBib29sIFdlYlBhZ2VQcm94eTo6bWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24oKSBjb25zdAog
ewogICAgIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgY2xpZW50IHdhbnRzIHRvIGRvLCBrZWVw
IHNlbGVjdGlvbnMgaWYgYSBsb2NhbCBJbnNwZWN0b3IgaXMgb3Blbi4KQEAgLTYzNTQsNiArNjM2
NSw4IEBAIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgV2ViUGFnZVByb3h5OjpjcmVhdGlvblBh
cmFtZXRlcnMoKQogICAgIHBhcmFtZXRlcnMuYXBwbGljYXRpb25NYW5pZmVzdCA9IG1fY29uZmln
dXJhdGlvbi0+YXBwbGljYXRpb25NYW5pZmVzdCgpID8gc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpB
cHBsaWNhdGlvbk1hbmlmZXN0PihtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uTWFuaWZlc3Qo
KS0+YXBwbGljYXRpb25NYW5pZmVzdCgpKSA6IHN0ZDo6bnVsbG9wdDsKICNlbmRpZgogCisgICAg
cGFyYW1ldGVycy5uZWVkc0ZvbnRBdHRyaWJ1dGVzID0gbV9uZWVkc0ZvbnRBdHRyaWJ1dGVzOwor
CiAgICAgbV9wcm9jZXNzLT5hZGRXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eShtX3VzZXJD
b250ZW50Q29udHJvbGxlciwgcGFyYW1ldGVycyk7CiAKICAgICByZXR1cm4gcGFyYW1ldGVyczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZTY2YzU0YThhMzI1ODNi
YmY3OGIwYjczZjdhZDlhM2NlY2NjNjU1OC4uZTdjMDEzNzk1Yzk2N2E3NGQ1ZGM2MTI5ZWVmYjJj
NTc0NzE1M2Y0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTUz
OSw2ICs1MzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGVjdXRlRWRpdENvbW1hbmQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCA9IFN0cmluZygpKTsK
ICAgICB2b2lkIHZhbGlkYXRlQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGJvb2wsIGludDMyX3QsIENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmKTsKIAorICAgIHZvaWQgc2V0TmVlZHNGb250QXR0cmlidXRlcyhib29sKTsK
KwogICAgIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRpdG9yU3RhdGU7IH0KICAgICBib29sIGNhbkRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Nl
bGVjdGVkUmFuZ2UoKSAmJiBpc0NvbnRlbnRFZGl0YWJsZSgpOyB9CiAgICAgYm9vbCBoYXNTZWxl
Y3RlZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1Jhbmdl
OyB9CkBAIC0yMjU5LDYgKzIyNjEsOCBAQCBwcml2YXRlOgogCiAgICAgUnVuTG9vcDo6VGltZXI8
V2ViUGFnZVByb3h5PiBtX3Jlc2V0UmVjZW50Q3Jhc2hDb3VudFRpbWVyOwogICAgIHVuc2lnbmVk
IG1fcmVjZW50Q3Jhc2hDb3VudCB7IDAgfTsKKworICAgIGJvb2wgbV9uZWVkc0ZvbnRBdHRyaWJ1
dGVzIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggZmNjMTY0NzBlNjY5
OTY5NTUyYTkxMjc4ZTZkODk1YzgzMTBmMWNjMC4uNWFjNWYzOTliMWRmYjZhZDVhMjdkZTFlYmYw
ZWMyMTE5N2ZhMGMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tCkBAIC0xMDUzLDcgKzEwNTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZWRp
dG9yU3RhdGVDaGFuZ2VkKGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3JTdGF0ZSkKICAgICBib29s
IGNvdWxkQ2hhbmdlU2VjdXJlSW5wdXRTdGF0ZSA9IG1fZWRpdG9yU3RhdGUuaXNJblBhc3N3b3Jk
RmllbGQgIT0gZWRpdG9yU3RhdGUuaXNJblBhc3N3b3JkRmllbGQgfHwgbV9lZGl0b3JTdGF0ZS5z
ZWxlY3Rpb25Jc05vbmU7CiAgICAgCiAgICAgbV9lZGl0b3JTdGF0ZSA9IGVkaXRvclN0YXRlOwot
ICAgIG1fY2FjaGVkRm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0LnJlc2V0KCk7CisgICAg
bV9jYWNoZWRGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQgPSBlZGl0b3JTdGF0ZS5pc01p
c3NpbmdQb3N0TGF5b3V0RGF0YSA/IHN0ZDo6bnVsbG9wdCA6IGVkaXRvclN0YXRlLnBvc3RMYXlv
dXREYXRhKCkuZm9udEF0dHJpYnV0ZXM7CiAgICAgCiAgICAgLy8gU2VsZWN0aW9uIGJlaW5nIG5v
bmUgaXMgYSB0ZW1wb3Jhcnkgc3RhdGUgd2hlbiBlZGl0aW5nLiBGbGlwcGluZyBzZWN1cmUgaW5w
dXQgc3RhdGUgdG9vIHF1aWNrbHkgd2FzIGNhdXNpbmcgdHJvdWJsZSAobm90IGZ1bGx5IHVuZGVy
c3Rvb2QpLgogICAgIGlmIChjb3VsZENoYW5nZVNlY3VyZUlucHV0U3RhdGUgJiYgIWVkaXRvclN0
YXRlLnNlbGVjdGlvbklzTm9uZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tCmluZGV4IDQ4NDE4Y2NlODQ5MmUwMjQ3MjQ3ZmJhOWVjMmUwN2UyN2Mw
ZDI2NzguLmY5NzU4NzM4YTI2MzU2ZTU4MGIwYTMxM2IyNTBmN2ZjYjY2MWE1NTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQpAQCAtNjUwLDcg
KzY1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY29uc3QgRWRp
dG9yU3RhdGUmIGVkaXRvclN0YXRlKQogICAgIGJvb2wgY291bGRDaGFuZ2VTZWN1cmVJbnB1dFN0
YXRlID0gbV9lZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAhPSBlZGl0b3JTdGF0ZS5pc0lu
UGFzc3dvcmRGaWVsZCB8fCBtX2VkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZTsKICAgICAKICAg
ICBtX2VkaXRvclN0YXRlID0gZWRpdG9yU3RhdGU7Ci0gICAgbV9jYWNoZWRGb250QXR0cmlidXRl
c0F0U2VsZWN0aW9uU3RhcnQucmVzZXQoKTsKKyAgICBtX2NhY2hlZEZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCA9IGVkaXRvclN0YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhID8gc3Rk
OjpudWxsb3B0IDogZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5mb250QXR0cmlidXRlczsK
ICAgICAKICAgICAvLyBTZWxlY3Rpb24gYmVpbmcgbm9uZSBpcyBhIHRlbXBvcmFyeSBzdGF0ZSB3
aGVuIGVkaXRpbmcuIEZsaXBwaW5nIHNlY3VyZSBpbnB1dCBzdGF0ZSB0b28gcXVpY2tseSB3YXMg
Y2F1c2luZyB0cm91YmxlIChub3QgZnVsbHkgdW5kZXJzdG9vZCkuCiAgICAgaWYgKGNvdWxkQ2hh
bmdlU2VjdXJlSW5wdXRTdGF0ZSAmJiAhZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyMmI4MDkw
MTEyOTc2MjgwZGIzZmVmMjE4OGUyZTdiOGFiZWQ5NGQ5Li40MzJkYzg5NWEzMmQzNzBhMjcwOGM1
MzExOTllNTQwNDQ0ZGU4YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtNTk5LDYgKzU5OSw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0
X3QgcGFnZUlELCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAg
ICAgU2VydmljZVdvcmtlclByb3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRNYXlIYXZlUmVnaXN0ZXJl
ZFNlcnZpY2VXb3JrZXJzKCk7CiAjZW5kaWYKIAorICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9
IHBhcmFtZXRlcnMubmVlZHNGb250QXR0cmlidXRlczsKKwogI2lmIEVOQUJMRShXRUJfUlRDKQog
ICAgIGlmICghcGFyYW1ldGVycy5pY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkKQogICAgICAg
ICBkaXNhYmxlSUNFQ2FuZGlkYXRlRmlsdGVyaW5nKCk7CkBAIC05MzUsNiArOTM3LDkgQEAgRWRp
dG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoSW5jbHVkZVBvc3RMYXlvdXREYXRhSGludCBz
aG91bGRJbmNsdWRlUG9zdExheW8KICAgICAgICAgcG9zdExheW91dERhdGEuY2FuQ29weSA9IGVk
aXRvci5jYW5Db3B5KCk7CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhblBhc3RlID0gZWRpdG9y
LmNhblBhc3RlKCk7CiAKKyAgICAgICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcykKKyAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLmZvbnRBdHRyaWJ1dGVzID0gZWRpdG9yLmZvbnRBdHRyaWJ1
dGVzQXRTZWxlY3Rpb25TdGFydCgpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIGlm
IChyZXN1bHQuaXNDb250ZW50RWRpdGFibGUgJiYgIXNlbGVjdGlvbi5pc05vbmUoKSkgewogICAg
ICAgICAgICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQoc2VsZWN0aW9uKSkgewpAQCAtMjQ5MSw2ICsyNDk2LDE3IEBAIHZvaWQgV2Vi
UGFnZTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0
IFN0cmluZyYgYXJndW1lCiAgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBh
cmd1bWVudCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0TmVlZHNGb250QXR0cmlidXRlcyhib29s
IG5lZWRzRm9udEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcyA9
PSBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lZWRzRm9u
dEF0dHJpYnV0ZXMgPSBuZWVkc0ZvbnRBdHRyaWJ1dGVzOworCisgICAgaWYgKG1fbmVlZHNGb250
QXR0cmlidXRlcykKKyAgICAgICAgc2VuZFBhcnRpYWxFZGl0b3JTdGF0ZUFuZFNjaGVkdWxlUG9z
dExheW91dFVwZGF0ZSgpOworfQorCiB2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uSW50ZXJu
YWwoY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0ZW1TdGF0ZXMsIFdh
c1Jlc3RvcmVkQnlBUElSZXF1ZXN0IHJlc3RvcmVkQnlBUElSZXF1ZXN0LCBXZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eTo6T3ZlcndyaXRlRXhpc3RpbmdJdGVtIG92ZXJ3cml0ZSkKIHsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW1TdGF0ZSA6IGl0ZW1TdGF0ZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAxNTBhYjRmZWQ5ZTRhNmNkNDMxMzQ1Mjc2
NmI4OTgwZDg3NWNjZjg4Li5iMTJiMDYzODg5Mzc2ZjJjZTY1MDBjYzU2MjU0OTg4ZTRhNTgxMjc5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMTc5
LDYgKzExNzksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0RWRpdGFibGUoYm9vbCk7CiAK
KyAgICB2b2lkIHNldE5lZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCk7CisKICAgICB2b2lkIG1vdXNl
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIHZvaWQga2V5RXZlbnQoY29uc3QgV2Vi
S2V5Ym9hcmRFdmVudCYpOwogCkBAIC0xNzQwLDYgKzE3NDIsNyBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc0Zv
bnRBdHRyaWJ1dGVzIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KaW5kZXggZDc1YWNlZWEwZTAwMDIzYWIyMTliMjkxMzllMzYyMjZhZjljNmM3Ni4uOTRjYWZl
NmM1MTkxZDU5MDVjOTRkNjBjYmUwNGJiMDQwYzkzYjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yMDksNiAr
MjA5LDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgVmFsaWRh
dGVDb21tYW5kKFN0cmluZyBuYW1lLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAg
ICBFeGVjdXRlRWRpdENvbW1hbmQoU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudCkKIAorICAg
IFNldE5lZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQorCiAgICAg
UmVxdWVzdEZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydChXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKIAogICAgIERpZFJlbW92ZUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJ
RCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5
NzFiYTEzZDY1ZGJjYTZlMWJkZTczOWI5M2ZkNzI3ZDdiMTkzMjUxLi5mOTBjNjliOTg2ZjY1ZWFk
N2Y0NzQ2M2M1N2QzYTFjNTYxMWIyZWU3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTgtMTAtMDMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQWRkIFNQSSB0
byBleHBvc2UgdHlwaW5nIGF0dHJpYnV0ZXMgYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9uIFdL
V2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMTE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDc2NzA2Mj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgQVBJIHRlc3QgdGhh
dCBsb2FkcyBhIGRvY3VtZW50IGNvbnRhaW5pbmcgdmFyaW91cyByaWNoIHRleHQgc3R5bGVzLiBU
aGlzIHRlc3QgbW92ZXMgdGhlIHNlbGVjdGlvbgorICAgICAgICBhcm91bmQgdGhlIGRvY3VtZW50
IGFuZCBjaGVja3MgdGhlIGxhc3Qgc2V0IG9mIGZvbnQgYXR0cmlidXRlcyByZWNlaXZlZCB2aWEg
dGhlIG5ldyBVSSBkZWxlZ2F0ZSBob29rLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Gb250QXR0cmlidXRlcy5tbTogQWRkZWQuCisgICAgICAg
ICgtW0ZvbnRBdHRyaWJ1dGVzTGlzdGVuZXIgX3dlYlZpZXc6Zm9udEF0dHJpYnV0ZXNEaWRDaGFu
Z2U6XSk6CisgICAgICAgICgtW0ZvbnRBdHRyaWJ1dGVzTGlzdGVuZXIgbGFzdEZvbnRBdHRyaWJ1
dGVzXSk6CisgICAgICAgICgtW1Rlc3RXS1dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlm
aWVyOl0pOgorICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlXSk6CisgICAgICAgIChDb2xvckV4cGVjdGF0aW9uOjpDb2xvckV4
cGVjdGF0aW9uKToKKyAgICAgICAgKFNoYWRvd0V4cGVjdGF0aW9uOjpTaGFkb3dFeHBlY3RhdGlv
bik6CisgICAgICAgIChjaGVja0NvbG9yKToKKyAgICAgICAgKGNoZWNrU2hhZG93KToKKyAgICAg
ICAgKGNoZWNrRm9udCk6CisgICAgICAgICh3ZWJWaWV3Rm9yVGVzdGluZ0ZvbnRBdHRyaWJ1dGVz
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL3JpY2gtdGV4dC1h
dHRyaWJ1dGVzLmh0bWw6IEFkZGVkLgorCiAyMDE4LTEwLTAyICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTjogVGVzdFdlYktpdEFQSS5XS1dlYlZp
ZXcuUHJvdmlzaW9uYWxVUkxOb3RDaGFuZ2UgQVBJIHRlc3QgaXMgZmFpbGluZwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjMTVjNDc5MjQxMzJiODQzMTlkMmQ0ZTE0OGRmMDRkNDgwMzA1NTIx
Li5hZmQ1ZWFhYTY5MzYzZTkzMWM3ZjFhYWVlYjNkNjU4ZDVhNWVmMjNmIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTA4LDYgKzEwOCw4IEBACiAJCTJFNjkxQUYzMUQ3OUU3NUUwMDEyOTQw
NyAvKiBsYXJnZS12aWRlby1wbGF5aW5nLXNjcm9sbC1hd2F5Lmh0bWwgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2OTFBRjIxRDc5RTc1NDAw
MTI5NDA3IC8qIGxhcmdlLXZpZGVvLXBsYXlpbmctc2Nyb2xsLWF3YXkuaHRtbCAqLzsgfTsKIAkJ
MkU3NzY1Q0QxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5JT1MubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc3NjVDQzE2QzREODBBMDBCQTJCQjEgLyog
bWFpbklPUy5tbSAqLzsgfTsKIAkJMkU3NzY1Q0YxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc3NjVD
RTE2QzREODExMDBCQTJCQjEgLyogbWFpbk1hYy5tbSAqLzsgfTsKKwkJMkU5MkI4RjcyMTY0OTBE
NDAwNUI2NEYwIC8qIHJpY2gtdGV4dC1hdHRyaWJ1dGVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5MkI4RjYyMTY0OTBDMzAwNUI2
NEYwIC8qIHJpY2gtdGV4dC1hdHRyaWJ1dGVzLmh0bWwgKi87IH07CisJCTJFOTJCOEZBMjE2NEEw
QzEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTJCOEY4MjE2NDkwRUEwMDVCNjRGMCAvKiBGb250QXR0
cmlidXRlcy5tbSAqLzsgfTsKIAkJMkU5ODk2MTUxRDhGMDkzODAwNzM5ODkyIC8qIHRleHQtYW5k
LXBhc3N3b3JkLWlucHV0cy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTg5NjE0MUQ4RjA5MkIwMDczOTg5MiAvKiB0ZXh0LWFuZC1w
YXNzd29yZC1pbnB1dHMuaHRtbCAqLzsgfTsKIAkJMkVCMjlENUUxRjc2MkRCOTAwMjNBNUYxIC8q
IGR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCMjlENUQxRjc2MkRBNTAwMjNBNUYxIC8qIGR1
bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0bWwgKi87IH07CiAJCTJFQkQ5RDBBMjEzNDczMEQwMDJE
QTc1OCAvKiB2aWRlby5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3Q0QzMkY3MjA2NUI3MkEwMDY0QTRCRSAvKiB2aWRlby5odG1sICov
OyB9OwpAQCAtMTE1Myw2ICsxMTU1LDcgQEAKIAkJCQlGNkZERERENjE0MjQxQzZGMDA0RjE3Mjkg
LyogcHVzaC1zdGF0ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCUExMkREQzAwMUU4
MzczRTcwMENGNkNBRSAvKiByZW5kZXJlZC1pbWFnZS1leGNsdWRpbmctb3ZlcmZsb3cuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlGNDY4NDlDMDFFRUY1RUYzMDBCOTM3RkUgLyogcmlj
aC1hbmQtcGxhaW4tdGV4dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAorCQkJCTJFOTJCOEY3
MjE2NDkwRDQwMDVCNjRGMCAvKiByaWNoLXRleHQtYXR0cmlidXRlcy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAogCQkJCTBGNTY1MUY5MUZDRTUxMzUwMDMxMEZCQyAvKiBzY3JvbGwtdG8tYW5j
aG9yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjRFMEEyOTYyMTFGQzVGQjAwQUY3
QzdGIC8qIHNlbGVjdGVkLXRleHQtYW5kLXRleHRhcmVhLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJRjRENjVEQTgxRjVFNDcwNDAwOUQ4QzI3IC8qIHNlbGVjdGVkLXRleHQtaW1hZ2Ut
bGluay1hbmQtZWRpdGFibGUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKQEAgLTEzNTUsNiAr
MTM1OCw4IEBACiAJCTJFNzc2NUNDMTZDNEQ4MEEwMEJBMkJCMSAvKiBtYWluSU9TLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbWFpbklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU3NzY1Q0UxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtYWluTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdFRjdBQzFGMjY2QTgxMDBERkI2N0MgLyog
QXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyRTkyQjhGNjIxNjQ5MEMzMDA1QjY0RjAgLyogcmljaC10ZXh0LWF0dHJp
YnV0ZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJyaWNoLXRleHQtYXR0cmli
dXRlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkU5MkI4RjgyMTY0OTBF
QTAwNUI2NEYwIC8qIEZvbnRBdHRyaWJ1dGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gRm9udEF0dHJpYnV0ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJFOTg5NjE0MUQ4RjA5MkIwMDczOTg5MiAvKiB0ZXh0LWFuZC1wYXNzd29yZC1pbnB1
dHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJ0ZXh0LWFuZC1wYXNzd29yZC1p
bnB1dHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFQjI5RDVEMUY3NjJE
QTUwMDIzQTVGMSAvKiBkdW1wLWRhdGF0cmFuc2Zlci10eXBlcy5odG1sICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5odG1sOyBwYXRoID0gImR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyRUNGRjU1NDFEOUIxMkY4MDBCNTUzOTQgLyogTm93UGxheWlu
Z0NvbnRyb2xzVGVzdHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBOb3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIzMzcsNiArMjM0Miw3IEBACiAJCQkJQ0RBMjlCMjgyMEZEMkE5OTAwRjE1Q0VEIC8qIEV4
aXRGdWxsc2NyZWVuT25FbnRlclBpUC5tbSAqLywKIAkJCQkyRDgxMDRDQjFCRUMxM0U3MDAyMERB
NDYgLyogRmluZEluUGFnZS5tbSAqLywKIAkJCQkyRDFGRTBBRjFBRDQ2NUMxMDA2Q0Q5RTYgLyog
Rml4ZWRMYXlvdXRTaXplLm1tICovLAorCQkJCTJFOTJCOEY4MjE2NDkwRUEwMDVCNjRGMCAvKiBG
b250QXR0cmlidXRlcy5tbSAqLywKIAkJCQk1Q0I1QjNCRDFGRkM1MTdFMDBDMjdCQjAgLyogRnJh
bWVIYW5kbGVTZXJpYWxpemF0aW9uLm1tICovLAogCQkJCUNENzhFMTFBMURCN0VBMzYwMDE0QTJE
RSAvKiBGdWxsc2NyZWVuRGVsZWdhdGUubW0gKi8sCiAJCQkJM0YxQjUyNjgxRDNENzEyOTAwOEQ2
MEM0IC8qIEZ1bGxzY3JlZW5MYXlvdXRDb25zdHJhaW50cy5tbSAqLywKQEAgLTI3NTcsNiArMjc2
Myw3IEBACiAJCQkJRjQxQUI5OUExRUY0NjkyQzAwODNGQTA4IC8qIHByZXZlbnQtc3RhcnQuaHRt
bCAqLywKIAkJCQlBMTJEREJGRjFFODM3M0MxMDBDRjZDQUUgLyogcmVuZGVyZWQtaW1hZ2UtZXhj
bHVkaW5nLW92ZXJmbG93Lmh0bWwgKi8sCiAJCQkJRjQ2ODQ5QkYxRUVGNUVEQzAwQjkzN0ZFIC8q
IHJpY2gtYW5kLXBsYWluLXRleHQuaHRtbCAqLywKKwkJCQkyRTkyQjhGNjIxNjQ5MEMzMDA1QjY0
RjAgLyogcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbCAqLywKIAkJCQlGNEUwQTI5NTIxMUZDNUEz
MDBBRjdDN0YgLyogc2VsZWN0ZWQtdGV4dC1hbmQtdGV4dGFyZWEuaHRtbCAqLywKIAkJCQlGNEQ2
NURBNzFGNUU0NkMwMDA5RDhDMjcgLyogc2VsZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0
YWJsZS5odG1sICovLAogCQkJCUY0RTNEODA3MjBGNzA4RTQwMDdCNThDNSAvKiBzaWduaWZpY2Fu
dC10ZXh0LW1pbGVzdG9uZS1hcnRpY2xlLmh0bWwgKi8sCkBAIC0zNzk1LDYgKzM4MDIsNyBAQAog
CQkJCTdBOTA5QTdGMUQ4Nzc0ODAwMDdFMTBGOCAvKiBGbG9hdFJlY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0E5MDlBODAxRDg3NzQ4MDAwN0UxMEY4IC8qIEZsb2F0U2l6ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGNEJDMEIxNDIxNDZDODQ5MDAyQTA0NzggLyogRm9jdXNQcmVzZXJ2YXRp
b25UZXN0cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJFOTJCOEZBMjE2NEEwQzEwMDVCNjRGMCAv
KiBGb250QXR0cmlidXRlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDQUQxRjg2MUU1Q0U3REEw
MEFGMkMyQyAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQ1NkFCMUMyMTNF
REJBMzAwQ0IyQ0VGIC8qIEZvbnRNYW5hZ2VyVGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3
Q0NFN0VGNTFBNDExQUU2MDA0NDdDNEMgLyogRm9yY2VSZXBhaW50LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Gb250
QXR0cmlidXRlcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRm9u
dEF0dHJpYnV0ZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY2ZWE3Yzc1Njk0YWUyZWMzYmQ0ZDAzYTcwZDVi
MGJkYmEwZWZlNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvRm9udEF0dHJpYnV0ZXMubW0KQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBXS19BUElf
RU5BQkxFRAorCisjaW1wb3J0ICJOU0ZvbnRQYW5lbFRlc3RpbmcuaCIKKyNpbXBvcnQgIlBsYXRm
b3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8Y21h
dGg+CisjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KKworQGludGVyZmFjZSBGb250QXR0cmlidXRl
c0xpc3RlbmVyIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+CitAcHJvcGVydHkgKG5v
bmF0b21pYywgcmVhZG9ubHkpIE5TRGljdGlvbmFyeSAqbGFzdEZvbnRBdHRyaWJ1dGVzOworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gRm9udEF0dHJpYnV0ZXNMaXN0ZW5lciB7CisgICAgUmV0YWlu
UHRyPE5TRGljdGlvbmFyeT4gX2xhc3RGb250QXR0cmlidXRlczsKK30KKworLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBmb250QXR0cmlidXRlc0RpZENoYW5nZTooTlNEaWN0
aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKWZvbnRBdHRyaWJ1dGVzCit7CisgICAgX2xhc3RGb250
QXR0cmlidXRlcyA9IGZvbnRBdHRyaWJ1dGVzOworfQorCistIChOU0RpY3Rpb25hcnkgKilsYXN0
Rm9udEF0dHJpYnV0ZXMKK3sKKyAgICByZXR1cm4gX2xhc3RGb250QXR0cmlidXRlcy5nZXQoKTsK
K30KKworQGVuZAorCitAaW50ZXJmYWNlIFRlc3RXS1dlYlZpZXcgKEZvbnRBdHRyaWJ1dGVzVGVz
dGluZykKKy0gKHZvaWQpc2VsZWN0RWxlbWVudFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlk
ZW50aWZpZXI7CistIChOU0RpY3Rpb25hcnkgKilmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKEZv
bnRBdHRyaWJ1dGVzVGVzdGluZykKKworLSAodm9pZClzZWxlY3RFbGVtZW50V2l0aElkZW50aWZp
ZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAgIFtzZWxmIG9iamVjdEJ5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6CisgICAgICAgIEAiZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCclQCcpOyIKKyAgICAgICAgInJhbmdlID0gZG9j
dW1lbnQuY3JlYXRlUmFuZ2UoKTsiCisgICAgICAgICJyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMo
ZWxlbWVudCk7IgorICAgICAgICAiZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7Igor
ICAgICAgICAiZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpIiwgaWRlbnRpZmllcl1dOwor
fQorCistIChOU0RpY3Rpb25hcnkgKilmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRhdGlv
blVwZGF0ZQoreworICAgIFtzZWxmIHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAg
ICByZXR1cm4gWyhGb250QXR0cmlidXRlc0xpc3RlbmVyICopc2VsZi5VSURlbGVnYXRlIGxhc3RG
b250QXR0cmlidXRlc107Cit9CisKK0BlbmQKKworI2lmIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUg
UGxhdGZvcm1Db2xvciBOU0NvbG9yCisjZGVmaW5lIFBsYXRmb3JtRm9udCBOU0ZvbnQKKyNlbHNl
CisjZGVmaW5lIFBsYXRmb3JtQ29sb3IgVUlDb2xvcgorI2RlZmluZSBQbGF0Zm9ybUZvbnQgVUlG
b250CitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lID0g
QCJOU1N1cGVyc2NyaXB0IjsKKyNlbmRpZgorCitlbnVtIGNsYXNzIE51bGxhYmlsaXR5IDogdWlu
dDhfdCB7IE51bGwsIE5vbk51bGwgfTsKKworc3RydWN0IENvbG9yRXhwZWN0YXRpb24geworICAg
IENvbG9yRXhwZWN0YXRpb24oQ0dGbG9hdCByZWRWYWx1ZSwgQ0dGbG9hdCBncmVlblZhbHVlLCBD
R0Zsb2F0IGJsdWVWYWx1ZSwgQ0dGbG9hdCBhbHBoYVZhbHVlKQorICAgICAgICA6IHJlZChyZWRW
YWx1ZSkKKyAgICAgICAgLCBncmVlbihncmVlblZhbHVlKQorICAgICAgICAsIGJsdWUoYmx1ZVZh
bHVlKQorICAgICAgICAsIGFscGhhKGFscGhhVmFsdWUpCisgICAgICAgICwgbnVsbGFiaWxpdHko
TnVsbGFiaWxpdHk6Ok5vbk51bGwpCisgICAgeworICAgIH0KKworICAgIENvbG9yRXhwZWN0YXRp
b24oKSA9IGRlZmF1bHQ7CisKKyAgICBDR0Zsb2F0IHJlZCB7IDAgfTsKKyAgICBDR0Zsb2F0IGdy
ZWVuIHsgMCB9OworICAgIENHRmxvYXQgYmx1ZSB7IDAgfTsKKyAgICBDR0Zsb2F0IGFscGhhIHsg
MCB9OworICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5IHsgTnVsbGFiaWxpdHk6Ok51bGwgfTsK
K307CisKK3N0cnVjdCBTaGFkb3dFeHBlY3RhdGlvbiB7CisgICAgU2hhZG93RXhwZWN0YXRpb24o
Q0dGbG9hdCBvcGFjaXR5VmFsdWUsIENHRmxvYXQgYmx1clJhZGl1c1ZhbHVlKQorICAgICAgICA6
IG9wYWNpdHkob3BhY2l0eVZhbHVlKQorICAgICAgICAsIGJsdXJSYWRpdXMoYmx1clJhZGl1c1Zh
bHVlKQorICAgICAgICAsIG51bGxhYmlsaXR5KE51bGxhYmlsaXR5OjpOb25OdWxsKQorICAgIHsK
KyAgICB9CisKKyAgICBTaGFkb3dFeHBlY3RhdGlvbigpID0gZGVmYXVsdDsKKworICAgIENHRmxv
YXQgb3BhY2l0eSB7IDAgfTsKKyAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgeyAwIH07CisgICAgTnVs
bGFiaWxpdHkgbnVsbGFiaWxpdHkgeyBOdWxsYWJpbGl0eTo6TnVsbCB9OworfTsKKworc3RydWN0
IEZvbnRFeHBlY3RhdGlvbiB7CisgICAgY29uc3QgY2hhciogZm9udE5hbWU7CisgICAgQ0dGbG9h
dCBmb250U2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIGNoZWNrQ29sb3IoUGxhdGZvcm1Db2xvciAq
Y29sb3IsIENvbG9yRXhwZWN0YXRpb24mJiBleHBlY3RhdGlvbikKK3sKKyAgICBpZiAoZXhwZWN0
YXRpb24ubnVsbGFiaWxpdHkgPT0gTnVsbGFiaWxpdHk6Ok51bGwpIHsKKyAgICAgICAgRVhQRUNU
X05VTEwoY29sb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRVhQRUNUX05PVF9O
VUxMKGNvbG9yKTsKKworICAgIENHRmxvYXQgb2JzZXJ2ZWRSZWQgPSAwOworICAgIENHRmxvYXQg
b2JzZXJ2ZWRHcmVlbiA9IDA7CisgICAgQ0dGbG9hdCBvYnNlcnZlZEJsdWUgPSAwOworICAgIENH
RmxvYXQgb2JzZXJ2ZWRBbHBoYSA9IDA7CisgICAgW2NvbG9yIGdldFJlZDomb2JzZXJ2ZWRSZWQg
Z3JlZW46Jm9ic2VydmVkR3JlZW4gYmx1ZTomb2JzZXJ2ZWRCbHVlIGFscGhhOiZvYnNlcnZlZEFs
cGhhXTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0YXRpb24ucmVkLCBzdGQ6OnJvdW5kKG9ic2VydmVk
UmVkICogMjU1KSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGF0aW9uLmdyZWVuLCBzdGQ6OnJvdW5k
KG9ic2VydmVkR3JlZW4gKiAyNTUpKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0YXRpb24uYmx1ZSwg
c3RkOjpyb3VuZChvYnNlcnZlZEJsdWUgKiAyNTUpKTsKKyAgICBFWFBFQ1RfTFQoc3RkOjphYnMo
ZXhwZWN0YXRpb24uYWxwaGEgLSBvYnNlcnZlZEFscGhhKSwgMC4wMDAxKTsKK30KKworc3RhdGlj
IHZvaWQgY2hlY2tTaGFkb3coTlNTaGFkb3cgKnNoYWRvdywgU2hhZG93RXhwZWN0YXRpb24mJiBl
eHBlY3RhdGlvbikKK3sKKyAgICBpZiAoZXhwZWN0YXRpb24ubnVsbGFiaWxpdHkgPT0gTnVsbGFi
aWxpdHk6Ok51bGwpIHsKKyAgICAgICAgRVhQRUNUX05VTEwoc2hhZG93KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEVYUEVDVF9OT1RfTlVMTChzaGFkb3cpOworCisgICAgQ0dGbG9h
dCBvYnNlcnZlZEFscGhhID0gMDsKKyAgICBbc2hhZG93LnNoYWRvd0NvbG9yIGdldFJlZDpudWxs
cHRyIGdyZWVuOm51bGxwdHIgYmx1ZTpudWxscHRyIGFscGhhOiZvYnNlcnZlZEFscGhhXTsKKyAg
ICBFWFBFQ1RfTFQoc3RkOjphYnMoZXhwZWN0YXRpb24ub3BhY2l0eSAtIG9ic2VydmVkQWxwaGEp
LCAwLjAwMDEpOworICAgIEVYUEVDVF9FUShleHBlY3RhdGlvbi5ibHVyUmFkaXVzLCBzaGFkb3cu
c2hhZG93Qmx1clJhZGl1cyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrRm9udChQbGF0Zm9ybUZv
bnQgKmZvbnQsIEZvbnRFeHBlY3RhdGlvbiYmIGV4cGVjdGF0aW9uKQoreworICAgIEVYUEVDVF9X
S19TVFJFUShleHBlY3RhdGlvbi5mb250TmFtZSwgZm9udC5mb250TmFtZSk7CisgICAgRVhQRUNU
X0VRKGV4cGVjdGF0aW9uLmZvbnRTaXplLCBmb250LnBvaW50U2l6ZSk7Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlld0ZvclRlc3RpbmdGb250QXR0cmlidXRlcygp
Cit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJyaWNoLXRleHQtYXR0cmlidXRlcyJdOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmZvY3VzKCkiXTsKKyAgICByZXR1cm4gd2ViVmlldzsKK30KKworVEVTVChGb250QXR0cmlidXRl
cywgRm9udEF0dHJpYnV0ZXNBZnRlckNoYW5naW5nU2VsZWN0aW9uKQoreworICAgIGF1dG8gZGVs
ZWdhdGUgPSBhZG9wdE5TKFtGb250QXR0cmlidXRlc0xpc3RlbmVyIG5ld10pOworICAgIGF1dG8g
d2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nRm9udEF0dHJpYnV0ZXMoKTsKKyAgICBbd2ViVmll
dyBzZXRVSURlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKworICAgIHsKKyAgICAgICAgW3dlYlZp
ZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlmaWVyOkAib25lIl07CisgICAgICAgIE5TRGljdGlv
bmFyeSAqYXR0cmlidXRlcyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlXTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgMjI3LCAzNiwgMCwgMSB9KTsKKyAgICAgICAgY2hlY2tD
b2xvcihhdHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgMjU1LCAx
OTksIDExOSwgMSB9KTsKKyAgICAgICAgY2hlY2tGb250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmli
dXRlTmFtZV0sIHsgIkhlbHZldGljYS1Cb2xkIiwgNDggfSk7CisgICAgICAgIGNoZWNrU2hhZG93
KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgRVhQRUNU
X0VRKE5TVW5kZXJsaW5lU3R5bGVTaW5nbGUsIFthdHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0
eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUShOU1Vu
ZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5h
bWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNT
dXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgIH0KKyAgICB7Cisg
ICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRoSWRlbnRpZmllcjpAInR3byJdOworICAg
ICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbd2ViVmlldyBmb250QXR0cmlidXRlc0Fm
dGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmlidXRl
c1tOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdLCB7IDEwMiwgMTU3LCA1MiwgMSB9KTsK
KyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV0sIHsgMjU1LCAxOTcsIDE3MSwgMSB9KTsKKyAgICAgICAgY2hlY2tGb250KGF0dHJpYnV0
ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkhlbHZldGljYS1Cb2xkIiwgNDggfSk7CisgICAg
ICAgIGNoZWNrU2hhZG93KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1lXSwgeyAwLjQ3
MDU4OCwgNSB9KTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0
cmlidXRlc1tOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0p
OworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZVNpbmdsZSwgW2F0dHJpYnV0ZXNb
TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBF
WFBFQ1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVn
ZXJWYWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRX
aXRoSWRlbnRpZmllcjpAInRocmVlIl07CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRl
cyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsK
KyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV0sIHsgMjU1LCAxMDYsIDAsIDEgfSk7CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmlidXRl
c1tOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBjaGVja0Zv
bnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwgeyAiTWVubG8tSXRhbGljIiwgMTgg
fSk7CisgICAgICAgIGNoZWNrU2hhZG93KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1l
XSwgeyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmli
dXRlc1tOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOwor
ICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNU
X0VRKDAsIFthdHRyaWJ1dGVzW05TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFs
dWVdKTsKKyAgICB9CisgICAgeworICAgICAgICBbd2ViVmlldyBzZWxlY3RFbGVtZW50V2l0aElk
ZW50aWZpZXI6QCJmb3VyIl07CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFt3
ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICAg
ICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0s
IHsgMjU1LCAyNTUsIDI1NSwgMSB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05T
QmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgMCwgMCwgMCwgMSB9KTsKKyAgICAgICAg
Y2hlY2tGb250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkF2ZW5pci1Cb29r
IiwgMjQgfSk7CisgICAgICAgIGNoZWNrU2hhZG93KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRyaWJ1
dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBb
YXR0cmlidXRlc1tOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1
ZV0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVz
W05TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAg
RVhQRUNUX0VRKDAsIFthdHRyaWJ1dGVzW05TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRl
Z2VyVmFsdWVdKTsKKyAgICB9CisgICAgeworICAgICAgICBbd2ViVmlldyBzZWxlY3RFbGVtZW50
V2l0aElkZW50aWZpZXI6QCJmaXZlIl07CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRl
cyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsK
KyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV0sIHsgMTMxLCAxNiwgMCwgMSB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVz
W05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNrRm9u
dChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVdLCB7ICJUaW1lc05ld1JvbWFuUFMtQm9s
ZE1UIiwgMjQgfSk7CisgICAgICAgIGNoZWNrU2hhZG93KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRy
aWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25l
LCBbYXR0cmlidXRlc1tOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJW
YWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1
dGVzW05TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDAsIFthdHRyaWJ1dGVzW05TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBp
bnRlZ2VyVmFsdWVdKTsKKyAgICB9CisgICAgeworICAgICAgICBbd2ViVmlldyBzZWxlY3RFbGVt
ZW50V2l0aElkZW50aWZpZXI6QCJzaXgiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVd
OworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXSwgeyAyNTUsIDY0LCAxOSwgMSB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1
dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNr
Rm9udChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVdLCB7ICJBdmVuaXItQmxhY2siLCAx
OCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5h
bWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRy
aWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7
CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNV
bmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBF
Q1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJW
YWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRo
SWRlbnRpZmllcjpAInNldmVuIl07CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9
IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAg
ICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV0sIHsgMjM1LCAyMzUsIDIzNSwgMSB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVz
W05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgNzgsIDEyMiwgMzksIDEgfSk7Cisg
ICAgICAgIGNoZWNrRm9udChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVdLCB7ICJBdmVu
aXItQm9va09ibGlxdWUiLCAxMiB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tO
U1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxp
bmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFt
ZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9u
ZSwgW2F0dHJpYnV0ZXNbTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1
ZV0pOworICAgICAgICBFWFBFQ1RfRVEoLTEsIFthdHRyaWJ1dGVzW05TU3VwZXJzY3JpcHRBdHRy
aWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICB9CisgICAgeworICAgICAgICBbd2ViVmll
dyBzZWxlY3RFbGVtZW50V2l0aElkZW50aWZpZXI6QCJlaWdodCJdOworICAgICAgICBOU0RpY3Rp
b25hcnkgKmF0dHJpYnV0ZXMgPSBbd2ViVmlldyBmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNl
bnRhdGlvblVwZGF0ZV07CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmlidXRlc1tOU0ZvcmVncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0
ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgY2hlY2tG
b250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkF2ZW5pci1Cb29rIiwgMTIg
fSk7CisgICAgICAgIGNoZWNrU2hhZG93KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1l
XSwgeyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmli
dXRlc1tOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOwor
ICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNU
X0VRKDEsIFthdHRyaWJ1dGVzW05TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFs
dWVdKTsKKyAgICB9CisgICAgeworICAgICAgICBbd2ViVmlldyBzZWxlY3RFbGVtZW50V2l0aElk
ZW50aWZpZXI6QCJuaW5lIl07CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFt3
ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICAg
ICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0s
IHsgfSk7CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmlidXRlc1tOU0JhY2tncm91bmRDb2xvckF0
dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0cmlidXRlc1tOU0ZvbnRB
dHRyaWJ1dGVOYW1lXSwgeyAiR2VvcmdpYSIsIDM2IH0pOworICAgICAgICBjaGVja1NoYWRvdyhh
dHRyaWJ1dGVzW05TU2hhZG93QXR0cmlidXRlTmFtZV0sIHsgMC42NTg4MjQsIDkgfSk7CisgICAg
ICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNTdHJpa2V0
aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNU
X0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1VuZGVybGluZVN0eWxlQXR0
cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBbYXR0cmli
dXRlc1tOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgW3dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlmaWVyOkAidGVu
Il07CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFt3ZWJWaWV3IGZvbnRBdHRy
aWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICAgICAgY2hlY2tDb2xvcihh
dHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAg
IGNoZWNrQ29sb3IoYXR0cmlidXRlc1tOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdLCB7
IH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwg
eyAiQXZlbmlyLUJvb2tPYmxpcXVlIiwgMTggfSk7CisgICAgICAgIGNoZWNrU2hhZG93KGF0dHJp
YnV0ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgRVhQRUNUX0VRKE5T
VW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJp
YnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVT
dHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRl
Z2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFthdHRyaWJ1dGVzW05TU3VwZXJzY3Jp
cHRBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICB9Cit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9yaWNoLXRleHQt
YXR0cmlidXRlcy5odG1sIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9y
aWNoLXRleHQtYXR0cmlidXRlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlOGNlMDRhOWQ2ZDQxMGZlOTVm
MjY2M2JhMTk2Mjg2ZTA5ZGIxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL3JpY2gtdGV4dC1hdHRyaWJ1dGVzLmh0bWwKQEAgLTAsMCAr
MSwzNCBAQAorPCFET0NUWVBFIGh0bWw+Cis8bWV0YSBjaGFyc2V0PSJ1dGY4Ij4KKzxodG1sPgor
PGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5LCBodG1sIHsKKyAgICAgICAgICAgIGZv
bnQtZmFtaWx5OiAiSGVsdmV0aWNhIjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keSBjb250ZW50ZWRpdGFibGU+CisgICAgPGRpdj4KKyAgICAgICAgPGRpdiBzdHlsZT0i
dGV4dC1hbGlnbjogbGVmdDsiPgorICAgICAgICAgICAgPHNwYW4gaWQ9Im9uZSIgc3R5bGU9ImZv
bnQtc2l6ZTogNDhweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiByZ2IoMjI3LCAzNiwgMCk7
IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDE5OSwgMTE5KTsgdGV4dC1kZWNvcmF0aW9uOiBs
aW5lLXRocm91Z2g7Ij5PbmU8L3NwYW4+PHNwYW4gaWQ9InR3byIgc3R5bGU9ImNhcmV0LWNvbG9y
OiByZ2IoMTAyLCAxNTcsIDUyKTsgY29sb3I6IHJnYigxMDIsIDE1NywgNTIpOyBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjU1LCAxOTcsIDE3MSk7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBm
b250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiA0OHB4OyB0ZXh0LXNoYWRvdzogcmdiYSgwLCAw
LCAwLCAwLjQ3MDU4OCkgMHB4IDBweCA1cHg7Ij5Ud288L3NwYW4+CisgICAgICAgIDwvZGl2Pgor
ICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KKyAgICAgICAgICAgIDxz
cGFuIGlkPSJ0aHJlZSIgc3R5bGU9ImNvbG9yOiByZ2IoMjU1LCAxMDYsIDApOyBmb250LWZhbWls
eTogTWVubG87IGZvbnQtc2l6ZTogMThweDsgZm9udC1zdHlsZTogaXRhbGljOyI+VGhyZWU8L3Nw
YW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMjRweDsiPjxzcGFuIGlkPSJmb3VyIiBzdHlsZT0i
Zm9udC1mYW1pbHk6IEF2ZW5pci1Cb29rOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMCwgMCk7
IGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ij5Gb3VyPC9zcGFuPjxzcGFuIGlkPSJmaXZlIiBz
dHlsZT0iY29sb3I6IHJnYigxMzEsIDE2LCAwKTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtZmFt
aWx5OiAnVGltZXMgTmV3IFJvbWFuJzsiPkZpdmU8L3NwYW4+PC9zcGFuPgorICAgICAgICA8L2Rp
dj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+CisgICAg
ICAgIDx1bD4KKyAgICAgICAgICAgIDxsaT48c3BhbiBpZD0ic2l4IiBzdHlsZT0iY29sb3I6IHJn
YigyNTUsIDY0LCAxOSk7IGZvbnQtZmFtaWx5OiBBdmVuaXItQm9vazsgZm9udC1zaXplOiAxOHB4
OyBmb250LXdlaWdodDogYm9sZDsiPlNpeDwvc3Bhbj48YnI+PC9saT4KKyAgICAgICAgICAgIDxs
aT48c3BhbiBpZD0ic2V2ZW4iIHN0eWxlPSJmb250LWZhbWlseTogQXZlbmlyLUJvb2s7IGZvbnQt
c3R5bGU6IGl0YWxpYzsgY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTsgYmFja2dyb3VuZC1jb2xv
cjogcmdiKDc4LCAxMjIsIDM5KTsgdmVydGljYWwtYWxpZ246IHN1YjsgZm9udC1zaXplOiAxMnB4
OyI+U2V2ZW48L3NwYW4+PC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPG9sPgorICAgICAg
ICAgICAgPGxpPjxzcGFuIGlkPSJlaWdodCIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBdmVuaXItQm9v
azsgdmVydGljYWwtYWxpZ246IHN1cGVyOyBmb250LXNpemU6IDEycHg7Ij5FaWdodDwvc3Bhbj48
L2xpPgorICAgICAgICAgICAgPGxpPjxzcGFuIGlkPSJuaW5lIiBzdHlsZT0iZm9udC1mYW1pbHk6
IEdlb3JnaWE7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC1zaXplOiAzNnB4OyB0ZXh0LXNoYWRv
dzogcmdiYSgwLCAwLCAwLCAwLjY1ODgyNCkgMHB4IDBweCA5cHg7Ij5OaW5lPC9zcGFuPjwvbGk+
CisgICAgICAgIDwvb2w+CisgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+
CisgICAgICAgICAgICA8c3BhbiBpZD0idGVuIiBzdHlsZT0iZm9udC1mYW1pbHk6IEF2ZW5pci1C
b29rOyBmb250LXNpemU6IDE4cHg7IGZvbnQtc3R5bGU6IG9ibGlxdWU7Ij5UZW48L3NwYW4+Cisg
ICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="368869"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351547</attachid>
            <date>2018-10-03 14:39:51 -0700</date>
            <delta_ts>2018-10-04 15:07:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190119-20181003143950.patch</filename>
            <type>text/plain</type>
            <size>46789</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI2ZmRkYTY1NjQyY2Y1ZTVh
ZTIxZWZmYWIxMjMwYWJhZTgzYzBlNGQuLjAwMzA5ZWY5MDBiMWI3ZmE5NzI4ZmU3ZDE1NjJjOGE1
NjAzNmY0YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTgtMTAtMDMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQWRkIFNQSSB0
byBleHBvc2UgdHlwaW5nIGF0dHJpYnV0ZXMgYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9uIFdL
V2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkwMTE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDc2NzA2Mj4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBuZXcgV2ViS2l0
MiBTUEkgdG8gbm90aWZ5IHRoZSBVSSBkZWxlZ2F0ZSBhYm91dCBmb250IGF0dHJpYnV0ZXMgd2hl
biB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMgKGUuZy4KKyAgICAgICAgZHVlIHRvIHNlbGVjdGlv
biBjaGFuZ2VzLCBvciBleGVjdXRpbmcgYW4gZWRpdCBjb21tYW5kKS4gU2VlIGJlbG93IGZvciBt
b3JlIGRldGFpbC4KKworICAgICAgICBUZXN0OiBGb250QXR0cmlidXRlcy5Gb250QXR0cmlidXRl
c0FmdGVyQ2hhbmdpbmdTZWxlY3Rpb24KKworICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZW5jb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjpk
ZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5oOgorCisgICAgICAgIEFkZCBh
IG5ldyBvcHRpb25hbCBgRm9udEF0dHJpYnV0ZXNgIG1lbWJlciB0byBFZGl0b3JTdGF0ZSdzIHBv
c3QtbGF5b3V0IGRhdGEuIEZvbnRBdHRyaWJ1dGVzIGFyZSBjb21wdXRlZCBhbmQKKyAgICAgICAg
c2VudCBvdmVyIElQQyBvbmx5IGlmIHRoZSBVSSBkZWxlZ2F0ZSBpbXBsZW1lbnRzIHRoZSBuZXcg
ZGVsZWdhdGUgaG9vayB3aGljaCByZXF1aXJlcyBpbmZvcm1hdGlvbiBhYm91dCBmb250CisgICAg
ICAgIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaDoK
KworICAgICAgICBBZGQgYSBuZXcgZmxhZyBmb3IgdGhlIFVJIHByb2Nlc3MgdG8gbGV0IGEgbmV3
IHdlYiBwYWdlIGtub3cgd2hldGhlciBpdCBzaG91bGQgYWRkaXRpb25hbGx5IGNvbXB1dGUgZm9u
dAorICAgICAgICBhdHRyaWJ1dGVzIHdoZW4gY29tcHV0aW5nIGVkaXRvciBzdGF0ZS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaDoKKyAgICAgICAgKEFQSTo6VUlDbGll
bnQ6Om5lZWRzRm9udEF0dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAoQVBJOjpVSUNsaWVudDo6
Zm9udEF0dHJpYnV0ZXNEaWRDaGFuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVSURlbGVnYXRlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZENoYW5nZUVkaXRvclN0YXRlXSk6
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6
c2V0RGVsZWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Zm9u
dEF0dHJpYnV0ZXNEaWRDaGFuZ2UpOgorCisgICAgICAgIENhbGwgb3V0IHRvIHRoZSBVSSBkZWxl
Z2F0ZSB3aXRoIGEgZm9udCBhdHRyaWJ1dGUgZGljdGlvbmFyeSwgY3JlYXRlZCB2aWEgRm9udEF0
dHJpYnV0ZXMgb24gRWRpdG9yU3RhdGUncworICAgICAgICBwb3N0LWxheW91dCBkYXRhLgorCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6c2V0VUlDbGllbnQpOgorCisgICAgICAgIFVwZGF0ZSB3aGV0aGVyIG9yIG5v
dCB0aGUgVUkgcHJvY2VzcyBuZWVkcyB0byBrbm93IGFib3V0IGZvbnQgYXR0cmlidXRlcy4gVGhl
IFVJIHByb2Nlc3Mgb25seSByZXF1aXJlcyBmb250CisgICAgICAgIGF0dHJpYnV0ZSBpbmZvcm1h
dGlvbiBpZiB0aGUgVUkgZGVsZWdhdGUgaW1wbGVtZW50cyBgLV93ZWJWaWV3OmZvbnRBdHRyaWJ1
dGVzRGlkQ2hhbmdlOmAuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXROZWVk
c0ZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGlv
blBhcmFtZXRlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmVk
aXRvclN0YXRlQ2hhbmdlZCk6CisKKyAgICAgICAgVXBkYXRlIHRoZSBjYWNoZWQgZm9udCBhdHRy
aWJ1dGVzIGluIHRoZSBVSSBwcm9jZXNzIHdoZW4gcmVjZWl2aW5nIGEgbmV3IGVkaXRvciBzdGF0
ZSB1cGRhdGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Om1fY3B1TGltaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpl
ZGl0b3JTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldE5lZWRzRm9u
dEF0dHJpYnV0ZXMpOgorCisgICAgICAgIEFkZCBhIG5ldyBJUEMgaG9vayB0byB1cGRhdGUgd2hl
dGhlciBvciBub3QgdGhlIHBhZ2Ugc2hvdWxkIGFkZGl0aW9uYWxseSBjb21wdXRlIGZvbnQgYXR0
cmlidXRlcy4gSW4gdGhlIGNhc2UKKyAgICAgICAgd2hlcmUgdGhlIFVJIGRlbGVnYXRlIGNoYW5n
ZXMgZnJvbSBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGZvbnQgYXR0cmlidXRlcyB0
byBvbmUgdGhhdCBkb2VzLCB3ZQorICAgICAgICBhZGRpdGlvbmFsbHkgc2NoZWR1bGUgYW4gZWRp
dG9yIHN0YXRlIHVwZGF0ZS4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVGb250
QXR0cmlidXRlc0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UpOgorCisgICAgICAgIFByaXZhdGUgaGVs
cGVyIGZ1bmN0aW9uIHRvIHBsdW1iIEZvbnRBdHRyaWJ1dGVzIHRvIHRoZSBVSSBjbGllbnQgYWZ0
ZXIgYW4gZWRpdG9yIHN0YXRlIGNoYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW46CisKIDIwMTgtMTAtMDMgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtXUEVdW0dUS10gRW5hYmxlIE1TRSBieSBkZWZhdWx0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKaW5kZXggMmRmYTUxODY2YzQzZTE0NDI0ODZiYTE0
YTE1YmE1YjlkOGRiOWViMy4uY2ZiYzJjOTU3OWFlMmI5NTRjYzlmOGRhZWM3OTMyYWUzYTNkMGIw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcApAQCAtMTM4LDYgKzEzOCw5IEBA
IHZvaWQgRWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgcGFyYWdyYXBoQ29udGV4dEZvckNhbmRpZGF0
ZVJlcXVlc3Q7CiAgICAgZW5jb2RlciA8PCBzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0OwogI2Vu
ZGlmCisgICAgZW5jb2RlciA8PCAhIWZvbnRBdHRyaWJ1dGVzOworICAgIGlmIChmb250QXR0cmli
dXRlcykKKyAgICAgICAgZW5jb2RlciA8PCBmb250QXR0cmlidXRlcy52YWx1ZSgpOwogICAgIGVu
Y29kZXIgPDwgY2FuQ3V0OwogICAgIGVuY29kZXIgPDwgY2FuQ29weTsKICAgICBlbmNvZGVyIDw8
IGNhblBhc3RlOwpAQCAtMjAwLDYgKzIwMywxNyBAQCBib29sIEVkaXRvclN0YXRlOjpQb3N0TGF5
b3V0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUG9zdExheW91dERhdGEmCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCisgICAgYm9vbCBoYXNGb250QXR0cmlidXRl
cyA9IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRm9udEF0dHJpYnV0ZXMpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoaGFzRm9udEF0dHJpYnV0ZXMpIHsKKyAg
ICAgICAgYXV0byBmb250QXR0cmlidXRlcyA9IElQQzo6QXJndW1lbnRDb2RlcjxGb250QXR0cmli
dXRlcz46OmRlY29kZShkZWNvZGVyKTsKKyAgICAgICAgaWYgKCFmb250QXR0cmlidXRlcykKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmVzdWx0LmZvbnRBdHRyaWJ1dGVzID0g
V1RGTW92ZShmb250QXR0cmlidXRlcyk7CisgICAgfQorCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShyZXN1bHQuY2FuQ3V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LmNhbkNvcHkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvRWRpdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKaW5k
ZXggMjA4NWMxNTg3NzYwMDIwZTBlYmFlMGI5OTZhOTE0ZTg4NTA4ZTc4OS4uMDgxNTFhMjA5ZmI4
N2NhNDhmODFhNGY4YWU2N2ZiYmY4YjI2OTA0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvRWRpdG9yU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0
ZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKQEAgLTExNCw2ICsxMTUsOCBAQCBzdHJ1Y3QgRWRpdG9yU3RhdGUgewogICAg
ICAgICBTdHJpbmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdDsKICNlbmRpZgogCisgICAgICAg
IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXM+IGZvbnRBdHRyaWJ1dGVzOwor
CiAgICAgICAgIGJvb2wgY2FuQ3V0IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBjYW5Db3B5IHsg
ZmFsc2UgfTsKICAgICAgICAgYm9vbCBjYW5QYXN0ZSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IDVjMDFi
N2ZmZTZjZWI5ODc0ZDM2Njk3Njk1NWUwYzY5YWQ0ZGM2NjYuLmIxZmI0ZTUxNDZmNjlmNTU4ODRi
MmU0MzA3NTU5ZTdhMDczMWY4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC0xMTAsNiArMTEwLDcgQEAgdm9pZCBXZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNvZGVyIDw8IGhhc1JlZ2lzdGVy
ZWRTZXJ2aWNlV29ya2VyczsKICNlbmRpZgorICAgIGVuY29kZXIgPDwgbmVlZHNGb250QXR0cmli
dXRlczsKICAgICBlbmNvZGVyIDw8IGljZUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ7CiAgICAg
ZW5jb2RlciA8PCBlbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZDsKICAgICBl
bmNvZGVyIDw8IHVzZXJDb250ZW50V29ybGRzOwpAQCAtMzA1LDYgKzMwNiw5IEBAIHN0ZDo6b3B0
aW9uYWw8V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycz4gV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKElQQzo6CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAjZW5kaWYKIAor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5uZWVkc0ZvbnRBdHRyaWJ1dGVzKSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cGFyYW1ldGVycy5pY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkKSkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycy5oCmluZGV4IGUzNWE1ZjRmYzU5Y2ExZjY3MmQ5MjdjMjBjMGMyN2QyMDY2
MjI1YTkuLmRiNGMwN2YwN2M4NjY0M2M2NWY2YTA4ODdmZDg5YjIzNWMwODk3MjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTE3
Myw2ICsxNzMsOCBAQCBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgYm9v
bCBoYXNSZWdpc3RlcmVkU2VydmljZVdvcmtlcnMgeyB0cnVlIH07CiAjZW5kaWYKIAorICAgIGJv
b2wgbmVlZHNGb250QXR0cmlidXRlcyB7IGZhbHNlIH07CisKICAgICAvLyBXZWJSVEMgbWVtYmVy
cy4KICAgICBib29sIGljZUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQgeyB0cnVlIH07CiAgICAg
Ym9vbCBlbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxlZCB7IGZhbHNlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJVUlDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCmluZGV4IGJhMjkwZTA4OTdi
OWM3MjdhZjY5NjgyZjI4ZmYzMzQ1MTk1ZDkxNjIuLmM4Yzk1NDJiNWRjZGE3ZDllN2JkODc4YzBj
ZGQ1NDY0NmM2NTVhOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElVSUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVu
dC5oCkBAIC00MCw2ICs0MCw3IEBAIE9CSkNfQ0xBU1MgVUlWaWV3Q29udHJvbGxlcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Oworc3RydWN0IEZvbnRBdHRy
aWJ1dGVzOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIHN0cnVjdCBXaW5kb3dGZWF0dXJl
czsKIH0KQEAgLTEyMyw2ICsxMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGN1cnJlbnRRdW90YSk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIG5lZWRzRm9udEF0
dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBmb250
QXR0cmlidXRlc0RpZENoYW5nZShjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYpIHsgfQor
CiAgICAgdmlydHVhbCBib29sIHJ1bk9wZW5QYW5lbChXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFdl
YktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYs
IE9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
UHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2Vi
S2l0OjpXZWJGcmFtZVByb3h5JiwgU2VjdXJpdHlPcmlnaW4mLCBGdW5jdGlvbjx2b2lkKGJvb2wp
PiYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYs
IFNlY3VyaXR5T3JpZ2luJiwgU2VjdXJpdHlPcmlnaW4mLCBXZWJLaXQ6OlVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0UHJveHkmKSB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQcml2YXRlLmgKaW5kZXgg
ZjEyMmI3MzU5ZTAyZGZhYzA3ODI0NTgzNTc1NjdjOTE2NGJlNDJjMS4uNjIyYjhjYzY3Y2EyMTdl
ZTUyYzIxYWYxMDY2YmZjZmZiZTg1MGI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5oCkBAIC0xMjEsNiArMTIx
LDggQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIAogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldyByZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9tYWluOihOU1N0cmluZyAq
KXJlcXVlc3RpbmdEb21haW4gdW5kZXJDdXJyZW50RG9tYWluOihOU1N0cmluZyAqKWN1cnJlbnRE
b21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgcmVzdWx0KSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xNCksIGlvcygxMi4wKSk7CiAKKy0g
KHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZm9udEF0dHJpYnV0ZXNEaWRDaGFu
Z2U6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilmb250QXR0cmlidXRlcyBXS19BUElf
QVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogI2lmIFRB
UkdFVF9PU19JUEhPTkUKIC0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc2hv
dWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudDooX1dLQWN0aXZhdGVkRWxlbWVudElu
Zm8gKillbGVtZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDkuMCkpOwogLSAoTlNBcnJheSAqKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFjdGlvbnNGb3JFbGVtZW50OihfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQgZGVmYXVsdEFjdGlvbnM6KE5TQXJyYXk8X1dLRWxlbWVu
dEFjdGlvbiAqPiAqKWRlZmF1bHRBY3Rpb25zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggMDkyYzY1NGMyZjRjY2FkMTgxNGE1YzBkZTVl
MTU2NGUwMTU5MmZhYy4uMWFhYTUwMWQyNzg3Yjc4ZmZhNGRhZDM4NDRiOWNlODVmOTdjN2E0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBA
IC0xMjUwLDYgKzEyNTAsMTAgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAqZGljdGlvbmFyeVJlcHJl
c2VudGF0aW9uRm9yRWRpdG9yU3RhdGUoY29uc3QgV2ViS2l0OjpFZGl0b3IKIC0gKHZvaWQpX2Rp
ZENoYW5nZUVkaXRvclN0YXRlCiB7CiAgICAgaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+IHVpRGVs
ZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KXNlbGYuVUlEZWxlZ2F0ZTsKKworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgZWl0aGVyIHJlbmFtZSAtX3dlYlZpZXc6ZWRpdG9yU3RhdGVE
aWRDaGFuZ2U6IHRvIGNsYXJpZnkgdGhhdCBpdCdzIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSB3aGVu
IHRlc3RpbmcsCisgICAgLy8gb3IgcmVtb3ZlIGl0IGVudGlyZWx5IGFuZCB1c2UgLV93ZWJWaWV3
OmZvbnRBdHRyaWJ1dGVzRGlkQ2hhbmdlOiBpbnN0ZWFkIG9uY2UgdGV4dCBhbGlnbm1lbnQgaXMg
c3VwcG9ydGVkIGluIHRoZSBzZXQgb2YKKyAgICAvLyBmb250IGF0dHJpYnV0ZXMuCiAgICAgaWYg
KFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZWRpdG9y
U3RhdGVEaWRDaGFuZ2U6KV0pCiAgICAgICAgIFt1aURlbGVnYXRlIF93ZWJWaWV3OnNlbGYgZWRp
dG9yU3RhdGVEaWRDaGFuZ2U6ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUo
X3BhZ2UtPmVkaXRvclN0YXRlKCkpXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VJRGVsZWdhdGUuaAppbmRleCAzM2YwYTljMmNkMjYxMjU3MWUyODZkNTc2NzNlYjcwNDA0ZDAw
MWIyLi41NGQ3YzVjZmIxMjRhMGNiOGUxZjBhZGNiOTE3MzRmZjk4NGZhNWNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCkBAIC0xMjEsNiArMTIxLDggQEAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBkaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VMaW1pdFdo
aWxlSW5Gb3JlZ3JvdW5kKFdlYlBhZ2VQcm94eSYsIFdLUmVzb3VyY2VMaW1pdCkgZmluYWw7CiAg
ICAgICAgIHZvaWQgc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcihXZWJQYWdlUHJveHkq
LCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6
VVJMJiwgQVBJOjpEYXRhJikgZmluYWw7CiAjZW5kaWYKKyAgICAgICAgYm9vbCBuZWVkc0ZvbnRB
dHRyaWJ1dGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdGb250QXR0cmlidXRlc0RpZENoYW5nZTsgfQorICAgICAgICB2b2lkIGZv
bnRBdHRyaWJ1dGVzRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzJikgZmlu
YWw7CiAgICAgICAgIGJvb2wgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eSYpIGZp
bmFsOwogICAgICAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbihXZWJQ
YWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIEFQSTo6U2Vj
dXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYpIGZpbmFsOwogICAg
ICAgICB2b2lkIG1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlhUHJvZHVj
ZXI6Ok1lZGlhU3RhdGVGbGFncykgZmluYWw7CkBAIC0xOTgsNiArMjAwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgYm9vbCB3ZWJWaWV3UmVxdWVzdFVzZXJNZWRpYUF1dGhvcml6YXRpb25Gb3JEZXZp
Y2VzVVJMTWFpbkZyYW1lVVJMRGVjaXNpb25IYW5kbGVyIDogMTsKICAgICAgICAgYm9vbCB3ZWJW
aWV3Q2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yVVJMTWFpbkZyYW1lVVJMRnJhbWVJZGVudGlm
aWVyRGVjaXNpb25IYW5kbGVyIDogMTsKICAgICAgICAgYm9vbCB3ZWJWaWV3TWVkaWFDYXB0dXJl
U3RhdGVEaWRDaGFuZ2UgOiAxOworICAgICAgICBib29sIHdlYlZpZXdGb250QXR0cmlidXRlc0Rp
ZENoYW5nZSA6IDE7CiAjaWYgUExBVEZPUk0oSU9TKQogI2lmIEhBVkUoQVBQX0xJTktTKQogICAg
ICAgICBib29sIHdlYlZpZXdTaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50IDog
MTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUu
bW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCmluZGV4IDNl
Y2U4MjBlZDRiMzE2NDM2OTNmNTIyNDdlZGFkOWM2OGI4MWZmNjAuLjkwNDE3MzQwNGVjMjNiYmE0
MDkyOTUwZmE3NzMzYTg5YzcyNzZiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVUlEZWxlZ2F0ZS5tbQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCAiX1dLQ29udGV4dE1l
bnVFbGVtZW50SW5mby5oIgogI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIgogI2lt
cG9ydCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRB
dHRyaWJ1dGVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9VUkwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgpAQCAtMTUyLDYg
KzE1Myw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6c2V0RGVsZWdhdGUoaWQgPFdLVUlEZWxlZ2F0ZT4g
ZGVsZWdhdGUpCiAgICAgbV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RVc2VyTWVkaWFB
dXRob3JpemF0aW9uRm9yRGV2aWNlc1VSTE1haW5GcmFtZVVSTERlY2lzaW9uSGFuZGxlciA9IFtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OnJlcXVlc3RVc2Vy
TWVkaWFBdXRob3JpemF0aW9uRm9yRGV2aWNlczp1cmw6bWFpbkZyYW1lVVJMOmRlY2lzaW9uSGFu
ZGxlcjopXTsKICAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2hlY2tVc2VyTWVkaWFQZXJt
aXNzaW9uRm9yVVJMTWFpbkZyYW1lVVJMRnJhbWVJZGVudGlmaWVyRGVjaXNpb25IYW5kbGVyID0g
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6Y2hlY2tVc2Vy
TWVkaWFQZXJtaXNzaW9uRm9yVVJMOm1haW5GcmFtZVVSTDpmcmFtZUlkZW50aWZpZXI6ZGVjaXNp
b25IYW5kbGVyOildOwogICAgIG1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdNZWRpYUNhcHR1cmVT
dGF0ZURpZENoYW5nZSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93
ZWJWaWV3Om1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlOildOworICAgIG1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdGb250QXR0cmlidXRlc0RpZENoYW5nZSA9IFtkZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmZvbnRBdHRyaWJ1dGVzRGlkQ2hhbmdlOildOwog
ICAgIG1fZGVsZWdhdGVNZXRob2RzLmRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldyA9IFtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9kYXRhRGV0ZWN0aW9uQ29udGV4
dEZvcldlYlZpZXc6KV07CiAgICAgbV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0ltYWdlT3JNZWRp
YURvY3VtZW50U2l6ZUNoYW5nZWQgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcihfd2ViVmlldzppbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOildOwogCkBAIC04
ODMsNiArODg1LDE1IEBAIHN0YXRpYyB2b2lkIHJlcXVlc3RVc2VyTWVkaWFBdXRob3JpemF0aW9u
Rm9yRGV2aWNlcyhjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwKIH0KICNlbmRpZgogCit2b2lk
IFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb250QXR0cmlidXRlc0RpZENoYW5nZShjb25zdCBXZWJD
b3JlOjpGb250QXR0cmlidXRlcyYgZm9udEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKCFuZWVkc0Zv
bnRBdHRyaWJ1dGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJpdmF0ZVVJRGVs
ZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
LmdldCgpOworICAgIFtwcml2YXRlVUlEZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93
ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzRGlkQ2hhbmdlOmZvbnRBdHRyaWJ1dGVzLmNyZWF0ZURpY3Rp
b25hcnkoKS5nZXQoKV07Cit9CisKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBv
bGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYgcGFnZSwgV2Vi
RnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYU9yaWdpbiwg
QVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0UHJveHkmIHJlcXVlc3QpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDQyMmYyNmFlYTE4NDhhNDA5
YTgyODdjMzI2NTY1YjNmM2VkMTM3YzAuLmFlNjMzN2MyMTkxYzI5MWE4YmQ3ZGIwMWI1OTRkYzg3
MjY1NGViYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAt
NjA2LDYgKzYwNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudChzdGQ6OnVuaXF1
ZV9wdHI8QVBJOjpVSUNsaWVudD4mJiB1aUNsaWVudCkKIAogICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2V0Q2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKG1fdWlD
bGllbnQtPmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpKSwgbV9wYWdlSUQpOwogICAg
IHNldENhblJ1bk1vZGFsKG1fdWlDbGllbnQtPmNhblJ1bk1vZGFsKCkpOworICAgIHNldE5lZWRz
Rm9udEF0dHJpYnV0ZXMobV91aUNsaWVudC0+bmVlZHNGb250QXR0cmlidXRlcygpKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5nQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxB
UEk6Okljb25Mb2FkaW5nQ2xpZW50PiYmIGljb25Mb2FkaW5nQ2xpZW50KQpAQCAtMTczMyw2ICsx
NzM0LDMwIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1hbmQoY29uc3QgU3RyaW5n
JiBjb21tYW5kTmFtZSwgV1RGOjpGdW5jdGlvbjx2b2lkCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpWYWxpZGF0ZUNvbW1hbmQoY29tbWFuZE5hbWUsIGNhbGxiYWNrSUQp
LCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVGb250QXR0cmlidXRl
c0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UoKQoreworICAgIG1fY2FjaGVkRm9udEF0dHJpYnV0ZXNB
dFNlbGVjdGlvblN0YXJ0LnJlc2V0KCk7CisKKyAgICBpZiAobV9lZGl0b3JTdGF0ZS5pc01pc3Np
bmdQb3N0TGF5b3V0RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZm9udEF0
dHJpYnV0ZXMgPSBtX2VkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuZm9udEF0dHJpYnV0ZXMp
IHsKKyAgICAgICAgbV91aUNsaWVudC0+Zm9udEF0dHJpYnV0ZXNEaWRDaGFuZ2UoKmZvbnRBdHRy
aWJ1dGVzKTsKKyAgICAgICAgbV9jYWNoZWRGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQg
PSBXVEZNb3ZlKGZvbnRBdHRyaWJ1dGVzKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKGJvb2wgbmVlZHNGb250QXR0cmlidXRlcykKK3sKKyAg
ICBpZiAobV9uZWVkc0ZvbnRBdHRyaWJ1dGVzID09IG5lZWRzRm9udEF0dHJpYnV0ZXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9IG5lZWRzRm9udEF0dHJp
YnV0ZXM7CisKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OlNldE5lZWRzRm9udEF0dHJpYnV0ZXMobmVlZHNGb250QXR0cmlidXRl
cyksIG1fcGFnZUlEKTsKK30KKwogYm9vbCBXZWJQYWdlUHJveHk6Om1haW50YWluc0luYWN0aXZl
U2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICAvLyBSZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGNsaWVu
dCB3YW50cyB0byBkbywga2VlcCBzZWxlY3Rpb25zIGlmIGEgbG9jYWwgSW5zcGVjdG9yIGlzIG9w
ZW4uCkBAIC02MzU0LDYgKzYzNzksOCBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBh
Z2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0ZXJzLmFwcGxpY2F0aW9u
TWFuaWZlc3QgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uTWFuaWZlc3QoKSA/IHN0ZDo6
b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdD4obV9jb25maWd1cmF0aW9uLT5h
cHBsaWNhdGlvbk1hbmlmZXN0KCktPmFwcGxpY2F0aW9uTWFuaWZlc3QoKSkgOiBzdGQ6Om51bGxv
cHQ7CiAjZW5kaWYKIAorICAgIHBhcmFtZXRlcnMubmVlZHNGb250QXR0cmlidXRlcyA9IG1fbmVl
ZHNGb250QXR0cmlidXRlczsKKwogICAgIG1fcHJvY2Vzcy0+YWRkV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkobV91c2VyQ29udGVudENvbnRyb2xsZXIsIHBhcmFtZXRlcnMpOwogCiAgICAg
cmV0dXJuIHBhcmFtZXRlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IGU2NmM1NGE4YTMyNTgzYmJmNzhiMGI3M2Y3YWQ5YTNjZWNjYzY1NTguLjViMTJjNTg5MGQ2
NDA2MzJhODdiMWQzYjM2NWE5ZDllZGRmZmRmYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCkBAIC0xODQ3LDYgKzE4NDcsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
b250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoQVBJOjpOYXZpZ2F0aW9uJiwgUmVmPFdlYlBy
b2Nlc3NQcm94eT4mJik7CiAKKyAgICB2b2lkIHNldE5lZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCk7
CisgICAgdm9pZCB1cGRhdGVGb250QXR0cmlidXRlc0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UoKTsK
KwogICAgIFdlYWtQdHI8UGFnZUNsaWVudD4gbV9wYWdlQ2xpZW50OwogICAgIFJlZjxBUEk6OlBh
Z2VDb25maWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247CiAKQEAgLTIyNTksNiArMjI2Miw4IEBA
IHByaXZhdGU6CiAKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJQYWdlUHJveHk+IG1fcmVzZXRSZWNl
bnRDcmFzaENvdW50VGltZXI7CiAgICAgdW5zaWduZWQgbV9yZWNlbnRDcmFzaENvdW50IHsgMCB9
OworCisgICAgYm9vbCBtX25lZWRzRm9udEF0dHJpYnV0ZXMgeyBmYWxzZSB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQppbmRleCBmY2MxNjQ3MGU2Njk5Njk1NTJhOTEyNzhlNmQ4OTVjODMxMGYx
Y2MwLi4zOTRhNTY1MjUzYjY5OGE0Njg0MDRjOTVhNWJhNjc4OWRjNjQzMDZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KQEAgLTEwNTMsNyAr
MTA1Myw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNoYW5nZWQoY29uc3QgRWRp
dG9yU3RhdGUmIGVkaXRvclN0YXRlKQogICAgIGJvb2wgY291bGRDaGFuZ2VTZWN1cmVJbnB1dFN0
YXRlID0gbV9lZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAhPSBlZGl0b3JTdGF0ZS5pc0lu
UGFzc3dvcmRGaWVsZCB8fCBtX2VkaXRvclN0YXRlLnNlbGVjdGlvbklzTm9uZTsKICAgICAKICAg
ICBtX2VkaXRvclN0YXRlID0gZWRpdG9yU3RhdGU7Ci0gICAgbV9jYWNoZWRGb250QXR0cmlidXRl
c0F0U2VsZWN0aW9uU3RhcnQucmVzZXQoKTsKICAgICAKICAgICAvLyBTZWxlY3Rpb24gYmVpbmcg
bm9uZSBpcyBhIHRlbXBvcmFyeSBzdGF0ZSB3aGVuIGVkaXRpbmcuIEZsaXBwaW5nIHNlY3VyZSBp
bnB1dCBzdGF0ZSB0b28gcXVpY2tseSB3YXMgY2F1c2luZyB0cm91YmxlIChub3QgZnVsbHkgdW5k
ZXJzdG9vZCkuCiAgICAgaWYgKGNvdWxkQ2hhbmdlU2VjdXJlSW5wdXRTdGF0ZSAmJiAhZWRpdG9y
U3RhdGUuc2VsZWN0aW9uSXNOb25lKQpAQCAtMTA2NSw2ICsxMDY0LDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUp
CiAgICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gbm90aWZ5IHRoZSBjbGllbnQgb24gaU9TIHRvIG1h
a2Ugc3VyZSB0aGUgc2VsZWN0aW9uIGlzIHJlZHJhd24sCiAgICAgLy8gZXZlbiBkdXJpbmcgY29t
cG9zaXRpb24gdG8gc3VwcG9ydCBwaHJhc2UgYm91bmRhcnkgZ2VzdHVyZS4KICAgICBwYWdlQ2xp
ZW50KCkuc2VsZWN0aW9uRGlkQ2hhbmdlKCk7CisgICAgdXBkYXRlRm9udEF0dHJpYnV0ZXNBZnRl
ckVkaXRvclN0YXRlQ2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzaG93VmFsaWRh
dGlvbk1lc3NhZ2UoY29uc3QgSW50UmVjdCYgYW5jaG9yQ2xpZW50UmVjdCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlN
YWMubW0KaW5kZXggNDg0MThjY2U4NDkyZTAyNDcyNDdmYmE5ZWMyZTA3ZTI3YzBkMjY3OC4uZjMx
MjM0ODkwNjkxOGQwMzMzMmU0MzMzZmEyNmQ1YmJmNjc4NjY5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC02NTAsNyArNjUwLDYgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0ZSYg
ZWRpdG9yU3RhdGUpCiAgICAgYm9vbCBjb3VsZENoYW5nZVNlY3VyZUlucHV0U3RhdGUgPSBtX2Vk
aXRvclN0YXRlLmlzSW5QYXNzd29yZEZpZWxkICE9IGVkaXRvclN0YXRlLmlzSW5QYXNzd29yZEZp
ZWxkIHx8IG1fZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lOwogICAgIAogICAgIG1fZWRpdG9y
U3RhdGUgPSBlZGl0b3JTdGF0ZTsKLSAgICBtX2NhY2hlZEZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rp
b25TdGFydC5yZXNldCgpOwogICAgIAogICAgIC8vIFNlbGVjdGlvbiBiZWluZyBub25lIGlzIGEg
dGVtcG9yYXJ5IHN0YXRlIHdoZW4gZWRpdGluZy4gRmxpcHBpbmcgc2VjdXJlIGlucHV0IHN0YXRl
IHRvbyBxdWlja2x5IHdhcyBjYXVzaW5nIHRyb3VibGUgKG5vdCBmdWxseSB1bmRlcnN0b29kKS4K
ICAgICBpZiAoY291bGRDaGFuZ2VTZWN1cmVJbnB1dFN0YXRlICYmICFlZGl0b3JTdGF0ZS5zZWxl
Y3Rpb25Jc05vbmUpCkBAIC02NjAsNiArNjU5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmVkaXRv
clN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBwYWdlQ2xpZW50KCkuc2VsZWN0aW9uRGlkQ2hhbmdlKCk7CisgICAg
dXBkYXRlRm9udEF0dHJpYnV0ZXNBZnRlckVkaXRvclN0YXRlQ2hhbmdlKCk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyMmI4MDkwMTEyOTc2MjgwZGIzZmVmMjE4OGUy
ZTdiOGFiZWQ5NGQ5Li40MzJkYzg5NWEzMmQzNzBhMjcwOGM1MzExOTllNTQwNDQ0ZGU4YmYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTk5
LDYgKzU5OSw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBXZWJQYWdlQ3Jl
YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAgICAgU2VydmljZVdvcmtlclByb3Zp
ZGVyOjpzaW5nbGV0b24oKS5zZXRNYXlIYXZlUmVnaXN0ZXJlZFNlcnZpY2VXb3JrZXJzKCk7CiAj
ZW5kaWYKIAorICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9IHBhcmFtZXRlcnMubmVlZHNGb250
QXR0cmlidXRlczsKKwogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIGlmICghcGFyYW1ldGVycy5p
Y2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkKQogICAgICAgICBkaXNhYmxlSUNFQ2FuZGlkYXRl
RmlsdGVyaW5nKCk7CkBAIC05MzUsNiArOTM3LDkgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRp
dG9yU3RhdGUoSW5jbHVkZVBvc3RMYXlvdXREYXRhSGludCBzaG91bGRJbmNsdWRlUG9zdExheW8K
ICAgICAgICAgcG9zdExheW91dERhdGEuY2FuQ29weSA9IGVkaXRvci5jYW5Db3B5KCk7CiAgICAg
ICAgIHBvc3RMYXlvdXREYXRhLmNhblBhc3RlID0gZWRpdG9yLmNhblBhc3RlKCk7CiAKKyAgICAg
ICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcykKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
LmZvbnRBdHRyaWJ1dGVzID0gZWRpdG9yLmZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydCgp
OworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIGlmIChyZXN1bHQuaXNDb250ZW50RWRp
dGFibGUgJiYgIXNlbGVjdGlvbi5pc05vbmUoKSkgewogICAgICAgICAgICAgaWYgKGF1dG8gZWRp
dGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9u
KSkgewpAQCAtMjQ5MSw2ICsyNDk2LDE3IEBAIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUVkaXRDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lCiAgICAg
ZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7CiB9CiAKK3ZvaWQg
V2ViUGFnZTo6c2V0TmVlZHNGb250QXR0cmlidXRlcyhib29sIG5lZWRzRm9udEF0dHJpYnV0ZXMp
Cit7CisgICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcyA9PSBuZWVkc0ZvbnRBdHRyaWJ1dGVz
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lZWRzRm9udEF0dHJpYnV0ZXMgPSBuZWVkc0Zv
bnRBdHRyaWJ1dGVzOworCisgICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcykKKyAgICAgICAg
c2VuZFBhcnRpYWxFZGl0b3JTdGF0ZUFuZFNjaGVkdWxlUG9zdExheW91dFVwZGF0ZSgpOworfQor
CiB2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uSW50ZXJuYWwoY29uc3QgVmVjdG9yPEJhY2tG
b3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0ZW1TdGF0ZXMsIFdhc1Jlc3RvcmVkQnlBUElSZXF1ZXN0
IHJlc3RvcmVkQnlBUElSZXF1ZXN0LCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6T3ZlcndyaXRl
RXhpc3RpbmdJdGVtIG92ZXJ3cml0ZSkKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW1TdGF0
ZSA6IGl0ZW1TdGF0ZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAppbmRleCAxNTBhYjRmZWQ5ZTRhNmNkNDMxMzQ1Mjc2NmI4OTgwZDg3NWNjZjg4Li5iMTJi
MDYzODg5Mzc2ZjJjZTY1MDBjYzU2MjU0OTg4ZTRhNTgxMjc5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMTc5LDYgKzExNzksOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpOwogICAgIHZvaWQgc2V0RWRpdGFibGUoYm9vbCk7CiAKKyAgICB2b2lkIHNldE5lZWRzRm9u
dEF0dHJpYnV0ZXMoYm9vbCk7CisKICAgICB2b2lkIG1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VF
dmVudCYpOwogICAgIHZvaWQga2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwogCkBA
IC0xNzQwLDYgKzE3NDIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBib29sIG1faXNTdXNw
ZW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc0ZvbnRBdHRyaWJ1dGVzIHsgZmFsc2Ug
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggZDc1YWNlZWEwZTAw
MDIzYWIyMTliMjkxMzllMzYyMjZhZjljNmM3Ni4uOTRjYWZlNmM1MTkxZDU5MDVjOTRkNjBjYmUw
NGJiMDQwYzkzYjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yMDksNiArMjA5LDggQEAgbWVzc2FnZXMgLT4g
V2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgVmFsaWRhdGVDb21tYW5kKFN0cmluZyBuYW1l
LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBFeGVjdXRlRWRpdENvbW1hbmQo
U3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudCkKIAorICAgIFNldE5lZWRzRm9udEF0dHJpYnV0
ZXMoYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQorCiAgICAgUmVxdWVzdEZvbnRBdHRyaWJ1dGVz
QXRTZWxlY3Rpb25TdGFydChXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIAogICAgIERp
ZFJlbW92ZUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MGM5NTc1ODBiYzY4MTRjM2I2ZGVk
Y2IyNjJmYmUzYzg3NTkyOGVmLi4yNmQ1ZGFkN2UxNzk1NjA5ZGU1M2RiYjk3NTA2ZTQ1NzFiM2E4
OWRmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTgtMTAtMDMgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBh
cHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gQWRkIFNQSSB0byBleHBvc2UgdHlwaW5nIGF0dHJp
YnV0ZXMgYXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9uIFdLV2ViVmlldworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMTE5CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS80NDc2NzA2Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSBuZXcgQVBJIHRlc3QgdGhhdCBsb2FkcyBhIGRvY3VtZW50IGNv
bnRhaW5pbmcgdmFyaW91cyByaWNoIHRleHQgc3R5bGVzLiBUaGlzIHRlc3QgbW92ZXMgdGhlIHNl
bGVjdGlvbgorICAgICAgICBhcm91bmQgdGhlIGRvY3VtZW50IGFuZCBjaGVja3MgdGhlIGxhc3Qg
c2V0IG9mIGZvbnQgYXR0cmlidXRlcyByZWNlaXZlZCB2aWEgdGhlIG5ldyBVSSBkZWxlZ2F0ZSBo
b29rLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9Gb250QXR0cmlidXRlcy5tbTogQWRkZWQuCisgICAgICAgICgtW0ZvbnRBdHRyaWJ1dGVzTGlz
dGVuZXIgX3dlYlZpZXc6Zm9udEF0dHJpYnV0ZXNEaWRDaGFuZ2U6XSk6CisgICAgICAgICgtW0Zv
bnRBdHRyaWJ1dGVzTGlzdGVuZXIgbGFzdEZvbnRBdHRyaWJ1dGVzXSk6CisgICAgICAgICgtW1Rl
c3RXS1dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlmaWVyOl0pOgorICAgICAgICAoLVtU
ZXN0V0tXZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXSk6
CisgICAgICAgIChDb2xvckV4cGVjdGF0aW9uOjpDb2xvckV4cGVjdGF0aW9uKToKKyAgICAgICAg
KFNoYWRvd0V4cGVjdGF0aW9uOjpTaGFkb3dFeHBlY3RhdGlvbik6CisgICAgICAgIChjaGVja0Nv
bG9yKToKKyAgICAgICAgKGNoZWNrU2hhZG93KToKKyAgICAgICAgKGNoZWNrRm9udCk6CisgICAg
ICAgICh3ZWJWaWV3Rm9yVGVzdGluZ0ZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL3JpY2gtdGV4dC1hdHRyaWJ1dGVzLmh0bWw6IEFkZGVk
LgorCiAyMDE4LTEwLTAzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIEVuYWJsZSBzZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCBieSBkZWZh
dWx0IGluIFdlYktpdExlZ2FjeQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMTVjNDc5MjQx
MzJiODQzMTlkMmQ0ZTE0OGRmMDRkNDgwMzA1NTIxLi5hZmQ1ZWFhYTY5MzYzZTkzMWM3ZjFhYWVl
YjNkNjU4ZDVhNWVmMjNmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA4LDYgKzEwOCw4
IEBACiAJCTJFNjkxQUYzMUQ3OUU3NUUwMDEyOTQwNyAvKiBsYXJnZS12aWRlby1wbGF5aW5nLXNj
cm9sbC1hd2F5Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU2OTFBRjIxRDc5RTc1NDAwMTI5NDA3IC8qIGxhcmdlLXZpZGVvLXBsYXlp
bmctc2Nyb2xsLWF3YXkuaHRtbCAqLzsgfTsKIAkJMkU3NzY1Q0QxNkM0RDgwQTAwQkEyQkIxIC8q
IG1haW5JT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRTc3NjVDQzE2QzREODBBMDBCQTJCQjEgLyogbWFpbklPUy5tbSAqLzsgfTsKIAkJMkU3NzY1
Q0YxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc3NjVDRTE2QzREODExMDBCQTJCQjEgLyogbWFpbk1h
Yy5tbSAqLzsgfTsKKwkJMkU5MkI4RjcyMTY0OTBENDAwNUI2NEYwIC8qIHJpY2gtdGV4dC1hdHRy
aWJ1dGVzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkU5MkI4RjYyMTY0OTBDMzAwNUI2NEYwIC8qIHJpY2gtdGV4dC1hdHRyaWJ1dGVz
Lmh0bWwgKi87IH07CisJCTJFOTJCOEZBMjE2NEEwQzEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRl
cy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTJC
OEY4MjE2NDkwRUEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSAqLzsgfTsKIAkJMkU5ODk2
MTUxRDhGMDkzODAwNzM5ODkyIC8qIHRleHQtYW5kLXBhc3N3b3JkLWlucHV0cy5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTg5NjE0
MUQ4RjA5MkIwMDczOTg5MiAvKiB0ZXh0LWFuZC1wYXNzd29yZC1pbnB1dHMuaHRtbCAqLzsgfTsK
IAkJMkVCMjlENUUxRjc2MkRCOTAwMjNBNUYxIC8qIGR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVCMjlENUQxRjc2MkRBNTAwMjNBNUYxIC8qIGR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0bWwg
Ki87IH07CiAJCTJFQkQ5RDBBMjEzNDczMEQwMDJEQTc1OCAvKiB2aWRlby5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Q0QzMkY3MjA2
NUI3MkEwMDY0QTRCRSAvKiB2aWRlby5odG1sICovOyB9OwpAQCAtMTE1Myw2ICsxMTU1LDcgQEAK
IAkJCQlGNkZERERENjE0MjQxQzZGMDA0RjE3MjkgLyogcHVzaC1zdGF0ZS5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovLAogCQkJCUExMkREQzAwMUU4MzczRTcwMENGNkNBRSAvKiByZW5kZXJlZC1p
bWFnZS1leGNsdWRpbmctb3ZlcmZsb3cuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlG
NDY4NDlDMDFFRUY1RUYzMDBCOTM3RkUgLyogcmljaC1hbmQtcGxhaW4tdGV4dC5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovLAorCQkJCTJFOTJCOEY3MjE2NDkwRDQwMDVCNjRGMCAvKiByaWNoLXRl
eHQtYXR0cmlidXRlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTBGNTY1MUY5MUZD
RTUxMzUwMDMxMEZCQyAvKiBzY3JvbGwtdG8tYW5jaG9yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMg
Ki8sCiAJCQkJRjRFMEEyOTYyMTFGQzVGQjAwQUY3QzdGIC8qIHNlbGVjdGVkLXRleHQtYW5kLXRl
eHRhcmVhLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjRENjVEQTgxRjVFNDcwNDAw
OUQ4QzI3IC8qIHNlbGVjdGVkLXRleHQtaW1hZ2UtbGluay1hbmQtZWRpdGFibGUuaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLywKQEAgLTEzNTUsNiArMTM1OCw4IEBACiAJCTJFNzc2NUNDMTZDNEQ4
MEEwMEJBMkJCMSAvKiBtYWluSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gbWFpbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU3NzY1
Q0UxNkM0RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBtYWluTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRTdFRjdBQzFGMjY2QTgxMDBERkI2N0MgLyogQXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFwcEtpdFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTkyQjhGNjIxNjQ5
MEMzMDA1QjY0RjAgLyogcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9ICJyaWNoLXRleHQtYXR0cmlidXRlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMkU5MkI4RjgyMTY0OTBFQTAwNUI2NEYwIC8qIEZvbnRBdHRyaWJ1dGVz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udEF0dHJpYnV0
ZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTg5NjE0MUQ4RjA5MkIwMDcz
OTg5MiAvKiB0ZXh0LWFuZC1wYXNzd29yZC1pbnB1dHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRt
bDsgcGF0aCA9ICJ0ZXh0LWFuZC1wYXNzd29yZC1pbnB1dHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJFQjI5RDVEMUY3NjJEQTUwMDIzQTVGMSAvKiBkdW1wLWRhdGF0cmFu
c2Zlci10eXBlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImR1bXAtZGF0YXRy
YW5zZmVyLXR5cGVzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGRjU1
NDFEOUIxMkY4MDBCNTUzOTQgLyogTm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOb3dQbGF5aW5nQ29udHJvbHNUZXN0cy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMzcsNiArMjM0Miw3IEBACiAJCQkJ
Q0RBMjlCMjgyMEZEMkE5OTAwRjE1Q0VEIC8qIEV4aXRGdWxsc2NyZWVuT25FbnRlclBpUC5tbSAq
LywKIAkJCQkyRDgxMDRDQjFCRUMxM0U3MDAyMERBNDYgLyogRmluZEluUGFnZS5tbSAqLywKIAkJ
CQkyRDFGRTBBRjFBRDQ2NUMxMDA2Q0Q5RTYgLyogRml4ZWRMYXlvdXRTaXplLm1tICovLAorCQkJ
CTJFOTJCOEY4MjE2NDkwRUEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSAqLywKIAkJCQk1
Q0I1QjNCRDFGRkM1MTdFMDBDMjdCQjAgLyogRnJhbWVIYW5kbGVTZXJpYWxpemF0aW9uLm1tICov
LAogCQkJCUNENzhFMTFBMURCN0VBMzYwMDE0QTJERSAvKiBGdWxsc2NyZWVuRGVsZWdhdGUubW0g
Ki8sCiAJCQkJM0YxQjUyNjgxRDNENzEyOTAwOEQ2MEM0IC8qIEZ1bGxzY3JlZW5MYXlvdXRDb25z
dHJhaW50cy5tbSAqLywKQEAgLTI3NTcsNiArMjc2Myw3IEBACiAJCQkJRjQxQUI5OUExRUY0Njky
QzAwODNGQTA4IC8qIHByZXZlbnQtc3RhcnQuaHRtbCAqLywKIAkJCQlBMTJEREJGRjFFODM3M0Mx
MDBDRjZDQUUgLyogcmVuZGVyZWQtaW1hZ2UtZXhjbHVkaW5nLW92ZXJmbG93Lmh0bWwgKi8sCiAJ
CQkJRjQ2ODQ5QkYxRUVGNUVEQzAwQjkzN0ZFIC8qIHJpY2gtYW5kLXBsYWluLXRleHQuaHRtbCAq
LywKKwkJCQkyRTkyQjhGNjIxNjQ5MEMzMDA1QjY0RjAgLyogcmljaC10ZXh0LWF0dHJpYnV0ZXMu
aHRtbCAqLywKIAkJCQlGNEUwQTI5NTIxMUZDNUEzMDBBRjdDN0YgLyogc2VsZWN0ZWQtdGV4dC1h
bmQtdGV4dGFyZWEuaHRtbCAqLywKIAkJCQlGNEQ2NURBNzFGNUU0NkMwMDA5RDhDMjcgLyogc2Vs
ZWN0ZWQtdGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZS5odG1sICovLAogCQkJCUY0RTNEODA3
MjBGNzA4RTQwMDdCNThDNSAvKiBzaWduaWZpY2FudC10ZXh0LW1pbGVzdG9uZS1hcnRpY2xlLmh0
bWwgKi8sCkBAIC0zNzk1LDYgKzM4MDIsNyBAQAogCQkJCTdBOTA5QTdGMUQ4Nzc0ODAwMDdFMTBG
OCAvKiBGbG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E5MDlBODAxRDg3NzQ4MDAw
N0UxMEY4IC8qIEZsb2F0U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNEJDMEIxNDIxNDZD
ODQ5MDAyQTA0NzggLyogRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTJFOTJCOEZBMjE2NEEwQzEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTFDQUQxRjg2MUU1Q0U3REEwMEFGMkMyQyAvKiBGb250Q2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRjQ1NkFCMUMyMTNFREJBMzAwQ0IyQ0VGIC8qIEZvbnRNYW5hZ2Vy
VGVzdHMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VGNTFBNDExQUU2MDA0NDdDNEMgLyog
Rm9yY2VSZXBhaW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Gb250QXR0cmlidXRlcy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRm9udEF0dHJpYnV0ZXMubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmExYTI2MjE1MzhjZDRhOTI0YTU0NWQ4MWE3YzJhOGE3N2ZkNzkxNQotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRm9udEF0dHJpYnV0ZXMu
bW0KQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKwor
I2lmIFBMQVRGT1JNKENPQ09BKSAmJiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJOU0ZvbnRQ
YW5lbFRlc3RpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJU
ZXN0LmgiCisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tVSURl
bGVnYXRlUHJpdmF0ZS5oPgorI2ltcG9ydCA8Y21hdGg+CisjaW1wb3J0IDx3dGYvT3B0aW9uYWwu
aD4KKworQGludGVyZmFjZSBGb250QXR0cmlidXRlc0xpc3RlbmVyIDogTlNPYmplY3QgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGljdGlv
bmFyeSAqbGFzdEZvbnRBdHRyaWJ1dGVzOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gRm9udEF0
dHJpYnV0ZXNMaXN0ZW5lciB7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gX2xhc3RGb250
QXR0cmlidXRlczsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBm
b250QXR0cmlidXRlc0RpZENoYW5nZTooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKWZv
bnRBdHRyaWJ1dGVzCit7CisgICAgX2xhc3RGb250QXR0cmlidXRlcyA9IGZvbnRBdHRyaWJ1dGVz
OworfQorCistIChOU0RpY3Rpb25hcnkgKilsYXN0Rm9udEF0dHJpYnV0ZXMKK3sKKyAgICByZXR1
cm4gX2xhc3RGb250QXR0cmlidXRlcy5nZXQoKTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFRl
c3RXS1dlYlZpZXcgKEZvbnRBdHRyaWJ1dGVzVGVzdGluZykKKy0gKHZvaWQpc2VsZWN0RWxlbWVu
dFdpdGhJZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CistIChOU0RpY3Rpb25hcnkg
Kilmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTsKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKEZvbnRBdHRyaWJ1dGVzVGVzdGluZykKKworLSAo
dm9pZClzZWxlY3RFbGVtZW50V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgor
eworICAgIFtzZWxmIG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6CisgICAgICAgIEAiZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCclQCcpOyIKKyAgICAgICAgInJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsiCisgICAg
ICAgICJyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7IgorICAgICAgICAiZ2V0U2Vs
ZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7IgorICAgICAgICAiZ2V0U2VsZWN0aW9uKCkuYWRk
UmFuZ2UocmFuZ2UpIiwgaWRlbnRpZmllcl1dOworfQorCistIChOU0RpY3Rpb25hcnkgKilmb250
QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZQoreworICAgIFtzZWxmIHdhaXRG
b3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICByZXR1cm4gWyhGb250QXR0cmlidXRlc0xp
c3RlbmVyICopc2VsZi5VSURlbGVnYXRlIGxhc3RGb250QXR0cmlidXRlc107Cit9CisKK0BlbmQK
KworI2lmIFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgUGxhdGZvcm1Db2xvciBOU0NvbG9yCisjZGVm
aW5lIFBsYXRmb3JtRm9udCBOU0ZvbnQKKyNlbHNlCisjZGVmaW5lIFBsYXRmb3JtQ29sb3IgVUlD
b2xvcgorI2RlZmluZSBQbGF0Zm9ybUZvbnQgVUlGb250CitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0
IE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lID0gQCJOU1N1cGVyc2NyaXB0IjsKKyNlbmRpZgor
CituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2VudW0gY2xhc3MgTnVsbGFiaWxpdHkgOiB1
aW50OF90IHsgTnVsbCwgTm9uTnVsbCB9OworCitzdHJ1Y3QgQ29sb3JFeHBlY3RhdGlvbiB7Cisg
ICAgQ29sb3JFeHBlY3RhdGlvbihDR0Zsb2F0IHJlZFZhbHVlLCBDR0Zsb2F0IGdyZWVuVmFsdWUs
IENHRmxvYXQgYmx1ZVZhbHVlLCBDR0Zsb2F0IGFscGhhVmFsdWUpCisgICAgICAgIDogcmVkKHJl
ZFZhbHVlKQorICAgICAgICAsIGdyZWVuKGdyZWVuVmFsdWUpCisgICAgICAgICwgYmx1ZShibHVl
VmFsdWUpCisgICAgICAgICwgYWxwaGEoYWxwaGFWYWx1ZSkKKyAgICAgICAgLCBudWxsYWJpbGl0
eShOdWxsYWJpbGl0eTo6Tm9uTnVsbCkKKyAgICB7CisgICAgfQorCisgICAgQ29sb3JFeHBlY3Rh
dGlvbigpID0gZGVmYXVsdDsKKworICAgIENHRmxvYXQgcmVkIHsgMCB9OworICAgIENHRmxvYXQg
Z3JlZW4geyAwIH07CisgICAgQ0dGbG9hdCBibHVlIHsgMCB9OworICAgIENHRmxvYXQgYWxwaGEg
eyAwIH07CisgICAgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHkgeyBOdWxsYWJpbGl0eTo6TnVsbCB9
OworfTsKKworc3RydWN0IFNoYWRvd0V4cGVjdGF0aW9uIHsKKyAgICBTaGFkb3dFeHBlY3RhdGlv
bihDR0Zsb2F0IG9wYWNpdHlWYWx1ZSwgQ0dGbG9hdCBibHVyUmFkaXVzVmFsdWUpCisgICAgICAg
IDogb3BhY2l0eShvcGFjaXR5VmFsdWUpCisgICAgICAgICwgYmx1clJhZGl1cyhibHVyUmFkaXVz
VmFsdWUpCisgICAgICAgICwgbnVsbGFiaWxpdHkoTnVsbGFiaWxpdHk6Ok5vbk51bGwpCisgICAg
eworICAgIH0KKworICAgIFNoYWRvd0V4cGVjdGF0aW9uKCkgPSBkZWZhdWx0OworCisgICAgQ0dG
bG9hdCBvcGFjaXR5IHsgMCB9OworICAgIENHRmxvYXQgYmx1clJhZGl1cyB7IDAgfTsKKyAgICBO
dWxsYWJpbGl0eSBudWxsYWJpbGl0eSB7IE51bGxhYmlsaXR5OjpOdWxsIH07Cit9OworCitzdHJ1
Y3QgRm9udEV4cGVjdGF0aW9uIHsKKyAgICBjb25zdCBjaGFyKiBmb250TmFtZTsKKyAgICBDR0Zs
b2F0IGZvbnRTaXplOworfTsKKworc3RhdGljIHZvaWQgY2hlY2tDb2xvcihQbGF0Zm9ybUNvbG9y
ICpjb2xvciwgQ29sb3JFeHBlY3RhdGlvbiYmIGV4cGVjdGF0aW9uKQoreworICAgIGlmIChleHBl
Y3RhdGlvbi5udWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eTo6TnVsbCkgeworICAgICAgICBFWFBF
Q1RfTlVMTChjb2xvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFWFBFQ1RfTk9U
X05VTEwoY29sb3IpOworCisgICAgQ0dGbG9hdCBvYnNlcnZlZFJlZCA9IDA7CisgICAgQ0dGbG9h
dCBvYnNlcnZlZEdyZWVuID0gMDsKKyAgICBDR0Zsb2F0IG9ic2VydmVkQmx1ZSA9IDA7CisgICAg
Q0dGbG9hdCBvYnNlcnZlZEFscGhhID0gMDsKKyAgICBbY29sb3IgZ2V0UmVkOiZvYnNlcnZlZFJl
ZCBncmVlbjomb2JzZXJ2ZWRHcmVlbiBibHVlOiZvYnNlcnZlZEJsdWUgYWxwaGE6Jm9ic2VydmVk
QWxwaGFdOworICAgIEVYUEVDVF9FUShleHBlY3RhdGlvbi5yZWQsIHN0ZDo6cm91bmQob2JzZXJ2
ZWRSZWQgKiAyNTUpKTsKKyAgICBFWFBFQ1RfRVEoZXhwZWN0YXRpb24uZ3JlZW4sIHN0ZDo6cm91
bmQob2JzZXJ2ZWRHcmVlbiAqIDI1NSkpOworICAgIEVYUEVDVF9FUShleHBlY3RhdGlvbi5ibHVl
LCBzdGQ6OnJvdW5kKG9ic2VydmVkQmx1ZSAqIDI1NSkpOworICAgIEVYUEVDVF9MVChzdGQ6OmFi
cyhleHBlY3RhdGlvbi5hbHBoYSAtIG9ic2VydmVkQWxwaGEpLCAwLjAwMDEpOworfQorCitzdGF0
aWMgdm9pZCBjaGVja1NoYWRvdyhOU1NoYWRvdyAqc2hhZG93LCBTaGFkb3dFeHBlY3RhdGlvbiYm
IGV4cGVjdGF0aW9uKQoreworICAgIGlmIChleHBlY3RhdGlvbi5udWxsYWJpbGl0eSA9PSBOdWxs
YWJpbGl0eTo6TnVsbCkgeworICAgICAgICBFWFBFQ1RfTlVMTChzaGFkb3cpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgRVhQRUNUX05PVF9OVUxMKHNoYWRvdyk7CisKKyAgICBDR0Zs
b2F0IG9ic2VydmVkQWxwaGEgPSAwOworICAgIFtzaGFkb3cuc2hhZG93Q29sb3IgZ2V0UmVkOm51
bGxwdHIgZ3JlZW46bnVsbHB0ciBibHVlOm51bGxwdHIgYWxwaGE6Jm9ic2VydmVkQWxwaGFdOwor
ICAgIEVYUEVDVF9MVChzdGQ6OmFicyhleHBlY3RhdGlvbi5vcGFjaXR5IC0gb2JzZXJ2ZWRBbHBo
YSksIDAuMDAwMSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGF0aW9uLmJsdXJSYWRpdXMsIHNoYWRv
dy5zaGFkb3dCbHVyUmFkaXVzKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tGb250KFBsYXRmb3Jt
Rm9udCAqZm9udCwgRm9udEV4cGVjdGF0aW9uJiYgZXhwZWN0YXRpb24pCit7CisgICAgRVhQRUNU
X1dLX1NUUkVRKGV4cGVjdGF0aW9uLmZvbnROYW1lLCBmb250LmZvbnROYW1lKTsKKyAgICBFWFBF
Q1RfRVEoZXhwZWN0YXRpb24uZm9udFNpemUsIGZvbnQucG9pbnRTaXplKTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3Rm9yVGVzdGluZ0ZvbnRBdHRyaWJ1dGVz
KCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInJpY2gtdGV4dC1hdHRyaWJ1dGVzIl07
CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJv
ZHkuZm9jdXMoKSJdOworICAgIHJldHVybiB3ZWJWaWV3OworfQorCitURVNUKEZvbnRBdHRyaWJ1
dGVzLCBGb250QXR0cmlidXRlc0FmdGVyQ2hhbmdpbmdTZWxlY3Rpb24pCit7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW0ZvbnRBdHRyaWJ1dGVzTGlzdGVuZXIgbmV3XSk7CisgICAgYXV0
byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdGb250QXR0cmlidXRlcygpOworICAgIFt3ZWJW
aWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgeworICAgICAgICBbd2Vi
VmlldyBzZWxlY3RFbGVtZW50V2l0aElkZW50aWZpZXI6QCJvbmUiXTsKKyAgICAgICAgTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVz
ZW50YXRpb25VcGRhdGVdOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAyMjcsIDM2LCAwLCAxIH0pOworICAgICAgICBjaGVj
a0NvbG9yKGF0dHJpYnV0ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAyNTUs
IDE5OSwgMTE5LCAxIH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRy
aWJ1dGVOYW1lXSwgeyAiSGVsdmV0aWNhLUJvbGQiLCA0OCB9KTsKKyAgICAgICAgY2hlY2tTaGFk
b3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBF
Q1RfRVEoTlNVbmRlcmxpbmVTdHlsZVNpbmdsZSwgW2F0dHJpYnV0ZXNbTlNTdHJpa2V0aHJvdWdo
U3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKE5T
VW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1VuZGVybGluZVN0eWxlQXR0cmlidXRl
TmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBbYXR0cmlidXRlc1tO
U1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgfQorICAgIHsK
KyAgICAgICAgW3dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlmaWVyOkAidHdvIl07Cisg
ICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVz
QWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1
dGVzW05TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgMTAyLCAxNTcsIDUyLCAxIH0p
OworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXSwgeyAyNTUsIDE5NywgMTcxLCAxIH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0cmli
dXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwgeyAiSGVsdmV0aWNhLUJvbGQiLCA0OCB9KTsKKyAg
ICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IDAu
NDcwNTg4LCA1IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFth
dHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVl
XSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlU2luZ2xlLCBbYXR0cmlidXRl
c1tOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAg
IEVYUEVDVF9FUSgwLCBbYXR0cmlidXRlc1tOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50
ZWdlclZhbHVlXSk7CisgICAgfQorICAgIHsKKyAgICAgICAgW3dlYlZpZXcgc2VsZWN0RWxlbWVu
dFdpdGhJZGVudGlmaWVyOkAidGhyZWUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVd
OworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXSwgeyAyNTUsIDEwNiwgMCwgMSB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1
dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNr
Rm9udChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVdLCB7ICJNZW5sby1JdGFsaWMiLCAx
OCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5h
bWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRy
aWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7
CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNV
bmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBF
Q1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJW
YWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRo
SWRlbnRpZmllcjpAImZvdXIiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0g
W3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAg
ICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1l
XSwgeyAyNTUsIDI1NSwgMjU1LCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNb
TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAwLCAwLCAwLCAxIH0pOworICAgICAg
ICBjaGVja0ZvbnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwgeyAiQXZlbmlyLUJv
b2siLCAyNCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJp
YnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUs
IFthdHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZh
bHVlXSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0
ZXNbTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAg
ICBFWFBFQ1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGlu
dGVnZXJWYWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1l
bnRXaXRoSWRlbnRpZmllcjpAImZpdmUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVd
OworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXSwgeyAxMzEsIDE2LCAwLCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0
ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgY2hlY2tG
b250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIlRpbWVzTmV3Um9tYW5QUy1C
b2xkTVQiLCAyNCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0
dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5v
bmUsIFthdHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdl
clZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJp
YnV0ZXNbTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAg
ICAgICBFWFBFQ1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVd
IGludGVnZXJWYWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVs
ZW1lbnRXaXRoSWRlbnRpZmllcjpAInNpeCJdOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJp
YnV0ZXMgPSBbd2ViVmlldyBmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0
ZV07CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmlidXRlc1tOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdLCB7IDI1NSwgNjQsIDE5LCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJp
YnV0ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgY2hl
Y2tGb250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkF2ZW5pci1CbGFjayIs
IDE4IH0pOworICAgICAgICBjaGVja1NoYWRvdyhhdHRyaWJ1dGVzW05TU2hhZG93QXR0cmlidXRl
TmFtZV0sIHsgfSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0
dHJpYnV0ZXNbTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVd
KTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tO
U1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVY
UEVDVF9FUSgwLCBbYXR0cmlidXRlc1tOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50ZWdl
clZhbHVlXSk7CisgICAgfQorICAgIHsKKyAgICAgICAgW3dlYlZpZXcgc2VsZWN0RWxlbWVudFdp
dGhJZGVudGlmaWVyOkAic2V2ZW4iXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVz
ID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOwor
ICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXSwgeyAyMzUsIDIzNSwgMjM1LCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0
ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyA3OCwgMTIyLCAzOSwgMSB9KTsK
KyAgICAgICAgY2hlY2tGb250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkF2
ZW5pci1Cb29rT2JsaXF1ZSIsIDEyIH0pOworICAgICAgICBjaGVja1NoYWRvdyhhdHRyaWJ1dGVz
W05TU2hhZG93QXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVy
bGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVO
YW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVO
b25lLCBbYXR0cmlidXRlc1tOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZh
bHVlXSk7CisgICAgICAgIEVYUEVDVF9FUSgtMSwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0
dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJW
aWV3IHNlbGVjdEVsZW1lbnRXaXRoSWRlbnRpZmllcjpAImVpZ2h0Il07CisgICAgICAgIE5TRGlj
dGlvbmFyeSAqYXR0cmlidXRlcyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJl
c2VudGF0aW9uVXBkYXRlXTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmli
dXRlc1tOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBjaGVj
a0ZvbnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwgeyAiQXZlbmlyLUJvb2siLCAx
MiB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5h
bWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRy
aWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7
CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNV
bmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBF
Q1RfRVEoMSwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJW
YWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRo
SWRlbnRpZmllcjpAIm5pbmUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0g
W3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAg
ICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1l
XSwgeyB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNrRm9udChhdHRyaWJ1dGVzW05TRm9u
dEF0dHJpYnV0ZU5hbWVdLCB7ICJHZW9yZ2lhIiwgMzYgfSk7CisgICAgICAgIGNoZWNrU2hhZG93
KGF0dHJpYnV0ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1lXSwgeyAwLjY1ODgyNCwgOSB9KTsKKyAg
ICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1N0cmlr
ZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBF
Q1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFthdHRy
aWJ1dGVzW05TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICB9
CisgICAgeworICAgICAgICBbd2ViVmlldyBzZWxlY3RFbGVtZW50V2l0aElkZW50aWZpZXI6QCJ0
ZW4iXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dlYlZpZXcgZm9udEF0
dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAgICBjaGVja0NvbG9y
KGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAg
ICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0s
IHsgfSk7CisgICAgICAgIGNoZWNrRm9udChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVd
LCB7ICJBdmVuaXItQm9va09ibGlxdWUiLCAxOCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0
cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEo
TlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0
cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGlu
ZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGlu
dGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNj
cmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41ZThjZTA0YTlkNmQ0MTBmZTk1ZjI2NjNiYTE5NjI4NmUwOWRiMWViCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9y
aWNoLXRleHQtYXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzwhRE9DVFlQRSBodG1s
PgorPG1ldGEgY2hhcnNldD0idXRmOCI+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAg
ICAgICAgYm9keSwgaHRtbCB7CisgICAgICAgICAgICBmb250LWZhbWlseTogIkhlbHZldGljYSI7
CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgY29udGVudGVkaXRhYmxl
PgorICAgIDxkaXY+CisgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij4KKyAg
ICAgICAgICAgIDxzcGFuIGlkPSJvbmUiIHN0eWxlPSJmb250LXNpemU6IDQ4cHg7IGZvbnQtd2Vp
Z2h0OiBib2xkOyBjb2xvcjogcmdiKDIyNywgMzYsIDApOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io
MjU1LCAxOTksIDExOSk7IHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+T25lPC9zcGFu
PjxzcGFuIGlkPSJ0d28iIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDEwMiwgMTU3LCA1Mik7IGNv
bG9yOiByZ2IoMTAyLCAxNTcsIDUyKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMTk3LCAx
NzEpOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQt
c2l6ZTogNDhweDsgdGV4dC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC40NzA1ODgpIDBweCAwcHgg
NXB4OyI+VHdvPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBzdHlsZT0idGV4
dC1hbGlnbjogY2VudGVyOyI+CisgICAgICAgICAgICA8c3BhbiBpZD0idGhyZWUiIHN0eWxlPSJj
b2xvcjogcmdiKDI1NSwgMTA2LCAwKTsgZm9udC1mYW1pbHk6IE1lbmxvOyBmb250LXNpemU6IDE4
cHg7IGZvbnQtc3R5bGU6IGl0YWxpYzsiPlRocmVlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNp
emU6IDI0cHg7Ij48c3BhbiBpZD0iZm91ciIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBdmVuaXItQm9v
azsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDAsIDApOyBjb2xvcjogcmdiKDI1NSwgMjU1LCAy
NTUpOyI+Rm91cjwvc3Bhbj48c3BhbiBpZD0iZml2ZSIgc3R5bGU9ImNvbG9yOiByZ2IoMTMxLCAx
NiwgMCk7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7
Ij5GaXZlPC9zcGFuPjwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRp
diBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPgorICAgICAgICA8dWw+CisgICAgICAgICAgICA8
bGk+PHNwYW4gaWQ9InNpeCIgc3R5bGU9ImNvbG9yOiByZ2IoMjU1LCA2NCwgMTkpOyBmb250LWZh
bWlseTogQXZlbmlyLUJvb2s7IGZvbnQtc2l6ZTogMThweDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5T
aXg8L3NwYW4+PGJyPjwvbGk+CisgICAgICAgICAgICA8bGk+PHNwYW4gaWQ9InNldmVuIiBzdHls
ZT0iZm9udC1mYW1pbHk6IEF2ZW5pci1Cb29rOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiBy
Z2IoMjM1LCAyMzUsIDIzNSk7IGJhY2tncm91bmQtY29sb3I6IHJnYig3OCwgMTIyLCAzOSk7IHZl
cnRpY2FsLWFsaWduOiBzdWI7IGZvbnQtc2l6ZTogMTJweDsiPlNldmVuPC9zcGFuPjwvbGk+Cisg
ICAgICAgIDwvdWw+CisgICAgICAgIDxvbD4KKyAgICAgICAgICAgIDxsaT48c3BhbiBpZD0iZWln
aHQiIHN0eWxlPSJmb250LWZhbWlseTogQXZlbmlyLUJvb2s7IHZlcnRpY2FsLWFsaWduOiBzdXBl
cjsgZm9udC1zaXplOiAxMnB4OyI+RWlnaHQ8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDxsaT48
c3BhbiBpZD0ibmluZSIgc3R5bGU9ImZvbnQtZmFtaWx5OiBHZW9yZ2lhOyBmb250LXN0eWxlOiBu
b3JtYWw7IGZvbnQtc2l6ZTogMzZweDsgdGV4dC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC42NTg4
MjQpIDBweCAwcHggOXB4OyI+TmluZTwvc3Bhbj48L2xpPgorICAgICAgICA8L29sPgorICAgICAg
ICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPgorICAgICAgICAgICAgPHNwYW4gaWQ9
InRlbiIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBdmVuaXItQm9vazsgZm9udC1zaXplOiAxOHB4OyBm
b250LXN0eWxlOiBvYmxpcXVlOyI+VGVuPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rp
dj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="368905"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351644</attachid>
            <date>2018-10-04 16:59:41 -0700</date>
            <delta_ts>2018-10-04 17:47:14 -0700</delta_ts>
            <desc>Patch for EWS</desc>
            <filename>bug-190119-20181004165940.patch</filename>
            <type>text/plain</type>
            <size>46609</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2ODU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFjN2E3MWFkNGEyNTRhYmRl
MWU0Njc4NGZkZTQ5NjNmN2RiZDRhYjYuLmJjNjAzZjk2NDFhNTA5NGRjYjY2OWNiMzQxOTg5NzYy
MjY5OGU0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTgtMTAtMDMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBBZGQgU1BJ
IHRvIGV4cG9zZSB0eXBpbmcgYXR0cmlidXRlcyBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gb24g
V0tXZWJWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTAxMTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ0NzY3MDYyPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIG5ldyBXZWJL
aXQyIFNQSSB0byBub3RpZnkgdGhlIFVJIGRlbGVnYXRlIGFib3V0IGZvbnQgYXR0cmlidXRlcyB3
aGVuIHRoZSBlZGl0b3Igc3RhdGUgY2hhbmdlcworICAgICAgICAoZS5nLiBkdWUgdG8gc2VsZWN0
aW9uIGNoYW5nZXMsIG9yIGV4ZWN1dGluZyBhbiBlZGl0IGNvbW1hbmQpLiBTZWUgYmVsb3cgZm9y
IG1vcmUgZGV0YWlsLgorCisgICAgICAgIFRlc3Q6IEZvbnRBdHRyaWJ1dGVzLkZvbnRBdHRyaWJ1
dGVzQWZ0ZXJDaGFuZ2luZ1NlbGVjdGlvbgorCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNv
ZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6UG9zdExheW91dERhdGE6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmg6CisKKyAgICAgICAgQWRk
IGEgbmV3IG9wdGlvbmFsIGBGb250QXR0cmlidXRlc2AgbWVtYmVyIHRvIEVkaXRvclN0YXRlJ3Mg
cG9zdC1sYXlvdXQgZGF0YS4gRm9udEF0dHJpYnV0ZXMgYXJlIGNvbXB1dGVkIGFuZAorICAgICAg
ICBzZW50IG92ZXIgSVBDIG9ubHkgaWYgdGhlIFVJIGRlbGVnYXRlIGltcGxlbWVudHMgdGhlIG5l
dyBkZWxlZ2F0ZSBob29rIHdoaWNoIHJlcXVpcmVzIGluZm9ybWF0aW9uIGFib3V0IGZvbnQKKyAg
ICAgICAgYXR0cmlidXRlcy4KKworICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVy
czo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5o
OgorCisgICAgICAgIEFkZCBhIG5ldyBmbGFnIGZvciB0aGUgVUkgcHJvY2VzcyB0byBsZXQgYSBu
ZXcgd2ViIHBhZ2Uga25vdyB3aGV0aGVyIGl0IHNob3VsZCBhZGRpdGlvbmFsbHkgY29tcHV0ZSBm
b250CisgICAgICAgIGF0dHJpYnV0ZXMgd2hlbiBjb21wdXRpbmcgZWRpdG9yIHN0YXRlLgorCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oOgorICAgICAgICAoQVBJOjpVSUNs
aWVudDo6bmVlZHNGb250QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChBUEk6OlVJQ2xpZW50
OjpkaWRDaGFuZ2VGb250QXR0cmlidXRlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1VJRGVsZWdhdGVQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZGlkQ2hhbmdlRWRpdG9yU3RhdGVd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRl
OjpzZXREZWxlZ2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpk
aWRDaGFuZ2VGb250QXR0cmlidXRlcyk6CisKKyAgICAgICAgQ2FsbCBvdXQgdG8gdGhlIFVJIGRl
bGVnYXRlIHdpdGggYSBmb250IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LCBjcmVhdGVkIHZpYSBGb250
QXR0cmlidXRlcyBvbiBFZGl0b3JTdGF0ZSdzCisgICAgICAgIHBvc3QtbGF5b3V0IGRhdGEuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRVSUNsaWVudCk6CisKKyAgICAgICAgVXBkYXRlIHdoZXRoZXIgb3Ig
bm90IHRoZSBVSSBwcm9jZXNzIG5lZWRzIHRvIGtub3cgYWJvdXQgZm9udCBhdHRyaWJ1dGVzLiBU
aGUgVUkgcHJvY2VzcyBvbmx5IHJlcXVpcmVzIGZvbnQKKyAgICAgICAgYXR0cmlidXRlIGluZm9y
bWF0aW9uIGlmIHRoZSBVSSBkZWxlZ2F0ZSBpbXBsZW1lbnRzIGAtX3dlYlZpZXc6ZGlkQ2hhbmdl
Rm9udEF0dHJpYnV0ZXM6YC4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldE5l
ZWRzRm9udEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmNyZWF0
aW9uUGFyYW1ldGVycyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogVUlQcm9jZXNz
L21hYy9XZWJQYWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZWRpdG9yU3RhdGVDaGFuZ2VkKToKKworICAgICAgICBVcGRhdGUgdGhlIGNhY2hlZCBmb250IGF0
dHJpYnV0ZXMgaW4gdGhlIFVJIHByb2Nlc3Mgd2hlbiByZWNlaXZpbmcgYSBuZXcgZWRpdG9yIHN0
YXRlIHVwZGF0ZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6bV9jcHVMaW1pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmVkaXRvclN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0TmVlZHNG
b250QXR0cmlidXRlcyk6CisKKyAgICAgICAgQWRkIGEgbmV3IElQQyBob29rIHRvIHVwZGF0ZSB3
aGV0aGVyIG9yIG5vdCB0aGUgcGFnZSBzaG91bGQgYWRkaXRpb25hbGx5IGNvbXB1dGUgZm9udCBh
dHRyaWJ1dGVzLiBJbiB0aGUgY2FzZQorICAgICAgICB3aGVyZSB0aGUgVUkgZGVsZWdhdGUgY2hh
bmdlcyBmcm9tIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IHJlcXVpcmUgZm9udCBhdHRyaWJ1dGVz
IHRvIG9uZSB0aGF0IGRvZXMsIHdlCisgICAgICAgIGFkZGl0aW9uYWxseSBzY2hlZHVsZSBhbiBl
ZGl0b3Igc3RhdGUgdXBkYXRlLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZUZv
bnRBdHRyaWJ1dGVzQWZ0ZXJFZGl0b3JTdGF0ZUNoYW5nZSk6CisKKyAgICAgICAgUHJpdmF0ZSBo
ZWxwZXIgZnVuY3Rpb24gdG8gcGx1bWIgRm9udEF0dHJpYnV0ZXMgdG8gdGhlIFVJIGNsaWVudCBh
ZnRlciBhbiBlZGl0b3Igc3RhdGUgY2hhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbjoKKwogMjAxOC0xMC0wNCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgQXV0b21hdGlvbjogY2xlYXIgcGVuZGluZyBjYWxsYmFja3Mgd2hlbiB0aGUg
c2Vzc2lvbiB0ZXJtaW5hdGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKaW5kZXgg
MmRmYTUxODY2YzQzZTE0NDI0ODZiYTE0YTE1YmE1YjlkOGRiOWViMy4uZGRlMGVkNGViZjlmZGMx
ZTNkMzgwODI4YzA2NjMxM2VlZGFhZTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvRWRpdG9yU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRl
LmNwcApAQCAtMTM4LDYgKzEzOCw3IEBAIHZvaWQgRWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRh
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgcGFy
YWdyYXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3Q7CiAgICAgZW5jb2RlciA8PCBzdHJpbmdG
b3JDYW5kaWRhdGVSZXF1ZXN0OwogI2VuZGlmCisgICAgZW5jb2RlciA8PCBmb250QXR0cmlidXRl
czsKICAgICBlbmNvZGVyIDw8IGNhbkN1dDsKICAgICBlbmNvZGVyIDw8IGNhbkNvcHk7CiAgICAg
ZW5jb2RlciA8PCBjYW5QYXN0ZTsKQEAgLTIwMCw2ICsyMDEsMTMgQEAgYm9vbCBFZGl0b3JTdGF0
ZTo6UG9zdExheW91dERhdGE6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIFBvc3RMYXlv
dXREYXRhJgogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorICAgIHN0ZDo6b3B0aW9u
YWw8c3RkOjpvcHRpb25hbDxGb250QXR0cmlidXRlcz4+IG9wdGlvbmFsRm9udEF0dHJpYnV0ZXM7
CisgICAgZGVjb2RlciA+PiBvcHRpb25hbEZvbnRBdHRyaWJ1dGVzOworICAgIGlmICghb3B0aW9u
YWxGb250QXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0LmZv
bnRBdHRyaWJ1dGVzID0gb3B0aW9uYWxGb250QXR0cmlidXRlcy52YWx1ZSgpOworCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuQ3V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmNhbkNvcHkpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Vk
aXRvclN0YXRlLmgKaW5kZXggMjA4NWMxNTg3NzYwMDIwZTBlYmFlMGI5OTZhOTE0ZTg4NTA4ZTc4
OS4uMDgxNTFhMjA5ZmI4N2NhNDhmODFhNGY4YWU2N2ZiYmY4YjI2OTA0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9FZGl0b3JTdGF0ZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJBcmd1bWVu
dENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTExNCw2ICsxMTUsOCBAQCBzdHJ1Y3QgRWRp
dG9yU3RhdGUgewogICAgICAgICBTdHJpbmcgc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdDsKICNl
bmRpZgogCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXM+IGZv
bnRBdHRyaWJ1dGVzOworCiAgICAgICAgIGJvb2wgY2FuQ3V0IHsgZmFsc2UgfTsKICAgICAgICAg
Ym9vbCBjYW5Db3B5IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBjYW5QYXN0ZSB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCmluZGV4IDVjMDFiN2ZmZTZjZWI5ODc0ZDM2Njk3Njk1NWUwYzY5YWQ0ZGM2NjYuLmIxZmI0
ZTUxNDZmNjlmNTU4ODRiMmU0MzA3NTU5ZTdhMDczMWY4MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC0xMTAsNiArMTEw
LDcgQEAgdm9pZCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNvZGVy
IDw8IGhhc1JlZ2lzdGVyZWRTZXJ2aWNlV29ya2VyczsKICNlbmRpZgorICAgIGVuY29kZXIgPDwg
bmVlZHNGb250QXR0cmlidXRlczsKICAgICBlbmNvZGVyIDw8IGljZUNhbmRpZGF0ZUZpbHRlcmlu
Z0VuYWJsZWQ7CiAgICAgZW5jb2RlciA8PCBlbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2Vz
RW5hYmxlZDsKICAgICBlbmNvZGVyIDw8IHVzZXJDb250ZW50V29ybGRzOwpAQCAtMzA1LDYgKzMw
Niw5IEBAIHN0ZDo6b3B0aW9uYWw8V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycz4gV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAjZW5kaWYKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5uZWVkc0Zv
bnRBdHRyaWJ1dGVzKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocGFyYW1ldGVycy5pY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkKSkK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IGUzNWE1ZjRmYzU5Y2ExZjY3MmQ5
MjdjMjBjMGMyN2QyMDY2MjI1YTkuLmRiNGMwN2YwN2M4NjY0M2M2NWY2YTA4ODdmZDg5YjIzNWMw
ODk3MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmgKQEAgLTE3Myw2ICsxNzMsOCBAQCBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyB7CiAgICAgYm9vbCBoYXNSZWdpc3RlcmVkU2VydmljZVdvcmtlcnMgeyB0cnVlIH07CiAj
ZW5kaWYKIAorICAgIGJvb2wgbmVlZHNGb250QXR0cmlidXRlcyB7IGZhbHNlIH07CisKICAgICAv
LyBXZWJSVEMgbWVtYmVycy4KICAgICBib29sIGljZUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQg
eyB0cnVlIH07CiAgICAgYm9vbCBlbnVtZXJhdGluZ0FsbE5ldHdvcmtJbnRlcmZhY2VzRW5hYmxl
ZCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
VUlDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCmlu
ZGV4IGJhMjkwZTA4OTdiOWM3MjdhZjY5NjgyZjI4ZmYzMzQ1MTk1ZDkxNjIuLmExMGZhNzFmYWUx
N2MwODIzZjIyNWFjYWE2NjdjZmJiNWRlZWEzYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElVSUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElVSUNsaWVudC5oCkBAIC00MCw2ICs0MCw3IEBAIE9CSkNfQ0xBU1MgVUlWaWV3Q29u
dHJvbGxlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owor
c3RydWN0IEZvbnRBdHRyaWJ1dGVzOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIHN0cnVj
dCBXaW5kb3dGZWF0dXJlczsKIH0KQEAgLTEyMyw2ICsxMjQsOSBAQCBwdWJsaWM6CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRRdW90YSk7CiAgICAgfQogCisgICAgdmlydHVhbCBi
b29sIG5lZWRzRm9udEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VGb250QXR0cmlidXRlcyhjb25zdCBXZWJDb3JlOjpGb250QXR0
cmlidXRlcyYpIHsgfQorCiAgICAgdmlydHVhbCBib29sIHJ1bk9wZW5QYW5lbChXZWJLaXQ6Oldl
YlBhZ2VQcm94eSosIFdlYktpdDo6V2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luRGF0YSYsIE9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJLaXQ6OldlYk9wZW5QYW5l
bFJlc3VsdExpc3RlbmVyUHJveHkqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdDo6V2Vi
UGFnZVByb3h5JiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiwgU2VjdXJpdHlPcmlnaW4mLCBGdW5j
dGlvbjx2b2lkKGJvb2wpPiYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkZWNpZGVQb2xpY3lGb3JV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6
V2ViRnJhbWVQcm94eSYsIFNlY3VyaXR5T3JpZ2luJiwgU2VjdXJpdHlPcmlnaW4mLCBXZWJLaXQ6
OlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKSB7IHJldHVybiBmYWxzZTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1VJRGVsZWdhdGVQ
cml2YXRlLmgKaW5kZXggZjEyMmI3MzU5ZTAyZGZhYzA3ODI0NTgzNTc1NjdjOTE2NGJlNDJjMS4u
MThhOWZjOWM1N2IxNTJkNzUxYmQ5MzBhMWEwOWUxYjRmYzQ4NzI2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVUlEZWxlZ2F0ZVByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVSURlbGVnYXRlUHJpdmF0ZS5o
CkBAIC0xMjEsNiArMTIxLDggQEAgc3RydWN0IFVJRWRnZUluc2V0czsKIAogLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyByZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9t
YWluOihOU1N0cmluZyAqKXJlcXVlc3RpbmdEb21haW4gdW5kZXJDdXJyZW50RG9tYWluOihOU1N0
cmluZyAqKWN1cnJlbnREb21haW4gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgcmVz
dWx0KSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xNCksIGlv
cygxMi4wKSk7CiAKKy0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkQ2hh
bmdlRm9udEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKilmb250QXR0
cmlidXRlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKwogI2lmIFRBUkdFVF9PU19JUEhPTkUKIC0gKEJPT0wpX3dlYlZpZXc6KFdLV2ViVmll
dyAqKXdlYlZpZXcgc2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudDooX1dLQWN0
aXZhdGVkRWxlbWVudEluZm8gKillbGVtZW50IFdLX0FQSV9BVkFJTEFCTEUoaW9zKDkuMCkpOwog
LSAoTlNBcnJheSAqKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGFjdGlvbnNGb3JFbGVt
ZW50OihfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqKWVsZW1lbnQgZGVmYXVsdEFjdGlvbnM6KE5T
QXJyYXk8X1dLRWxlbWVudEFjdGlvbiAqPiAqKWRlZmF1bHRBY3Rpb25zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggMDkyYzY1NGMyZjRj
Y2FkMTgxNGE1YzBkZTVlMTU2NGUwMTU5MmZhYy4uMGU3ZGNjYjE0MWMxMjYyNjE3Nzg1ZmZhMTVk
NmI5NTk4MzgyMWUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3Lm1tCkBAIC0xMjUwLDYgKzEyNTAsMTAgQEAgc3RhdGljIE5TRGljdGlvbmFyeSAq
ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9uRm9yRWRpdG9yU3RhdGUoY29uc3QgV2ViS2l0OjpFZGl0
b3IKIC0gKHZvaWQpX2RpZENoYW5nZUVkaXRvclN0YXRlCiB7CiAgICAgaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+IHVpRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KXNlbGYuVUlE
ZWxlZ2F0ZTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZWl0aGVyIHJlbmFtZSAtX3dlYlZp
ZXc6ZWRpdG9yU3RhdGVEaWRDaGFuZ2U6IHRvIGNsYXJpZnkgdGhhdCBpdCdzIG9ubHkgaW50ZW5k
ZWQgZm9yIHVzZSB3aGVuIHRlc3RpbmcsCisgICAgLy8gb3IgcmVtb3ZlIGl0IGVudGlyZWx5IGFu
ZCB1c2UgLV93ZWJWaWV3OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOiBpbnN0ZWFkIG9uY2UgdGV4
dCBhbGlnbm1lbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBzZXQgb2YKKyAgICAvLyBmb250IGF0dHJp
YnV0ZXMuCiAgICAgaWYgKFt1aURlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
X3dlYlZpZXc6ZWRpdG9yU3RhdGVEaWRDaGFuZ2U6KV0pCiAgICAgICAgIFt1aURlbGVnYXRlIF93
ZWJWaWV3OnNlbGYgZWRpdG9yU3RhdGVEaWRDaGFuZ2U6ZGljdGlvbmFyeVJlcHJlc2VudGF0aW9u
Rm9yRWRpdG9yU3RhdGUoX3BhZ2UtPmVkaXRvclN0YXRlKCkpXTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAppbmRleCAzM2YwYTljMmNkMjYxMjU3MWUyODZk
NTc2NzNlYjcwNDA0ZDAwMWIyLi45YjQwZTZhOGIzZGFlMjM1YjExNmZmMmRiNDkwNmFlMWZmYjhh
OTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRl
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCkBAIC0x
MjEsNiArMTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBkaWRFeGNlZWRCYWNrZ3JvdW5k
UmVzb3VyY2VMaW1pdFdoaWxlSW5Gb3JlZ3JvdW5kKFdlYlBhZ2VQcm94eSYsIFdLUmVzb3VyY2VM
aW1pdCkgZmluYWw7CiAgICAgICAgIHZvaWQgc2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRl
cihXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiwgQVBJOjpEYXRhJikgZmluYWw7CiAjZW5kaWYKKyAgICAgICAg
Ym9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDaGFuZ2VGb250QXR0cmlidXRlczsgfQor
ICAgICAgICB2b2lkIGRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzKGNvbnN0IFdlYkNvcmU6OkZvbnRB
dHRyaWJ1dGVzJikgZmluYWw7CiAgICAgICAgIGJvb2wgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2Vj
dXJpdHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RQcm94eSYpIGZpbmFsOwogICAgICAgICBib29sIGNoZWNrVXNlck1lZGlhUGVybWlzc2lv
bkZvck9yaWdpbihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9y
aWdpbiYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eSYpIGZpbmFsOwogICAgICAgICB2b2lkIG1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKFdlYkNv
cmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncykgZmluYWw7CkBAIC0xOTgsNiArMjAw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCB3ZWJWaWV3UmVxdWVzdFVzZXJNZWRpYUF1dGhv
cml6YXRpb25Gb3JEZXZpY2VzVVJMTWFpbkZyYW1lVVJMRGVjaXNpb25IYW5kbGVyIDogMTsKICAg
ICAgICAgYm9vbCB3ZWJWaWV3Q2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yVVJMTWFpbkZyYW1l
VVJMRnJhbWVJZGVudGlmaWVyRGVjaXNpb25IYW5kbGVyIDogMTsKICAgICAgICAgYm9vbCB3ZWJW
aWV3TWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UgOiAxOworICAgICAgICBib29sIHdlYlZpZXdE
aWRDaGFuZ2VGb250QXR0cmlidXRlcyA6IDE7CiAjaWYgUExBVEZPUk0oSU9TKQogI2lmIEhBVkUo
QVBQX0xJTktTKQogICAgICAgICBib29sIHdlYlZpZXdTaG91bGRJbmNsdWRlQXBwTGlua0FjdGlv
bnNGb3JFbGVtZW50IDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1VJRGVsZWdhdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVn
YXRlLm1tCmluZGV4IDNlY2U4MjBlZDRiMzE2NDM2OTNmNTIyNDdlZGFkOWM2OGI4MWZmNjAuLjEy
MmZjN2U1NmZkMzdjMTQyMmE5MDQ3MTc5ZjI5MzUzZmY1ZmQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQpAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9y
dCAiX1dLQ29udGV4dE1lbnVFbGVtZW50SW5mby5oIgogI2ltcG9ydCAiX1dLRnJhbWVIYW5kbGVJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmgiCisjaW1wb3J0
IDxXZWJDb3JlL0ZvbnRBdHRyaWJ1dGVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NlY3VyaXR5T3Jp
Z2luRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9VUkwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0
ci5oPgpAQCAtMTUyLDYgKzE1Myw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6c2V0RGVsZWdhdGUoaWQg
PFdLVUlEZWxlZ2F0ZT4gZGVsZWdhdGUpCiAgICAgbV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jl
cXVlc3RVc2VyTWVkaWFBdXRob3JpemF0aW9uRm9yRGV2aWNlc1VSTE1haW5GcmFtZVVSTERlY2lz
aW9uSGFuZGxlciA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJW
aWV3OnJlcXVlc3RVc2VyTWVkaWFBdXRob3JpemF0aW9uRm9yRGV2aWNlczp1cmw6bWFpbkZyYW1l
VVJMOmRlY2lzaW9uSGFuZGxlcjopXTsKICAgICBtX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2hl
Y2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yVVJMTWFpbkZyYW1lVVJMRnJhbWVJZGVudGlmaWVyRGVj
aXNpb25IYW5kbGVyID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dl
YlZpZXc6Y2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yVVJMOm1haW5GcmFtZVVSTDpmcmFtZUlk
ZW50aWZpZXI6ZGVjaXNpb25IYW5kbGVyOildOwogICAgIG1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdNZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZSA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3Om1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlOildOworICAg
IG1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDaGFuZ2VGb250QXR0cmlidXRlcyA9IFtkZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRpZENoYW5nZUZvbnRB
dHRyaWJ1dGVzOildOwogICAgIG1fZGVsZWdhdGVNZXRob2RzLmRhdGFEZXRlY3Rpb25Db250ZXh0
Rm9yV2ViVmlldyA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9kYXRh
RGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6KV07CiAgICAgbV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0ltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQgPSBbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzppbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFu
Z2VkOildOwogCkBAIC04ODMsNiArODg1LDE1IEBAIHN0YXRpYyB2b2lkIHJlcXVlc3RVc2VyTWVk
aWFBdXRob3JpemF0aW9uRm9yRGV2aWNlcyhjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSwKIH0K
ICNlbmRpZgogCit2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRDaGFuZ2VGb250QXR0cmli
dXRlcyhjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYgZm9udEF0dHJpYnV0ZXMpCit7Cisg
ICAgaWYgKCFuZWVkc0ZvbnRBdHRyaWJ1dGVzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gcHJpdmF0ZVVJRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIFtwcml2YXRlVUlEZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IGRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOmZvbnRBdHRyaWJ1
dGVzLmNyZWF0ZURpY3Rpb25hcnkoKS5nZXQoKV07Cit9CisKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVz
ZXJNZWRpYU9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkmIHJlcXVlc3QpCiB7CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDQy
MmYyNmFlYTE4NDhhNDA5YTgyODdjMzI2NTY1YjNmM2VkMTM3YzAuLmVhMGYwNjdjNDhkMzlmN2M3
NzZjYzE1M2E2ZWYzZGIwMTQ3NGMyOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcApAQCAtNjA2LDYgKzYwNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRVSUNs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpVSUNsaWVudD4mJiB1aUNsaWVudCkKIAogICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0Q2FuUnVuQmVmb3JlVW5sb2FkQ29u
ZmlybVBhbmVsKG1fdWlDbGllbnQtPmNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpKSwg
bV9wYWdlSUQpOwogICAgIHNldENhblJ1bk1vZGFsKG1fdWlDbGllbnQtPmNhblJ1bk1vZGFsKCkp
OworICAgIHNldE5lZWRzRm9udEF0dHJpYnV0ZXMobV91aUNsaWVudC0+bmVlZHNGb250QXR0cmli
dXRlcygpKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEljb25Mb2FkaW5nQ2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6Okljb25Mb2FkaW5nQ2xpZW50PiYmIGljb25Mb2FkaW5nQ2xpZW50
KQpAQCAtMTczMyw2ICsxNzM0LDMwIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp2YWxpZGF0ZUNvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgV1RGOjpGdW5jdGlvbjx2b2lkCiAgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWYWxpZGF0ZUNvbW1hbmQoY29tbWFuZE5h
bWUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRh
dGVGb250QXR0cmlidXRlc0FmdGVyRWRpdG9yU3RhdGVDaGFuZ2UoKQoreworICAgIG1fY2FjaGVk
Rm9udEF0dHJpYnV0ZXNBdFNlbGVjdGlvblN0YXJ0LnJlc2V0KCk7CisKKyAgICBpZiAobV9lZGl0
b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGF1dG8gZm9udEF0dHJpYnV0ZXMgPSBtX2VkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCku
Zm9udEF0dHJpYnV0ZXMpIHsKKyAgICAgICAgbV91aUNsaWVudC0+ZGlkQ2hhbmdlRm9udEF0dHJp
YnV0ZXMoKmZvbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9jYWNoZWRGb250QXR0cmlidXRlc0F0
U2VsZWN0aW9uU3RhcnQgPSBXVEZNb3ZlKGZvbnRBdHRyaWJ1dGVzKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViUGFnZVByb3h5OjpzZXROZWVkc0ZvbnRBdHRyaWJ1dGVzKGJvb2wgbmVlZHNGb250QXR0
cmlidXRlcykKK3sKKyAgICBpZiAobV9uZWVkc0ZvbnRBdHRyaWJ1dGVzID09IG5lZWRzRm9udEF0
dHJpYnV0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9
IG5lZWRzRm9udEF0dHJpYnV0ZXM7CisKKyAgICBpZiAoaXNWYWxpZCgpKQorICAgICAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldE5lZWRzRm9udEF0dHJpYnV0ZXMobmVl
ZHNGb250QXR0cmlidXRlcyksIG1fcGFnZUlEKTsKK30KKwogYm9vbCBXZWJQYWdlUHJveHk6Om1h
aW50YWluc0luYWN0aXZlU2VsZWN0aW9uKCkgY29uc3QKIHsKICAgICAvLyBSZWdhcmRsZXNzIG9m
IHdoYXQgdGhlIGNsaWVudCB3YW50cyB0byBkbywga2VlcCBzZWxlY3Rpb25zIGlmIGEgbG9jYWwg
SW5zcGVjdG9yIGlzIG9wZW4uCkBAIC02MzU0LDYgKzYzNzksOCBAQCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzIFdlYlBhZ2VQcm94eTo6Y3JlYXRpb25QYXJhbWV0ZXJzKCkKICAgICBwYXJhbWV0
ZXJzLmFwcGxpY2F0aW9uTWFuaWZlc3QgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uTWFu
aWZlc3QoKSA/IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdD4obV9j
b25maWd1cmF0aW9uLT5hcHBsaWNhdGlvbk1hbmlmZXN0KCktPmFwcGxpY2F0aW9uTWFuaWZlc3Qo
KSkgOiBzdGQ6Om51bGxvcHQ7CiAjZW5kaWYKIAorICAgIHBhcmFtZXRlcnMubmVlZHNGb250QXR0
cmlidXRlcyA9IG1fbmVlZHNGb250QXR0cmlidXRlczsKKwogICAgIG1fcHJvY2Vzcy0+YWRkV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkobV91c2VyQ29udGVudENvbnRyb2xsZXIsIHBhcmFt
ZXRlcnMpOwogCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCmluZGV4IGU2NmM1NGE4YTMyNTgzYmJmNzhiMGI3M2Y3YWQ5YTNjZWNjYzY1
NTguLjViMTJjNTg5MGQ2NDA2MzJhODdiMWQzYjM2NWE5ZDllZGRmZmRmYWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0xODQ3LDYgKzE4NDcsOSBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBjb250aW51ZU5hdmlnYXRpb25Jbk5ld1Byb2Nlc3MoQVBJOjpOYXZpZ2F0
aW9uJiwgUmVmPFdlYlByb2Nlc3NQcm94eT4mJik7CiAKKyAgICB2b2lkIHNldE5lZWRzRm9udEF0
dHJpYnV0ZXMoYm9vbCk7CisgICAgdm9pZCB1cGRhdGVGb250QXR0cmlidXRlc0FmdGVyRWRpdG9y
U3RhdGVDaGFuZ2UoKTsKKwogICAgIFdlYWtQdHI8UGFnZUNsaWVudD4gbV9wYWdlQ2xpZW50Owog
ICAgIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiBtX2NvbmZpZ3VyYXRpb247CiAKQEAgLTIy
NTksNiArMjI2Miw4IEBAIHByaXZhdGU6CiAKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJQYWdlUHJv
eHk+IG1fcmVzZXRSZWNlbnRDcmFzaENvdW50VGltZXI7CiAgICAgdW5zaWduZWQgbV9yZWNlbnRD
cmFzaENvdW50IHsgMCB9OworCisgICAgYm9vbCBtX25lZWRzRm9udEF0dHJpYnV0ZXMgeyBmYWxz
ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCBmY2MxNjQ3MGU2Njk5Njk1NTJhOTEy
NzhlNmQ4OTVjODMxMGYxY2MwLi4zOTRhNTY1MjUzYjY5OGE0Njg0MDRjOTVhNWJhNjc4OWRjNjQz
MDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1Mu
bW0KQEAgLTEwNTMsNyArMTA1Myw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjplZGl0b3JTdGF0ZUNo
YW5nZWQoY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0YXRlKQogICAgIGJvb2wgY291bGRDaGFu
Z2VTZWN1cmVJbnB1dFN0YXRlID0gbV9lZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCAhPSBl
ZGl0b3JTdGF0ZS5pc0luUGFzc3dvcmRGaWVsZCB8fCBtX2VkaXRvclN0YXRlLnNlbGVjdGlvbklz
Tm9uZTsKICAgICAKICAgICBtX2VkaXRvclN0YXRlID0gZWRpdG9yU3RhdGU7Ci0gICAgbV9jYWNo
ZWRGb250QXR0cmlidXRlc0F0U2VsZWN0aW9uU3RhcnQucmVzZXQoKTsKICAgICAKICAgICAvLyBT
ZWxlY3Rpb24gYmVpbmcgbm9uZSBpcyBhIHRlbXBvcmFyeSBzdGF0ZSB3aGVuIGVkaXRpbmcuIEZs
aXBwaW5nIHNlY3VyZSBpbnB1dCBzdGF0ZSB0b28gcXVpY2tseSB3YXMgY2F1c2luZyB0cm91Ymxl
IChub3QgZnVsbHkgdW5kZXJzdG9vZCkuCiAgICAgaWYgKGNvdWxkQ2hhbmdlU2VjdXJlSW5wdXRT
dGF0ZSAmJiAhZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lKQpAQCAtMTA2NSw2ICsxMDY0LDcg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0
ZSYgZWRpdG9yU3RhdGUpCiAgICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gbm90aWZ5IHRoZSBjbGll
bnQgb24gaU9TIHRvIG1ha2Ugc3VyZSB0aGUgc2VsZWN0aW9uIGlzIHJlZHJhd24sCiAgICAgLy8g
ZXZlbiBkdXJpbmcgY29tcG9zaXRpb24gdG8gc3VwcG9ydCBwaHJhc2UgYm91bmRhcnkgZ2VzdHVy
ZS4KICAgICBwYWdlQ2xpZW50KCkuc2VsZWN0aW9uRGlkQ2hhbmdlKCk7CisgICAgdXBkYXRlRm9u
dEF0dHJpYnV0ZXNBZnRlckVkaXRvclN0YXRlQ2hhbmdlKCk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpzaG93VmFsaWRhdGlvbk1lc3NhZ2UoY29uc3QgSW50UmVjdCYgYW5jaG9yQ2xpZW50UmVj
dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9XZWJQYWdlUHJveHlNYWMubW0KaW5kZXggNDg0MThjY2U4NDkyZTAyNDcyNDdmYmE5ZWMyZTA3
ZTI3YzBkMjY3OC4uZjMxMjM0ODkwNjkxOGQwMzMzMmU0MzMzZmEyNmQ1YmJmNjc4NjY5MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCkBAIC02
NTAsNyArNjUwLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25z
dCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3RhdGUpCiAgICAgYm9vbCBjb3VsZENoYW5nZVNlY3VyZUlu
cHV0U3RhdGUgPSBtX2VkaXRvclN0YXRlLmlzSW5QYXNzd29yZEZpZWxkICE9IGVkaXRvclN0YXRl
LmlzSW5QYXNzd29yZEZpZWxkIHx8IG1fZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNOb25lOwogICAg
IAogICAgIG1fZWRpdG9yU3RhdGUgPSBlZGl0b3JTdGF0ZTsKLSAgICBtX2NhY2hlZEZvbnRBdHRy
aWJ1dGVzQXRTZWxlY3Rpb25TdGFydC5yZXNldCgpOwogICAgIAogICAgIC8vIFNlbGVjdGlvbiBi
ZWluZyBub25lIGlzIGEgdGVtcG9yYXJ5IHN0YXRlIHdoZW4gZWRpdGluZy4gRmxpcHBpbmcgc2Vj
dXJlIGlucHV0IHN0YXRlIHRvbyBxdWlja2x5IHdhcyBjYXVzaW5nIHRyb3VibGUgKG5vdCBmdWxs
eSB1bmRlcnN0b29kKS4KICAgICBpZiAoY291bGRDaGFuZ2VTZWN1cmVJbnB1dFN0YXRlICYmICFl
ZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmUpCkBAIC02NjAsNiArNjU5LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmVkaXRvclN0YXRlQ2hhbmdlZChjb25zdCBFZGl0b3JTdGF0ZSYgZWRpdG9yU3Rh
dGUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBwYWdlQ2xpZW50KCkuc2VsZWN0aW9uRGlk
Q2hhbmdlKCk7CisgICAgdXBkYXRlRm9udEF0dHJpYnV0ZXNBZnRlckVkaXRvclN0YXRlQ2hhbmdl
KCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydFdpbmRvd0RyYWcoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyMmI4MDkwMTEyOTc2
MjgwZGIzZmVmMjE4OGUyZTdiOGFiZWQ5NGQ5Li40MzJkYzg5NWEzMmQzNzBhMjcwOGM1MzExOTll
NTQwNDQ0ZGU4YmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcApAQCAtNTk5LDYgKzU5OSw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFn
ZUlELCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAgICAgU2Vy
dmljZVdvcmtlclByb3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRNYXlIYXZlUmVnaXN0ZXJlZFNlcnZp
Y2VXb3JrZXJzKCk7CiAjZW5kaWYKIAorICAgIG1fbmVlZHNGb250QXR0cmlidXRlcyA9IHBhcmFt
ZXRlcnMubmVlZHNGb250QXR0cmlidXRlczsKKwogI2lmIEVOQUJMRShXRUJfUlRDKQogICAgIGlm
ICghcGFyYW1ldGVycy5pY2VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkKQogICAgICAgICBkaXNh
YmxlSUNFQ2FuZGlkYXRlRmlsdGVyaW5nKCk7CkBAIC05MzUsNiArOTM3LDkgQEAgRWRpdG9yU3Rh
dGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoSW5jbHVkZVBvc3RMYXlvdXREYXRhSGludCBzaG91bGRJ
bmNsdWRlUG9zdExheW8KICAgICAgICAgcG9zdExheW91dERhdGEuY2FuQ29weSA9IGVkaXRvci5j
YW5Db3B5KCk7CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhblBhc3RlID0gZWRpdG9yLmNhblBh
c3RlKCk7CiAKKyAgICAgICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcykKKyAgICAgICAgICAg
IHBvc3RMYXlvdXREYXRhLmZvbnRBdHRyaWJ1dGVzID0gZWRpdG9yLmZvbnRBdHRyaWJ1dGVzQXRT
ZWxlY3Rpb25TdGFydCgpOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIGlmIChyZXN1
bHQuaXNDb250ZW50RWRpdGFibGUgJiYgIXNlbGVjdGlvbi5pc05vbmUoKSkgewogICAgICAgICAg
ICAgaWYgKGF1dG8gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9u
U3RhcnQoc2VsZWN0aW9uKSkgewpAQCAtMjQ5MSw2ICsyNDk2LDE3IEBAIHZvaWQgV2ViUGFnZTo6
ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lCiAgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVu
dCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0TmVlZHNGb250QXR0cmlidXRlcyhib29sIG5lZWRz
Rm9udEF0dHJpYnV0ZXMpCit7CisgICAgaWYgKG1fbmVlZHNGb250QXR0cmlidXRlcyA9PSBuZWVk
c0ZvbnRBdHRyaWJ1dGVzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25lZWRzRm9udEF0dHJp
YnV0ZXMgPSBuZWVkc0ZvbnRBdHRyaWJ1dGVzOworCisgICAgaWYgKG1fbmVlZHNGb250QXR0cmli
dXRlcykKKyAgICAgICAgc2VuZFBhcnRpYWxFZGl0b3JTdGF0ZUFuZFNjaGVkdWxlUG9zdExheW91
dFVwZGF0ZSgpOworfQorCiB2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uSW50ZXJuYWwoY29u
c3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0ZW1TdGF0ZXMsIFdhc1Jlc3Rv
cmVkQnlBUElSZXF1ZXN0IHJlc3RvcmVkQnlBUElSZXF1ZXN0LCBXZWJCYWNrRm9yd2FyZExpc3RQ
cm94eTo6T3ZlcndyaXRlRXhpc3RpbmdJdGVtIG92ZXJ3cml0ZSkKIHsKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGl0ZW1TdGF0ZSA6IGl0ZW1TdGF0ZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAxNTBhYjRmZWQ5ZTRhNmNkNDMxMzQ1Mjc2NmI4OTgw
ZDg3NWNjZjg4Li5iMTJiMDYzODg5Mzc2ZjJjZTY1MDBjYzU2MjU0OTg4ZTRhNTgxMjc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMTc5LDYgKzEx
NzksOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0RWRpdGFibGUoYm9vbCk7CiAKKyAgICB2
b2lkIHNldE5lZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCk7CisKICAgICB2b2lkIG1vdXNlRXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIHZvaWQga2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9h
cmRFdmVudCYpOwogCkBAIC0xNzQwLDYgKzE3NDIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAg
ICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc0ZvbnRBdHRy
aWJ1dGVzIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5k
ZXggZDc1YWNlZWEwZTAwMDIzYWIyMTliMjkxMzllMzYyMjZhZjljNmM3Ni4uOTRjYWZlNmM1MTkx
ZDU5MDVjOTRkNjBjYmUwNGJiMDQwYzkzYjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0yMDksNiArMjA5LDgg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgVmFsaWRhdGVDb21t
YW5kKFN0cmluZyBuYW1lLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBFeGVj
dXRlRWRpdENvbW1hbmQoU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudCkKIAorICAgIFNldE5l
ZWRzRm9udEF0dHJpYnV0ZXMoYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKQorCiAgICAgUmVxdWVz
dEZvbnRBdHRyaWJ1dGVzQXRTZWxlY3Rpb25TdGFydChXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKIAogICAgIERpZFJlbW92ZUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlYjhlMzhh
ZDM4YjA4NTBlZjQ0MjQyZGU2NjJlYzEyYjQ3NWRmM2ZkLi5mYjU0ZWY2YzFmMWU4YmYzYjUyOTJk
ZTIyYTM3OGYxZDljZGIxMjliIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTgtMTAtMDQgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBBZGQgU1BJIHRvIGV4
cG9zZSB0eXBpbmcgYXR0cmlidXRlcyBhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gb24gV0tXZWJW
aWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTAx
MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ0NzY3MDYyPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgQWRkIGEgbmV3IEFQSSB0ZXN0IHRoYXQgbG9hZHMg
YSBkb2N1bWVudCBjb250YWluaW5nIHZhcmlvdXMgcmljaCB0ZXh0IHN0eWxlcy4gVGhpcyB0ZXN0
IG1vdmVzIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgYXJvdW5kIHRoZSBkb2N1bWVudCBhbmQgY2hl
Y2tzIHRoZSBsYXN0IHNldCBvZiBmb250IGF0dHJpYnV0ZXMgcmVjZWl2ZWQgdmlhIHRoZSBuZXcg
VUkgZGVsZWdhdGUgaG9vay4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvRm9udEF0dHJpYnV0ZXMubW06IEFkZGVkLgorICAgICAgICAoLVtGb250
QXR0cmlidXRlc0xpc3RlbmVyIF93ZWJWaWV3OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOl0pOgor
ICAgICAgICAoLVtGb250QXR0cmlidXRlc0xpc3RlbmVyIGxhc3RGb250QXR0cmlidXRlc10pOgor
ICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRoSWRlbnRpZmllcjpdKToK
KyAgICAgICAgKC1bVGVzdFdLV2ViVmlldyBmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRh
dGlvblVwZGF0ZV0pOgorICAgICAgICAoQ29sb3JFeHBlY3RhdGlvbjo6Q29sb3JFeHBlY3RhdGlv
bik6CisgICAgICAgIChTaGFkb3dFeHBlY3RhdGlvbjo6U2hhZG93RXhwZWN0YXRpb24pOgorICAg
ICAgICAoY2hlY2tDb2xvcik6CisgICAgICAgIChjaGVja1NoYWRvdyk6CisgICAgICAgIChjaGVj
a0ZvbnQpOgorICAgICAgICAod2ViVmlld0ZvclRlc3RpbmdGb250QXR0cmlidXRlcyk6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9yaWNoLXRleHQtYXR0cmlidXRl
cy5odG1sOiBBZGRlZC4KKwogMjAxOC0xMC0wNCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIEZpeCBzb21lIGZvbnQgYXR0cmlidXRlIGNv
bnZlcnNpb24gYnVncyBpbiBwcmVwYXJhdGlvbiBmb3IgIkZvbnQgPiBTdHlsZXPigKYiIHN1cHBv
cnQgaW4gV2ViS2l0MgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwNGI1ZGE1NTM0ZGY4ZmIx
MWNmNjRhZmQzYmE0NDQzMTAxZTZlODJhLi5hNTBmNTQ3YzliMzBkZmJkM2M1YzJhZWVlNjc0NWE3
ZWI3MmY5ZjQ3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA4LDYgKzEwOCw4IEBACiAJ
CTJFNjkxQUYzMUQ3OUU3NUUwMDEyOTQwNyAvKiBsYXJnZS12aWRlby1wbGF5aW5nLXNjcm9sbC1h
d2F5Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU2OTFBRjIxRDc5RTc1NDAwMTI5NDA3IC8qIGxhcmdlLXZpZGVvLXBsYXlpbmctc2Ny
b2xsLWF3YXkuaHRtbCAqLzsgfTsKIAkJMkU3NzY1Q0QxNkM0RDgwQTAwQkEyQkIxIC8qIG1haW5J
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc3
NjVDQzE2QzREODBBMDBCQTJCQjEgLyogbWFpbklPUy5tbSAqLzsgfTsKIAkJMkU3NzY1Q0YxNkM0
RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRTc3NjVDRTE2QzREODExMDBCQTJCQjEgLyogbWFpbk1hYy5tbSAq
LzsgfTsKKwkJMkU5MkI4RjcyMTY0OTBENDAwNUI2NEYwIC8qIHJpY2gtdGV4dC1hdHRyaWJ1dGVz
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkU5MkI4RjYyMTY0OTBDMzAwNUI2NEYwIC8qIHJpY2gtdGV4dC1hdHRyaWJ1dGVzLmh0bWwg
Ki87IH07CisJCTJFOTJCOEZBMjE2NEEwQzEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTJCOEY4MjE2
NDkwRUEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSAqLzsgfTsKIAkJMkU5ODk2MTUxRDhG
MDkzODAwNzM5ODkyIC8qIHRleHQtYW5kLXBhc3N3b3JkLWlucHV0cy5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTg5NjE0MUQ4RjA5
MkIwMDczOTg5MiAvKiB0ZXh0LWFuZC1wYXNzd29yZC1pbnB1dHMuaHRtbCAqLzsgfTsKIAkJMkVC
MjlENUUxRjc2MkRCOTAwMjNBNUYxIC8qIGR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVCMjlE
NUQxRjc2MkRBNTAwMjNBNUYxIC8qIGR1bXAtZGF0YXRyYW5zZmVyLXR5cGVzLmh0bWwgKi87IH07
CiAJCTJFQkQ5RDBBMjEzNDczMEQwMDJEQTc1OCAvKiB2aWRlby5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Q0QzMkY3MjA2NUI3MkEw
MDY0QTRCRSAvKiB2aWRlby5odG1sICovOyB9OwpAQCAtMTE1NCw2ICsxMTU2LDcgQEAKIAkJCQlG
NkZERERENjE0MjQxQzZGMDA0RjE3MjkgLyogcHVzaC1zdGF0ZS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovLAogCQkJCUExMkREQzAwMUU4MzczRTcwMENGNkNBRSAvKiByZW5kZXJlZC1pbWFnZS1l
eGNsdWRpbmctb3ZlcmZsb3cuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQlGNDY4NDlD
MDFFRUY1RUYzMDBCOTM3RkUgLyogcmljaC1hbmQtcGxhaW4tdGV4dC5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAorCQkJCTJFOTJCOEY3MjE2NDkwRDQwMDVCNjRGMCAvKiByaWNoLXRleHQtYXR0
cmlidXRlcy5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTBGNTY1MUY5MUZDRTUxMzUw
MDMxMEZCQyAvKiBzY3JvbGwtdG8tYW5jaG9yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJRjRFMEEyOTYyMTFGQzVGQjAwQUY3QzdGIC8qIHNlbGVjdGVkLXRleHQtYW5kLXRleHRhcmVh
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJRjRENjVEQTgxRjVFNDcwNDAwOUQ4QzI3
IC8qIHNlbGVjdGVkLXRleHQtaW1hZ2UtbGluay1hbmQtZWRpdGFibGUuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLywKQEAgLTEzNTYsNiArMTM1OSw4IEBACiAJCTJFNzc2NUNDMTZDNEQ4MEEwMEJB
MkJCMSAvKiBtYWluSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gbWFpbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU3NzY1Q0UxNkM0
RDgxMTAwQkEyQkIxIC8qIG1haW5NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBtYWluTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTdF
RjdBQzFGMjY2QTgxMDBERkI2N0MgLyogQXBwS2l0U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcEtp
dFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTkyQjhGNjIxNjQ5MEMzMDA1
QjY0RjAgLyogcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsg
cGF0aCA9ICJyaWNoLXRleHQtYXR0cmlidXRlcy5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMkU5MkI4RjgyMTY0OTBFQTAwNUI2NEYwIC8qIEZvbnRBdHRyaWJ1dGVzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udEF0dHJpYnV0ZXMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTg5NjE0MUQ4RjA5MkIwMDczOTg5MiAv
KiB0ZXh0LWFuZC1wYXNzd29yZC1pbnB1dHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0
aCA9ICJ0ZXh0LWFuZC1wYXNzd29yZC1pbnB1dHMuaHRtbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJFQjI5RDVEMUY3NjJEQTUwMDIzQTVGMSAvKiBkdW1wLWRhdGF0cmFuc2Zlci10
eXBlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImR1bXAtZGF0YXRyYW5zZmVy
LXR5cGVzLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUNGRjU1NDFEOUIx
MkY4MDBCNTUzOTQgLyogTm93UGxheWluZ0NvbnRyb2xzVGVzdHMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOb3dQbGF5aW5nQ29udHJvbHNUZXN0cy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNDAsNiArMjM0NSw3IEBACiAJCQkJQ0RBMjlC
MjgyMEZEMkE5OTAwRjE1Q0VEIC8qIEV4aXRGdWxsc2NyZWVuT25FbnRlclBpUC5tbSAqLywKIAkJ
CQkyRDgxMDRDQjFCRUMxM0U3MDAyMERBNDYgLyogRmluZEluUGFnZS5tbSAqLywKIAkJCQkyRDFG
RTBBRjFBRDQ2NUMxMDA2Q0Q5RTYgLyogRml4ZWRMYXlvdXRTaXplLm1tICovLAorCQkJCTJFOTJC
OEY4MjE2NDkwRUEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSAqLywKIAkJCQk1Q0I1QjNC
RDFGRkM1MTdFMDBDMjdCQjAgLyogRnJhbWVIYW5kbGVTZXJpYWxpemF0aW9uLm1tICovLAogCQkJ
CUNENzhFMTFBMURCN0VBMzYwMDE0QTJERSAvKiBGdWxsc2NyZWVuRGVsZWdhdGUubW0gKi8sCiAJ
CQkJM0YxQjUyNjgxRDNENzEyOTAwOEQ2MEM0IC8qIEZ1bGxzY3JlZW5MYXlvdXRDb25zdHJhaW50
cy5tbSAqLywKQEAgLTI3NjAsNiArMjc2Niw3IEBACiAJCQkJRjQxQUI5OUExRUY0NjkyQzAwODNG
QTA4IC8qIHByZXZlbnQtc3RhcnQuaHRtbCAqLywKIAkJCQlBMTJEREJGRjFFODM3M0MxMDBDRjZD
QUUgLyogcmVuZGVyZWQtaW1hZ2UtZXhjbHVkaW5nLW92ZXJmbG93Lmh0bWwgKi8sCiAJCQkJRjQ2
ODQ5QkYxRUVGNUVEQzAwQjkzN0ZFIC8qIHJpY2gtYW5kLXBsYWluLXRleHQuaHRtbCAqLywKKwkJ
CQkyRTkyQjhGNjIxNjQ5MEMzMDA1QjY0RjAgLyogcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbCAq
LywKIAkJCQlGNEUwQTI5NTIxMUZDNUEzMDBBRjdDN0YgLyogc2VsZWN0ZWQtdGV4dC1hbmQtdGV4
dGFyZWEuaHRtbCAqLywKIAkJCQlGNEQ2NURBNzFGNUU0NkMwMDA5RDhDMjcgLyogc2VsZWN0ZWQt
dGV4dC1pbWFnZS1saW5rLWFuZC1lZGl0YWJsZS5odG1sICovLAogCQkJCUY0RTNEODA3MjBGNzA4
RTQwMDdCNThDNSAvKiBzaWduaWZpY2FudC10ZXh0LW1pbGVzdG9uZS1hcnRpY2xlLmh0bWwgKi8s
CkBAIC0zODAwLDYgKzM4MDcsNyBAQAogCQkJCTdBOTA5QTdGMUQ4Nzc0ODAwMDdFMTBGOCAvKiBG
bG9hdFJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E5MDlBODAxRDg3NzQ4MDAwN0UxMEY4
IC8qIEZsb2F0U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNEJDMEIxNDIxNDZDODQ5MDAy
QTA0NzggLyogRm9jdXNQcmVzZXJ2YXRpb25UZXN0cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJF
OTJCOEZBMjE2NEEwQzEwMDVCNjRGMCAvKiBGb250QXR0cmlidXRlcy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFDQUQxRjg2MUU1Q0U3REEwMEFGMkMyQyAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjQ1NkFCMUMyMTNFREJBMzAwQ0IyQ0VGIC8qIEZvbnRNYW5hZ2VyVGVzdHMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VGNTFBNDExQUU2MDA0NDdDNEMgLyogRm9yY2VS
ZXBhaW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9Gb250QXR0cmlidXRlcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvRm9udEF0dHJpYnV0ZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI5OGIz
OWFlYWQzZTA5ZTc2MTg5YTc0OTY4OTI2NjQ4NWViNWVkMAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRm9udEF0dHJpYnV0ZXMubW0KQEAg
LTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0ICJOU0ZvbnRQYW5lbFRl
c3RpbmcuaCIKKyNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJUZXN0Lmgi
CisjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tVSURlbGVnYXRl
UHJpdmF0ZS5oPgorI2ltcG9ydCA8Y21hdGg+CisjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KKwor
QGludGVyZmFjZSBGb250QXR0cmlidXRlc0xpc3RlbmVyIDogTlNPYmplY3QgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TRGljdGlvbmFyeSAq
bGFzdEZvbnRBdHRyaWJ1dGVzOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gRm9udEF0dHJpYnV0
ZXNMaXN0ZW5lciB7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gX2xhc3RGb250QXR0cmli
dXRlczsKK30KKworLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRDaGFu
Z2VGb250QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKWZvbnRBdHRy
aWJ1dGVzCit7CisgICAgX2xhc3RGb250QXR0cmlidXRlcyA9IGZvbnRBdHRyaWJ1dGVzOworfQor
CistIChOU0RpY3Rpb25hcnkgKilsYXN0Rm9udEF0dHJpYnV0ZXMKK3sKKyAgICByZXR1cm4gX2xh
c3RGb250QXR0cmlidXRlcy5nZXQoKTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFRlc3RXS1dl
YlZpZXcgKEZvbnRBdHRyaWJ1dGVzVGVzdGluZykKKy0gKHZvaWQpc2VsZWN0RWxlbWVudFdpdGhJ
ZGVudGlmaWVyOihOU1N0cmluZyAqKWlkZW50aWZpZXI7CistIChOU0RpY3Rpb25hcnkgKilmb250
QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZTsKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFRlc3RXS1dlYlZpZXcgKEZvbnRBdHRyaWJ1dGVzVGVzdGluZykKKworLSAodm9pZClz
ZWxlY3RFbGVtZW50V2l0aElkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcgoreworICAg
IFtzZWxmIG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6CisgICAgICAgIEAiZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCclQCcp
OyIKKyAgICAgICAgInJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsiCisgICAgICAgICJy
YW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7IgorICAgICAgICAiZ2V0U2VsZWN0aW9u
KCkucmVtb3ZlQWxsUmFuZ2VzKCk7IgorICAgICAgICAiZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2Uo
cmFuZ2UpIiwgaWRlbnRpZmllcl1dOworfQorCistIChOU0RpY3Rpb25hcnkgKilmb250QXR0cmli
dXRlc0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZQoreworICAgIFtzZWxmIHdhaXRGb3JOZXh0
UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICByZXR1cm4gWyhGb250QXR0cmlidXRlc0xpc3RlbmVy
ICopc2VsZi5VSURlbGVnYXRlIGxhc3RGb250QXR0cmlidXRlc107Cit9CisKK0BlbmQKKworI2lm
IFBMQVRGT1JNKE1BQykKKyNkZWZpbmUgUGxhdGZvcm1Db2xvciBOU0NvbG9yCisjZGVmaW5lIFBs
YXRmb3JtRm9udCBOU0ZvbnQKKyNlbHNlCisjZGVmaW5lIFBsYXRmb3JtQ29sb3IgVUlDb2xvcgor
I2RlZmluZSBQbGF0Zm9ybUZvbnQgVUlGb250CitzdGF0aWMgTlNTdHJpbmcgKmNvbnN0IE5TU3Vw
ZXJzY3JpcHRBdHRyaWJ1dGVOYW1lID0gQCJOU1N1cGVyc2NyaXB0IjsKKyNlbmRpZgorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2VudW0gY2xhc3MgTnVsbGl0eSA6IHVpbnQ4X3QgeyBO
dWxsLCBOb25OdWxsIH07CisKK3N0cnVjdCBDb2xvckV4cGVjdGF0aW9uIHsKKyAgICBDb2xvckV4
cGVjdGF0aW9uKENHRmxvYXQgcmVkVmFsdWUsIENHRmxvYXQgZ3JlZW5WYWx1ZSwgQ0dGbG9hdCBi
bHVlVmFsdWUsIENHRmxvYXQgYWxwaGFWYWx1ZSkKKyAgICAgICAgOiByZWQocmVkVmFsdWUpCisg
ICAgICAgICwgZ3JlZW4oZ3JlZW5WYWx1ZSkKKyAgICAgICAgLCBibHVlKGJsdWVWYWx1ZSkKKyAg
ICAgICAgLCBhbHBoYShhbHBoYVZhbHVlKQorICAgICAgICAsIG51bGxpdHkoTnVsbGl0eTo6Tm9u
TnVsbCkKKyAgICB7CisgICAgfQorCisgICAgQ29sb3JFeHBlY3RhdGlvbigpID0gZGVmYXVsdDsK
KworICAgIENHRmxvYXQgcmVkIHsgMCB9OworICAgIENHRmxvYXQgZ3JlZW4geyAwIH07CisgICAg
Q0dGbG9hdCBibHVlIHsgMCB9OworICAgIENHRmxvYXQgYWxwaGEgeyAwIH07CisgICAgTnVsbGl0
eSBudWxsaXR5IHsgTnVsbGl0eTo6TnVsbCB9OworfTsKKworc3RydWN0IFNoYWRvd0V4cGVjdGF0
aW9uIHsKKyAgICBTaGFkb3dFeHBlY3RhdGlvbihDR0Zsb2F0IG9wYWNpdHlWYWx1ZSwgQ0dGbG9h
dCBibHVyUmFkaXVzVmFsdWUpCisgICAgICAgIDogb3BhY2l0eShvcGFjaXR5VmFsdWUpCisgICAg
ICAgICwgYmx1clJhZGl1cyhibHVyUmFkaXVzVmFsdWUpCisgICAgICAgICwgbnVsbGl0eShOdWxs
aXR5OjpOb25OdWxsKQorICAgIHsKKyAgICB9CisKKyAgICBTaGFkb3dFeHBlY3RhdGlvbigpID0g
ZGVmYXVsdDsKKworICAgIENHRmxvYXQgb3BhY2l0eSB7IDAgfTsKKyAgICBDR0Zsb2F0IGJsdXJS
YWRpdXMgeyAwIH07CisgICAgTnVsbGl0eSBudWxsaXR5IHsgTnVsbGl0eTo6TnVsbCB9OworfTsK
Kworc3RydWN0IEZvbnRFeHBlY3RhdGlvbiB7CisgICAgY29uc3QgY2hhciogZm9udE5hbWU7Cisg
ICAgQ0dGbG9hdCBmb250U2l6ZTsKK307CisKK3N0YXRpYyB2b2lkIGNoZWNrQ29sb3IoUGxhdGZv
cm1Db2xvciAqY29sb3IsIENvbG9yRXhwZWN0YXRpb24mJiBleHBlY3RhdGlvbikKK3sKKyAgICBp
ZiAoZXhwZWN0YXRpb24ubnVsbGl0eSA9PSBOdWxsaXR5OjpOdWxsKSB7CisgICAgICAgIEVYUEVD
VF9OVUxMKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVYUEVDVF9OT1Rf
TlVMTChjb2xvcik7CisKKyAgICBDR0Zsb2F0IG9ic2VydmVkUmVkID0gMDsKKyAgICBDR0Zsb2F0
IG9ic2VydmVkR3JlZW4gPSAwOworICAgIENHRmxvYXQgb2JzZXJ2ZWRCbHVlID0gMDsKKyAgICBD
R0Zsb2F0IG9ic2VydmVkQWxwaGEgPSAwOworICAgIFtjb2xvciBnZXRSZWQ6Jm9ic2VydmVkUmVk
IGdyZWVuOiZvYnNlcnZlZEdyZWVuIGJsdWU6Jm9ic2VydmVkQmx1ZSBhbHBoYTomb2JzZXJ2ZWRB
bHBoYV07CisgICAgRVhQRUNUX0VRKGV4cGVjdGF0aW9uLnJlZCwgc3RkOjpyb3VuZChvYnNlcnZl
ZFJlZCAqIDI1NSkpOworICAgIEVYUEVDVF9FUShleHBlY3RhdGlvbi5ncmVlbiwgc3RkOjpyb3Vu
ZChvYnNlcnZlZEdyZWVuICogMjU1KSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGF0aW9uLmJsdWUs
IHN0ZDo6cm91bmQob2JzZXJ2ZWRCbHVlICogMjU1KSk7CisgICAgRVhQRUNUX0xUKHN0ZDo6YWJz
KGV4cGVjdGF0aW9uLmFscGhhIC0gb2JzZXJ2ZWRBbHBoYSksIDAuMDAwMSk7Cit9CisKK3N0YXRp
YyB2b2lkIGNoZWNrU2hhZG93KE5TU2hhZG93ICpzaGFkb3csIFNoYWRvd0V4cGVjdGF0aW9uJiYg
ZXhwZWN0YXRpb24pCit7CisgICAgaWYgKGV4cGVjdGF0aW9uLm51bGxpdHkgPT0gTnVsbGl0eTo6
TnVsbCkgeworICAgICAgICBFWFBFQ1RfTlVMTChzaGFkb3cpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRVhQRUNUX05PVF9OVUxMKHNoYWRvdyk7CisKKyAgICBDR0Zsb2F0IG9ic2Vy
dmVkQWxwaGEgPSAwOworICAgIFtzaGFkb3cuc2hhZG93Q29sb3IgZ2V0UmVkOm51bGxwdHIgZ3Jl
ZW46bnVsbHB0ciBibHVlOm51bGxwdHIgYWxwaGE6Jm9ic2VydmVkQWxwaGFdOworICAgIEVYUEVD
VF9MVChzdGQ6OmFicyhleHBlY3RhdGlvbi5vcGFjaXR5IC0gb2JzZXJ2ZWRBbHBoYSksIDAuMDAw
MSk7CisgICAgRVhQRUNUX0VRKGV4cGVjdGF0aW9uLmJsdXJSYWRpdXMsIHNoYWRvdy5zaGFkb3dC
bHVyUmFkaXVzKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tGb250KFBsYXRmb3JtRm9udCAqZm9u
dCwgRm9udEV4cGVjdGF0aW9uJiYgZXhwZWN0YXRpb24pCit7CisgICAgRVhQRUNUX1dLX1NUUkVR
KGV4cGVjdGF0aW9uLmZvbnROYW1lLCBmb250LmZvbnROYW1lKTsKKyAgICBFWFBFQ1RfRVEoZXhw
ZWN0YXRpb24uZm9udFNpemUsIGZvbnQucG9pbnRTaXplKTsKK30KKworc3RhdGljIFJldGFpblB0
cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3Rm9yVGVzdGluZ0ZvbnRBdHRyaWJ1dGVzKCkKK3sKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInJpY2gtdGV4dC1hdHRyaWJ1dGVzIl07CisgICAgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuZm9jdXMo
KSJdOworICAgIHJldHVybiB3ZWJWaWV3OworfQorCitURVNUKEZvbnRBdHRyaWJ1dGVzLCBGb250
QXR0cmlidXRlc0FmdGVyQ2hhbmdpbmdTZWxlY3Rpb24pCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW0ZvbnRBdHRyaWJ1dGVzTGlzdGVuZXIgbmV3XSk7CisgICAgYXV0byB3ZWJWaWV3
ID0gd2ViVmlld0ZvclRlc3RpbmdGb250QXR0cmlidXRlcygpOworICAgIFt3ZWJWaWV3IHNldFVJ
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAgeworICAgICAgICBbd2ViVmlldyBzZWxl
Y3RFbGVtZW50V2l0aElkZW50aWZpZXI6QCJvbmUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICph
dHRyaWJ1dGVzID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25V
cGRhdGVdOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lXSwgeyAyMjcsIDM2LCAwLCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0
dHJpYnV0ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAyNTUsIDE5OSwgMTE5
LCAxIH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1l
XSwgeyAiSGVsdmV0aWNhLUJvbGQiLCA0OCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmli
dXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNV
bmRlcmxpbmVTdHlsZVNpbmdsZSwgW2F0dHJpYnV0ZXNbTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRy
aWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5l
U3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50
ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBbYXR0cmlidXRlc1tOU1N1cGVyc2Ny
aXB0QXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgfQorICAgIHsKKyAgICAgICAg
W3dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlmaWVyOkAidHdvIl07CisgICAgICAgIE5T
RGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0
UHJlc2VudGF0aW9uVXBkYXRlXTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9y
ZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgMTAyLCAxNTcsIDUyLCAxIH0pOworICAgICAg
ICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwg
eyAyNTUsIDE5NywgMTcxLCAxIH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0cmlidXRlc1tOU0Zv
bnRBdHRyaWJ1dGVOYW1lXSwgeyAiSGVsdmV0aWNhLUJvbGQiLCA0OCB9KTsKKyAgICAgICAgY2hl
Y2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IDAuNDcwNTg4LCA1
IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVz
W05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAg
ICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlU2luZ2xlLCBbYXR0cmlidXRlc1tOU1VuZGVy
bGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9F
USgwLCBbYXR0cmlidXRlc1tOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVl
XSk7CisgICAgfQorICAgIHsKKyAgICAgICAgW3dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVu
dGlmaWVyOkAidGhyZWUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dl
YlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAg
ICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwg
eyAyNTUsIDEwNiwgMCwgMSB9KTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TQmFj
a2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNrRm9udChhdHRy
aWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVdLCB7ICJNZW5sby1JdGFsaWMiLCAxOCB9KTsKKyAg
ICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0p
OworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05T
U3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAg
IEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNVbmRlcmxpbmVT
dHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoMCwg
W2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOwor
ICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRoSWRlbnRpZmll
cjpAImZvdXIiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dlYlZpZXcg
Zm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAgICBjaGVj
a0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAyNTUs
IDI1NSwgMjU1LCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNCYWNrZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAwLCAwLCAwLCAxIH0pOworICAgICAgICBjaGVja0Zv
bnQoYXR0cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwgeyAiQXZlbmlyLUJvb2siLCAyNCB9
KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVd
LCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1
dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7Cisg
ICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNVbmRl
cmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1Rf
RVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1
ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRoSWRl
bnRpZmllcjpAImZpdmUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dl
YlZpZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAg
ICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwg
eyAxMzEsIDE2LCAwLCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNCYWNr
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgY2hlY2tGb250KGF0dHJp
YnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiLCAy
NCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5h
bWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRy
aWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7
CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNV
bmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBF
Q1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJW
YWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRo
SWRlbnRpZmllcjpAInNpeCJdOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBb
d2ViVmlldyBmb250QXR0cmlidXRlc0FmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisgICAg
ICAgIGNoZWNrQ29sb3IoYXR0cmlidXRlc1tOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
LCB7IDI1NSwgNjQsIDE5LCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNC
YWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgY2hlY2tGb250KGF0
dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkF2ZW5pci1CbGFjayIsIDE4IH0pOwor
ICAgICAgICBjaGVja1NoYWRvdyhhdHRyaWJ1dGVzW05TU2hhZG93QXR0cmlidXRlTmFtZV0sIHsg
fSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNb
TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAg
ICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1VuZGVybGlu
ZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUSgw
LCBbYXR0cmlidXRlc1tOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7
CisgICAgfQorICAgIHsKKyAgICAgICAgW3dlYlZpZXcgc2VsZWN0RWxlbWVudFdpdGhJZGVudGlm
aWVyOkAic2V2ZW4iXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dlYlZp
ZXcgZm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAgICBj
aGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyAy
MzUsIDIzNSwgMjM1LCAxIH0pOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0ZXNbTlNCYWNr
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyA3OCwgMTIyLCAzOSwgMSB9KTsKKyAgICAgICAg
Y2hlY2tGb250KGF0dHJpYnV0ZXNbTlNGb250QXR0cmlidXRlTmFtZV0sIHsgIkF2ZW5pci1Cb29r
T2JsaXF1ZSIsIDEyIH0pOworICAgICAgICBjaGVja1NoYWRvdyhhdHRyaWJ1dGVzW05TU2hhZG93
QXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxl
Tm9uZSwgW2F0dHJpYnV0ZXNbTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRl
Z2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0
cmlidXRlc1tOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgtMSwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5h
bWVdIGludGVnZXJWYWx1ZV0pOworICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVj
dEVsZW1lbnRXaXRoSWRlbnRpZmllcjpAImVpZ2h0Il07CisgICAgICAgIE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlcyA9IFt3ZWJWaWV3IGZvbnRBdHRyaWJ1dGVzQWZ0ZXJOZXh0UHJlc2VudGF0aW9u
VXBkYXRlXTsKKyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNrQ29sb3IoYXR0cmlidXRlc1tOU0Jh
Y2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBjaGVja0ZvbnQoYXR0
cmlidXRlc1tOU0ZvbnRBdHRyaWJ1dGVOYW1lXSwgeyAiQXZlbmlyLUJvb2siLCAxMiB9KTsKKyAg
ICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0p
OworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05T
U3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAg
IEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9uZSwgW2F0dHJpYnV0ZXNbTlNVbmRlcmxpbmVT
dHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoMSwg
W2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOwor
ICAgIH0KKyAgICB7CisgICAgICAgIFt3ZWJWaWV3IHNlbGVjdEVsZW1lbnRXaXRoSWRlbnRpZmll
cjpAIm5pbmUiXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dlYlZpZXcg
Zm9udEF0dHJpYnV0ZXNBZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAgICBjaGVj
a0NvbG9yKGF0dHJpYnV0ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsK
KyAgICAgICAgY2hlY2tDb2xvcihhdHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV0sIHsgfSk7CisgICAgICAgIGNoZWNrRm9udChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0
ZU5hbWVdLCB7ICJHZW9yZ2lhIiwgMzYgfSk7CisgICAgICAgIGNoZWNrU2hhZG93KGF0dHJpYnV0
ZXNbTlNTaGFkb3dBdHRyaWJ1dGVOYW1lXSwgeyAwLjY1ODgyNCwgOSB9KTsKKyAgICAgICAgRVhQ
RUNUX0VRKE5TVW5kZXJsaW5lU3R5bGVOb25lLCBbYXR0cmlidXRlc1tOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgICAgICBFWFBFQ1RfRVEoTlNV
bmRlcmxpbmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVO
YW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIFthdHRyaWJ1dGVzW05T
U3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRlZ2VyVmFsdWVdKTsKKyAgICB9CisgICAgewor
ICAgICAgICBbd2ViVmlldyBzZWxlY3RFbGVtZW50V2l0aElkZW50aWZpZXI6QCJ0ZW4iXTsKKyAg
ICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW3dlYlZpZXcgZm9udEF0dHJpYnV0ZXNB
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworICAgICAgICBjaGVja0NvbG9yKGF0dHJpYnV0
ZXNbTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXSwgeyB9KTsKKyAgICAgICAgY2hlY2tD
b2xvcihhdHRyaWJ1dGVzW05TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV0sIHsgfSk7Cisg
ICAgICAgIGNoZWNrRm9udChhdHRyaWJ1dGVzW05TRm9udEF0dHJpYnV0ZU5hbWVdLCB7ICJBdmVu
aXItQm9va09ibGlxdWUiLCAxOCB9KTsKKyAgICAgICAgY2hlY2tTaGFkb3coYXR0cmlidXRlc1tO
U1NoYWRvd0F0dHJpYnV0ZU5hbWVdLCB7IH0pOworICAgICAgICBFWFBFQ1RfRVEoTlNVbmRlcmxp
bmVTdHlsZU5vbmUsIFthdHRyaWJ1dGVzW05TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFt
ZV0gaW50ZWdlclZhbHVlXSk7CisgICAgICAgIEVYUEVDVF9FUShOU1VuZGVybGluZVN0eWxlTm9u
ZSwgW2F0dHJpYnV0ZXNbTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludGVnZXJWYWx1
ZV0pOworICAgICAgICBFWFBFQ1RfRVEoMCwgW2F0dHJpYnV0ZXNbTlNTdXBlcnNjcmlwdEF0dHJp
YnV0ZU5hbWVdIGludGVnZXJWYWx1ZV0pOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvcmljaC10ZXh0LWF0dHJpYnV0ZXMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZThjZTA0YTlkNmQ0MTBmZTk1ZjI2NjNiYTE5NjI4NmUwOWRiMWViCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9yaWNoLXRleHQt
YXR0cmlidXRlcy5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPG1ldGEg
Y2hhcnNldD0idXRmOCI+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4KKyAgICAgICAgYm9k
eSwgaHRtbCB7CisgICAgICAgICAgICBmb250LWZhbWlseTogIkhlbHZldGljYSI7CisgICAgICAg
IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgY29udGVudGVkaXRhYmxlPgorICAgIDxk
aXY+CisgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij4KKyAgICAgICAgICAg
IDxzcGFuIGlkPSJvbmUiIHN0eWxlPSJmb250LXNpemU6IDQ4cHg7IGZvbnQtd2VpZ2h0OiBib2xk
OyBjb2xvcjogcmdiKDIyNywgMzYsIDApOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAxOTks
IDExOSk7IHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyI+T25lPC9zcGFuPjxzcGFuIGlk
PSJ0d28iIHN0eWxlPSJjYXJldC1jb2xvcjogcmdiKDEwMiwgMTU3LCA1Mik7IGNvbG9yOiByZ2Io
MTAyLCAxNTcsIDUyKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMTk3LCAxNzEpOyB0ZXh0
LWRlY29yYXRpb246IHVuZGVybGluZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogNDhw
eDsgdGV4dC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC40NzA1ODgpIDBweCAwcHggNXB4OyI+VHdv
PC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjog
Y2VudGVyOyI+CisgICAgICAgICAgICA8c3BhbiBpZD0idGhyZWUiIHN0eWxlPSJjb2xvcjogcmdi
KDI1NSwgMTA2LCAwKTsgZm9udC1mYW1pbHk6IE1lbmxvOyBmb250LXNpemU6IDE4cHg7IGZvbnQt
c3R5bGU6IGl0YWxpYzsiPlRocmVlPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDI0cHg7
Ij48c3BhbiBpZD0iZm91ciIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBdmVuaXItQm9vazsgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDAsIDAsIDApOyBjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI+Rm91
cjwvc3Bhbj48c3BhbiBpZD0iZml2ZSIgc3R5bGU9ImNvbG9yOiByZ2IoMTMxLCAxNiwgMCk7IGZv
bnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogJ1RpbWVzIE5ldyBSb21hbic7Ij5GaXZlPC9z
cGFuPjwvc3Bhbj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBzdHlsZT0i
dGV4dC1hbGlnbjogbGVmdDsiPgorICAgICAgICA8dWw+CisgICAgICAgICAgICA8bGk+PHNwYW4g
aWQ9InNpeCIgc3R5bGU9ImNvbG9yOiByZ2IoMjU1LCA2NCwgMTkpOyBmb250LWZhbWlseTogQXZl
bmlyLUJvb2s7IGZvbnQtc2l6ZTogMThweDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5TaXg8L3NwYW4+
PGJyPjwvbGk+CisgICAgICAgICAgICA8bGk+PHNwYW4gaWQ9InNldmVuIiBzdHlsZT0iZm9udC1m
YW1pbHk6IEF2ZW5pci1Cb29rOyBmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiByZ2IoMjM1LCAy
MzUsIDIzNSk7IGJhY2tncm91bmQtY29sb3I6IHJnYig3OCwgMTIyLCAzOSk7IHZlcnRpY2FsLWFs
aWduOiBzdWI7IGZvbnQtc2l6ZTogMTJweDsiPlNldmVuPC9zcGFuPjwvbGk+CisgICAgICAgIDwv
dWw+CisgICAgICAgIDxvbD4KKyAgICAgICAgICAgIDxsaT48c3BhbiBpZD0iZWlnaHQiIHN0eWxl
PSJmb250LWZhbWlseTogQXZlbmlyLUJvb2s7IHZlcnRpY2FsLWFsaWduOiBzdXBlcjsgZm9udC1z
aXplOiAxMnB4OyI+RWlnaHQ8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDxsaT48c3BhbiBpZD0i
bmluZSIgc3R5bGU9ImZvbnQtZmFtaWx5OiBHZW9yZ2lhOyBmb250LXN0eWxlOiBub3JtYWw7IGZv
bnQtc2l6ZTogMzZweDsgdGV4dC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC42NTg4MjQpIDBweCAw
cHggOXB4OyI+TmluZTwvc3Bhbj48L2xpPgorICAgICAgICA8L29sPgorICAgICAgICA8ZGl2IHN0
eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPgorICAgICAgICAgICAgPHNwYW4gaWQ9InRlbiIgc3R5
bGU9ImZvbnQtZmFtaWx5OiBBdmVuaXItQm9vazsgZm9udC1zaXplOiAxOHB4OyBmb250LXN0eWxl
OiBvYmxpcXVlOyI+VGVuPC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKzwvYm9k
eT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>