<?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>52595</bug_id>
          
          <creation_ts>2011-01-17 13:43:24 -0800</creation_ts>
          <short_desc>Make basic printing work in WebKit2</short_desc>
          <delta_ts>2011-01-17 16:29:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Printing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>buildbot</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>335501</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-17 13:43:24 -0800</bug_when>
    <thetext>Still rather early in development, but it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335510</commentid>
    <comment_count>1</comment_count>
      <attachid>79214</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-17 14:05:47 -0800</bug_when>
    <thetext>Created attachment 79214
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335513</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-17 14:08:55 -0800</bug_when>
    <thetext>Attachment 79214 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Shared/PrintInfo.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335519</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-17 14:20:29 -0800</bug_when>
    <thetext>Attachment 79214 did not build on qt:
Build output: http://queues.webkit.org/results/7513165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335521</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-17 14:27:26 -0800</bug_when>
    <thetext>Attachment 79214 did not build on win:
Build output: http://queues.webkit.org/results/7585154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335523</commentid>
    <comment_count>5</comment_count>
      <attachid>79214</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-17 14:29:58 -0800</bug_when>
    <thetext>Comment on attachment 79214
proposed patch

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

&gt; Source/WebKit2/Shared/PrintInfo.cpp:42
&gt; +bool PrintInfo::decode(CoreIPC::ArgumentDecoder* decoder, PrintInfo&amp; t)
&gt; +{
&gt; +    return decoder-&gt;decode(CoreIPC::Out(t.pageSetupScaleFactor, t.availablePaperWidth, t.availablePaperHeight));
&gt; +}

t, eh?

I would have used the word “info”.

&gt; Source/WebKit2/Shared/PrintInfo.h:46
&gt; +#ifdef __OBJC__
&gt; +    PrintInfo(NSPrintInfo *);
&gt; +#endif

It’s possibly a bit dangerous to have no constructors at all when compiling in a non-ObjC header file. If I remember correctly, not having any explicit constructors causes some compiler-generated constructors to be created that are not if there are any explicitly declared ones. But I could be remembering wrong. To avoid this you could simply put class NSPrintInfo into the else case of the #ifdef __OBJC___ above and allow this to be unconditional. That’s a style we’ve used elsewhere in WebKit in the past.

Another approach would be to do the initialization in some other way without using a constructor. Offer a helper function that makes a PrintInfo from an NSPrintInfo that you call explicitly.

&gt; Source/WebKit2/Shared/PrintInfo.h:50
&gt; +    float pageSetupScaleFactor;
&gt; +    float availablePaperWidth;
&gt; +    float availablePaperHeight;

I think our usual unwritten style rule is that if we use public data members without m_ prefixes, I use “struct”. Making this struct instead of class would follow that convention.

&gt; Source/WebKit2/Shared/mac/PrintInfoMac.mm:35
&gt; +PrintInfo::PrintInfo(NSPrintInfo *printInfo)
&gt; +    : pageSetupScaleFactor([[[printInfo dictionary] objectForKey:NSPrintScalingFactor] floatValue])
&gt; +    , availablePaperWidth([printInfo paperSize].width - [printInfo leftMargin] - [printInfo rightMargin])
&gt; +    , availablePaperHeight([printInfo paperSize].height - [printInfo topMargin] - [printInfo bottomMargin])
&gt; +{
&gt; +}

Because floating point is involved, this will misbehave when printInfo is nil.

Because ObjC stays silent about such things, this will not crash when printInfo is nil.

Accordingly, I suggest asserting it is not nil to avoid silent strange behavior.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:115
&gt; +    , m_inPrintingMode(false)

I like m_isInPrintingMode slightly better, although just below this there is another boolean that does not follow the “proxy &lt;xxx&gt;” style.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2337
&gt; +    if (!m_inPrintingMode) {

I like early return better.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2345
&gt; +    if (m_inPrintingMode) {

I like early return better.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2357
&gt; +#if PLATFORM(MAC)

Seems a shame to have this all inside #if. Can we compile more of this on non-Mac just to keep things a bit more tidy? What’s the downside of doing that?

&gt; Source/WebKit2/UIProcess/WebPageProxy.h:349
&gt; +    void drawRectToPDF(WebFrameProxy*, const WebCore::IntRect&amp;, Vector&lt;uint8_t&gt;&amp; pdfData);

Mitz told me that it’s OK to use a Vector as a return result in cases like this and it won’t copy the data. Not sure he’s right though.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:169
&gt; +NSString * const PrintedFrameKey = @&quot;WebKitPrintedFrameKey&quot;;

Is this another case where const gives internal linkage without using the static keyword explicitly? Or should you add static here?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1333
&gt; +static void setFrameBeingPrinted(NSPrintOperation *printOperation, WebFrameProxy* frame)
&gt; +{
&gt; +    [[[printOperation printInfo] dictionary] setObject:[WebFrameWrapper webFrameWrapperWithFrame:frame] forKey:PrintedFrameKey];
&gt; +}
&gt; +
&gt; +
&gt; +static WebFrameProxy* frameBeingPrinted()
&gt; +{
&gt; +    return [[[[[NSPrintOperation currentOperation] printInfo] dictionary] objectForKey:PrintedFrameKey] webFrame];
&gt; +}
&gt; +
&gt; +
&gt;  - (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo forFrame:(WKFrameRef)frameRef

Extra blank lines here. One should be sufficient.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1358
&gt; +    LOG(View, &quot;knowsPageRange:\n&quot;);

I think the \n should be removed here. I guess this was a printf during your development?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1363
&gt; +    if (frame-&gt;isMainFrame() &amp;&amp; _data-&gt;_pdfViewController)
&gt; +        return [super knowsPageRange:range];

Is the isMainFrame test needed here? Is it helpful?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1374
&gt; +    if ([NSGraphicsContext currentContextDrawingToScreen]) {

I believe this will return NO for some non-printing cases, such as capturing into a buffer using cacheDisplayInRect:toBitmapImageRep:. Ideally it would be better to work in those cases.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1406
&gt; +    CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDocument, 1);
&gt; +    if (!pdfPage) {
&gt; +        LOG_ERROR(&quot;Printing data doesn&apos;t have page 1&quot;);
&gt; +        return;
&gt; +    }

Returning here will leak the pdfDocument.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1429
&gt; +// FIXME 3491344: This is an AppKit-internal method that we need to override in order
&gt; +// to get our shrink-to-fit to work with a custom pagination scheme. We can do this better
&gt; +// if AppKit makes it SPI/API.
&gt; +- (CGFloat)_provideTotalScaleFactorForPrintOperation:(NSPrintOperation *)printOperation 
&gt; +{
&gt; +    return _data-&gt;_totalScaleFactorForPrinting;
&gt; +}
&gt; +
&gt; +

Another extra blank line here.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:369
&gt; +    m_printContext.clear();

Anders wants you to write this:

    m_printContext = nullptr;

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1693
&gt; +        m_printContext = new PrintContext(coreFrame);

Please call adoptPtr here. An explicit call to adoptPtr is not required yet, but eventually it will be.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1700
&gt; +    m_printContext.clear();

Anders wants you to write this:

    m_printContext = nullptr;

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1719
&gt; +    // If we&apos;re asked to print, we should actually print something.
&gt; +    if (resultPageRects.isEmpty())
&gt; +        resultPageRects.append(IntRect(0, 0, 1, 1));

The comment is slightly oblique. I’d like a more-direct comment that states that a 1x1 pixel rectangle will be a single blank page and that’s what we want.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1736
&gt; +    CFMutableDataRef pdfPageData = CFDataCreateMutable(0, 0);

This leaks. I’d like to see smart pointers.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.messages.in:136
&gt; +    DrawRectToPDF(uint64_t frameID, WebCore::IntRect rect) -&gt; (Vector&lt;uint8_t&gt; pdfData)

Will it be more efficient to do this with DataReference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335529</commentid>
    <comment_count>6</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-17 14:42:20 -0800</bug_when>
    <thetext>Here are my comments:


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

&gt; Source/WebKit2/ChangeLog:25
&gt; +        (WebFrameWrapper): Added a wrapper class for adding a WebFrameFroxy to an NSDictionary.

Typo, Froxy.

&gt; Source/WebKit2/ChangeLog:53
&gt; +        (WebKit::WebPage::updatePreferences): PAss through ShouldPrintBackgrounds.

PAss.

&gt; Source/WebKit2/Shared/PrintInfo.h:32
&gt; +@class NSPrintInfo;

Add 

#else
class NSPrintInfo;

here.

&gt; Source/WebKit2/Shared/PrintInfo.h:44
&gt; +#ifdef __OBJC__

This should be PLATFORM(MAC).

&gt; Source/WebKit2/Shared/PrintInfo.h:45
&gt; +    PrintInfo(NSPrintInfo *);

This constructor should be explicit.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2354
&gt; +    process()-&gt;sendSync(Messages::WebPage::ComputePagesForPrinting(frame-&gt;frameID(), printInfo), Messages::WebPage::ComputePagesForPrinting::Reply(resultPageRects, resultTotalScaleFactorForPrinting), m_pageID, INT_MAX);

You don&apos;t need the INT_MAX here.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2361
&gt; +    process()-&gt;sendSync(Messages::WebPage::DrawRectToPDF(frame-&gt;frameID(), rect), Messages::WebPage::DrawRectToPDF::Reply(pdfData), m_pageID, INT_MAX);

Or here.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:149
&gt; ++ (WebFrameWrapper*)webFrameWrapperWithFrame:(WebFrameProxy*)frame;

This should be initWithFrame to avoid an autorelease.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1394
&gt; +    CGDataProviderRef pdfDataProvider = CGDataProviderCreateWithData(0, pdfData.data(), pdfData.size(), 0);

This can use RetainPtr.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1395
&gt; +    CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithProvider(pdfDataProvider);

I think this can use RetainPtr too.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1703
&gt; +void WebPage::computePagesForPrinting(uint64_t frameID, const PrintInfo&amp; printInfo, Vector&lt;WebCore::IntRect&gt;&amp; resultPageRects, double&amp; resultTotalScaleFactorForPrinting)

You can remove WebCore:: here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335555</commentid>
    <comment_count>7</comment_count>
      <attachid>79225</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-17 15:31:38 -0800</bug_when>
    <thetext>Created attachment 79225
proposed patch

&gt;&gt; +    return decoder-&gt;decode(CoreIPC::Out(t.pageSetupScaleFactor, t.availablePaperWidth, t.availablePaperHeight));
&gt; &gt; +}
&gt;
&gt; t, eh?

There&apos;s a lot of precedent for &quot;t&quot; (all WebEvent code, for example). But I can&apos;t see any reason for that, so changed to info.

&gt; I think our usual unwritten style rule is that if we use public data members without m_ prefixes, 
&gt; I use “struct”. Making this struct instead of class would follow that convention.

I didn&apos;t think that it could be done here, because autogenerated code was making &quot;class&quot; forward declarations. But turns out that there is an override in code generation script.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:2357
&gt; +#if PLATFORM(MAC)
&gt;
&gt; Seems a shame to have this all inside #if. Can we compile more of this on non-Mac
&gt; just to keep things a bit more tidy? What’s the downside of doing that?

I&apos;d like to think about how the data should be passed on other platforms later. It doesn&apos;t seem great to have several seemingly equal drawRectToXXX() methods, of which only one will work for any given platform.

&gt; Mitz told me that it’s OK to use a Vector as a return result in cases like this and it won’t copy the data.

I think that it&apos;s easier to use an out argument than to worry whether return value optimization will work in each particular case.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:169
&gt; +NSString * const PrintedFrameKey = @&quot;WebKitPrintedFrameKey&quot;;
&gt;
&gt; Is this another case where const gives internal linkage without using the static keyword explicitly?

Yes.

&gt; +    if (frame-&gt;isMainFrame() &amp;&amp; _data-&gt;_pdfViewController)
&gt; +        return [super knowsPageRange:range];
&gt;
&gt; Is the isMainFrame test needed here? Is it helpful?

I&apos;m not entirely sure. Obviously, PDF views don&apos;t have subframes, but I wanted to be explicit about what case is being handled here.

&gt; &gt; +    if ([NSGraphicsContext currentContextDrawingToScreen]) {
&gt;
&gt; I believe this will return NO for some non-printing cases

Ugh. I&apos;ve added a FIXME for now.

&gt; &gt; +    DrawRectToPDF(uint64_t frameID, WebCore::IntRect rect) -&gt; (Vector&lt;uint8_t&gt; pdfData)
&gt; 
&gt; Will it be more efficient to do this with DataReference?

I tried that at first, but DataReference doesn&apos;t take ownership of the data, so it can&apos;t be used for &quot;out&quot; arguments. Having MallocScribble always on in Xcode debugger saved me this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335558</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-17 15:32:49 -0800</bug_when>
    <thetext>Attachment 79225 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Shared/PrintInfo.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335561</commentid>
    <comment_count>9</comment_count>
      <attachid>79226</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-17 15:43:52 -0800</bug_when>
    <thetext>Created attachment 79226
proposed patch

Oh, also adding PrintInfo to other build systems to fix build...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335562</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-17 15:45:44 -0800</bug_when>
    <thetext>Attachment 79226 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Shared/PrintInfo.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335564</commentid>
    <comment_count>11</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-17 15:46:54 -0800</bug_when>
    <thetext>Attachment 79225 did not build on qt:
Build output: http://queues.webkit.org/results/7528150</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335573</commentid>
    <comment_count>12</comment_count>
      <attachid>79226</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-17 16:23:31 -0800</bug_when>
    <thetext>Comment on attachment 79226
proposed patch

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

&gt; Source/WebKit2/Shared/PrintInfo.h:45
&gt; +public:

No need for public here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335576</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-01-17 16:29:23 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/75979&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79214</attachid>
            <date>2011-01-17 14:05:47 -0800</date>
            <delta_ts>2011-01-17 15:31:38 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>printing.txt</filename>
            <type>text/plain</type>
            <size>37192</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1OTcxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjkgQEAKKzIwMTEtMDEtMTcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyNTk1CisgICAgICAgIE1ha2UgYmFzaWMgcHJpbnRpbmcgd29yayBpbiBXZWJLaXQyCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRT
aG91bGRQcmludEJhY2tncm91bmRzKToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRTaG91bGRQ
cmludEJhY2tncm91bmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5oOgorICAgICAgICBJbXBsZW1lbnQgYSBwcmVmZXJlbmNlIGZvciBwcmludGluZyBiYWNrZ3Jv
dW5kcy4KKworICAgICAgICAqIFNoYXJlZC9QcmludEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UHJpbnRJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpQcmludEluZm86
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5oOiBBZGRlZC4KKyAgICAgICAg
KiBTaGFyZWQvbWFjL1ByaW50SW5mb01hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBy
aW50SW5mbzo6UHJpbnRJbmZvKToKKyAgICAgICAgQSBuZXcgY2xhc3MgZm9yIHBhc3NpbmcgcGFn
ZSBzZXR1cCBpbmZvcm1hdGlvbiBkb3duIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKFdLVmlld0RhdGEpOiBDYWNo
ZSBwYWdlIGNvdW50IGFuZCBnZW9tZXRyeS4KKyAgICAgICAgKFdlYkZyYW1lV3JhcHBlcik6IEFk
ZGVkIGEgd3JhcHBlciBjbGFzcyBmb3IgYWRkaW5nIGEgV2ViRnJhbWVGcm94eSB0byBhbiBOU0Rp
Y3Rpb25hcnkuCisgICAgICAgICgtW1dLVmlldyBkcmF3UmVjdDpdKTogQWRkZWQgbG9nZ2luZy4K
KyAgICAgICAgKHNldEZyYW1lQmVpbmdQcmludGVkKTogU3RvcmUgYSBmcmFtZSBpbnRvIE5TUHJp
bnRPcGVyYXRpb24ncyBOU1ByaW50SW5mbywgc28gdGhhdCBhbGwgCisgICAgICAgIG1ldGhvZHMg
aW52b2tlZCBmb3IgdGhpcyBvcGVyYXRpb24gd291bGQga25vdyB3aGF0J3MgYmVpbmcgcHJpbnRl
ZC4KKyAgICAgICAgKGZyYW1lQmVpbmdQcmludGVkKTogUmV0cmlldmUgdGhpcyBkYXRhLgorICAg
ICAgICAoLVtXS1ZpZXcgcHJpbnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOmZvckZyYW1lOl0pOiBD
cmVhdGUgYSBwcmludCBvcGVyYXRpb24gdGhhdCdzIGFwcHJvcHJpYXRlCisgICAgICAgIGZvciB0
aGUgZnJhbWUuCisgICAgICAgICgtW1dLVmlldyBrbm93c1BhZ2VSYW5nZTpdKTogQXNrIHRoZSB3
ZWIgcHJvY2Vzcy4KKyAgICAgICAgKC1bV0tWaWV3IF9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVl
ZGVkSWdub3JpbmdPcGFjaXR5OmlzVmlzaWJsZVJlY3Q6cmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3
OnRvcFZpZXc6XSk6CisgICAgICAgIFRha2Ugb3ZlciBwcmludGluZywgYmVjYXVzZSBJIGNvdWxk
bid0IG1ha2UgZHJhd1JlY3Q6IHdvcmsgY29ycmVjdGx5IHdpdGggV2ViS2l0IGN1c3RvbSBmaXQK
KyAgICAgICAgdG8gcGFnZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKC1bV0tWaWV3IF9wcm92
aWRlVG90YWxTY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOl0pOiBIZWxwIEFwcEtpdCBjbGlw
IGNvcnJlY3RseS4KKyAgICAgICAgKC1bV0tWaWV3IHJlY3RGb3JQYWdlOl0pOiBSZXR1cm4gYSBw
cmUtY2FsY3VsYXRlZCByZWN0LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OiBBZGRlZCBtX2luUHJpbnRpbmdNb2RlIHRvIHRyYWNrIHdoZXRoZXIgdGhlIHdlYiBwYWdlIGlz
IGluCisgICAgICAgIHByaW50aW5nIG1vZGUuIFRoZSBVSSBwcm9jZXNzIGNvbnRyb2xzIHRoYXQu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkpOiBJbml0aWFsaXplIG1faW5QcmludGluZ01v
ZGUuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6YmVnaW5QcmludGluZyk6IENoYW5n
ZSBwcmludGluZyBtb2RlIGluIHdlYiBwcm9jZXNzIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmVuZFByaW50aW5nKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcpOiBBc2sgdGhl
IHdlYiBwcm9jZXNzIGFib3V0IG91dHB1dCBwYWdlIGdlb21ldHJ5LgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRyYXdSZWN0VG9QREYpOiBBc2sgdGhlIHdlYiBwcm9jZXNzIGFib3V0
IHByaW50ZWQgcGFnZSBkYXRhLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOiBBZGRlZCBQcmludEluZm8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKTogRGVsZXRl
IG1fcHJpbnRDb250ZXh0IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgRnJhbWUgcG9pbnRlci4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOiBQQXNzIHRocm91Z2gg
U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YmVnaW5Q
cmludGluZyk6IFN3aXRjaCBpbnRvIHByaW50aW5nIG1vZGUgKG9yIHVwZGF0ZSBwYXJhbWV0ZXJz
IGlmIHdlJ3JlCisgICAgICAgIGFscmVhZHkgaW4gcHJpbnRpbmcgbW9kZSkuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmVuZFByaW50aW5nKTogRGVsZXRlIG1fcHJpbnRDb250ZXh0LCBpbXBs
aWNpdGx5IGNhbGxpbmcgZW5kKCkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbXB1dGVQ
YWdlc0ZvclByaW50aW5nKTogTWFrZSBzdXJlIHRoYXQgd2UncmUgaW4gcHJpbnRpbmcgbW9kZSwg
YW5kCisgICAgICAgIGNvcG11dGUgcGFnZSByZWN0cy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZHJhd1JlY3RUb1BERik6IEFkZGVkIGEgQ0cgc3BlY2lmaWMgZnVuY3Rpb24gdG8gY3JlYXRl
IGEgUERGIGRvY3VtZW50IG91dAorICAgICAgICBvZiBhIHBhZ2UgcmVjdC4gSXQgc2hvdWxkIHJl
YWxseSB3b3JrIGZvciBvbnNjcmVlbiBjb250ZW50LCBidXQgd2Ugb25seSBuZWVkIGl0IGZvciBw
cmludGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogQWRkZWQgQmVn
aW5QcmludGluZywgRW5kUHJpbnRpbmcsCisgICAgICAgIENvbXB1dGVQYWdlc0ZvclByaW50aW5n
IGFuZCBEcmF3UmVjdFRvUERGLgorCiAyMDExLTAxLTE3ICBUb255IEdlbnRpbGNvcmUgIDx0b255
Z0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtv
di4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJQcmludEluZm8uaCIKKworI2luY2x1ZGUg
IkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgorI2luY2x1
ZGUgIkFyZ3VtZW50cy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBQcmludEluZm86
OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHBhZ2VTZXR1cFNjYWxlRmFjdG9yLCBhdmFpbGFi
bGVQYXBlcldpZHRoLCBhdmFpbGFibGVQYXBlckhlaWdodCkpOworfQorCitib29sIFByaW50SW5m
bzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUHJpbnRJbmZvJiB0
KQoreworICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KHQucGFnZVNldHVw
U2NhbGVGYWN0b3IsIHQuYXZhaWxhYmxlUGFwZXJXaWR0aCwgdC5hdmFpbGFibGVQYXBlckhlaWdo
dCkpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcmludEluZm9faAorI2RlZmluZSBQ
cmludEluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZmRlZiBfX09CSkNf
XworQGNsYXNzIE5TUHJpbnRJbmZvOworI2VuZGlmCisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKyAg
ICBjbGFzcyBBcmd1bWVudERlY29kZXI7CisgICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUHJpbnRJbmZvIHsKK3B1YmxpYzoKKyNpZmRl
ZiBfX09CSkNfXworICAgIFByaW50SW5mbyhOU1ByaW50SW5mbyAqKTsKKyNlbmRpZgorCisgICAg
ZmxvYXQgcGFnZVNldHVwU2NhbGVGYWN0b3I7CisgICAgZmxvYXQgYXZhaWxhYmxlUGFwZXJXaWR0
aDsKKyAgICBmbG9hdCBhdmFpbGFibGVQYXBlckhlaWdodDsKKworICAgIHZvaWQgZW5jb2RlKENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OworICAgIHN0YXRpYyBib29sIGRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBQcmludEluZm8mKTsKK307CisKK30KKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgJKHJl
dmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3Rv
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
ICAgICBtYWNybyhBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCwgYXV0aG9yQW5kVXNlclN0eWxl
c0VuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUpIFwKICAgICBtYWNybyhQYWdpbmF0ZUR1cmluZ0xh
eW91dEVuYWJsZWQsIHBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCwgQm9vbCwgYm9vbCwgZmFs
c2UpIFwKICAgICBtYWNybyhET01QYXN0ZUFsbG93ZWQsIGRvbVBhc3RlQWxsb3dlZCwgQm9vbCwg
Ym9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhTaG91bGRQcmludEJhY2tncm91bmRzLCBzaG91bGRQ
cmludEJhY2tncm91bmRzLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAogI2RlZmluZSBG
T1JfRUFDSF9XRUJLSVRfRE9VQkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvUHJpbnRJbmZvTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9tYWMvUHJpbnRJbmZvTWFjLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9QcmludEluZm9NYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJQcmludEluZm8uaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK1ByaW50SW5mbzo6UHJpbnRJbmZvKE5TUHJpbnRJbmZvICpwcmludEluZm8p
CisgICAgOiBwYWdlU2V0dXBTY2FsZUZhY3RvcihbW1twcmludEluZm8gZGljdGlvbmFyeV0gb2Jq
ZWN0Rm9yS2V5Ok5TUHJpbnRTY2FsaW5nRmFjdG9yXSBmbG9hdFZhbHVlXSkKKyAgICAsIGF2YWls
YWJsZVBhcGVyV2lkdGgoW3ByaW50SW5mbyBwYXBlclNpemVdLndpZHRoIC0gW3ByaW50SW5mbyBs
ZWZ0TWFyZ2luXSAtIFtwcmludEluZm8gcmlnaHRNYXJnaW5dKQorICAgICwgYXZhaWxhYmxlUGFw
ZXJIZWlnaHQoW3ByaW50SW5mbyBwYXBlclNpemVdLmhlaWdodCAtIFtwcmludEluZm8gdG9wTWFy
Z2luXSAtIFtwcmludEluZm8gYm90dG9tTWFyZ2luXSkKK3sKK30KKworfQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDc1OTY5KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJOYXRp
dmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUg
IlByaW50SW5mby5oIgogI2luY2x1ZGUgIlNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIlN0cmlu
Z1BhaXJWZWN0b3IuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgpAQCAtMTExLDYgKzExMiw3
IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQqIHAKICAgICAsIG1fdXNl
Rml4ZWRMYXlvdXQoZmFsc2UpCiAgICAgLCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1faXNDbG9z
ZWQoZmFsc2UpCisgICAgLCBtX2luUHJpbnRpbmdNb2RlKGZhbHNlKQogICAgICwgbV9pbkRlY2lk
ZVBvbGljeUZvck1JTUVUeXBlKGZhbHNlKQogICAgICwgbV9zeW5jTWltZVR5cGVQb2xpY3lBY3Rp
b25Jc1ZhbGlkKGZhbHNlKQogICAgICwgbV9zeW5jTWltZVR5cGVQb2xpY3lBY3Rpb24oUG9saWN5
VXNlKQpAQCAtMjMzMCw0ICsyMzMyLDM0IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpiYWNrRm9yd2Fy
ZFJlbW92ZWRJdGUKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZFJl
bW92ZUJhY2tGb3J3YXJkSXRlbShpdGVtSUQpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpiZWdpblByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludElu
Zm8mIHByaW50SW5mbykKK3sKKyAgICBpZiAoIW1faW5QcmludGluZ01vZGUpIHsKKyAgICAgICAg
bV9pblByaW50aW5nTW9kZSA9IHRydWU7CisgICAgICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZTo6QmVnaW5QcmludGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8pLCBt
X3BhZ2VJRCk7CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZW5kUHJpbnRpbmcoKQor
eworICAgIGlmIChtX2luUHJpbnRpbmdNb2RlKSB7CisgICAgICAgIG1faW5QcmludGluZ01vZGUg
PSBmYWxzZTsKKyAgICAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFbmRQ
cmludGluZygpLCBtX3BhZ2VJRCk7CisgICAgfQorfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Y29t
cHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5m
byYgcHJpbnRJbmZvLCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIHJlc3VsdFBhZ2VSZWN0cywg
ZG91YmxlJiByZXN1bHRUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpCit7CisgICAgLy8gTGF5
b3V0IGZvciBwcmludGluZyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYnV0IHdlIG5lZWQgdG8gaGF2
ZSB0aGUgYW5zd2VyLgorICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6
OkNvbXB1dGVQYWdlc0ZvclByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbyksIE1l
c3NhZ2VzOjpXZWJQYWdlOjpDb21wdXRlUGFnZXNGb3JQcmludGluZzo6UmVwbHkocmVzdWx0UGFn
ZVJlY3RzLCByZXN1bHRUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpLCBtX3BhZ2VJRCwgSU5U
X01BWCk7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd1Jl
Y3RUb1BERihXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgVmVjdG9y
PHVpbnQ4X3Q+JiBwZGZEYXRhKQoreworICAgIC8vIFByaW50aW5nIGNhbiB0YWtlIGEgbG9uZyB0
aW1lLCBidXQgd2UgbmVlZCB0byBoYXZlIHRoZSBhbnN3ZXIuCisgICAgcHJvY2VzcygpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1JlY3RUb1BERihmcmFtZS0+ZnJhbWVJRCgpLCBy
ZWN0KSwgTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdSZWN0VG9QREY6OlJlcGx5KHBkZkRhdGEpLCBt
X3BhZ2VJRCwgSU5UX01BWCk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3NTk2
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtODYsNiArODYsNyBAQCBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFBhZ2VDbGllbnQ7CiBjbGFzcyBQbGF0Zm9ybUNl
cnRpZmljYXRlSW5mbzsKK2NsYXNzIFByaW50SW5mbzsKIGNsYXNzIFN0cmluZ1BhaXJWZWN0b3I7
CiBjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5OwogY2xhc3MgV2ViQmFja0Zv
cndhcmRMaXN0OwpAQCAtMzQxLDYgKzM0MiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCk7CiAjZW5kaWYKIAorICAgIHZvaWQgYmVnaW5Qcmlu
dGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJik7CisgICAgdm9pZCBlbmRQcmlu
dGluZygpOworICAgIHZvaWQgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSos
IGNvbnN0IFByaW50SW5mbyYsIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVzdWx0UGFnZVJl
Y3RzLCBkb3VibGUmIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyk7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd1JlY3RUb1BERihXZWJGcmFtZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YSk7CisjZW5kaWYKKwog
cHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCosIFdlYkNvbnRleHQqLCBXZWJQ
YWdlR3JvdXAqLCB1aW50NjRfdCBwYWdlSUQpOwogCkBAIC01ODAsNiArNTg4LDggQEAgcHJpdmF0
ZToKICAgICAvLyBXaGV0aGVyIFdlYlBhZ2VQcm94eTo6Y2xvc2UoKSBoYXMgYmVlbiBjYWxsZWQg
b24gdGhpcyBwYWdlLgogICAgIGJvb2wgbV9pc0Nsb3NlZDsKIAorICAgIGJvb2wgbV9pblByaW50
aW5nTW9kZTsKKwogICAgIGJvb2wgbV9pbkRlY2lkZVBvbGljeUZvck1JTUVUeXBlOwogICAgIGJv
b2wgbV9zeW5jTWltZVR5cGVQb2xpY3lBY3Rpb25Jc1ZhbGlkOwogICAgIFdlYkNvcmU6OlBvbGlj
eUFjdGlvbiBtX3N5bmNNaW1lVHlwZVBvbGljeUFjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDc1OTY5
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTAsNiArMzkwLDE2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldEF1
dGhvckFuZFVzZXJTdHlsZXMKICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKTsKIH0KIAordm9pZCBXS1ByZWZlcmVuY2VzU2V0U2hv
dWxkUHJpbnRCYWNrZ3JvdW5kcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29s
IGZsYWcpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvdWxkUHJpbnRCYWNr
Z3JvdW5kcyhmbGFnKTsKK30KKworYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2hvdWxkUHJpbnRCYWNr
Z3JvdW5kcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zaG91bGRQcmludEJhY2tncm91bmRzKCk7Cit9CisKIHZv
aWQgV0tQcmVmZXJlbmNlc1NldFdlYkFyY2hpdmVEZWJ1Z01vZGVFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKICAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRXZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZChlbmFibGVkKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuaAkocmV2
aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBAIFdLX0VYUE9SVCBib29s
IFdLUHJlZmVyZW5jZXNHZXRETlNQcmVmZXQKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNT
ZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
LCBib29sIGVuYWJsZWQpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEF1dGhvckFu
ZFVzZXJTdHlsZXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMpOwogCisvLyBE
ZWZhdWx0cyB0byBmYWxzZS4KK1dLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTaG91bGRQ
cmludEJhY2tncm91bmRzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wgc2hvdWxk
UHJpbnRCYWNrZ3JvdW5kcyk7CitXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2hvdWxk
UHJpbnRCYWNrZ3JvdW5kcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKTsKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQREZWaWV3Q29u
dHJvbGxlci5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQgIlByaW50SW5m
by5oIgogI2ltcG9ydCAiUnVuTG9vcC5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKICNpbXBv
cnQgIlRleHRDaGVja2VyU3RhdGUuaCIKQEAgLTY4LDYgKzY5LDEwIEBAIEBpbnRlcmZhY2UgTlNB
cHBsaWNhdGlvbiAoRGV0YWlscykKIC0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nOwogQGVuZAogCitAaW50ZXJmYWNlIE5TVmlldyAoRGV0YWlscykKKy0gKHZvaWQpX3JlY3Vy
c2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGlzVmlz
aWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5T
VmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKK0BlbmQKKwogQGludGVy
ZmFjZSBOU1dpbmRvdyAoRGV0YWlscykKIC0gKE5TUmVjdClfZ3Jvd0JveFJlY3Q7CiAtIChCT09M
KV91cGRhdGVHcm93Qm94Rm9yV2luZG93RnJhbWVDaGFuZ2U7CkBAIC0xMjUsNiArMTMwLDkgQEAg
QGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogICAgIHVuc2lnbmVkIF9zZWxlY3Rp
b25TdGFydDsKICAgICB1bnNpZ25lZCBfc2VsZWN0aW9uRW5kOwogCisgICAgVmVjdG9yPEludFJl
Y3Q+IF9wcmludGluZ1BhZ2VSZWN0czsKKyAgICBkb3VibGUgX3RvdGFsU2NhbGVGYWN0b3JGb3JQ
cmludGluZzsKKwogICAgIGJvb2wgX2luQmVjb21lRmlyc3RSZXNwb25kZXI7CiAgICAgYm9vbCBf
aW5SZXNpZ25GaXJzdFJlc3BvbmRlcjsKIH0KQEAgLTEzMyw2ICsxNDEsMzMgQEAgQGludGVyZmFj
ZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogQGltcGxlbWVudGF0aW9uIFdLVmlld0RhdGEKIEBl
bmQKIAorQGludGVyZmFjZSBXZWJGcmFtZVdyYXBwZXIgOiBOU09iamVjdCB7CitAcHVibGljCisg
ICAgUmVmUHRyPFdlYkZyYW1lUHJveHk+IF9mcmFtZTsKK30KKworKyAoV2ViRnJhbWVXcmFwcGVy
Kil3ZWJGcmFtZVdyYXBwZXJXaXRoRnJhbWU6KFdlYkZyYW1lUHJveHkqKWZyYW1lOworLSAoV2Vi
RnJhbWVQcm94eSopd2ViRnJhbWU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZVdy
YXBwZXIKKworKyAoV2ViRnJhbWVXcmFwcGVyKil3ZWJGcmFtZVdyYXBwZXJXaXRoRnJhbWU6KFdl
YkZyYW1lUHJveHkqKWZyYW1lCit7CisgICAgV2ViRnJhbWVXcmFwcGVyKiB3cmFwcGVyID0gW1tX
ZWJGcmFtZVdyYXBwZXIgYWxsb2NdIGluaXRdOworICAgIHdyYXBwZXItPl9mcmFtZSA9IGZyYW1l
OworICAgIHJldHVybiBbd3JhcHBlciBhdXRvcmVsZWFzZV07Cit9CisKKy0gKFdlYkZyYW1lUHJv
eHkqKXdlYkZyYW1lCit7CisgICAgcmV0dXJuIF9mcmFtZS5nZXQoKTsKK30KKworQGVuZAorCitO
U1N0cmluZyAqIGNvbnN0IFByaW50ZWRGcmFtZUtleSA9IEAiV2ViS2l0UHJpbnRlZEZyYW1lS2V5
IjsKKwogQGludGVyZmFjZSBOU09iamVjdCAoTlNUZXh0SW5wdXRDb250ZXh0RGV0YWlscykKIC0g
KEJPT0wpd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzOwogLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50
OihOU0V2ZW50ICopZXZlbnQ7CkBAIC0xMTkyLDYgKzEyMjcsNyBAQCAtICh2b2lkKV93aW5kb3dG
cmFtZURpZENoYW5nZTooTlNOb3RpZmljCiAKIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0
CiB7CisgICAgTE9HKFZpZXcsICJkcmF3UmVjdDogeDolZywgeTolZywgd2lkdGg6JWcsIGhlaWdo
dDolZyIsIHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6ZS53aWR0aCwgcmVj
dC5zaXplLmhlaWdodCk7CiAgICAgaWYgKHVzZU5ld0RyYXdpbmdBcmVhKCkpIHsKICAgICAgICAg
aWYgKERyYXdpbmdBcmVhUHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdp
bmdBcmVhUHJveHlJbXBsKj4oX2RhdGEtPl9wYWdlLT5kcmF3aW5nQXJlYSgpKSkgewogICAgICAg
ICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0NvbnRleHRSZWY+KFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwpAQCAtMTI4
MiwxNCArMTMxOCwzMiBAQCAtIChOU0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRpZmllcgogICAg
IHJldHVybiAoTlNJbnRlZ2VyKXNlbGY7CiB9CiAKK3N0YXRpYyB2b2lkIHNldEZyYW1lQmVpbmdQ
cmludGVkKE5TUHJpbnRPcGVyYXRpb24gKnByaW50T3BlcmF0aW9uLCBXZWJGcmFtZVByb3h5KiBm
cmFtZSkKK3sKKyAgICBbW1twcmludE9wZXJhdGlvbiBwcmludEluZm9dIGRpY3Rpb25hcnldIHNl
dE9iamVjdDpbV2ViRnJhbWVXcmFwcGVyIHdlYkZyYW1lV3JhcHBlcldpdGhGcmFtZTpmcmFtZV0g
Zm9yS2V5OlByaW50ZWRGcmFtZUtleV07Cit9CisKKworc3RhdGljIFdlYkZyYW1lUHJveHkqIGZy
YW1lQmVpbmdQcmludGVkKCkKK3sKKyAgICByZXR1cm4gW1tbW1tOU1ByaW50T3BlcmF0aW9uIGN1
cnJlbnRPcGVyYXRpb25dIHByaW50SW5mb10gZGljdGlvbmFyeV0gb2JqZWN0Rm9yS2V5OlByaW50
ZWRGcmFtZUtleV0gd2ViRnJhbWVdOworfQorCisKIC0gKE5TUHJpbnRPcGVyYXRpb24gKilwcmlu
dE9wZXJhdGlvbldpdGhQcmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1l
OihXS0ZyYW1lUmVmKWZyYW1lUmVmCiB7CisgICAgTE9HKFZpZXcsICJDcmVhdGluZyBhbiBOU1By
aW50T3BlcmF0aW9uIGZvciBmcmFtZSAnJXMnIiwgdG9JbXBsKGZyYW1lUmVmKS0+dXJsKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgTlNQcmludE9wZXJhdGlvbiAqcHJpbnRPcGVyYXRpb247CisKICAg
ICAvLyBPbmx5IHRoZSB0b3AgZnJhbWUgY2FuIGN1cnJlbnRseSBjb250YWluIGEgUERGIHZpZXcu
CiAgICAgaWYgKF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpIHsKICAgICAgICAgQVNTRVJUKHRv
SW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCkpOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9w
ZGZWaWV3Q29udHJvbGxlci0+bWFrZVByaW50T3BlcmF0aW9uKHByaW50SW5mbyk7Ci0gICAgfQot
ICAgIHJldHVybiBbTlNQcmludE9wZXJhdGlvbiBwcmludE9wZXJhdGlvbldpdGhWaWV3OnNlbGYg
cHJpbnRJbmZvOnByaW50SW5mb107CisgICAgICAgIHByaW50T3BlcmF0aW9uID0gX2RhdGEtPl9w
ZGZWaWV3Q29udHJvbGxlci0+bWFrZVByaW50T3BlcmF0aW9uKHByaW50SW5mbyk7CisgICAgfSBl
bHNlCisgICAgICAgIHByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gcHJpbnRPcGVy
YXRpb25XaXRoVmlldzpzZWxmIHByaW50SW5mbzpwcmludEluZm9dOworCisgICAgc2V0RnJhbWVC
ZWluZ1ByaW50ZWQocHJpbnRPcGVyYXRpb24sIHRvSW1wbChmcmFtZVJlZikpOworICAgIHJldHVy
biBwcmludE9wZXJhdGlvbjsKIH0KIAogLSAoQk9PTCljYW5DaGFuZ2VGcmFtZUxheW91dDooV0tG
cmFtZVJlZilmcmFtZVJlZgpAQCAtMTI5OCw2ICsxMzUyLDk0IEBAIC0gKEJPT0wpY2FuQ2hhbmdl
RnJhbWVMYXlvdXQ6KFdLRnJhbWVSZWYKICAgICByZXR1cm4gIXRvSW1wbChmcmFtZVJlZiktPmlz
TWFpbkZyYW1lKCkgfHwgIV9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXI7CiB9CiAKKy8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBmb3IgcHJpbnRpbmcKKy0gKEJPT0wpa25v
d3NQYWdlUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKXJhbmdlCit7CisgICAgTE9HKFZpZXcsICJrbm93
c1BhZ2VSYW5nZTpcbiIpOworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gZnJhbWVCZWluZ1By
aW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAgaWYgKGZyYW1lLT5pc01haW5GcmFt
ZSgpICYmIF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBbc3VwZXIg
a25vd3NQYWdlUmFuZ2U6cmFuZ2VdOworCisgICAgX2RhdGEtPl9wYWdlLT5jb21wdXRlUGFnZXNG
b3JQcmludGluZyhmcmFtZSwgW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHBy
aW50SW5mb10sIF9kYXRhLT5fcHJpbnRpbmdQYWdlUmVjdHMsIF9kYXRhLT5fdG90YWxTY2FsZUZh
Y3RvckZvclByaW50aW5nKTsKKworICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9kYXRhLT5f
cHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gWUVTOworfQorCisvLyBUYWtl
IG92ZXIgcHJpbnRpbmcuIEFwcEtpdCBhcHBsaWVzIGluY29ycmVjdCBjbGlwcGluZywgYW5kIGRv
ZXNuJ3QgcHJpbnQgcGFnZXMgYmV5b25kIHRoZSBmaXJzdCBvbmUuCistICh2b2lkKV9yZWN1cnNp
dmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2li
bGVSZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1Zp
ZXcgKil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRvcFZpZXcKK3sKKyAgICBpZiAoW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSkgeworICAgICAgICBf
ZGF0YS0+X3BhZ2UtPmVuZFByaW50aW5nKCk7CisgICAgICAgIFtzdXBlciBfcmVjdXJzaXZlRGlz
cGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTpyZWN0IGlzVmlzaWJsZVJlY3Q6aXNWaXNp
YmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6dmlzaWJsZVZpZXcgdG9wVmlldzp0b3BW
aWV3XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIExPRyhWaWV3LCAiUHJpbnRpbmcg
cmVjdCB4OiVnLCB5OiVnLCB3aWR0aDolZywgaGVpZ2h0OiVnIiwgcmVjdC5vcmlnaW4ueCwgcmVj
dC5vcmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KTsKKworICAgIEFT
U0VSVChzZWxmID09IHZpc2libGVWaWV3KTsKKyAgICBBU1NFUlQoZnJhbWVCZWluZ1ByaW50ZWQo
KSk7CisKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IGZyYW1lQmVpbmdQcmludGVkKCk7Cisg
ICAgQVNTRVJUKGZyYW1lKTsKKworICAgIF9kYXRhLT5fcGFnZS0+YmVnaW5QcmludGluZyhmcmFt
ZSwgW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHByaW50SW5mb10pOworCisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgb3B0aW1pemVkIGZvciBwcmludCBwcmV2aWV3LiBHZXQgdGhl
IHdob2xlIGRvY3VtZW50IGF0IG9uY2Ugd2hlbiBhY3R1YWxseSBwcmludGluZy4KKyAgICBWZWN0
b3I8dWludDhfdD4gcGRmRGF0YTsKKyAgICBfZGF0YS0+X3BhZ2UtPmRyYXdSZWN0VG9QREYoZnJh
bWUsIEludFJlY3QocmVjdCksIHBkZkRhdGEpOworCisgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcGRm
RGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBwZGZEYXRhLmRh
dGEoKSwgcGRmRGF0YS5zaXplKCksIDApOworICAgIENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1l
bnQgPSBDR1BERkRvY3VtZW50Q3JlYXRlV2l0aFByb3ZpZGVyKHBkZkRhdGFQcm92aWRlcik7Cisg
ICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKHBkZkRhdGFQcm92aWRlcik7CisgICAgaWYgKCFwZGZE
b2N1bWVudCkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IGNyZWF0ZSBhIFBERiBkb2N1
bWVudCB3aXRoIGRhdGEgcGFzc2VkIGZvciBwcmludGluZyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShw
ZGZEb2N1bWVudCwgMSk7CisgICAgaWYgKCFwZGZQYWdlKSB7CisgICAgICAgIExPR19FUlJPUigi
UHJpbnRpbmcgZGF0YSBkb2Vzbid0IGhhdmUgcGFnZSAxIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNHcmFwaGljc0NvbnRleHQgPSBbTlNHcmFw
aGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihbbnNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NQb3J0
XSk7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgIC8vIEZsaXAgdGhl
IGRlc3RpbmF0aW9uLgorICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXJlY3Quc2l6ZS5oZWlnaHQpOwor
ICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBkZlBhZ2UpOworICAgIENHQ29udGV4
dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CisKKyAgICBDR1BERkRvY3VtZW50UmVsZWFzZShwZGZE
b2N1bWVudCk7Cit9CisKKy8vIEZJWE1FIDM0OTEzNDQ6IFRoaXMgaXMgYW4gQXBwS2l0LWludGVy
bmFsIG1ldGhvZCB0aGF0IHdlIG5lZWQgdG8gb3ZlcnJpZGUgaW4gb3JkZXIKKy8vIHRvIGdldCBv
dXIgc2hyaW5rLXRvLWZpdCB0byB3b3JrIHdpdGggYSBjdXN0b20gcGFnaW5hdGlvbiBzY2hlbWUu
IFdlIGNhbiBkbyB0aGlzIGJldHRlcgorLy8gaWYgQXBwS2l0IG1ha2VzIGl0IFNQSS9BUEkuCist
IChDR0Zsb2F0KV9wcm92aWRlVG90YWxTY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOihOU1By
aW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24gCit7CisgICAgcmV0dXJuIF9kYXRhLT5fdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nOworfQorCisKKy8vIFJldHVybiB0aGUgZHJhd2luZyBy
ZWN0YW5nbGUgZm9yIGEgcGFydGljdWxhciBwYWdlIG51bWJlcgorLSAoTlNSZWN0KXJlY3RGb3JQ
YWdlOihOU0ludGVnZXIpcGFnZQoreworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gZnJhbWVC
ZWluZ1ByaW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAgaWYgKGZyYW1lLT5pc01h
aW5GcmFtZSgpICYmIF9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBb
c3VwZXIgcmVjdEZvclBhZ2U6cGFnZV07CisKKyAgICBMT0coVmlldywgInJlY3RGb3JQYWdlOiVk
IC0+IHggJWQsIHkgJWQsIHdpZHRoICVkLCBoZWlnaHQgJWRcbiIsIChpbnQpcGFnZSwgX2RhdGEt
Pl9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV0ueCgpLCBfZGF0YS0+X3ByaW50aW5nUGFnZVJl
Y3RzW3BhZ2UgLSAxXS55KCksIF9kYXRhLT5fcHJpbnRpbmdQYWdlUmVjdHNbcGFnZSAtIDFdLndp
ZHRoKCksIF9kYXRhLT5fcHJpbnRpbmdQYWdlUmVjdHNbcGFnZSAtIDFdLmhlaWdodCgpKTsKKyAg
ICByZXR1cm4gX2RhdGEtPl9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV07Cit9CisKIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdLVmlldyAoSW50ZXJuYWwpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTk2
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNjY1LDYgKzY2NSwxMSBAQAogCQlEM0I5NDg0NzExRkY0QjY1MDAw
MzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51Lmgg
Ki87IH07CiAJCUQzQjk0ODQ4MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4
NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi87IH07CiAJCUQz
Qjk0ODQ5MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ1MTFGRjRCNjUwMDAz
MkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLzsgfTsKKwkJRTE4QzkyRjQxMkRCOUU3MTAw
Q0YyQUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAq
LzsgfTsKKwkJRTE4QzkyRjUxMkRCOUU3QTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThDOTJGMzEyREI5RTcx
MDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAqLzsgfTsKKwkJRTE4QzkyRjYxMkRCOUU5NDAwQ0Yy
QUVCIC8qIFByaW50SW5mb01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9NYWMubW0g
Ki87IH07CisJCUUxQ0MxQjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0MxQjhFMTJEN0VBREYw
MDYyNTgzOCAvKiBQcmludEluZm8uaCAqLzsgfTsKKwkJRTFDQzFCOTExMkQ3RUFERjAwNjI1ODM4
IC8qIFByaW50SW5mb01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9NYWMubW0gKi87
IH07CiAJCUUxRUU1M0UzMTFGOENGQzAwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxRUU1M0RDMTFGOENGOUYwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQuaCAqLzsgfTsKIAkJRTFFRTUzRTcxMUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUVFNTNFNjExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50LmNwcCAqLzsgfTsKIAkJRUQ4MkE3RjIxMjhDNkZBRjAwNDQ3N0IzIC8qIFdL
QnVuZGxlUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBMjJGMEZGMTI4OUZDRDkwMDg1RTc0RiAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwpAQCAtMTQy
MCw2ICsxNDI1LDkgQEAKIAkJRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVu
dS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1lbnUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdl
YlNlYXJjaFBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
M0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZv
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByaW50SW5mby5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQ0MxQjhFMTJEN0VBREYwMDYyNTgzOCAv
KiBQcmludEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpbnRJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQ0MxQjhGMTJEN0VBREYwMDYyNTgz
OCAvKiBQcmludEluZm9NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBQcmludEluZm9NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRUU1
M0RDMTFGOENGOUYwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRUU1M0U2MTFGOENGRkIw
MENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjYxMTNFMjQxMjZDRTE4MjAwNTdE
MEE3IC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE3NTcsNiArMTc2NSw4IEBACiAJCQkJQkNDRjY3MkMxMkM3RURGNzAwOEY5
QzM1IC8qIE9yaWdpbkFuZERhdGFiYXNlcy5oICovLAogCQkJCUJDQzQzQUI4MTI3Qjk1REMwMDMx
N0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuY3BwICovLAogCQkJCUJDQzQzQUI5MTI3Qjk1
REMwMDMxN0YxNiAvKiBQbGF0Zm9ybVBvcHVwTWVudURhdGEuaCAqLywKKwkJCQlFMThDOTJGMzEy
REI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAqLywKKwkJCQlFMUNDMUI4RTEyRDdFQURG
MDA2MjU4MzggLyogUHJpbnRJbmZvLmggKi8sCiAJCQkJQkMyRDAyMTYxMkFDNDFDQjAwRTczMkEz
IC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi8sCiAJCQkJMUFBQjRBOEMxMjk2RjBB
MjAwMjM5NTJGIC8qIFNhbmRib3hFeHRlbnNpb24uaCAqLywKIAkJCQkxQUE0MUFCNDEyQzAyRUM0
MDAyQkU2N0IgLyogU2VsZWN0aW9uU3RhdGUuaCAqLywKQEAgLTIzMTYsNiArMjMyNiw3IEBACiAJ
CQkJQzAyQkZGMUQxMjUxNTAyRTAwOUNDQkVBIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMu
bW0gKi8sCiAJCQkJQkNGNTA1RTYxMjQzMDQ3QjAwNTk1NUFFIC8qIFBsYXRmb3JtQ2VydGlmaWNh
dGVJbmZvLm1tICovLAogCQkJCUJDRjUwNUU1MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9ybUNl
cnRpZmljYXRlSW5mby5oICovLAorCQkJCUUxQ0MxQjhGMTJEN0VBREYwMDYyNTgzOCAvKiBQcmlu
dEluZm9NYWMubW0gKi8sCiAJCQkJQkM5RTk1RDIxMTQ0OUIwMzAwODcwRTcxIC8qIFVwZGF0ZUNo
dW5rLmNwcCAqLywKIAkJCQlCQzlFOTVEMTExNDQ5QjAzMDA4NzBFNzEgLyogVXBkYXRlQ2h1bmsu
aCAqLywKIAkJCQlCQ0UyMzI2MjEyMkM2Q0YzMDBENUMzNUEgLyogV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzTWFjLm1tICovLApAQCAtMzAyNiw2ICszMDM3LDcgQEAKIAkJCQlCQzFCRTFGMjEyRDU0REJE
MDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUEyQzMwNzExMkQ1NTU0NTAwNjNEQUEyIC8qIENvbnRleHRNZW51U3RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxOEQyQ0NCMTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUUxQ0MxQjkwMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNTRDQUNCMTJENjQyOTEwMDVDNjdCMCAvKiBXZWJHZW9sb2Nh
dGlvbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NENDMTIxMkQ2NzRFRTAw
NUM2N0IwIC8qIFdLR2VvbG9jYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzBF
NUZFNTEyRDY5NzE2MDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMxODMsNiArMzE5NSw4IEBACiAJCQkJMUE2RkEzMTExMUUzOTIxRTAwREIxMzcx
IC8qIE1haW5NYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRkEyODUxMjdBMTNCQzAwNTBF
NzA5IC8qIE5QT2JqZWN0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRkEzNUQxMjdB
NDVCRjAwNTBFNzA5IC8qIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUUxOEM5MkY1MTJEQjlFN0EwMENGMkFFQiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTE4QzkyRjYxMkRCOUU5NDAwQ0YyQUVCIC8qIFByaW50SW5mb01hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMzQ4Myw2ICszNDk3LDggQEAKIAkJCQlCQzFCRTFFMTEyRDU0QTQx
MDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkMxQkUxRjMxMkQ1NERCRDAwMDRBMjI4IC8qIFdlYkdlb2xvY2F0aW9uUHJvdmlkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE4RDJDQ0ExMkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25TdGF0
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUNDMUI5MTEyRDdFQURGMDA2MjU4MzggLyogUHJp
bnRJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTE4QzkyRjQxMkRCOUU3MTAwQ0YyQUVC
IC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU0Q0FDQzEyRDY0MjkxMDA1
QzY3QjAgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM1NENDMTMxMkQ2NzRFRTAwNUM2N0IwIC8qIFdLR2VvbG9jYXRpb25NYW5hZ2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDMEU1RkU2MTJENjk3MTYwMDEyQTcyQSAvKiBXZWJHZW9sb2Nh
dGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3NTk2OSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJveHkuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAiUHJpbnRJbmZv
LmgiCiAjaW5jbHVkZSAiU2Vzc2lvblN0YXRlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFw
LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCkBAIC04Miw3ICs4MywxMCBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVB
c1RleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TZXR0aW5ncy5oPgpAQCAtMzYyLDYgKzM2Niw4IEBAIHZvaWQgV2ViUGFnZTo6Y2xv
c2UoKQogCiAgICAgbV9zYW5kYm94RXh0ZW5zaW9uVHJhY2tlci5pbnZhbGlkYXRlKCk7CiAKKyAg
ICBtX3ByaW50Q29udGV4dC5jbGVhcigpOworCiAgICAgbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LT5sb2FkZXIoKS0+ZGV0YWNoRnJvbVBhcmVudCgpOwogICAgIG1fcGFnZS5jbGVhcigpOwogCkBA
IC0xMTg4LDYgKzExOTQsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0
IFdlCiAgICAgc2V0dGluZ3MtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6YXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWRLZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRQYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJs
ZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwYWdpbmF0ZUR1
cmluZ0xheW91dEVuYWJsZWRLZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRET01QYXN0ZUFsbG93
ZWQoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpkb21QYXN0ZUFs
bG93ZWRLZXkoKSkpOworICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHN0
b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c2hvdWxkUHJpbnRCYWNr
Z3JvdW5kc0tleSgpKSk7CiAKICAgICBzZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHN0b3Jl
LmdldFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjptaW5pbXVtRm9udFNpemVL
ZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHN0b3JlLmdl
dFVJbnQzMlZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjptaW5pbXVtTG9naWNhbEZvbnRT
aXplS2V5KCkpKTsKQEAgLTE2NzIsNCArMTY3OSw4MSBAQCB2b2lkIFdlYlBhZ2U6OnN0b3BTcGVh
a2luZygpCiAKICNlbmRpZgogCit2b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRpbmcodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8pCit7CisgICAgV2ViRnJhbWUqIGZy
YW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5j
b3JlRnJhbWUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3ByaW50Q29udGV4dCkKKyAgICAgICAgbV9wcmludENvbnRleHQgPSBuZXcgUHJpbnRD
b250ZXh0KGNvcmVGcmFtZSk7CisKKyAgICBtX3ByaW50Q29udGV4dC0+YmVnaW4ocHJpbnRJbmZv
LmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhlaWdodCk7Cit9
CisKK3ZvaWQgV2ViUGFnZTo6ZW5kUHJpbnRpbmcoKQoreworICAgIG1fcHJpbnRDb250ZXh0LmNs
ZWFyKCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcodWludDY0
X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzLCBkb3VibGUmIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JG
b3JQcmludGluZykKK3sKKyAgICBiZWdpblByaW50aW5nKGZyYW1lSUQsIHByaW50SW5mbyk7CisK
KyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFt
ZUlEKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBmdWxs
UGFnZUhlaWdodDsKKyAgICBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0cyhGbG9hdFJl
Y3QoMCwgMCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFi
bGVQYXBlckhlaWdodCksIDAsIDAsIHByaW50SW5mby5wYWdlU2V0dXBTY2FsZUZhY3RvciwgZnVs
bFBhZ2VIZWlnaHQsIHRydWUpOworCisgICAgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50
aW5nID0gbV9wcmludENvbnRleHQtPmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3RvcihwcmludElu
Zm8uYXZhaWxhYmxlUGFwZXJXaWR0aCkgKiBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3I7
CisgICAgcmVzdWx0UGFnZVJlY3RzID0gbV9wcmludENvbnRleHQtPnBhZ2VSZWN0cygpOworCisg
ICAgLy8gSWYgd2UncmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBhY3R1YWxseSBwcmludCBz
b21ldGhpbmcuCisgICAgaWYgKHJlc3VsdFBhZ2VSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJl
c3VsdFBhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdCgwLCAwLCAxLCAxKSk7Cit9CisKKyNpZiBQTEFU
Rk9STShNQUMpCisvLyBGSVhNRTogRmluZCBhIGJldHRlciBwbGFjZSBmb3IgTWFjIHNwZWNpZmlj
IGNvZGUuCit2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9QREYodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhKQorewor
ICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1l
SUQpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIEFTU0VSVChjb3JlRnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkp
OworCisgICAgQ0ZNdXRhYmxlRGF0YVJlZiBwZGZQYWdlRGF0YSA9IENGRGF0YUNyZWF0ZU11dGFi
bGUoMCwgMCk7CisKKyAgICAvLyBGSVhNRTogVXNlIENHRGF0YUNvbnN1bWVyQ3JlYXRlIHdpdGgg
Y2FsbGJhY2tzIHRvIGF2b2lkIGNvcHlpbmcgdGhlIGRhdGEuCisgICAgQ0dEYXRhQ29uc3VtZXJS
ZWYgcGRmRGF0YUNvbnN1bWVyID0gQ0dEYXRhQ29uc3VtZXJDcmVhdGVXaXRoQ0ZEYXRhKHBkZlBh
Z2VEYXRhKTsKKworICAgIENHUmVjdCBtZWRpYUJveCA9IENHUmVjdE1ha2UoMCwgMCwgZnJhbWUt
PnNpemUoKS53aWR0aCgpLCBmcmFtZS0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IENHUERGQ29udGV4dENyZWF0ZShwZGZEYXRhQ29uc3VtZXIsICZtZWRpYUJv
eCwgMCk7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBhZ2VJbmZvID0gQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29udGV4
dCwgcGFnZUluZm8pOworCisgICAgR3JhcGhpY3NDb250ZXh0IGN0eChjb250ZXh0KTsKKyAgICBt
X3ByaW50Q29udGV4dC0+c3Bvb2xSZWN0KGN0eCwgcmVjdCk7CisKKyAgICBDR1BERkNvbnRleHRF
bmRQYWdlKGNvbnRleHQpOworICAgIENHUERGQ29udGV4dENsb3NlKGNvbnRleHQpOworICAgIENH
RGF0YUNvbnN1bWVyUmVsZWFzZShwZGZEYXRhQ29uc3VtZXIpOworICAgIENHQ29udGV4dFJlbGVh
c2UoY29udGV4dCk7CisKKyAgICBwZGZEYXRhLnJlc2l6ZShDRkRhdGFHZXRMZW5ndGgocGRmUGFn
ZURhdGEpKTsKKyAgICBDRkRhdGFHZXRCeXRlcyhwZGZQYWdlRGF0YSwgQ0ZSYW5nZU1ha2UoMCwg
cGRmRGF0YS5zaXplKCkpLCBwZGZEYXRhLmRhdGEoKSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogICAgIGNsYXNzIEtleWJv
YXJkRXZlbnQ7CiAgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBQcmludENvbnRleHQ7CiAgICAg
Y2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwogICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIH0KQEAgLTgy
LDYgKzgzLDcgQEAgY2xhc3MgRHJhd2luZ0FyZWE7CiBjbGFzcyBJbmplY3RlZEJ1bmRsZUJhY2tG
b3J3YXJkTGlzdDsKIGNsYXNzIFBhZ2VPdmVybGF5OwogY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNz
IFByaW50SW5mbzsKIGNsYXNzIFNlc3Npb25TdGF0ZTsKIGNsYXNzIFdlYkNvbnRleHRNZW51Owog
Y2xhc3MgV2ViQ29udGV4dE1lbnVJdGVtRGF0YTsKQEAgLTMwMCw2ICszMDIsMTMgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KFdlYkNvcmU6OkZyYW1lKiwgY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0
X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50
UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aywgY29uc3QgV1RGOjpTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MpOwog
CisgICAgdm9pZCBiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5m
byYpOworICAgIHZvaWQgZW5kUHJpbnRpbmcoKTsKKyAgICB2b2lkIGNvbXB1dGVQYWdlc0ZvclBy
aW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYsIFZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzLCBkb3VibGUmIHJlc3VsdFRvdGFsU2NhbGVGYWN0
b3JGb3JQcmludGluZyk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd1JlY3RUb1BE
Rih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgVmVjdG9yPHVpbnQ4
X3Q+JiBwZGZEYXRhKTsKKyNlbmRpZgorCiAgICAgYm9vbCBtYWluRnJhbWVIYXNDdXN0b21SZXBy
ZXNlbnRhdGlvbigpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtNDgwLDYgKzQ4OSw4IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPiBtX2FjdGl2ZU9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyIG1fZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiAKKyAgICBPd25QdHI8
V2ViQ29yZTo6UHJpbnRDb250ZXh0PiBtX3ByaW50Q29udGV4dDsKKwogICAgIFNhbmRib3hFeHRl
bnNpb25UcmFja2VyIG1fc2FuZGJveEV4dGVuc2lvblRyYWNrZXI7CiAgICAgdWludDY0X3QgbV9w
YWdlSUQ7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw2ICsxMjgsMTQgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAKICAgICBTZXRX
aW5kb3dSZXNpemVyU2l6ZShXZWJDb3JlOjpJbnRTaXplIGludGVyc2VjdHNWaWV3KQogCisgICAg
IyBQcmludGluZy4KKyAgICBCZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6
UHJpbnRJbmZvIHByaW50SW5mbyk7CisgICAgRW5kUHJpbnRpbmcoKTsKKyAgICBDb21wdXRlUGFn
ZXNGb3JQcmludGluZyh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OlByaW50SW5mbyBwcmludElu
Zm8pIC0+IChWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gcGFnZVJlY3RzLCBkb3VibGUgdG90YWxT
Y2FsZUZhY3RvckZvclByaW50aW5nKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBEcmF3UmVjdFRv
UERGKHVpbnQ2NF90IGZyYW1lSUQsIFdlYkNvcmU6OkludFJlY3QgcmVjdCkgLT4gKFZlY3Rvcjx1
aW50OF90PiBwZGZEYXRhKQorI2VuZGlmCisKICAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1l
c3NhZ2UsIHRvIGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9u
J3QgcmVxdWlyZQogICAgIC8vIGFueSBzeW5jaHJvbm91cyBtZXNzYWdlcywgYW5kIHNob3VsZCBi
ZSByZW1vdmVkIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg3NzUxMTU+IGlzIGZpeGVkLgogICAgIER1
bW15KCkgLT4gKGJvb2wgZHVtbXlSZXR1cm4pCg==
</data>
<flag name="review"
          id="70603"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79225</attachid>
            <date>2011-01-17 15:31:38 -0800</date>
            <delta_ts>2011-01-17 15:43:52 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>printing.txt</filename>
            <type>text/plain</type>
            <size>38038</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1OTcxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDEtMTcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyNTk1CisgICAgICAgIE1ha2UgYmFzaWMgcHJpbnRpbmcgd29yayBpbiBXZWJLaXQyCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRT
aG91bGRQcmludEJhY2tncm91bmRzKToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRTaG91bGRQ
cmludEJhY2tncm91bmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5oOgorICAgICAgICBJbXBsZW1lbnQgYSBwcmVmZXJlbmNlIGZvciBwcmludGluZyBiYWNrZ3Jv
dW5kcy4KKworICAgICAgICAqIFNoYXJlZC9QcmludEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UHJpbnRJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpQcmludEluZm86
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5oOiBBZGRlZC4KKyAgICAgICAg
KiBTaGFyZWQvbWFjL1ByaW50SW5mb01hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBy
aW50SW5mbzo6UHJpbnRJbmZvKToKKyAgICAgICAgQSBuZXcgY2xhc3MgZm9yIHBhc3NpbmcgcGFn
ZSBzZXR1cCBpbmZvcm1hdGlvbiBkb3duIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weTogQWRkZWQgUHJpbnRJbmZvLmggdG8gYSBsaXN0
IG9mIHN0cnVjdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06Cisg
ICAgICAgIChXS1ZpZXdEYXRhKTogQ2FjaGUgcGFnZSBjb3VudCBhbmQgZ2VvbWV0cnkuCisgICAg
ICAgIChXZWJGcmFtZVdyYXBwZXIpOiBBZGRlZCBhIHdyYXBwZXIgY2xhc3MgZm9yIGFkZGluZyBh
IFdlYkZyYW1lUHJveHkgdG8gYW4gTlNEaWN0aW9uYXJ5LgorICAgICAgICAoLVtXS1ZpZXcgZHJh
d1JlY3Q6XSk6IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChzZXRGcmFtZUJlaW5nUHJpbnRlZCk6
IFN0b3JlIGEgZnJhbWUgaW50byBOU1ByaW50T3BlcmF0aW9uJ3MgTlNQcmludEluZm8sIHNvIHRo
YXQgYWxsIAorICAgICAgICBtZXRob2RzIGludm9rZWQgZm9yIHRoaXMgb3BlcmF0aW9uIHdvdWxk
IGtub3cgd2hhdCdzIGJlaW5nIHByaW50ZWQuCisgICAgICAgIChmcmFtZUJlaW5nUHJpbnRlZCk6
IFJldHJpZXZlIHRoaXMgZGF0YS4KKyAgICAgICAgKC1bV0tWaWV3IHByaW50T3BlcmF0aW9uV2l0
aFByaW50SW5mbzpmb3JGcmFtZTpdKTogQ3JlYXRlIGEgcHJpbnQgb3BlcmF0aW9uIHRoYXQncyBh
cHByb3ByaWF0ZQorICAgICAgICBmb3IgdGhlIGZyYW1lLgorICAgICAgICAoLVtXS1ZpZXcga25v
d3NQYWdlUmFuZ2U6XSk6IEFzayB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgICgtW1dLVmlldyBf
cmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTppc1Zpc2libGVSZWN0
OnJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzp0b3BWaWV3Ol0pOgorICAgICAgICBUYWtlIG92ZXIg
cHJpbnRpbmcsIGJlY2F1c2UgSSBjb3VsZG4ndCBtYWtlIGRyYXdSZWN0OiB3b3JrIGNvcnJlY3Rs
eSB3aXRoIFdlYktpdCBjdXN0b20gZml0CisgICAgICAgIHRvIHBhZ2UgaW1wbGVtZW50YXRpb24u
CisgICAgICAgICgtW1dLVmlldyBfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JGb3JQcmludE9wZXJh
dGlvbjpdKTogSGVscCBBcHBLaXQgY2xpcCBjb3JyZWN0bHkuCisgICAgICAgICgtW1dLVmlldyBy
ZWN0Rm9yUGFnZTpdKTogUmV0dXJuIGEgcHJlLWNhbGN1bGF0ZWQgcmVjdC4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDogQWRkZWQgbV9pc0luUHJpbnRpbmdNb2RlIHRvIHRy
YWNrIHdoZXRoZXIgdGhlIHdlYiBwYWdlIGlzIGluCisgICAgICAgIHByaW50aW5nIG1vZGUuIFRo
ZSBVSSBwcm9jZXNzIGNvbnRyb2xzIHRoYXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkp
OiBJbml0aWFsaXplIG1faXNJblByaW50aW5nTW9kZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpiZWdpblByaW50aW5nKTogQ2hhbmdlIHByaW50aW5nIG1vZGUgaW4gd2ViIHByb2Nl
c3MgaWYgdGhlIHZhbHVlIGNoYW5nZXMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZW5kUHJpbnRpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21w
dXRlUGFnZXNGb3JQcmludGluZyk6IEFzayB0aGUgd2ViIHByb2Nlc3MgYWJvdXQgb3V0cHV0IHBh
Z2UgZ2VvbWV0cnkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhd1JlY3RUb1BE
Rik6IEFzayB0aGUgd2ViIHByb2Nlc3MgYWJvdXQgcHJpbnRlZCBwYWdlIGRhdGEuCisKKyAgICAg
ICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFByaW50SW5mby4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6Y2xvc2UpOiBEZWxldGUgbV9wcmludENvbnRleHQgd2hpbGUgdGhlcmUg
aXMgc3RpbGwgYSBGcmFtZSBwb2ludGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRh
dGVQcmVmZXJlbmNlcyk6IFBhc3MgdGhyb3VnaCBTaG91bGRQcmludEJhY2tncm91bmRzLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpiZWdpblByaW50aW5nKTogU3dpdGNoIGludG8gcHJpbnRp
bmcgbW9kZSAob3IgdXBkYXRlIHBhcmFtZXRlcnMgaWYgd2UncmUKKyAgICAgICAgYWxyZWFkeSBp
biBwcmludGluZyBtb2RlKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZW5kUHJpbnRpbmcp
OiBEZWxldGUgbV9wcmludENvbnRleHQsIGltcGxpY2l0bHkgY2FsbGluZyBlbmQoKS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcpOiBNYWtlIHN1cmUg
dGhhdCB3ZSdyZSBpbiBwcmludGluZyBtb2RlLCBhbmQKKyAgICAgICAgY29wbXV0ZSBwYWdlIHJl
Y3RzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UmVjdFRvUERGKTogQWRkZWQgYSBD
RyBzcGVjaWZpYyBmdW5jdGlvbiB0byBjcmVhdGUgYSBQREYgZG9jdW1lbnQgb3V0CisgICAgICAg
IG9mIGEgcGFnZSByZWN0LiBJdCBzaG91bGQgcmVhbGx5IHdvcmsgZm9yIG9uc2NyZWVuIGNvbnRl
bnQsIGJ1dCB3ZSBvbmx5IG5lZWQgaXQgZm9yIHByaW50aW5nLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluOiBBZGRlZCBCZWdpblByaW50aW5nLCBFbmRQcmludGluZywKKyAg
ICAgICAgQ29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcgYW5kIERyYXdSZWN0VG9QREYuCisKIDIwMTEt
MDEtMTcgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogU291cmNlL1dlYktpdDIvU2Ny
aXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1Nj
cmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkocmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2
ICsyNTIsNyBAQCBkZWYgc3RydWN0X29yX2NsYXNzKG5hbWVzcGFjZSwgdHlwZSk6CiAgICAgICAg
ICdXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZScsCiAgICAgICAgICdXZWJDb3JlOjpLZXlw
cmVzc0NvbW1hbmQnLAogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luSW5mbycsCisgICAgICAgICdX
ZWJDb3JlOjpQcmludEluZm8nLAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMn
LAogICAgICAgICAnV2ViQ29yZTo6V2luZG93RmVhdHVyZXMnLAogICAgICAgICAnV2ViS2l0OjpE
cmF3aW5nQXJlYUluZm8nLApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlByaW50SW5mby5o
IgorCisjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRFbmNv
ZGVyLmgiCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQ
cmludEluZm86OlByaW50SW5mbygpCisgICAgOiBwYWdlU2V0dXBTY2FsZUZhY3RvcigwKQorICAg
ICwgYXZhaWxhYmxlUGFwZXJXaWR0aCgwKQorICAgICwgYXZhaWxhYmxlUGFwZXJIZWlnaHQoMCkK
K3sKK30KKwordm9pZCBQcmludEluZm86OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKENvcmVJUEM6OkluKHBhZ2VT
ZXR1cFNjYWxlRmFjdG9yLCBhdmFpbGFibGVQYXBlcldpZHRoLCBhdmFpbGFibGVQYXBlckhlaWdo
dCkpOworfQorCitib29sIFByaW50SW5mbzo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgUHJpbnRJbmZvJiBpbmZvKQoreworICAgIHJldHVybiBkZWNvZGVyLT5kZWNv
ZGUoQ29yZUlQQzo6T3V0KGluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3IsIGluZm8uYXZhaWxhYmxl
UGFwZXJXaWR0aCwgaW5mby5hdmFpbGFibGVQYXBlckhlaWdodCkpOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1ByaW50SW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1ByaW50SW5mby5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQcmludEluZm9faAorI2RlZmluZSBQcmludEluZm9faAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNzIE5TUHJpbnRJbmZv
OworI2Vsc2UKK2NsYXNzIE5TUHJpbnRJbmZvOworI2VuZGlmCisKK25hbWVzcGFjZSBDb3JlSVBD
IHsKKyAgICBjbGFzcyBBcmd1bWVudERlY29kZXI7CisgICAgY2xhc3MgQXJndW1lbnRFbmNvZGVy
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFByaW50SW5mbyB7CitwdWJsaWM6
CisgICAgUHJpbnRJbmZvKCk7CisgICAgZXhwbGljaXQgUHJpbnRJbmZvKE5TUHJpbnRJbmZvICop
OworCisgICAgZmxvYXQgcGFnZVNldHVwU2NhbGVGYWN0b3I7CisgICAgZmxvYXQgYXZhaWxhYmxl
UGFwZXJXaWR0aDsKKyAgICBmbG9hdCBhdmFpbGFibGVQYXBlckhlaWdodDsKKworICAgIHZvaWQg
ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OworICAgIHN0YXRpYyBib29s
IGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBQcmludEluZm8mKTsKK307CisKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0
b3JlLmgJKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZl
cmVuY2VzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKICAgICBtYWNybyhBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCwgYXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUpIFwKICAgICBtYWNybyhQYWdpbmF0
ZUR1cmluZ0xheW91dEVuYWJsZWQsIHBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCwgQm9vbCwg
Ym9vbCwgZmFsc2UpIFwKICAgICBtYWNybyhET01QYXN0ZUFsbG93ZWQsIGRvbVBhc3RlQWxsb3dl
ZCwgQm9vbCwgYm9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhTaG91bGRQcmludEJhY2tncm91bmRz
LCBzaG91bGRQcmludEJhY2tncm91bmRzLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAog
I2RlZmluZSBGT1JfRUFDSF9XRUJLSVRfRE9VQkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUHJpbnRJbmZvTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUHJpbnRJbmZvTWFjLm1tCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QcmludEluZm9NYWMubW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJQcmludEluZm8uaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1ByaW50SW5mbzo6UHJpbnRJbmZvKE5TUHJpbnRJbmZvICpw
cmludEluZm8pCisgICAgOiBwYWdlU2V0dXBTY2FsZUZhY3RvcihbW1twcmludEluZm8gZGljdGlv
bmFyeV0gb2JqZWN0Rm9yS2V5Ok5TUHJpbnRTY2FsaW5nRmFjdG9yXSBmbG9hdFZhbHVlXSkKKyAg
ICAsIGF2YWlsYWJsZVBhcGVyV2lkdGgoW3ByaW50SW5mbyBwYXBlclNpemVdLndpZHRoIC0gW3By
aW50SW5mbyBsZWZ0TWFyZ2luXSAtIFtwcmludEluZm8gcmlnaHRNYXJnaW5dKQorICAgICwgYXZh
aWxhYmxlUGFwZXJIZWlnaHQoW3ByaW50SW5mbyBwYXBlclNpemVdLmhlaWdodCAtIFtwcmludElu
Zm8gdG9wTWFyZ2luXSAtIFtwcmludEluZm8gYm90dG9tTWFyZ2luXSkKK3sKKyAgICBBU1NFUlQo
cHJpbnRJbmZvKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAJKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAj
aW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIlByaW50SW5mby5oIgogI2luY2x1ZGUg
IlNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIlN0cmluZ1BhaXJWZWN0b3IuaCIKICNpbmNsdWRl
ICJUZXh0Q2hlY2tlci5oIgpAQCAtMTExLDYgKzExMiw3IEBAIFdlYlBhZ2VQcm94eTo6V2ViUGFn
ZVByb3h5KFBhZ2VDbGllbnQqIHAKICAgICAsIG1fdXNlRml4ZWRMYXlvdXQoZmFsc2UpCiAgICAg
LCBtX2lzVmFsaWQodHJ1ZSkKICAgICAsIG1faXNDbG9zZWQoZmFsc2UpCisgICAgLCBtX2lzSW5Q
cmludGluZ01vZGUoZmFsc2UpCiAgICAgLCBtX2luRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoZmFs
c2UpCiAgICAgLCBtX3N5bmNNaW1lVHlwZVBvbGljeUFjdGlvbklzVmFsaWQoZmFsc2UpCiAgICAg
LCBtX3N5bmNNaW1lVHlwZVBvbGljeUFjdGlvbihQb2xpY3lVc2UpCkBAIC0yMzMwLDQgKzIzMzIs
MzYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmJhY2tGb3J3YXJkUmVtb3ZlZEl0ZQogICAgIHByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkUmVtb3ZlQmFja0ZvcndhcmRJdGVtKGl0
ZW1JRCksIG1fcGFnZUlEKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmJlZ2luUHJpbnRpbmco
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQoreworICAg
IGlmIChtX2lzSW5QcmludGluZ01vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNJblBy
aW50aW5nTW9kZSA9IHRydWU7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpCZWdpblByaW50aW5nKGZyYW1lLT5mcmFtZUlEKCksIHByaW50SW5mbyksIG1fcGFnZUlEKTsK
K30KKwordm9pZCBXZWJQYWdlUHJveHk6OmVuZFByaW50aW5nKCkKK3sKKyAgICBpZiAoIW1faXNJ
blByaW50aW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0luUHJpbnRpbmdNb2Rl
ID0gZmFsc2U7CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFbmRQcmlu
dGluZygpLCBtX3BhZ2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojpjb21wdXRlUGFnZXNG
b3JQcmludGluZyhXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludElu
Zm8sIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzLCBkb3VibGUmIHJl
c3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZykKK3sKKyAgICAvLyBMYXlvdXQgZm9yIHBy
aW50aW5nIGNhbiB0YWtlIGEgbG9uZyB0aW1lLCBidXQgd2UgbmVlZCB0byBoYXZlIHRoZSBhbnN3
ZXIuCisgICAgcHJvY2VzcygpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZTo6Q29tcHV0ZVBh
Z2VzRm9yUHJpbnRpbmcoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvKSwgTWVzc2FnZXM6Oldl
YlBhZ2U6OkNvbXB1dGVQYWdlc0ZvclByaW50aW5nOjpSZXBseShyZXN1bHRQYWdlUmVjdHMsIHJl
c3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyksIG1fcGFnZUlEKTsKK30KKworI2lmIFBM
QVRGT1JNKE1BQykKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UmVjdFRvUERGKFdlYkZyYW1lUHJv
eHkqIGZyYW1lLCBjb25zdCBJbnRSZWN0JiByZWN0LCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGEp
Cit7CisgICAgLy8gUHJpbnRpbmcgY2FuIHRha2UgYSBsb25nIHRpbWUsIGJ1dCB3ZSBuZWVkIHRv
IGhhdmUgdGhlIGFuc3dlci4KKyAgICBwcm9jZXNzKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpEcmF3UmVjdFRvUERGKGZyYW1lLT5mcmFtZUlEKCksIHJlY3QpLCBNZXNzYWdlczo6V2Vi
UGFnZTo6RHJhd1JlY3RUb1BERjo6UmVwbHkocGRmRGF0YSksIG1fcGFnZUlEKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgY2xh
c3MgV2ViUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViVVJMUmVxdWVzdDsKIGNsYXNzIFdlYldoZWVs
RXZlbnQ7CiBzdHJ1Y3QgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhOworc3RydWN0IFByaW50SW5mbzsK
IHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdlYlBvcHVwSXRlbTsK
IApAQCAtMzQxLDYgKzM0MiwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoYm9vbCk7CiAjZW5kaWYKIAorICAgIHZvaWQgYmVnaW5QcmludGluZyhXZWJG
cmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJik7CisgICAgdm9pZCBlbmRQcmludGluZygpOwor
ICAgIHZvaWQgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSosIGNvbnN0IFBy
aW50SW5mbyYsIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzLCBkb3Vi
bGUmIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyk7CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHZvaWQgZHJhd1JlY3RUb1BERihXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YSk7CisjZW5kaWYKKwogcHJpdmF0ZToK
ICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCosIFdlYkNvbnRleHQqLCBXZWJQYWdlR3JvdXAq
LCB1aW50NjRfdCBwYWdlSUQpOwogCkBAIC01ODAsNiArNTg4LDggQEAgcHJpdmF0ZToKICAgICAv
LyBXaGV0aGVyIFdlYlBhZ2VQcm94eTo6Y2xvc2UoKSBoYXMgYmVlbiBjYWxsZWQgb24gdGhpcyBw
YWdlLgogICAgIGJvb2wgbV9pc0Nsb3NlZDsKIAorICAgIGJvb2wgbV9pc0luUHJpbnRpbmdNb2Rl
OworCiAgICAgYm9vbCBtX2luRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGU7CiAgICAgYm9vbCBtX3N5
bmNNaW1lVHlwZVBvbGljeUFjdGlvbklzVmFsaWQ7CiAgICAgV2ViQ29yZTo6UG9saWN5QWN0aW9u
IG1fc3luY01pbWVUeXBlUG9saWN5QWN0aW9uOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gNzU5NjkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5MCw2ICszOTAsMTYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QXV0aG9yQW5k
VXNlclN0eWxlcwogICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZCgpOwogfQogCit2b2lkIFdLUHJlZmVyZW5jZXNTZXRTaG91bGRQcmlu
dEJhY2tncm91bmRzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykK
K3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRz
KGZsYWcpOworfQorCitib29sIFdLUHJlZmVyZW5jZXNHZXRTaG91bGRQcmludEJhY2tncm91bmRz
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNob3VsZFByaW50QmFja2dyb3VuZHMoKTsKK30KKwogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0V2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFdlYkFyY2hpdmVEZWJ1Z01vZGVFbmFibGVkKGVuYWJsZWQpOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5oCShyZXZpc2lvbiA3
NTk2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsMTAgQEAgV0tfRVhQT1JUIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldEROU1ByZWZldAogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wg
ZW5hYmxlZCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QXV0aG9yQW5kVXNlclN0
eWxlc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiAKKy8vIERlZmF1bHRz
IHRvIGZhbHNlLgorV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFNob3VsZFByaW50QmFj
a2dyb3VuZHMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcywgYm9vbCBzaG91bGRQcmludEJh
Y2tncm91bmRzKTsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRTaG91bGRQcmludEJh
Y2tncm91bmRzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMpOworCiAjaWZkZWYgX19jcGx1
c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
V0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlldy5tbQkocmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBv
cnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBERlZpZXdDb250cm9sbGVy
LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAj
aW1wb3J0ICJSdW5Mb29wLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgogI2ltcG9ydCAiVGV4
dENoZWNrZXJTdGF0ZS5oIgpAQCAtNjgsNiArNjksMTAgQEAgQGludGVyZmFjZSBOU0FwcGxpY2F0
aW9uIChEZXRhaWxzKQogLSAodm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CiBA
ZW5kCiAKK0BpbnRlcmZhY2UgTlNWaWV3IChEZXRhaWxzKQorLSAodm9pZClfcmVjdXJzaXZlRGlz
cGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVj
dDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzooTlNWaWV3ICop
dmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3OworQGVuZAorCiBAaW50ZXJmYWNlIE5T
V2luZG93IChEZXRhaWxzKQogLSAoTlNSZWN0KV9ncm93Qm94UmVjdDsKIC0gKEJPT0wpX3VwZGF0
ZUdyb3dCb3hGb3JXaW5kb3dGcmFtZUNoYW5nZTsKQEAgLTEyNSw2ICsxMzAsOSBAQCBAaW50ZXJm
YWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAgICAgdW5zaWduZWQgX3NlbGVjdGlvblN0YXJ0
OwogICAgIHVuc2lnbmVkIF9zZWxlY3Rpb25FbmQ7CiAKKyAgICBWZWN0b3I8SW50UmVjdD4gX3By
aW50aW5nUGFnZVJlY3RzOworICAgIGRvdWJsZSBfdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5n
OworCiAgICAgYm9vbCBfaW5CZWNvbWVGaXJzdFJlc3BvbmRlcjsKICAgICBib29sIF9pblJlc2ln
bkZpcnN0UmVzcG9uZGVyOwogfQpAQCAtMTMzLDYgKzE0MSwzNiBAQCBAaW50ZXJmYWNlIFdLVmll
d0RhdGEgOiBOU09iamVjdCB7CiBAaW1wbGVtZW50YXRpb24gV0tWaWV3RGF0YQogQGVuZAogCitA
aW50ZXJmYWNlIFdlYkZyYW1lV3JhcHBlciA6IE5TT2JqZWN0IHsKK0BwdWJsaWMKKyAgICBSZWZQ
dHI8V2ViRnJhbWVQcm94eT4gX2ZyYW1lOworfQorCistIChpZClpbml0V2l0aEZyYW1lUHJveHk6
KFdlYkZyYW1lUHJveHkqKWZyYW1lOworLSAoV2ViRnJhbWVQcm94eSopd2ViRnJhbWU7CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJGcmFtZVdyYXBwZXIKKworLSAoaWQpaW5pdFdpdGhGcmFt
ZVByb3h5OihXZWJGcmFtZVByb3h5KilmcmFtZQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2ZyYW1lID0gZnJh
bWU7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKFdlYkZyYW1lUHJveHkqKXdlYkZyYW1lCit7
CisgICAgcmV0dXJuIF9mcmFtZS5nZXQoKTsKK30KKworQGVuZAorCitOU1N0cmluZyAqIGNvbnN0
IFByaW50ZWRGcmFtZUtleSA9IEAiV2ViS2l0UHJpbnRlZEZyYW1lS2V5IjsKKwogQGludGVyZmFj
ZSBOU09iamVjdCAoTlNUZXh0SW5wdXRDb250ZXh0RGV0YWlscykKIC0gKEJPT0wpd2FudHNUb0hh
bmRsZU1vdXNlRXZlbnRzOwogLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50OihOU0V2ZW50ICopZXZl
bnQ7CkBAIC0xMTkyLDYgKzEyMzAsNyBAQCAtICh2b2lkKV93aW5kb3dGcmFtZURpZENoYW5nZToo
TlNOb3RpZmljCiAKIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiB7CisgICAgTE9HKFZp
ZXcsICJkcmF3UmVjdDogeDolZywgeTolZywgd2lkdGg6JWcsIGhlaWdodDolZyIsIHJlY3Qub3Jp
Z2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCk7
CiAgICAgaWYgKHVzZU5ld0RyYXdpbmdBcmVhKCkpIHsKICAgICAgICAgaWYgKERyYXdpbmdBcmVh
UHJveHlJbXBsKiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PERyYXdpbmdBcmVhUHJveHlJbXBs
Kj4oX2RhdGEtPl9wYWdlLT5kcmF3aW5nQXJlYSgpKSkgewogICAgICAgICAgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDR0NvbnRleHRSZWY+KFtbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwpAQCAtMTI4MiwxNCArMTMyMSwzMSBA
QCAtIChOU0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRpZmllcgogICAgIHJldHVybiAoTlNJbnRl
Z2VyKXNlbGY7CiB9CiAKK3N0YXRpYyB2b2lkIHNldEZyYW1lQmVpbmdQcmludGVkKE5TUHJpbnRP
cGVyYXRpb24gKnByaW50T3BlcmF0aW9uLCBXZWJGcmFtZVByb3h5KiBmcmFtZSkKK3sKKyAgICBS
ZXRhaW5QdHI8V2ViRnJhbWVXcmFwcGVyPiBmcmFtZVdyYXBwZXIoQWRvcHROUywgW1tXZWJGcmFt
ZVdyYXBwZXIgYWxsb2NdIGluaXRXaXRoRnJhbWVQcm94eTpmcmFtZV0pOworICAgIFtbW3ByaW50
T3BlcmF0aW9uIHByaW50SW5mb10gZGljdGlvbmFyeV0gc2V0T2JqZWN0OmZyYW1lV3JhcHBlci5n
ZXQoKSBmb3JLZXk6UHJpbnRlZEZyYW1lS2V5XTsKK30KKworc3RhdGljIFdlYkZyYW1lUHJveHkq
IGZyYW1lQmVpbmdQcmludGVkKCkKK3sKKyAgICByZXR1cm4gW1tbW1tOU1ByaW50T3BlcmF0aW9u
IGN1cnJlbnRPcGVyYXRpb25dIHByaW50SW5mb10gZGljdGlvbmFyeV0gb2JqZWN0Rm9yS2V5OlBy
aW50ZWRGcmFtZUtleV0gd2ViRnJhbWVdOworfQorCiAtIChOU1ByaW50T3BlcmF0aW9uICopcHJp
bnRPcGVyYXRpb25XaXRoUHJpbnRJbmZvOihOU1ByaW50SW5mbyAqKXByaW50SW5mbyBmb3JGcmFt
ZTooV0tGcmFtZVJlZilmcmFtZVJlZgogeworICAgIExPRyhWaWV3LCAiQ3JlYXRpbmcgYW4gTlNQ
cmludE9wZXJhdGlvbiBmb3IgZnJhbWUgJyVzJyIsIHRvSW1wbChmcmFtZVJlZiktPnVybCgpLnV0
ZjgoKS5kYXRhKCkpOworICAgIE5TUHJpbnRPcGVyYXRpb24gKnByaW50T3BlcmF0aW9uOworCiAg
ICAgLy8gT25seSB0aGUgdG9wIGZyYW1lIGNhbiBjdXJyZW50bHkgY29udGFpbiBhIFBERiB2aWV3
LgogICAgIGlmIChfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKSB7CiAgICAgICAgIEFTU0VSVCh0
b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIF9kYXRhLT5f
cGRmVmlld0NvbnRyb2xsZXItPm1ha2VQcmludE9wZXJhdGlvbihwcmludEluZm8pOwotICAgIH0K
LSAgICByZXR1cm4gW05TUHJpbnRPcGVyYXRpb24gcHJpbnRPcGVyYXRpb25XaXRoVmlldzpzZWxm
IHByaW50SW5mbzpwcmludEluZm9dOworICAgICAgICBwcmludE9wZXJhdGlvbiA9IF9kYXRhLT5f
cGRmVmlld0NvbnRyb2xsZXItPm1ha2VQcmludE9wZXJhdGlvbihwcmludEluZm8pOworICAgIH0g
ZWxzZQorICAgICAgICBwcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIHByaW50T3Bl
cmF0aW9uV2l0aFZpZXc6c2VsZiBwcmludEluZm86cHJpbnRJbmZvXTsKKworICAgIHNldEZyYW1l
QmVpbmdQcmludGVkKHByaW50T3BlcmF0aW9uLCB0b0ltcGwoZnJhbWVSZWYpKTsKKyAgICByZXR1
cm4gcHJpbnRPcGVyYXRpb247CiB9CiAKIC0gKEJPT0wpY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KFdL
RnJhbWVSZWYpZnJhbWVSZWYKQEAgLTEyOTgsNiArMTM1NCw5MSBAQCAtIChCT09MKWNhbkNoYW5n
ZUZyYW1lTGF5b3V0OihXS0ZyYW1lUmVmCiAgICAgcmV0dXJuICF0b0ltcGwoZnJhbWVSZWYpLT5p
c01haW5GcmFtZSgpIHx8ICFfZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyOwogfQogCisvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhdmFpbGFibGUgZm9yIHByaW50aW5nCistIChCT09MKWtu
b3dzUGFnZVJhbmdlOihOU1JhbmdlUG9pbnRlcilyYW5nZQoreworICAgIExPRyhWaWV3LCAia25v
d3NQYWdlUmFuZ2U6Iik7CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBmcmFtZUJlaW5nUHJp
bnRlZCgpOworICAgIEFTU0VSVChmcmFtZSk7CisKKyAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1l
KCkgJiYgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIFtzdXBlciBr
bm93c1BhZ2VSYW5nZTpyYW5nZV07CisKKyAgICBfZGF0YS0+X3BhZ2UtPmNvbXB1dGVQYWdlc0Zv
clByaW50aW5nKGZyYW1lLCBQcmludEluZm8oW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVy
YXRpb25dIHByaW50SW5mb10pLCBfZGF0YS0+X3ByaW50aW5nUGFnZVJlY3RzLCBfZGF0YS0+X3Rv
dGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyk7CisKKyAgICAqcmFuZ2UgPSBOU01ha2VSYW5nZSgx
LCBfZGF0YS0+X3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSk7CisgICAgcmV0dXJuIFlFUzsKK30K
KworLy8gVGFrZSBvdmVyIHByaW50aW5nLiBBcHBLaXQgYXBwbGllcyBpbmNvcnJlY3QgY2xpcHBp
bmcsIGFuZCBkb2Vzbid0IHByaW50IHBhZ2VzIGJleW9uZCB0aGUgZmlyc3Qgb25lLgorLSAodm9p
ZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KXJl
Y3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9y
VmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3Cit7CisgICAg
aWYgKFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0pIHsK
KyAgICAgICAgLy8gRklYTUU6IAorICAgICAgICBfZGF0YS0+X3BhZ2UtPmVuZFByaW50aW5nKCk7
CisgICAgICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3Bh
Y2l0eTpyZWN0IGlzVmlzaWJsZVJlY3Q6aXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZv
clZpZXc6dmlzaWJsZVZpZXcgdG9wVmlldzp0b3BWaWV3XTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIExPRyhWaWV3LCAiUHJpbnRpbmcgcmVjdCB4OiVnLCB5OiVnLCB3aWR0aDolZywg
aGVpZ2h0OiVnIiwgcmVjdC5vcmlnaW4ueCwgcmVjdC5vcmlnaW4ueSwgcmVjdC5zaXplLndpZHRo
LCByZWN0LnNpemUuaGVpZ2h0KTsKKworICAgIEFTU0VSVChzZWxmID09IHZpc2libGVWaWV3KTsK
KyAgICBBU1NFUlQoZnJhbWVCZWluZ1ByaW50ZWQoKSk7CisKKyAgICBXZWJGcmFtZVByb3h5KiBm
cmFtZSA9IGZyYW1lQmVpbmdQcmludGVkKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKworICAgIF9k
YXRhLT5fcGFnZS0+YmVnaW5QcmludGluZyhmcmFtZSwgUHJpbnRJbmZvKFtbTlNQcmludE9wZXJh
dGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dKSk7CisKKyAgICAvLyBGSVhNRTogVGhp
cyBpcyBvcHRpbWl6ZWQgZm9yIHByaW50IHByZXZpZXcuIEdldCB0aGUgd2hvbGUgZG9jdW1lbnQg
YXQgb25jZSB3aGVuIGFjdHVhbGx5IHByaW50aW5nLgorICAgIFZlY3Rvcjx1aW50OF90PiBwZGZE
YXRhOworICAgIF9kYXRhLT5fcGFnZS0+ZHJhd1JlY3RUb1BERihmcmFtZSwgSW50UmVjdChyZWN0
KSwgcGRmRGF0YSk7CisKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHBkZkRhdGFQ
cm92aWRlcihBZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIHBkZkRhdGEu
ZGF0YSgpLCBwZGZEYXRhLnNpemUoKSwgMCkpOworICAgIFJldGFpblB0cjxDR1BERkRvY3VtZW50
UmVmPiBwZGZEb2N1bWVudChBZG9wdENGLCBDR1BERkRvY3VtZW50Q3JlYXRlV2l0aFByb3ZpZGVy
KHBkZkRhdGFQcm92aWRlci5nZXQoKSkpOworICAgIGlmICghcGRmRG9jdW1lbnQpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBjcmVhdGUgYSBQREYgZG9jdW1lbnQgd2l0aCBkYXRhIHBh
c3NlZCBmb3IgcHJpbnRpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENHUERG
UGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UocGRmRG9jdW1lbnQuZ2V0KCks
IDEpOworICAgIGlmICghcGRmUGFnZSkgeworICAgICAgICBMT0dfRVJST1IoIlByaW50aW5nIGRh
dGEgZG9lc24ndCBoYXZlIHBhZ2UgMSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
TlNHcmFwaGljc0NvbnRleHQgKm5zR3JhcGhpY3NDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0
IGN1cnJlbnRDb250ZXh0XTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHN0YXRpY19jYXN0
PENHQ29udGV4dFJlZj4oW25zR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzUG9ydF0pOworCisgICAg
Q0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKyAgICAvLyBGbGlwIHRoZSBkZXN0aW5hdGlv
bi4KKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1yZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBDR0NvbnRl
eHREcmF3UERGUGFnZShjb250ZXh0LCBwZGZQYWdlKTsKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOworfQorCisvLyBGSVhNRSAzNDkxMzQ0OiBUaGlzIGlzIGFuIEFwcEtpdC1p
bnRlcm5hbCBtZXRob2QgdGhhdCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9yZGVyCisvLyB0byBn
ZXQgb3VyIHNocmluay10by1maXQgdG8gd29yayB3aXRoIGEgY3VzdG9tIHBhZ2luYXRpb24gc2No
ZW1lLiBXZSBjYW4gZG8gdGhpcyBiZXR0ZXIKKy8vIGlmIEFwcEtpdCBtYWtlcyBpdCBTUEkvQVBJ
LgorLSAoQ0dGbG9hdClfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjoo
TlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uIAoreworICAgIHJldHVybiBfZGF0YS0+
X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZzsKK30KKworLy8gUmV0dXJuIHRoZSBkcmF3aW5n
IHJlY3RhbmdsZSBmb3IgYSBwYXJ0aWN1bGFyIHBhZ2UgbnVtYmVyCistIChOU1JlY3QpcmVjdEZv
clBhZ2U6KE5TSW50ZWdlcilwYWdlCit7CisgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBmcmFt
ZUJlaW5nUHJpbnRlZCgpOworICAgIEFTU0VSVChmcmFtZSk7CisKKyAgICBpZiAoZnJhbWUtPmlz
TWFpbkZyYW1lKCkgJiYgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJu
IFtzdXBlciByZWN0Rm9yUGFnZTpwYWdlXTsKKworICAgIExPRyhWaWV3LCAicmVjdEZvclBhZ2U6
JWQgLT4geCAlZCwgeSAlZCwgd2lkdGggJWQsIGhlaWdodCAlZFxuIiwgKGludClwYWdlLCBfZGF0
YS0+X3ByaW50aW5nUGFnZVJlY3RzW3BhZ2UgLSAxXS54KCksIF9kYXRhLT5fcHJpbnRpbmdQYWdl
UmVjdHNbcGFnZSAtIDFdLnkoKSwgX2RhdGEtPl9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV0u
d2lkdGgoKSwgX2RhdGEtPl9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV0uaGVpZ2h0KCkpOwor
ICAgIHJldHVybiBfZGF0YS0+X3ByaW50aW5nUGFnZVJlY3RzW3BhZ2UgLSAxXTsKK30KKwogQGVu
ZAogCiBAaW1wbGVtZW50YXRpb24gV0tWaWV3IChJbnRlcm5hbCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc1
OTY5KQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC02NjUsNiArNjY1LDExIEBACiAJCUQzQjk0ODQ3MTFGRjRCNjUw
MDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUu
aCAqLzsgfTsKIAkJRDNCOTQ4NDgxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVu
dS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5
NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLzsgfTsKIAkJ
RDNCOTQ4NDkxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDUxMUZGNEI2NTAw
MDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovOyB9OworCQlFMThDOTJGNDEyREI5RTcx
MDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3Bw
ICovOyB9OworCQlFMThDOTJGNTEyREI5RTdBMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEM5MkYzMTJEQjlF
NzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovOyB9OworCQlFMThDOTJGNjEyREI5RTk0MDBD
RjJBRUIgLyogUHJpbnRJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5t
bSAqLzsgfTsKKwkJRTFDQzFCOTAxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQzFCOEUxMkQ3RUFE
RjAwNjI1ODM4IC8qIFByaW50SW5mby5oICovOyB9OworCQlFMUNDMUI5MTEyRDdFQURGMDA2MjU4
MzggLyogUHJpbnRJbmZvTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5tbSAq
LzsgfTsKIAkJRTFFRTUzRTMxMUY4Q0ZDMDAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFFRTUzREMxMUY4Q0Y5RjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudC5oICovOyB9OwogCQlFMUVFNTNFNzExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlRWRpdG9yQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxRUU1M0U2MTFGOENGRkIwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQuY3BwICovOyB9OwogCQlFRDgyQTdGMjEyOEM2RkFGMDA0NDc3QjMgLyog
V0tCdW5kbGVQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUEyMkYwRkYxMjg5RkNEOTAwODVFNzRGIC8qIFdLQnVuZGxlUGFnZU92ZXJs
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CkBAIC0x
NDIwLDYgKzE0MjUsOSBAQAogCQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBN
ZW51LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyog
V2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQzQjk0ODQ1MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2VhcmNoUG9wdXBNZW51Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludElu
Zm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRJbmZvLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4
IC8qIFByaW50SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmludElu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDQzFCOEYxMkQ3RUFERjAwNjI1
ODM4IC8qIFByaW50SW5mb01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFByaW50SW5mb01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFF
RTUzREMxMUY4Q0Y5RjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFRTUzRTYxMUY4Q0ZG
QjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNjExM0UyNDEyNkNFMTgyMDA1
N0QwQTcgLyogV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTc1Nyw2ICsxNzY1LDggQEAKIAkJCQlCQ0NGNjcyQzEyQzdFREY3MDA4
RjlDMzUgLyogT3JpZ2luQW5kRGF0YWJhc2VzLmggKi8sCiAJCQkJQkNDNDNBQjgxMjdCOTVEQzAw
MzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAgKi8sCiAJCQkJQkNDNDNBQjkxMjdC
OTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oICovLAorCQkJCUUxOEM5MkYz
MTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovLAorCQkJCUUxQ0MxQjhFMTJEN0VB
REYwMDYyNTgzOCAvKiBQcmludEluZm8uaCAqLywKIAkJCQlCQzJEMDIxNjEyQUM0MUNCMDBFNzMy
QTMgLyogU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUuaCAqLywKIAkJCQkxQUFCNEE4QzEyOTZG
MEEyMDAyMzk1MkYgLyogU2FuZGJveEV4dGVuc2lvbi5oICovLAogCQkJCTFBQTQxQUI0MTJDMDJF
QzQwMDJCRTY3QiAvKiBTZWxlY3Rpb25TdGF0ZS5oICovLApAQCAtMjMxNiw2ICsyMzI2LDcgQEAK
IAkJCQlDMDJCRkYxRDEyNTE1MDJFMDA5Q0NCRUEgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1h
Yy5tbSAqLywKIAkJCQlCQ0Y1MDVFNjEyNDMwNDdCMDA1OTU1QUUgLyogUGxhdGZvcm1DZXJ0aWZp
Y2F0ZUluZm8ubW0gKi8sCiAJCQkJQkNGNTA1RTUxMjQzMDQ3QjAwNTk1NUFFIC8qIFBsYXRmb3Jt
Q2VydGlmaWNhdGVJbmZvLmggKi8sCisJCQkJRTFDQzFCOEYxMkQ3RUFERjAwNjI1ODM4IC8qIFBy
aW50SW5mb01hYy5tbSAqLywKIAkJCQlCQzlFOTVEMjExNDQ5QjAzMDA4NzBFNzEgLyogVXBkYXRl
Q2h1bmsuY3BwICovLAogCQkJCUJDOUU5NUQxMTE0NDlCMDMwMDg3MEU3MSAvKiBVcGRhdGVDaHVu
ay5oICovLAogCQkJCUJDRTIzMjYyMTIyQzZDRjMwMEQ1QzM1QSAvKiBXZWJDb3JlQXJndW1lbnRD
b2RlcnNNYWMubW0gKi8sCkBAIC0zMDI2LDYgKzMwMzcsNyBAQAogCQkJCUJDMUJFMUYyMTJENTRE
QkQwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTJDMzA3MTEyRDU1NTQ1MDA2M0RBQTIgLyogQ29udGV4dE1lbnVTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE4RDJDQ0IxMkQ1MURGQjAwM0JCOTNCIC8qIFNlc3Npb25TdGF0ZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTFDQzFCOTAxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NENBQ0IxMkQ2NDI5MTAwNUM2N0IwIC8qIFdlYkdlb2xv
Y2F0aW9uTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzU0Q0MxMjEyRDY3NEVF
MDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MEU1RkU1MTJENjk3MTYwMDEyQTcyQSAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzE4Myw2ICszMTk1LDggQEAKIAkJCQkxQTZGQTMxMTExRTM5MjFFMDBEQjEz
NzEgLyogTWFpbk1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTFGQTI4NTEyN0ExM0JDMDA1
MEU3MDkgLyogTlBPYmplY3RQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTFGQTM1RDEy
N0E0NUJGMDA1MEU3MDkgLyogTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTE4QzkyRjUxMkRCOUU3QTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFMThDOTJGNjEyREI5RTk0MDBDRjJBRUIgLyogUHJpbnRJbmZvTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0zNDgzLDYgKzM0OTcsOCBAQAogCQkJCUJDMUJFMUUxMTJENTRB
NDEwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzFCRTFGMzEyRDU0REJEMDAwNEEyMjggLyogV2ViR2VvbG9jYXRpb25Qcm92aWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MThEMkNDQTEyRDUxREZCMDAzQkI5M0IgLyogU2Vzc2lvblN0
YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQ0MxQjkxMTJEN0VBREYwMDYyNTgzOCAvKiBQ
cmludEluZm9NYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMThDOTJGNDEyREI5RTcxMDBDRjJB
RUIgLyogUHJpbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTRDQUNDMTJENjQyOTEw
MDVDNjdCMCAvKiBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzU0Q0MxMzEyRDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwRTVGRTYxMkQ2OTcxNjAwMTJBNzJBIC8qIFdlYkdlb2xv
Y2F0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc1OTY5KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJQ
bHVnaW5Qcm94eS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKKyNpbmNsdWRlICJQcmludElu
Zm8uaCIKICNpbmNsdWRlICJTZXNzaW9uU3RhdGUuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRt
YXAuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKQEAgLTgyLDcgKzgzLDEwIEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJl
ZUFzVGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NldHRpbmdzLmg+CkBAIC0zNjIsNiArMzY2LDggQEAgdm9pZCBXZWJQYWdlOjpj
bG9zZSgpCiAKICAgICBtX3NhbmRib3hFeHRlbnNpb25UcmFja2VyLmludmFsaWRhdGUoKTsKIAor
ICAgIG1fcHJpbnRDb250ZXh0ID0gbnVsbHB0cjsKKwogICAgIG1fbWFpbkZyYW1lLT5jb3JlRnJh
bWUoKS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKICAgICBtX3BhZ2UuY2xlYXIoKTsK
IApAQCAtMTE4OCw2ICsxMTk0LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhj
b25zdCBXZQogICAgIHNldHRpbmdzLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChzdG9y
ZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OmF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0UGFnaW5hdGVEdXJpbmdMYXlvdXRF
bmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6cGFnaW5h
dGVEdXJpbmdMYXlvdXRFbmFibGVkS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0RE9NUGFzdGVB
bGxvd2VkKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6ZG9tUGFz
dGVBbGxvd2VkS2V5KCkpKTsKKyAgICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5k
cyhzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNob3VsZFByaW50
QmFja2dyb3VuZHNLZXkoKSkpOwogCiAgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShz
dG9yZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bWluaW11bUZvbnRT
aXplS2V5KCkpKTsKICAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShzdG9y
ZS5nZXRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6bWluaW11bUxvZ2ljYWxG
b250U2l6ZUtleSgpKSk7CkBAIC0xNjcyLDQgKzE2NzksNzkgQEAgdm9pZCBXZWJQYWdlOjpzdG9w
U3BlYWtpbmcoKQogCiAjZW5kaWYKIAordm9pZCBXZWJQYWdlOjpiZWdpblByaW50aW5nKHVpbnQ2
NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQoreworICAgIFdlYkZyYW1l
KiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFt
ZS0+Y29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9wcmludENvbnRleHQpCisgICAgICAgIG1fcHJpbnRDb250ZXh0ID0gYWRvcHRQ
dHIobmV3IFByaW50Q29udGV4dChjb3JlRnJhbWUpKTsKKworICAgIG1fcHJpbnRDb250ZXh0LT5i
ZWdpbihwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBh
cGVySGVpZ2h0KTsKK30KKwordm9pZCBXZWJQYWdlOjplbmRQcmludGluZygpCit7CisgICAgbV9w
cmludENvbnRleHQgPSBudWxscHRyOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbXB1dGVQYWdlc0Zv
clByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBW
ZWN0b3I8SW50UmVjdD4mIHJlc3VsdFBhZ2VSZWN0cywgZG91YmxlJiByZXN1bHRUb3RhbFNjYWxl
RmFjdG9yRm9yUHJpbnRpbmcpCit7CisgICAgYmVnaW5QcmludGluZyhmcmFtZUlELCBwcmludElu
Zm8pOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJh
bWUoZnJhbWVJRCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxv
YXQgZnVsbFBhZ2VIZWlnaHQ7CisgICAgbV9wcmludENvbnRleHQtPmNvbXB1dGVQYWdlUmVjdHMo
RmxvYXRSZWN0KDAsIDAsIHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8u
YXZhaWxhYmxlUGFwZXJIZWlnaHQpLCAwLCAwLCBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0
b3IsIGZ1bGxQYWdlSGVpZ2h0LCB0cnVlKTsKKworICAgIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JG
b3JQcmludGluZyA9IG1fcHJpbnRDb250ZXh0LT5jb21wdXRlQXV0b21hdGljU2NhbGVGYWN0b3Io
cHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgpICogcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxl
RmFjdG9yOworICAgIHJlc3VsdFBhZ2VSZWN0cyA9IG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdHMo
KTsKKworICAgIC8vIElmIHdlJ3JlIGFza2VkIHRvIHByaW50LCB3ZSBzaG91bGQgYWN0dWFsbHkg
cHJpbnQgYXQgbGVhc3QgYSBibGFuayBwYWdlLgorICAgIGlmIChyZXN1bHRQYWdlUmVjdHMuaXNF
bXB0eSgpKQorICAgICAgICByZXN1bHRQYWdlUmVjdHMuYXBwZW5kKEludFJlY3QoMCwgMCwgMSwg
MSkpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorLy8gRklYTUU6IEZpbmQgYSBiZXR0ZXIgcGxh
Y2UgZm9yIE1hYyBzcGVjaWZpYyBjb2RlLgordm9pZCBXZWJQYWdlOjpkcmF3UmVjdFRvUERGKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QsIFZlY3Rvcjx1aW50
OF90PiYgcGRmRGF0YSkKK3sKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUtPmNvcmVGcmFtZSgpOworICAgIGlmICgh
Y29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY29yZUZyYW1lLT5kb2N1
bWVudCgpLT5wcmludGluZygpKTsKKworICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBw
ZGZQYWdlRGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIC8v
IEZJWE1FOiBVc2UgQ0dEYXRhQ29uc3VtZXJDcmVhdGUgd2l0aCBjYWxsYmFja3MgdG8gYXZvaWQg
Y29weWluZyB0aGUgZGF0YS4KKyAgICBSZXRhaW5QdHI8Q0dEYXRhQ29uc3VtZXJSZWY+IHBkZkRh
dGFDb25zdW1lcihBZG9wdENGLCBDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEocGRmUGFn
ZURhdGEuZ2V0KCkpKTsKKworICAgIENHUmVjdCBtZWRpYUJveCA9IENHUmVjdE1ha2UoMCwgMCwg
ZnJhbWUtPnNpemUoKS53aWR0aCgpLCBmcmFtZS0+c2l6ZSgpLmhlaWdodCgpKTsKKyAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0KEFkb3B0Q0YsIENHUERGQ29udGV4dENyZWF0ZShw
ZGZEYXRhQ29uc3VtZXIuZ2V0KCksICZtZWRpYUJveCwgMCkpOworICAgIENGRGljdGlvbmFyeVJl
ZiBwYWdlSW5mbyA9IENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7Cisg
ICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQuZ2V0KCksIHBhZ2VJbmZvKTsKKworICAg
IEdyYXBoaWNzQ29udGV4dCBjdHgoY29udGV4dC5nZXQoKSk7CisgICAgbV9wcmludENvbnRleHQt
PnNwb29sUmVjdChjdHgsIHJlY3QpOworCisgICAgQ0dQREZDb250ZXh0RW5kUGFnZShjb250ZXh0
LmdldCgpKTsKKyAgICBDR1BERkNvbnRleHRDbG9zZShjb250ZXh0LmdldCgpKTsKKworICAgIHBk
ZkRhdGEucmVzaXplKENGRGF0YUdldExlbmd0aChwZGZQYWdlRGF0YS5nZXQoKSkpOworICAgIENG
RGF0YUdldEJ5dGVzKHBkZlBhZ2VEYXRhLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBwZGZEYXRhLnNp
emUoKSksIHBkZkRhdGEuZGF0YSgpKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
cmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsK
ICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFByaW50Q29udGV4dDsKICAgICBjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgU2hhcmVkQnVmZmVyOwogfQpAQCAtOTUsNyArOTYsNyBA
QCBjbGFzcyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjsKIGNsYXNzIFdlYlBhZ2VHcm91cFBy
b3h5OwogY2xhc3MgV2ViUG9wdXBNZW51OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKLQorc3RydWN0
IFByaW50SW5mbzsKIHN0cnVjdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOwogc3RydWN0IFdl
YlByZWZlcmVuY2VzU3RvcmU7CiAKQEAgLTMwMCw2ICszMDEsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9u
LCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xv
YmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3Qg
V1RGOjpTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MpOwogCisgICAgdm9p
ZCBiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYpOworICAg
IHZvaWQgZW5kUHJpbnRpbmcoKTsKKyAgICB2b2lkIGNvbXB1dGVQYWdlc0ZvclByaW50aW5nKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYsIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0
PiYgcmVzdWx0UGFnZVJlY3RzLCBkb3VibGUmIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmlu
dGluZyk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd1JlY3RUb1BERih1aW50NjRf
dCBmcmFtZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZE
YXRhKTsKKyNlbmRpZgorCiAgICAgYm9vbCBtYWluRnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlv
bigpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtNDgwLDYgKzQ4OCw4IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyPiBtX2FjdGl2ZU9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyOwogICAgIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyIG1fZ2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI7CiAKKyAgICBPd25QdHI8V2ViQ29yZTo6
UHJpbnRDb250ZXh0PiBtX3ByaW50Q29udGV4dDsKKwogICAgIFNhbmRib3hFeHRlbnNpb25UcmFj
a2VyIG1fc2FuZGJveEV4dGVuc2lvblRyYWNrZXI7CiAgICAgdWludDY0X3QgbV9wYWdlSUQ7CiB9
OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEy
OCw2ICsxMjgsMTQgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7CiAKICAgICBTZXRXaW5kb3dSZXNp
emVyU2l6ZShXZWJDb3JlOjpJbnRTaXplIGludGVyc2VjdHNWaWV3KQogCisgICAgIyBQcmludGlu
Zy4KKyAgICBCZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6UHJpbnRJbmZv
IHByaW50SW5mbyk7CisgICAgRW5kUHJpbnRpbmcoKTsKKyAgICBDb21wdXRlUGFnZXNGb3JQcmlu
dGluZyh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OlByaW50SW5mbyBwcmludEluZm8pIC0+IChW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gcGFnZVJlY3RzLCBkb3VibGUgdG90YWxTY2FsZUZhY3Rv
ckZvclByaW50aW5nKQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBEcmF3UmVjdFRvUERGKHVpbnQ2
NF90IGZyYW1lSUQsIFdlYkNvcmU6OkludFJlY3QgcmVjdCkgLT4gKFZlY3Rvcjx1aW50OF90PiBw
ZGZEYXRhKQorI2VuZGlmCisKICAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1lc3NhZ2UsIHRv
IGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWly
ZQogICAgIC8vIGFueSBzeW5jaHJvbm91cyBtZXNzYWdlcywgYW5kIHNob3VsZCBiZSByZW1vdmVk
IHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg3NzUxMTU+IGlzIGZpeGVkLgogICAgIER1bW15KCkgLT4g
KGJvb2wgZHVtbXlSZXR1cm4pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79226</attachid>
            <date>2011-01-17 15:43:52 -0800</date>
            <delta_ts>2011-01-17 16:23:31 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>printing.txt</filename>
            <type>text/plain</type>
            <size>40050</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1OTcxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDEtMTcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUyNTk1CisgICAgICAgIE1ha2UgYmFzaWMgcHJpbnRpbmcgd29yayBpbiBXZWJLaXQyCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRT
aG91bGRQcmludEJhY2tncm91bmRzKToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRTaG91bGRQ
cmludEJhY2tncm91bmRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5oOgorICAgICAgICBJbXBsZW1lbnQgYSBwcmVmZXJlbmNlIGZvciBwcmludGluZyBiYWNrZ3Jv
dW5kcy4KKworICAgICAgICAqIFNoYXJlZC9QcmludEluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UHJpbnRJbmZvOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpQcmludEluZm86
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5oOiBBZGRlZC4KKyAgICAgICAg
KiBTaGFyZWQvbWFjL1ByaW50SW5mb01hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlBy
aW50SW5mbzo6UHJpbnRJbmZvKToKKyAgICAgICAgQSBuZXcgY2xhc3MgZm9yIHBhc3NpbmcgcGFn
ZSBzZXR1cCBpbmZvcm1hdGlvbiBkb3duIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KKworICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3By
b2o6CisgICAgICAgIEFkZGVkIFByaW50SW5mby4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
Mi9tZXNzYWdlcy5weTogQWRkZWQgUHJpbnRJbmZvLmggdG8gYSBsaXN0IG9mIHN0cnVjdHMuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIChXS1ZpZXdE
YXRhKTogQ2FjaGUgcGFnZSBjb3VudCBhbmQgZ2VvbWV0cnkuCisgICAgICAgIChXZWJGcmFtZVdy
YXBwZXIpOiBBZGRlZCBhIHdyYXBwZXIgY2xhc3MgZm9yIGFkZGluZyBhIFdlYkZyYW1lUHJveHkg
dG8gYW4gTlNEaWN0aW9uYXJ5LgorICAgICAgICAoLVtXS1ZpZXcgZHJhd1JlY3Q6XSk6IEFkZGVk
IGxvZ2dpbmcuCisgICAgICAgIChzZXRGcmFtZUJlaW5nUHJpbnRlZCk6IFN0b3JlIGEgZnJhbWUg
aW50byBOU1ByaW50T3BlcmF0aW9uJ3MgTlNQcmludEluZm8sIHNvIHRoYXQgYWxsIAorICAgICAg
ICBtZXRob2RzIGludm9rZWQgZm9yIHRoaXMgb3BlcmF0aW9uIHdvdWxkIGtub3cgd2hhdCdzIGJl
aW5nIHByaW50ZWQuCisgICAgICAgIChmcmFtZUJlaW5nUHJpbnRlZCk6IFJldHJpZXZlIHRoaXMg
ZGF0YS4KKyAgICAgICAgKC1bV0tWaWV3IHByaW50T3BlcmF0aW9uV2l0aFByaW50SW5mbzpmb3JG
cmFtZTpdKTogQ3JlYXRlIGEgcHJpbnQgb3BlcmF0aW9uIHRoYXQncyBhcHByb3ByaWF0ZQorICAg
ICAgICBmb3IgdGhlIGZyYW1lLgorICAgICAgICAoLVtXS1ZpZXcga25vd3NQYWdlUmFuZ2U6XSk6
IEFzayB0aGUgd2ViIHByb2Nlc3MuCisgICAgICAgICgtW1dLVmlldyBfcmVjdXJzaXZlRGlzcGxh
eVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTppc1Zpc2libGVSZWN0OnJlY3RJc1Zpc2libGVS
ZWN0Rm9yVmlldzp0b3BWaWV3Ol0pOgorICAgICAgICBUYWtlIG92ZXIgcHJpbnRpbmcsIGJlY2F1
c2UgSSBjb3VsZG4ndCBtYWtlIGRyYXdSZWN0OiB3b3JrIGNvcnJlY3RseSB3aXRoIFdlYktpdCBj
dXN0b20gZml0CisgICAgICAgIHRvIHBhZ2UgaW1wbGVtZW50YXRpb24uCisgICAgICAgICgtW1dL
VmlldyBfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpdKTogSGVscCBB
cHBLaXQgY2xpcCBjb3JyZWN0bHkuCisgICAgICAgICgtW1dLVmlldyByZWN0Rm9yUGFnZTpdKTog
UmV0dXJuIGEgcHJlLWNhbGN1bGF0ZWQgcmVjdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDogQWRkZWQgbV9pc0luUHJpbnRpbmdNb2RlIHRvIHRyYWNrIHdoZXRoZXIgdGhl
IHdlYiBwYWdlIGlzIGluCisgICAgICAgIHByaW50aW5nIG1vZGUuIFRoZSBVSSBwcm9jZXNzIGNv
bnRyb2xzIHRoYXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkpOiBJbml0aWFsaXplIG1f
aXNJblByaW50aW5nTW9kZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpiZWdpblBy
aW50aW5nKTogQ2hhbmdlIHByaW50aW5nIG1vZGUgaW4gd2ViIHByb2Nlc3MgaWYgdGhlIHZhbHVl
IGNoYW5nZXMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZW5kUHJpbnRpbmcpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb21wdXRlUGFnZXNGb3JQcmlu
dGluZyk6IEFzayB0aGUgd2ViIHByb2Nlc3MgYWJvdXQgb3V0cHV0IHBhZ2UgZ2VvbWV0cnkuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhd1JlY3RUb1BERik6IEFzayB0aGUgd2Vi
IHByb2Nlc3MgYWJvdXQgcHJpbnRlZCBwYWdlIGRhdGEuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKTog
RGVsZXRlIG1fcHJpbnRDb250ZXh0IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgRnJhbWUgcG9pbnRl
ci4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOiBQYXNzIHRo
cm91Z2ggU2hvdWxkUHJpbnRCYWNrZ3JvdW5kcy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
YmVnaW5QcmludGluZyk6IFN3aXRjaCBpbnRvIHByaW50aW5nIG1vZGUgKG9yIHVwZGF0ZSBwYXJh
bWV0ZXJzIGlmIHdlJ3JlCisgICAgICAgIGFscmVhZHkgaW4gcHJpbnRpbmcgbW9kZSkuCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVuZFByaW50aW5nKTogRGVsZXRlIG1fcHJpbnRDb250ZXh0
LCBpbXBsaWNpdGx5IGNhbGxpbmcgZW5kKCkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNv
bXB1dGVQYWdlc0ZvclByaW50aW5nKTogTWFrZSBzdXJlIHRoYXQgd2UncmUgaW4gcHJpbnRpbmcg
bW9kZSwgYW5kCisgICAgICAgIGNvcG11dGUgcGFnZSByZWN0cy4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6ZHJhd1JlY3RUb1BERik6IEFkZGVkIGEgQ0cgc3BlY2lmaWMgZnVuY3Rpb24gdG8g
Y3JlYXRlIGEgUERGIGRvY3VtZW50IG91dAorICAgICAgICBvZiBhIHBhZ2UgcmVjdC4gSXQgc2hv
dWxkIHJlYWxseSB3b3JrIGZvciBvbnNjcmVlbiBjb250ZW50LCBidXQgd2Ugb25seSBuZWVkIGl0
IGZvciBwcmludGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogQWRk
ZWQgQmVnaW5QcmludGluZywgRW5kUHJpbnRpbmcsCisgICAgICAgIENvbXB1dGVQYWdlc0ZvclBy
aW50aW5nIGFuZCBEcmF3UmVjdFRvUERGLgorCiAyMDExLTAxLTE3ICBUb255IEdlbnRpbGNvcmUg
IDx0b255Z0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3Nr
dXJ5YWtvdi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA3NTk2OSkKKysrIFNv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0
LDggQEAgbGliV2ViS2l0Ml9sYV9TT1VSQ0VTID0gXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9P
cmlnaW5BbmREYXRhYmFzZXMuaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1BsYXRmb3JtUG9w
dXBNZW51RGF0YS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbGF0Zm9ybVBvcHVwTWVu
dURhdGEuaCBcCisJU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uaCBcCiAJU291cmNlL1dlYktpdDIvU2hhcmVkL1Bs
dWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1
bGVYMTEuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA3NTk2OSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgU2hhcmVkL05vdEltcGxlbWVudGVkLmggXAogICAgIFNoYXJlZC9P
cmlnaW5BbmREYXRhYmFzZXMuaCBcCiAgICAgU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5o
IFwKKyAgICBTaGFyZWQvUHJpbnRJbmZvLmggXAogICAgIFNoYXJlZC9TYW1lRG9jdW1lbnROYXZp
Z2F0aW9uVHlwZS5oIFwKICAgICBTaGFyZWQvU2Vzc2lvblN0YXRlLmggXAogICAgIFNoYXJlZC9T
dHJpbmdQYWlyVmVjdG9yLmggXApAQCAtNDkyLDYgKzQ5Myw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAgXAogICAgIFNoYXJlZC9PcmlnaW5BbmREYXRh
YmFzZXMuY3BwIFwKICAgICBTaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcCBcCisgICAg
U2hhcmVkL1ByaW50SW5mby5jcHAgXAogICAgIFNoYXJlZC9TZXNzaW9uU3RhdGUuY3BwIFwKICAg
ICBTaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAgXAogICAgIFNoYXJlZC9XZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVz
c2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21l
c3NhZ2VzLnB5CShyZXZpc2lvbiA3NTk2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Vi
a2l0Mi9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBAIGRlZiBz
dHJ1Y3Rfb3JfY2xhc3MobmFtZXNwYWNlLCB0eXBlKToKICAgICAgICAgJ1dlYkNvcmU6OkNvbXBv
c2l0aW9uVW5kZXJsaW5lJywKICAgICAgICAgJ1dlYkNvcmU6OktleXByZXNzQ29tbWFuZCcsCiAg
ICAgICAgICdXZWJDb3JlOjpQbHVnaW5JbmZvJywKKyAgICAgICAgJ1dlYkNvcmU6OlByaW50SW5m
bycsCiAgICAgICAgICdXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cycsCiAgICAgICAgICdXZWJD
b3JlOjpXaW5kb3dGZWF0dXJlcycsCiAgICAgICAgICdXZWJLaXQ6OkRyYXdpbmdBcmVhSW5mbycs
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiUHJpbnRJbmZvLmgiCisKKyNpbmNsdWRlICJB
cmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRl
ICJBcmd1bWVudHMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1ByaW50SW5mbzo6UHJpbnRJ
bmZvKCkKKyAgICA6IHBhZ2VTZXR1cFNjYWxlRmFjdG9yKDApCisgICAgLCBhdmFpbGFibGVQYXBl
cldpZHRoKDApCisgICAgLCBhdmFpbGFibGVQYXBlckhlaWdodCgwKQoreworfQorCit2b2lkIFBy
aW50SW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6SW4ocGFnZVNldHVwU2NhbGVGYWN0b3Is
IGF2YWlsYWJsZVBhcGVyV2lkdGgsIGF2YWlsYWJsZVBhcGVySGVpZ2h0KSk7Cit9CisKK2Jvb2wg
UHJpbnRJbmZvOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBQcmlu
dEluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQo
aW5mby5wYWdlU2V0dXBTY2FsZUZhY3RvciwgaW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBpbmZv
LmF2YWlsYWJsZVBhcGVySGVpZ2h0KSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9QcmludEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJp
bnRJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZv
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBy
aW50SW5mb19oCisjZGVmaW5lIFByaW50SW5mb19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3MgTlNQcmludEluZm87CisjZWxzZQorY2xhc3Mg
TlNQcmludEluZm87CisjZW5kaWYKKworbmFtZXNwYWNlIENvcmVJUEMgeworICAgIGNsYXNzIEFy
Z3VtZW50RGVjb2RlcjsKKyAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitzdHJ1Y3QgUHJpbnRJbmZvIHsKK3B1YmxpYzoKKyAgICBQcmludEluZm8o
KTsKKyAgICBleHBsaWNpdCBQcmludEluZm8oTlNQcmludEluZm8gKik7CisKKyAgICBmbG9hdCBw
YWdlU2V0dXBTY2FsZUZhY3RvcjsKKyAgICBmbG9hdCBhdmFpbGFibGVQYXBlcldpZHRoOworICAg
IGZsb2F0IGF2YWlsYWJsZVBhcGVySGVpZ2h0OworCisgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciosIFByaW50SW5mbyYpOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAkocmV2aXNpb24g
NzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIG1h
Y3JvKEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkLCBhdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZCwgQm9vbCwgYm9vbCwgdHJ1ZSkgXAogICAgIG1hY3JvKFBhZ2luYXRlRHVyaW5nTGF5b3V0RW5h
YmxlZCwgcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAog
ICAgIG1hY3JvKERPTVBhc3RlQWxsb3dlZCwgZG9tUGFzdGVBbGxvd2VkLCBCb29sLCBib29sLCBm
YWxzZSkgXAorICAgIG1hY3JvKFNob3VsZFByaW50QmFja2dyb3VuZHMsIHNob3VsZFByaW50QmFj
a2dyb3VuZHMsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCiAgICAgXAogCiAjZGVmaW5lIEZPUl9FQUNI
X1dFQktJVF9ET1VCTEVfUFJFRkVSRU5DRShtYWNybykgXApJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9QcmludEluZm9NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9QcmludEluZm9NYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1ByaW50SW5mb01hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgIlByaW50SW5mby5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworUHJpbnRJbmZvOjpQcmludEluZm8oTlNQcmludEluZm8gKnByaW50SW5mbykKKyAgICA6
IHBhZ2VTZXR1cFNjYWxlRmFjdG9yKFtbW3ByaW50SW5mbyBkaWN0aW9uYXJ5XSBvYmplY3RGb3JL
ZXk6TlNQcmludFNjYWxpbmdGYWN0b3JdIGZsb2F0VmFsdWVdKQorICAgICwgYXZhaWxhYmxlUGFw
ZXJXaWR0aChbcHJpbnRJbmZvIHBhcGVyU2l6ZV0ud2lkdGggLSBbcHJpbnRJbmZvIGxlZnRNYXJn
aW5dIC0gW3ByaW50SW5mbyByaWdodE1hcmdpbl0pCisgICAgLCBhdmFpbGFibGVQYXBlckhlaWdo
dChbcHJpbnRJbmZvIHBhcGVyU2l6ZV0uaGVpZ2h0IC0gW3ByaW50SW5mbyB0b3BNYXJnaW5dIC0g
W3ByaW50SW5mbyBib3R0b21NYXJnaW5dKQoreworICAgIEFTU0VSVChwcmludEluZm8pOworfQor
Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2
aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VJRC5o
IgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblN0YXRlLmgi
CiAjaW5jbHVkZSAiU3RyaW5nUGFpclZlY3Rvci5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyLmgi
CkBAIC0xMTEsNiArMTEyLDcgQEAgV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVu
dCogcAogICAgICwgbV91c2VGaXhlZExheW91dChmYWxzZSkKICAgICAsIG1faXNWYWxpZCh0cnVl
KQogICAgICwgbV9pc0Nsb3NlZChmYWxzZSkKKyAgICAsIG1faXNJblByaW50aW5nTW9kZShmYWxz
ZSkKICAgICAsIG1faW5EZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShmYWxzZSkKICAgICAsIG1fc3lu
Y01pbWVUeXBlUG9saWN5QWN0aW9uSXNWYWxpZChmYWxzZSkKICAgICAsIG1fc3luY01pbWVUeXBl
UG9saWN5QWN0aW9uKFBvbGljeVVzZSkKQEAgLTIzMzAsNCArMjMzMiwzNiBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6YmFja0ZvcndhcmRSZW1vdmVkSXRlCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlOjpEaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0oaXRlbUlEKSwgbV9wYWdlSUQp
OwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6YmVnaW5QcmludGluZyhXZWJGcmFtZVByb3h5KiBm
cmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8pCit7CisgICAgaWYgKG1faXNJblByaW50
aW5nTW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0luUHJpbnRpbmdNb2RlID0gdHJ1
ZTsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkJlZ2luUHJpbnRpbmco
ZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZW5kUHJpbnRpbmcoKQoreworICAgIGlmICghbV9pc0luUHJpbnRpbmdNb2RlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2lzSW5QcmludGluZ01vZGUgPSBmYWxzZTsKKyAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkVuZFByaW50aW5nKCksIG1fcGFnZUlE
KTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmNvbXB1dGVQYWdlc0ZvclByaW50aW5nKFdlYkZy
YW1lUHJveHkqIGZyYW1lLCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgVmVjdG9yPFdlYkNv
cmU6OkludFJlY3Q+JiByZXN1bHRQYWdlUmVjdHMsIGRvdWJsZSYgcmVzdWx0VG90YWxTY2FsZUZh
Y3RvckZvclByaW50aW5nKQoreworICAgIC8vIExheW91dCBmb3IgcHJpbnRpbmcgY2FuIHRha2Ug
YSBsb25nIHRpbWUsIGJ1dCB3ZSBuZWVkIHRvIGhhdmUgdGhlIGFuc3dlci4KKyAgICBwcm9jZXNz
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlOjpDb21wdXRlUGFnZXNGb3JQcmludGluZyhm
cmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8pLCBNZXNzYWdlczo6V2ViUGFnZTo6Q29tcHV0ZVBh
Z2VzRm9yUHJpbnRpbmc6OlJlcGx5KHJlc3VsdFBhZ2VSZWN0cywgcmVzdWx0VG90YWxTY2FsZUZh
Y3RvckZvclByaW50aW5nKSwgbV9wYWdlSUQpOworfQorCisjaWYgUExBVEZPUk0oTUFDKQordm9p
ZCBXZWJQYWdlUHJveHk6OmRyYXdSZWN0VG9QREYoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0
IEludFJlY3QmIHJlY3QsIFZlY3Rvcjx1aW50OF90PiYgcGRmRGF0YSkKK3sKKyAgICAvLyBQcmlu
dGluZyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYnV0IHdlIG5lZWQgdG8gaGF2ZSB0aGUgYW5zd2Vy
LgorICAgIHByb2Nlc3MoKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYXdSZWN0VG9Q
REYoZnJhbWUtPmZyYW1lSUQoKSwgcmVjdCksIE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UmVjdFRv
UERGOjpSZXBseShwZGZEYXRhKSwgbV9wYWdlSUQpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAko
cmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsNyBAQCBjbGFzcyBXZWJQcm9jZXNzUHJv
eHk7CiBjbGFzcyBXZWJVUkxSZXF1ZXN0OwogY2xhc3MgV2ViV2hlZWxFdmVudDsKIHN0cnVjdCBQ
bGF0Zm9ybVBvcHVwTWVudURhdGE7CitzdHJ1Y3QgUHJpbnRJbmZvOwogc3RydWN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgV2ViUG9wdXBJdGVtOwogCkBAIC0zNDEsNiArMzQy
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChib29s
KTsKICNlbmRpZgogCisgICAgdm9pZCBiZWdpblByaW50aW5nKFdlYkZyYW1lUHJveHkqLCBjb25z
dCBQcmludEluZm8mKTsKKyAgICB2b2lkIGVuZFByaW50aW5nKCk7CisgICAgdm9pZCBjb21wdXRl
UGFnZXNGb3JQcmludGluZyhXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJpbnRJbmZvJiwgVmVjdG9y
PFdlYkNvcmU6OkludFJlY3Q+JiByZXN1bHRQYWdlUmVjdHMsIGRvdWJsZSYgcmVzdWx0VG90YWxT
Y2FsZUZhY3RvckZvclByaW50aW5nKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBkcmF3
UmVjdFRvUERGKFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgVmVjdG9y
PHVpbnQ4X3Q+JiBwZGZEYXRhKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2VQcm94
eShQYWdlQ2xpZW50KiwgV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCosIHVpbnQ2NF90IHBhZ2VJ
RCk7CiAKQEAgLTU4MCw2ICs1ODgsOCBAQCBwcml2YXRlOgogICAgIC8vIFdoZXRoZXIgV2ViUGFn
ZVByb3h5OjpjbG9zZSgpIGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIHBhZ2UuCiAgICAgYm9vbCBt
X2lzQ2xvc2VkOwogCisgICAgYm9vbCBtX2lzSW5QcmludGluZ01vZGU7CisKICAgICBib29sIG1f
aW5EZWNpZGVQb2xpY3lGb3JNSU1FVHlwZTsKICAgICBib29sIG1fc3luY01pbWVUeXBlUG9saWN5
QWN0aW9uSXNWYWxpZDsKICAgICBXZWJDb3JlOjpQb2xpY3lBY3Rpb24gbV9zeW5jTWltZVR5cGVQ
b2xpY3lBY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVm
ZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiA3NTk2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDYg
KzM5MCwxNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRBdXRob3JBbmRVc2VyU3R5bGVzCiAgICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVk
KCk7CiB9CiAKK3ZvaWQgV0tQcmVmZXJlbmNlc1NldFNob3VsZFByaW50QmFja2dyb3VuZHMoV0tQ
cmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQoreworICAgIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNldFNob3VsZFByaW50QmFja2dyb3VuZHMoZmxhZyk7Cit9CisKK2Jv
b2wgV0tQcmVmZXJlbmNlc0dldFNob3VsZFByaW50QmFja2dyb3VuZHMoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2hvdWxkUHJpbnRCYWNrZ3JvdW5kcygpOworfQorCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJB
cmNoaXZlRGVidWdNb2RlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBi
b29sIGVuYWJsZWQpCiB7CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViQXJjaGl2
ZURlYnVnTW9kZUVuYWJsZWQoZW5hYmxlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmgJKHJldmlzaW9uIDc1OTY5KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQyLDYgKzE0MiwxMCBAQCBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0RE5TUHJl
ZmV0CiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcywgYm9vbCBlbmFibGVkKTsKIFdLX0VY
UE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKTsKIAorLy8gRGVmYXVsdHMgdG8gZmFsc2UuCitXS19F
WFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyhXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzLCBib29sIHNob3VsZFByaW50QmFja2dyb3VuZHMpOworV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNob3VsZFByaW50QmFja2dyb3VuZHMoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZp
c2lvbiA3NTk2OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiUERGVmlld0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlBh
Z2VDbGllbnRJbXBsLmgiCisjaW1wb3J0ICJQcmludEluZm8uaCIKICNpbXBvcnQgIlJ1bkxvb3Au
aCIKICNpbXBvcnQgIlRleHRDaGVja2VyLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgi
CkBAIC02OCw2ICs2OSwxMCBAQCBAaW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKERldGFpbHMpCiAt
ICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIEBlbmQKIAorQGludGVyZmFj
ZSBOU1ZpZXcgKERldGFpbHMpCistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVk
SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlzVmlzaWJs
ZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmlldyB0b3BW
aWV3OihCT09MKXRvcFZpZXc7CitAZW5kCisKIEBpbnRlcmZhY2UgTlNXaW5kb3cgKERldGFpbHMp
CiAtIChOU1JlY3QpX2dyb3dCb3hSZWN0OwogLSAoQk9PTClfdXBkYXRlR3Jvd0JveEZvcldpbmRv
d0ZyYW1lQ2hhbmdlOwpAQCAtMTI1LDYgKzEzMCw5IEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6
IE5TT2JqZWN0IHsKICAgICB1bnNpZ25lZCBfc2VsZWN0aW9uU3RhcnQ7CiAgICAgdW5zaWduZWQg
X3NlbGVjdGlvbkVuZDsKIAorICAgIFZlY3RvcjxJbnRSZWN0PiBfcHJpbnRpbmdQYWdlUmVjdHM7
CisgICAgZG91YmxlIF90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmc7CisKICAgICBib29sIF9p
bkJlY29tZUZpcnN0UmVzcG9uZGVyOwogICAgIGJvb2wgX2luUmVzaWduRmlyc3RSZXNwb25kZXI7
CiB9CkBAIC0xMzMsNiArMTQxLDM2IEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0
IHsKIEBpbXBsZW1lbnRhdGlvbiBXS1ZpZXdEYXRhCiBAZW5kCiAKK0BpbnRlcmZhY2UgV2ViRnJh
bWVXcmFwcGVyIDogTlNPYmplY3QgeworQHB1YmxpYworICAgIFJlZlB0cjxXZWJGcmFtZVByb3h5
PiBfZnJhbWU7Cit9CisKKy0gKGlkKWluaXRXaXRoRnJhbWVQcm94eTooV2ViRnJhbWVQcm94eSop
ZnJhbWU7CistIChXZWJGcmFtZVByb3h5Kil3ZWJGcmFtZTsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkZyYW1lV3JhcHBlcgorCistIChpZClpbml0V2l0aEZyYW1lUHJveHk6KFdlYkZyYW1l
UHJveHkqKWZyYW1lCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfZnJhbWUgPSBmcmFtZTsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoV2ViRnJhbWVQcm94eSopd2ViRnJhbWUKK3sKKyAgICByZXR1cm4gX2Zy
YW1lLmdldCgpOworfQorCitAZW5kCisKK05TU3RyaW5nICogY29uc3QgUHJpbnRlZEZyYW1lS2V5
ID0gQCJXZWJLaXRQcmludGVkRnJhbWVLZXkiOworCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChOU1Rl
eHRJbnB1dENvbnRleHREZXRhaWxzKQogLSAoQk9PTCl3YW50c1RvSGFuZGxlTW91c2VFdmVudHM7
CiAtIChCT09MKWhhbmRsZU1vdXNlRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKQEAgLTExOTIsNiAr
MTIzMCw3IEBAIC0gKHZvaWQpX3dpbmRvd0ZyYW1lRGlkQ2hhbmdlOihOU05vdGlmaWMKIAogLSAo
dm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKIHsKKyAgICBMT0coVmlldywgImRyYXdSZWN0OiB4
OiVnLCB5OiVnLCB3aWR0aDolZywgaGVpZ2h0OiVnIiwgcmVjdC5vcmlnaW4ueCwgcmVjdC5vcmln
aW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KTsKICAgICBpZiAodXNlTmV3
RHJhd2luZ0FyZWEoKSkgewogICAgICAgICBpZiAoRHJhd2luZ0FyZWFQcm94eUltcGwqIGRyYXdp
bmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUltcGwqPihfZGF0YS0+X3BhZ2Ut
PmRyYXdpbmdBcmVhKCkpKSB7CiAgICAgICAgICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHN0
YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gZ3JhcGhpY3NQb3J0XSk7CkBAIC0xMjgyLDE0ICsxMzIxLDMxIEBAIC0gKE5TSW50ZWdlcilj
b252ZXJzYXRpb25JZGVudGlmaWVyCiAgICAgcmV0dXJuIChOU0ludGVnZXIpc2VsZjsKIH0KIAor
c3RhdGljIHZvaWQgc2V0RnJhbWVCZWluZ1ByaW50ZWQoTlNQcmludE9wZXJhdGlvbiAqcHJpbnRP
cGVyYXRpb24sIFdlYkZyYW1lUHJveHkqIGZyYW1lKQoreworICAgIFJldGFpblB0cjxXZWJGcmFt
ZVdyYXBwZXI+IGZyYW1lV3JhcHBlcihBZG9wdE5TLCBbW1dlYkZyYW1lV3JhcHBlciBhbGxvY10g
aW5pdFdpdGhGcmFtZVByb3h5OmZyYW1lXSk7CisgICAgW1tbcHJpbnRPcGVyYXRpb24gcHJpbnRJ
bmZvXSBkaWN0aW9uYXJ5XSBzZXRPYmplY3Q6ZnJhbWVXcmFwcGVyLmdldCgpIGZvcktleTpQcmlu
dGVkRnJhbWVLZXldOworfQorCitzdGF0aWMgV2ViRnJhbWVQcm94eSogZnJhbWVCZWluZ1ByaW50
ZWQoKQoreworICAgIHJldHVybiBbW1tbW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlv
bl0gcHJpbnRJbmZvXSBkaWN0aW9uYXJ5XSBvYmplY3RGb3JLZXk6UHJpbnRlZEZyYW1lS2V5XSB3
ZWJGcmFtZV07Cit9CisKIC0gKE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlvbldpdGhQ
cmludEluZm86KE5TUHJpbnRJbmZvICopcHJpbnRJbmZvIGZvckZyYW1lOihXS0ZyYW1lUmVmKWZy
YW1lUmVmCiB7CisgICAgTE9HKFZpZXcsICJDcmVhdGluZyBhbiBOU1ByaW50T3BlcmF0aW9uIGZv
ciBmcmFtZSAnJXMnIiwgdG9JbXBsKGZyYW1lUmVmKS0+dXJsKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgTlNQcmludE9wZXJhdGlvbiAqcHJpbnRPcGVyYXRpb247CisKICAgICAvLyBPbmx5IHRoZSB0
b3AgZnJhbWUgY2FuIGN1cnJlbnRseSBjb250YWluIGEgUERGIHZpZXcuCiAgICAgaWYgKF9kYXRh
LT5fcGRmVmlld0NvbnRyb2xsZXIpIHsKICAgICAgICAgQVNTRVJUKHRvSW1wbChmcmFtZVJlZikt
PmlzTWFpbkZyYW1lKCkpOwotICAgICAgICByZXR1cm4gX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxl
ci0+bWFrZVByaW50T3BlcmF0aW9uKHByaW50SW5mbyk7Ci0gICAgfQotICAgIHJldHVybiBbTlNQ
cmludE9wZXJhdGlvbiBwcmludE9wZXJhdGlvbldpdGhWaWV3OnNlbGYgcHJpbnRJbmZvOnByaW50
SW5mb107CisgICAgICAgIHByaW50T3BlcmF0aW9uID0gX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxl
ci0+bWFrZVByaW50T3BlcmF0aW9uKHByaW50SW5mbyk7CisgICAgfSBlbHNlCisgICAgICAgIHBy
aW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gcHJpbnRPcGVyYXRpb25XaXRoVmlldzpz
ZWxmIHByaW50SW5mbzpwcmludEluZm9dOworCisgICAgc2V0RnJhbWVCZWluZ1ByaW50ZWQocHJp
bnRPcGVyYXRpb24sIHRvSW1wbChmcmFtZVJlZikpOworICAgIHJldHVybiBwcmludE9wZXJhdGlv
bjsKIH0KIAogLSAoQk9PTCljYW5DaGFuZ2VGcmFtZUxheW91dDooV0tGcmFtZVJlZilmcmFtZVJl
ZgpAQCAtMTI5OCw2ICsxMzU0LDkxIEBAIC0gKEJPT0wpY2FuQ2hhbmdlRnJhbWVMYXlvdXQ6KFdL
RnJhbWVSZWYKICAgICByZXR1cm4gIXRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCkgfHwg
IV9kYXRhLT5fcGRmVmlld0NvbnRyb2xsZXI7CiB9CiAKKy8vIFJldHVybiB0aGUgbnVtYmVyIG9m
IHBhZ2VzIGF2YWlsYWJsZSBmb3IgcHJpbnRpbmcKKy0gKEJPT0wpa25vd3NQYWdlUmFuZ2U6KE5T
UmFuZ2VQb2ludGVyKXJhbmdlCit7CisgICAgTE9HKFZpZXcsICJrbm93c1BhZ2VSYW5nZToiKTsK
KyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IGZyYW1lQmVpbmdQcmludGVkKCk7CisgICAgQVNT
RVJUKGZyYW1lKTsKKworICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBfZGF0YS0+X3Bk
ZlZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gW3N1cGVyIGtub3dzUGFnZVJhbmdlOnJh
bmdlXTsKKworICAgIF9kYXRhLT5fcGFnZS0+Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoZnJhbWUs
IFByaW50SW5mbyhbW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl0gcHJpbnRJbmZv
XSksIF9kYXRhLT5fcHJpbnRpbmdQYWdlUmVjdHMsIF9kYXRhLT5fdG90YWxTY2FsZUZhY3RvckZv
clByaW50aW5nKTsKKworICAgICpyYW5nZSA9IE5TTWFrZVJhbmdlKDEsIF9kYXRhLT5fcHJpbnRp
bmdQYWdlUmVjdHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gWUVTOworfQorCisvLyBUYWtlIG92ZXIg
cHJpbnRpbmcuIEFwcEtpdCBhcHBsaWVzIGluY29ycmVjdCBjbGlwcGluZywgYW5kIGRvZXNuJ3Qg
cHJpbnQgcGFnZXMgYmV5b25kIHRoZSBmaXJzdCBvbmUuCistICh2b2lkKV9yZWN1cnNpdmVEaXNw
bGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0
OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2
aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRvcFZpZXcKK3sKKyAgICBpZiAoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSkgeworICAgICAgICAvLyBGSVhN
RTogCisgICAgICAgIF9kYXRhLT5fcGFnZS0+ZW5kUHJpbnRpbmcoKTsKKyAgICAgICAgW3N1cGVy
IF9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OnJlY3QgaXNWaXNp
YmxlUmVjdDppc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzp2aXNpYmxlVmll
dyB0b3BWaWV3OnRvcFZpZXddOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKFZp
ZXcsICJQcmludGluZyByZWN0IHg6JWcsIHk6JWcsIHdpZHRoOiVnLCBoZWlnaHQ6JWciLCByZWN0
Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55LCByZWN0LnNpemUud2lkdGgsIHJlY3Quc2l6ZS5oZWln
aHQpOworCisgICAgQVNTRVJUKHNlbGYgPT0gdmlzaWJsZVZpZXcpOworICAgIEFTU0VSVChmcmFt
ZUJlaW5nUHJpbnRlZCgpKTsKKworICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gZnJhbWVCZWlu
Z1ByaW50ZWQoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworCisgICAgX2RhdGEtPl9wYWdlLT5iZWdp
blByaW50aW5nKGZyYW1lLCBQcmludEluZm8oW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVy
YXRpb25dIHByaW50SW5mb10pKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9wdGltaXplZCBm
b3IgcHJpbnQgcHJldmlldy4gR2V0IHRoZSB3aG9sZSBkb2N1bWVudCBhdCBvbmNlIHdoZW4gYWN0
dWFsbHkgcHJpbnRpbmcuCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHBkZkRhdGE7CisgICAgX2RhdGEt
Pl9wYWdlLT5kcmF3UmVjdFRvUERGKGZyYW1lLCBJbnRSZWN0KHJlY3QpLCBwZGZEYXRhKTsKKwor
ICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcGRmRGF0YVByb3ZpZGVyKEFkb3B0Q0Ys
IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgcGRmRGF0YS5kYXRhKCksIHBkZkRhdGEu
c2l6ZSgpLCAwKSk7CisgICAgUmV0YWluUHRyPENHUERGRG9jdW1lbnRSZWY+IHBkZkRvY3VtZW50
KEFkb3B0Q0YsIENHUERGRG9jdW1lbnRDcmVhdGVXaXRoUHJvdmlkZXIocGRmRGF0YVByb3ZpZGVy
LmdldCgpKSk7CisgICAgaWYgKCFwZGZEb2N1bWVudCkgeworICAgICAgICBMT0dfRVJST1IoIkNv
dWxkbid0IGNyZWF0ZSBhIFBERiBkb2N1bWVudCB3aXRoIGRhdGEgcGFzc2VkIGZvciBwcmludGlu
ZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2Ug
PSBDR1BERkRvY3VtZW50R2V0UGFnZShwZGZEb2N1bWVudC5nZXQoKSwgMSk7CisgICAgaWYgKCFw
ZGZQYWdlKSB7CisgICAgICAgIExPR19FUlJPUigiUHJpbnRpbmcgZGF0YSBkb2Vzbid0IGhhdmUg
cGFnZSAxIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU0dyYXBoaWNzQ29udGV4
dCAqbnNHcmFwaGljc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
OworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dDb250ZXh0UmVmPihb
bnNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NQb3J0XSk7CisKKyAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOworICAgIC8vIEZsaXAgdGhlIGRlc3RpbmF0aW9uLgorICAgIENHQ29udGV4
dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29u
dGV4dCwgMCwgLXJlY3Quc2l6ZS5oZWlnaHQpOworICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNv
bnRleHQsIHBkZlBhZ2UpOworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9
CisKKy8vIEZJWE1FIDM0OTEzNDQ6IFRoaXMgaXMgYW4gQXBwS2l0LWludGVybmFsIG1ldGhvZCB0
aGF0IHdlIG5lZWQgdG8gb3ZlcnJpZGUgaW4gb3JkZXIKKy8vIHRvIGdldCBvdXIgc2hyaW5rLXRv
LWZpdCB0byB3b3JrIHdpdGggYSBjdXN0b20gcGFnaW5hdGlvbiBzY2hlbWUuIFdlIGNhbiBkbyB0
aGlzIGJldHRlcgorLy8gaWYgQXBwS2l0IG1ha2VzIGl0IFNQSS9BUEkuCistIChDR0Zsb2F0KV9w
cm92aWRlVG90YWxTY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9u
ICopcHJpbnRPcGVyYXRpb24gCit7CisgICAgcmV0dXJuIF9kYXRhLT5fdG90YWxTY2FsZUZhY3Rv
ckZvclByaW50aW5nOworfQorCisvLyBSZXR1cm4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlIGZvciBh
IHBhcnRpY3VsYXIgcGFnZSBudW1iZXIKKy0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2Vy
KXBhZ2UKK3sKKyAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IGZyYW1lQmVpbmdQcmludGVkKCk7
CisgICAgQVNTRVJUKGZyYW1lKTsKKworICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBf
ZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gW3N1cGVyIHJlY3RGb3JQ
YWdlOnBhZ2VdOworCisgICAgTE9HKFZpZXcsICJyZWN0Rm9yUGFnZTolZCAtPiB4ICVkLCB5ICVk
LCB3aWR0aCAlZCwgaGVpZ2h0ICVkXG4iLCAoaW50KXBhZ2UsIF9kYXRhLT5fcHJpbnRpbmdQYWdl
UmVjdHNbcGFnZSAtIDFdLngoKSwgX2RhdGEtPl9wcmludGluZ1BhZ2VSZWN0c1twYWdlIC0gMV0u
eSgpLCBfZGF0YS0+X3ByaW50aW5nUGFnZVJlY3RzW3BhZ2UgLSAxXS53aWR0aCgpLCBfZGF0YS0+
X3ByaW50aW5nUGFnZVJlY3RzW3BhZ2UgLSAxXS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIF9kYXRh
LT5fcHJpbnRpbmdQYWdlUmVjdHNbcGFnZSAtIDFdOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRh
dGlvbiBXS1ZpZXcgKEludGVybmFsKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTY2NSw2ICs2NjUsMTEgQEAKIAkJRDNCOTQ4NDcxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBv
cHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICovOyB9OwogCQlEM0I5
NDg0ODExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ0MTFGRjRCNjUwMDAz
MkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovOyB9OwogCQlEM0I5NDg0OTExRkY0QjY1
MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0NTExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2Vh
cmNoUG9wdXBNZW51LmggKi87IH07CisJCUUxOEM5MkY0MTJEQjlFNzEwMENGMkFFQiAvKiBQcmlu
dEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgKi87IH07CisJCUUxOEM5
MkY1MTJEQjlFN0EwMENGMkFFQiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVCIC8qIFBy
aW50SW5mby5jcHAgKi87IH07CisJCUUxOEM5MkY2MTJEQjlFOTQwMENGMkFFQiAvKiBQcmludElu
Zm9NYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUNDMUI4RjEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvTWFjLm1tICovOyB9OworCQlFMUND
MUI5MDEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNDMUI4RTEyRDdFQURGMDA2MjU4MzggLyogUHJp
bnRJbmZvLmggKi87IH07CisJCUUxQ0MxQjkxMTJEN0VBREYwMDYyNTgzOCAvKiBQcmludEluZm9N
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUND
MUI4RjEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvTWFjLm1tICovOyB9OwogCQlFMUVFNTNF
MzExRjhDRkMwMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNTNEQzExRjhD
RjlGMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggKi87IH07CiAJ
CUUxRUU1M0U3MTFGOENGRkIwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFF
RTUzRTYxMUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5j
cHAgKi87IH07CiAJCUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRsZVBhZ2VPdmVy
bGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTIy
RjBGRjEyODlGQ0Q5MDA4NUU3NEYgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKQEAgLTE0MjAsNiArMTQyNSw5IEBA
CiAJCUQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1l
bnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU2VhcmNoUG9w
dXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDUxMUZGNEI2
NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1lbnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcmludEluZm8uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMUNDMUI4RTEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByaW50SW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMUNDMUI4RjEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZv
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUHJpbnRJbmZv
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVFNTNEQzExRjhDRjlGMDBD
Q0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUVFNTNFNjExRjhDRkZCMDBDQ0JFRTQgLyogSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2MTEzRTI0MTI2Q0UxODIwMDU3RDBBNyAvKiBXZWJVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NzU3LDYgKzE3NjUsOCBAQAogCQkJCUJDQ0Y2NzJDMTJDN0VERjcwMDhGOUMzNSAvKiBPcmlnaW5B
bmREYXRhYmFzZXMuaCAqLywKIAkJCQlCQ0M0M0FCODEyN0I5NURDMDAzMTdGMTYgLyogUGxhdGZv
cm1Qb3B1cE1lbnVEYXRhLmNwcCAqLywKIAkJCQlCQ0M0M0FCOTEyN0I5NURDMDAzMTdGMTYgLyog
UGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmggKi8sCisJCQkJRTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVC
IC8qIFByaW50SW5mby5jcHAgKi8sCisJCQkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFBy
aW50SW5mby5oICovLAogCQkJCUJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uVHlwZS5oICovLAogCQkJCTFBQUI0QThDMTI5NkYwQTIwMDIzOTUyRiAvKiBT
YW5kYm94RXh0ZW5zaW9uLmggKi8sCiAJCQkJMUFBNDFBQjQxMkMwMkVDNDAwMkJFNjdCIC8qIFNl
bGVjdGlvblN0YXRlLmggKi8sCkBAIC0yMzE2LDYgKzIzMjYsNyBAQAogCQkJCUMwMkJGRjFEMTI1
MTUwMkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tICovLAogCQkJCUJD
RjUwNUU2MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5tbSAqLywK
IAkJCQlCQ0Y1MDVFNTEyNDMwNDdCMDA1OTU1QUUgLyogUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8u
aCAqLywKKwkJCQlFMUNDMUI4RjEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvTWFjLm1tICov
LAogCQkJCUJDOUU5NUQyMTE0NDlCMDMwMDg3MEU3MSAvKiBVcGRhdGVDaHVuay5jcHAgKi8sCiAJ
CQkJQkM5RTk1RDExMTQ0OUIwMzAwODcwRTcxIC8qIFVwZGF0ZUNodW5rLmggKi8sCiAJCQkJQkNF
MjMyNjIxMjJDNkNGMzAwRDVDMzVBIC8qIFdlYkNvcmVBcmd1bWVudENvZGVyc01hYy5tbSAqLywK
QEAgLTMwMjYsNiArMzAzNyw3IEBACiAJCQkJQkMxQkUxRjIxMkQ1NERCRDAwMDRBMjI4IC8qIFdl
Ykdlb2xvY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkMzMDcxMTJENTU1
NDUwMDYzREFBMiAvKiBDb250ZXh0TWVudVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MThE
MkNDQjEyRDUxREZCMDAzQkI5M0IgLyogU2Vzc2lvblN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFMUNDMUI5MDEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzU0Q0FDQjEyRDY0MjkxMDA1QzY3QjAgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTRDQzEyMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dl
b2xvY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwRTVGRTUxMkQ2OTcxNjAw
MTJBNzJBIC8qIFdlYkdlb2xvY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTgz
LDYgKzMxOTUsOCBAQAogCQkJCTFBNkZBMzExMTFFMzkyMUUwMERCMTM3MSAvKiBNYWluTWFjLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUZBMjg1MTI3QTEzQkMwMDUwRTcwOSAvKiBOUE9iamVj
dFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUZBMzVEMTI3QTQ1QkYwMDUwRTcwOSAv
KiBOUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMThDOTJG
NTEyREI5RTdBMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUx
OEM5MkY2MTJEQjlFOTQwMENGMkFFQiAvKiBQcmludEluZm9NYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTM0ODMsNiArMzQ5Nyw4IEBACiAJCQkJQkMxQkUxRTExMkQ1NEE0MTAwMDRBMjI4IC8qIFdl
Ykdlb2xvY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMUJFMUYzMTJENTRE
QkQwMDA0QTIyOCAvKiBXZWJHZW9sb2NhdGlvblByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxOEQyQ0NBMTJENTFERkIwMDNCQjkzQiAvKiBTZXNzaW9uU3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTFDQzFCOTExMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50SW5mb01hYy5tbSBp
biBTb3VyY2VzICovLAorCQkJCUUxOEM5MkY0MTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NENBQ0MxMkQ2NDI5MTAwNUM2N0IwIC8qIFdlYkdl
b2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTRDQzEzMTJE
Njc0RUUwMDVDNjdCMCAvKiBXS0dlb2xvY2F0aW9uTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzBFNUZFNjEyRDY5NzE2MDAxMkE3MkEgLyogV2ViR2VvbG9jYXRpb25NYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBsdWdpblByb3h5LmgiCiAj
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgorI2luY2x1ZGUgIlByaW50SW5mby5oIgogI2luY2x1ZGUg
IlNlc3Npb25TdGF0ZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUg
IldlYkJhY2tGb3J3YXJkTGlzdC5oIgpAQCAtODIsNyArODMsMTAgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJp
bnRDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmll
dy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGlu
Z3MuaD4KQEAgLTM2Miw2ICszNjYsOCBAQCB2b2lkIFdlYlBhZ2U6OmNsb3NlKCkKIAogICAgIG1f
c2FuZGJveEV4dGVuc2lvblRyYWNrZXIuaW52YWxpZGF0ZSgpOwogCisgICAgbV9wcmludENvbnRl
eHQgPSBudWxscHRyOworCiAgICAgbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+
ZGV0YWNoRnJvbVBhcmVudCgpOwogICAgIG1fcGFnZS5jbGVhcigpOwogCkBAIC0xMTg4LDYgKzEx
OTQsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlCiAgICAgc2V0
dGluZ3MtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKHN0b3JlLmdldEJvb2xWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWRLZXkoKSkp
OwogICAgIHNldHRpbmdzLT5zZXRQYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwYWdpbmF0ZUR1cmluZ0xheW91dEVu
YWJsZWRLZXkoKSkpOwogICAgIHNldHRpbmdzLT5zZXRET01QYXN0ZUFsbG93ZWQoc3RvcmUuZ2V0
Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpkb21QYXN0ZUFsbG93ZWRLZXkoKSkp
OworICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHN0b3JlLmdldEJvb2xW
YWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c2hvdWxkUHJpbnRCYWNrZ3JvdW5kc0tleSgp
KSk7CiAKICAgICBzZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHN0b3JlLmdldFVJbnQzMlZh
bHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjptaW5pbXVtRm9udFNpemVLZXkoKSkpOwogICAg
IHNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHN0b3JlLmdldFVJbnQzMlZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjptaW5pbXVtTG9naWNhbEZvbnRTaXplS2V5KCkpKTsK
QEAgLTE2NzIsNCArMTY3OSw3OSBAQCB2b2lkIFdlYlBhZ2U6OnN0b3BTcGVha2luZygpCiAKICNl
bmRpZgogCit2b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRpbmcodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgUHJpbnRJbmZvJiBwcmludEluZm8pCit7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJv
Y2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5jb3JlRnJhbWUoKTsK
KyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3ByaW50
Q29udGV4dCkKKyAgICAgICAgbV9wcmludENvbnRleHQgPSBhZG9wdFB0cihuZXcgUHJpbnRDb250
ZXh0KGNvcmVGcmFtZSkpOworCisgICAgbV9wcmludENvbnRleHQtPmJlZ2luKHByaW50SW5mby5h
dmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJIZWlnaHQpOworfQor
Cit2b2lkIFdlYlBhZ2U6OmVuZFByaW50aW5nKCkKK3sKKyAgICBtX3ByaW50Q29udGV4dCA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcodWludDY0
X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIFZlY3RvcjxJbnRSZWN0PiYg
cmVzdWx0UGFnZVJlY3RzLCBkb3VibGUmIHJlc3VsdFRvdGFsU2NhbGVGYWN0b3JGb3JQcmludGlu
ZykKK3sKKyAgICBiZWdpblByaW50aW5nKGZyYW1lSUQsIHByaW50SW5mbyk7CisKKyAgICBXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBmdWxsUGFnZUhlaWdo
dDsKKyAgICBtX3ByaW50Q29udGV4dC0+Y29tcHV0ZVBhZ2VSZWN0cyhGbG9hdFJlY3QoMCwgMCwg
cHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIHByaW50SW5mby5hdmFpbGFibGVQYXBlckhl
aWdodCksIDAsIDAsIHByaW50SW5mby5wYWdlU2V0dXBTY2FsZUZhY3RvciwgZnVsbFBhZ2VIZWln
aHQsIHRydWUpOworCisgICAgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nID0gbV9w
cmludENvbnRleHQtPmNvbXB1dGVBdXRvbWF0aWNTY2FsZUZhY3RvcihwcmludEluZm8uYXZhaWxh
YmxlUGFwZXJXaWR0aCkgKiBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3I7CisgICAgcmVz
dWx0UGFnZVJlY3RzID0gbV9wcmludENvbnRleHQtPnBhZ2VSZWN0cygpOworCisgICAgLy8gSWYg
d2UncmUgYXNrZWQgdG8gcHJpbnQsIHdlIHNob3VsZCBhY3R1YWxseSBwcmludCBhdCBsZWFzdCBh
IGJsYW5rIHBhZ2UuCisgICAgaWYgKHJlc3VsdFBhZ2VSZWN0cy5pc0VtcHR5KCkpCisgICAgICAg
IHJlc3VsdFBhZ2VSZWN0cy5hcHBlbmQoSW50UmVjdCgwLCAwLCAxLCAxKSk7Cit9CisKKyNpZiBQ
TEFURk9STShNQUMpCisvLyBGSVhNRTogRmluZCBhIGJldHRlciBwbGFjZSBmb3IgTWFjIHNwZWNp
ZmljIGNvZGUuCit2b2lkIFdlYlBhZ2U6OmRyYXdSZWN0VG9QREYodWludDY0X3QgZnJhbWVJRCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCwgVmVjdG9yPHVpbnQ4X3Q+JiBwZGZEYXRhKQor
eworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZy
YW1lSUQpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChjb3JlRnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5n
KCkpOworCisgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IHBkZlBhZ2VEYXRhKEFkb3B0
Q0YsIENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgLy8gRklYTUU6IFVzZSBDR0Rh
dGFDb25zdW1lckNyZWF0ZSB3aXRoIGNhbGxiYWNrcyB0byBhdm9pZCBjb3B5aW5nIHRoZSBkYXRh
LgorICAgIFJldGFpblB0cjxDR0RhdGFDb25zdW1lclJlZj4gcGRmRGF0YUNvbnN1bWVyKEFkb3B0
Q0YsIENHRGF0YUNvbnN1bWVyQ3JlYXRlV2l0aENGRGF0YShwZGZQYWdlRGF0YS5nZXQoKSkpOwor
CisgICAgQ0dSZWN0IG1lZGlhQm94ID0gQ0dSZWN0TWFrZSgwLCAwLCBmcmFtZS0+c2l6ZSgpLndp
ZHRoKCksIGZyYW1lLT5zaXplKCkuaGVpZ2h0KCkpOworICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGNvbnRleHQoQWRvcHRDRiwgQ0dQREZDb250ZXh0Q3JlYXRlKHBkZkRhdGFDb25zdW1lci5n
ZXQoKSwgJm1lZGlhQm94LCAwKSk7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBhZ2VJbmZvID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKKyAgICBDR1BERkNvbnRleHRC
ZWdpblBhZ2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8pOworCisgICAgR3JhcGhpY3NDb250ZXh0
IGN0eChjb250ZXh0LmdldCgpKTsKKyAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xSZWN0KGN0eCwg
cmVjdCk7CisKKyAgICBDR1BERkNvbnRleHRFbmRQYWdlKGNvbnRleHQuZ2V0KCkpOworICAgIENH
UERGQ29udGV4dENsb3NlKGNvbnRleHQuZ2V0KCkpOworCisgICAgcGRmRGF0YS5yZXNpemUoQ0ZE
YXRhR2V0TGVuZ3RoKHBkZlBhZ2VEYXRhLmdldCgpKSk7CisgICAgQ0ZEYXRhR2V0Qnl0ZXMocGRm
UGFnZURhdGEuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIHBkZkRhdGEuc2l6ZSgpKSwgcGRmRGF0YS5k
YXRhKCkpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA3NTk2OSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDYgKzcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBLZXlib2FyZEV2ZW50OwogICAgIGNsYXNzIFBhZ2U7
CisgICAgY2xhc3MgUHJpbnRDb250ZXh0OwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAg
ICBjbGFzcyBTaGFyZWRCdWZmZXI7CiB9CkBAIC05NSw3ICs5Niw3IEBAIGNsYXNzIFdlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyOwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHk7CiBjbGFzcyBXZWJQ
b3B1cE1lbnU7CiBjbGFzcyBXZWJXaGVlbEV2ZW50OwotCitzdHJ1Y3QgUHJpbnRJbmZvOwogc3Ry
dWN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXNTdG9y
ZTsKIApAQCAtMzAwLDYgKzMwMSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBv
aW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWlu
dDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBjb25zdCBXVEY6OlN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncyk7CiAKKyAgICB2b2lkIGJlZ2luUHJpbnRpbmco
dWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJik7CisgICAgdm9pZCBlbmRQcmludGlu
ZygpOworICAgIHZvaWQgY29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcodWludDY0X3QgZnJhbWVJRCwg
Y29uc3QgUHJpbnRJbmZvJiwgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiByZXN1bHRQYWdlUmVj
dHMsIGRvdWJsZSYgcmVzdWx0VG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKTsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgdm9pZCBkcmF3UmVjdFRvUERGKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBWZWN0b3I8dWludDhfdD4mIHBkZkRhdGEpOworI2VuZGlmCisK
ICAgICBib29sIG1haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKCkgY29uc3Q7CiAKIHBy
aXZhdGU6CkBAIC00ODAsNiArNDg4LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViT3BlblBh
bmVsUmVzdWx0TGlzdGVuZXI+IG1fYWN0aXZlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI7CiAgICAg
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIgbV9nZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlcjsKIAorICAgIE93blB0cjxXZWJDb3JlOjpQcmludENvbnRleHQ+IG1f
cHJpbnRDb250ZXh0OworCiAgICAgU2FuZGJveEV4dGVuc2lvblRyYWNrZXIgbV9zYW5kYm94RXh0
ZW5zaW9uVHJhY2tlcjsKICAgICB1aW50NjRfdCBtX3BhZ2VJRDsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgkocmV2aXNpb24gNzU5NjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCwxNCBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlIHsKIAogICAgIFNldFdpbmRvd1Jlc2l6ZXJTaXplKFdlYkNvcmU6
OkludFNpemUgaW50ZXJzZWN0c1ZpZXcpCiAKKyAgICAjIFByaW50aW5nLgorICAgIEJlZ2luUHJp
bnRpbmcodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpQcmludEluZm8gcHJpbnRJbmZvKTsKKyAg
ICBFbmRQcmludGluZygpOworICAgIENvbXB1dGVQYWdlc0ZvclByaW50aW5nKHVpbnQ2NF90IGZy
YW1lSUQsIFdlYktpdDo6UHJpbnRJbmZvIHByaW50SW5mbykgLT4gKFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiBwYWdlUmVjdHMsIGRvdWJsZSB0b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIERyYXdSZWN0VG9QREYodWludDY0X3QgZnJhbWVJRCwgV2Vi
Q29yZTo6SW50UmVjdCByZWN0KSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IHBkZkRhdGEpCisjZW5kaWYK
KwogICAgIC8vIEZJWE1FOiBUaGlzIGEgZHVtbXkgbWVzc2FnZSwgdG8gYXZvaWQgYnJlYWtpbmcg
dGhlIGJ1aWxkIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCByZXF1aXJlCiAgICAgLy8gYW55IHN5
bmNocm9ub3VzIG1lc3NhZ2VzLCBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiA8cmRhcjovL3By
b2JsZW0vODc3NTExNT4gaXMgZml4ZWQuCiAgICAgRHVtbXkoKSAtPiAoYm9vbCBkdW1teVJldHVy
bikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHJldmlzaW9uIDc1OTY5KQorKysg
U291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00OTEs
NiArNDkxLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXFNoYXJlZFxQcmludEluZm8uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcUHJpbnRJbmZvLmgiCisJCQkJPgorCQkJPC9G
aWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZS5oIgogCQkJCT4KIAkJCTwvRmlsZT4K
</data>
<flag name="review"
          id="70617"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>