Return-Path: X-Original-To: apmail-hadoop-user-archive@minotaur.apache.org Delivered-To: apmail-hadoop-user-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0388A11133 for ; Tue, 15 Apr 2014 16:54:05 +0000 (UTC) Received: (qmail 63267 invoked by uid 500); 15 Apr 2014 16:53:54 -0000 Delivered-To: apmail-hadoop-user-archive@hadoop.apache.org Received: (qmail 63109 invoked by uid 500); 15 Apr 2014 16:53:53 -0000 Mailing-List: contact user-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@hadoop.apache.org Delivered-To: mailing list user@hadoop.apache.org Received: (qmail 63092 invoked by uid 99); 15 Apr 2014 16:53:53 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 15 Apr 2014 16:53:53 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of mahesh.k.exp@gmail.com designates 209.85.216.195 as permitted sender) Received: from [209.85.216.195] (HELO mail-qc0-f195.google.com) (209.85.216.195) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 15 Apr 2014 16:53:47 +0000 Received: by mail-qc0-f195.google.com with SMTP id c9so3639504qcz.2 for ; Tue, 15 Apr 2014 09:53:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=XeAmAjzBWpRH8mneaA4Bt892JSoa0kotkyjxWj9jkLQ=; b=RvJQ1BBm5jYMc7DHYPOM0JATMtMgEAqZPeEGH2du7zd4rdx6gvaq5MHzyMzxw4JC/R MIlGwKT8A0DmYevMlmu+aH4t0Tj/g8g/dlWKD54dbOaZktBTr4hQJlkqfv9oCxqmtVXj pFGu+UdE8GLBtet5dXk0NJ9KZYgrUJSNG3o8Mvl9yIFB2oPA0tPJtoUz8sJ2I6VUfIpB 6rqpHY9kJ0AFRwlOuwh8whWwBMvIsxcVnXudMrYqwHYeRGr9G8AREY3fjhxy7h+lujec m+dNGYqShmQjoAFWg+WMFJPJQf1UgKJ7jL0Smy+gVymE7XsmK8cJMAjHqtRwcHt5KuRs DFSg== MIME-Version: 1.0 X-Received: by 10.140.23.8 with SMTP id 8mr4264219qgo.0.1397580804561; Tue, 15 Apr 2014 09:53:24 -0700 (PDT) Received: by 10.96.38.165 with HTTP; Tue, 15 Apr 2014 09:53:24 -0700 (PDT) In-Reply-To: References: Date: Tue, 15 Apr 2014 22:23:24 +0530 Message-ID: Subject: Fwd: hi i have a Patch file of my Resouce aware scheduler. How to apply this scheduler ??i place of default scheduler From: Mahesh Khandewal To: user , ektacloudstack@gmail.com, common-user@hadoop.apache.org, hdfs-user@hadoop.apache.org Content-Type: multipart/mixed; boundary=001a11c1580466b5a004f717a3cf X-Virus-Checked: Checked by ClamAV on apache.org --001a11c1580466b5a004f717a3cf Content-Type: text/plain; charset=UTF-8 ---------- Forwarded message ---------- From: Mahesh Khandewal Date: Tue, 15 Apr 2014 22:21:26 +0530 Subject: hi i have a Patch file of my Resouce aware scheduler. How to apply this scheduler ??i place of default scheduler To: user@hadoop.apache.org Can any one help?? please. --001a11c1580466b5a004f717a3cf Content-Type: text/plain; charset=GB2312; name="MAPREDUCE-1380_1.1.patch.txt" Content-Disposition: attachment; filename="MAPREDUCE-1380_1.1.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 ZGlmZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYXB0aXZlLXNjaGVkdWxlci9SRUFETUUgYi9zcmMv Y29udHJpYi9hZGFwdGl2ZS1zY2hlZHVsZXIvUkVBRE1FDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMC4uNTYyNzgxYg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL2NvbnRyaWIv YWRhcHRpdmUtc2NoZWR1bGVyL1JFQURNRQ0KQEAgLTAsMCArMSwxMjcgQEANCitBZGFwdGl2ZSBT Y2hlZHVsZXIgdjEuMQ0KKz09PT09PT09PT09PT09PT09PT09PT09DQorDQorSW50cm9kdWN0aW9u DQorLS0tLS0tLS0tLS0tDQorDQorVGhlIEFkYXB0aXZlIFNjaGVkdWxlciBpcyBhIHBsdWdnYWJs ZSBIYWRvb3Agc2NoZWR1bGVyIHRoYXQNCithdXRvbWF0aWNhbGx5IGFkanVzdHMgdGhlIGFtb3Vu dCBvZiBzbG90cyBkZXBlbmRpbmcgb24gdGhlIHBlcmZvcm1hbmNlDQorb2Ygam9icyBhbmQgb24g dXNlci1kZWZpbmVkIGhpZ2gtbGV2ZWwgY29tcGxldGlvbiBnb2Fscy4NCisNCitNYXBSZWR1Y2Ug c2NoZWR1bGVycyB1c2UgdGhlIG5vdGlvbiBvZiBzbG90cyB0byByZXByZXNlbnQgdGhlIGNhcGFj aXR5DQorb2YgYSBjbHVzdGVyLiBUaGlzIGFic3RyYWN0aW9uIGlzIHNpbXBsZSBhbmQgbWF5IHdv cmsgZm9yIGhvbW9nZW5lb3VzDQord29ya2xvYWRzLCBidXQgZmFpbHMgdG8gY2FwdHVyZSB0aGUg ZGlmZmVyZW50IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0DQoram9icyBoYXZlIGluIG11bHRp LXVzZXIgZW52aXJvbm1lbnRzLiBUaGUgcmVzb3VyY2UtYXdhcmUgQWRhcHRpdmUNCitTY2hlZHVs ZXIgbGV2ZXJhZ2VzIGpvYiBwcm9maWxpbmcgaW5mb3JtYXRpb24gdG8gZW5zdXJlIG9wdGltYWwg Y2x1c3Rlcg0KK3V0aWxpemF0aW9uIGFuZCBhdCB0aGUgc2FtZSB0aW1lIGd1YXJhbnRlZXMgaGln aC1sZXZlbCBjb21wbGV0aW9uIGdvYWxzLg0KKw0KK1RoZSByZXNvdXJjZS1hd2FyZSBBZGFwdGl2 ZSBTY2hlZHVsZXIgaXMgZGVzaWduZWQgdG8gaW50cm9kdWNlIGEgbW9yZQ0KK2ZpbmUtZ3JhaW5l ZCByZXNvdXJjZSBtb2RlbCwgcHJvdmlkZSBhIG1vcmUgZ2xvYmFsIHZpZXcgb2YgdGhlIE1hcFJl ZHVjZQ0KK2NsdXN0ZXIsIGFuZCBmaW5hbGx5LCBzdXBwb3J0IGhpZ2gtbGV2ZWwgY29tcGxldGlv biBnb2Fscy4NCisNCisgKiBSZXNvdXJjZS1hd2FyZW5lc3M6IFByb2FjdGl2ZSBzY2hlZHVsaW5n IGJhc2VkIG9uIHByb2ZpbGluZyBqb2INCisgICBpbmZvcm1hdGlvbiB0byBhdm9pZCByZXNvdXJj ZSBjb250ZW50aW9uLiBFbGltaW5hdGVzIGZpeGVkIG51bWJlciBvZg0KKyAgIHNsb3RzLg0KKw0K KyAqIEdsb2JhbCB2aWV3IG9mIHRoZSBjbHVzdGVyOiBGaW5kIHRoZSBvcHRpbWFsIG1peCBvZiB3 b3JrbG9hZHMgZm9yIHRoZQ0KKyAgIHdob2xlIGNsdXN0ZXIgaW5zdGVhZCBvZiB0cnlpbmcgdG8g ZmluZCB0aGUgYmVzdCB0YXNrIHRvIHJ1biBpbiBhDQorCWdpdmVuIG5vZGUuDQorDQorICogSGln aC1sZXZlbCBjb21wbGV0aW9uIGdvYWxzOiBSZWFjdGl2ZSBtZWNoYW5pc20gdG8NCisgICBjb21w ZW5zYXRlIHNsb3dkb3ducy4gQmFzZWQgb24gc29mdC1kZWFkbGluZXMgdG8gcHJpb3JpdGl6ZSBq b2JzLg0KKw0KK0ltcGxlbWVudGF0aW9uDQorLS0tLS0tLS0tLS0tLS0NCisNCitUaGUgZnVuY3Rp b25hbGl0eSBvZiB0aGUgc2NoZWR1bGVyIGlzIHNwbGl0IGludG8gdHdvIGxldmVsczogam9iDQor bWF0Y2hpbmcgYW5kIHRhc2sgYXNzaWdubWVudC4NCisNCisgKiBKb2IgbWF0Y2hpbmc6DQorICAg LSBGaW5kIGEgZ29vZCBtaXggb2Ygam9icyBmb3IgZWFjaCB3b3JrZXIgbm9kZQ0KKyAgIC0gRXhl Y3V0ZWQgcGVyaW9kaWNhbGx5IGFuZCB1cG9uIGpvYiBhcnJpdmFsIG9yIGpvYiBjb21wbGV0aW9u DQorDQorICogVGFzayBhc3NpZ25tZW50Og0KKyAgIC0gRW5mb3JjZXMgdGhlIG1peCBvZiBqb2Jz IGZvciBhIHBhcnRpY3VsYXIgbm9kZQ0KKyAgIC0gRXhlY3V0ZWQgb24gZXZlcnkgaGVhcnRiZWF0 DQorDQorVGhpcyBpcyBhY3R1YWxseSBhIHdlbGwta25vd24gcHJvYmxlbSB0aGF0IGhhcyBiZWVu IHN0dWRpZWQgaW4gdGhlIHBhc3QNCitpbiB0aGUgY29udGV4dCBvZiBtdWx0aXByb2Nlc3NvcnMs IGFuZCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhDQorYmluLXBhY2tpbmcgcHJvYmxlbS4gQmluLXBh Y2tpbmcgaXMgYSBjb21wdXRhdGlvbmFsbHkgaGFyZCBwcm9ibGVtLCBhbmQNCitpdCBpcyBzb2x2 ZWQgaGVyZSB1c2luZyBoZXVyaXN0aWNzLiBJbiBwYXJ0aWN1bGFyLCB0aGUgbWF0Y2hpbmcNCith bGdvcml0aG0gdXNlZCBieSB0aGUgcmVzb3VyY2UtYXdhcmUgQWRhcHRpdmUgU2NoZWR1bGVyIGlz IGJhc2VkIG9uIGENCitwcmV2aW91cyB3b3JrIGZvciBhcHBsaWNhdGlvbiBwbGFjZW1lbnQuIEl0 IGhhcyBiZWVuIGFkYXB0ZWQgdG8NCitNYXBSZWR1Y2UsIGFuZCBpcyBiYXNlZCBvbiBhIGN1c3Rv bSB1dGlsaXR5IGZ1bmN0aW9uLg0KKw0KK1RoZSBqb2IgbWF0Y2hpbmcgYWxnb3JpdGhtIHRyaWVz IHRvIGZpbmQgYSBnb29kIG1peCBvZiBqb2JzIGZvciBlYWNoDQordGFza3RyYWNrZXIuIEluIG9y ZGVyIHRvIGRvIHNvLCBpdCBnb2VzIHRocm91Z2ggYWxsIHRoZSB3b3JrZXIgbm9kZXMsDQordHJ5 aW5nIGRpZmZlcmVudCBqb2IgY29tYmluYXRpb25zIGFuZCBhZnRlciBhIG51bWJlciBvZiBpdGVy YXRpb25zLCB0aGUNCitiZXN0IHNvbHV0aW9uIGZvdW5kIHNvIGZhciBpcyBjaG9zZW4uIFRoaXMg am9iIG1hdGNoaW5nIGlzIGV4ZWN1dGVkDQorcGVyaW9kaWNhbGx5LCBhbmQgaXQgYmFzaWNhbGx5 IHByb3ZpZGVzIHRoZSBwbGFuIG9mIHdoYXQgd2lsbCBiZQ0KK2V4ZWN1dGVkIGluIHRoZSBjbHVz dGVyIHVudGlsIHRoZSBuZXh0IG1hdGNoaW5nIG9jY3Vycy4NCisNCitUaGUgdXRpbGl0eSBmdW5j dGlvbiBpcyB1c2VkIHRvIG1lYXN1cmUgdGhlIHF1YWxpdHkgb2YgYSBqb2IgbWF0Y2hpbmcNCitz b2x1dGlvbi4gSXQgcHJvdmlkZXMgYSB2YWx1ZSBiZXR3ZWVuICQtMSQgYW5kICQxJCBmb3IgZWFj aCBqb2Igb24gYQ0KK3BhcnRpY3VsYXIgc29sdXRpb24sIGFuZCB0aGUgZ2xvYmFsIHV0aWxpdHkg aXMgc2ltcGx5IHRoZSBzdW0gb2YgdGhlc2UNCit2YWx1ZXMuDQorDQorIHwgZm9yIG1hY2hpbmUg aW4gbWFjaGluZXM6DQorIHwgICAgYmVzdF9hc3NpZ25tZW50ID0gbWFjaGluZS5hc3NpZ25tZW50 DQorIHwgICAgZm9yIG4gaW4gcmFuZ2UoMCwgbWFjaGluZS5ydW5uaW5nX3Rhc2tzKToNCisgfCAg ICAgICBuZXdfYXNzaWdubWVudCA9IG1hY2hpbmUuYXNzaWdubWVudC5yZW1vdmVfdGFza3MobikN CisgfCAgICAgICBmb3Igam9iIGluIGpvYnF1ZXVlOg0KKyB8ICAgICAgICAgIGlmIG5vdCBtYWNo aW5lLmZpdChqb2IpOg0KKyB8ICAgICAgICAgICAgIG5leHQNCisgfCAgICAgICAgICBuZXdfYXNz aWdubWVudC5hZGQoam9iKQ0KKyB8ICAgICAgIGlmIG5ld19hc3NpZ25tZW50LnV0aWxpdHkgPiBi ZXN0X2Fzc2lnbm1lbnQudXRpbGl0eToNCisgfCAgICAgICAgICBiZXN0X2Fzc2lnbm1lbnQgPSBu ZXdfYXNzaWdubWVudA0KKyB8ICAgIG1hY2hpbmUuYXNzaWdubWVudCA9IGJlc3RfYXNzaWdubWVu dA0KKyB8ICAgIG1hdGNoaW5nLmFkZChtYWNoaW5lKQ0KKyB8IHJldHVybiBtYXRjaGluZw0KKw0K K0NvbmZpZ3VyaW5nIHRoZSBTY2hlZHVsZXINCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQor DQorSW4gb3JkZXIgdG8gZW5hYmxlIHRoZSBzY2hlZHVsZXIsIHRoZSBjbGFzc3BhdGggc2hvdWxk IGJlIHVwZGF0ZWQgdG8NCitwb2ludCB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHNjaGVkdWxlciAo ZS5nLiB1c2luZyBjb25mL2hhZG9vcC1lbnYuc2gpLA0KK2FuZCB0aGUgZm9sbG93aW5nIHByb3Bl cnRpZXMgc2hvdWxkIGJlIHByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQ0KKyhjb25m L21hcHJlZC1zaXRlLnhtbCk6DQorDQorIDxwcm9wZXJ0eT4NCisgICA8bmFtZT5tYXByZWQuam9i dHJhY2tlci50YXNrU2NoZWR1bGVyPC9uYW1lPg0KKyAgIDx2YWx1ZT5vcmcuYXBhY2hlLmhhZG9v cC5tYXByZWQuQWRhcHRpdmVTY2hlZHVsZXI8L3ZhbHVlPg0KKyAgIDxkZXNjcmlwdGlvbj5UaGUg Y2xhc3MgcmVzcG9uc2libGUgZm9yIHNjaGVkdWxpbmcgdGhlIHRhc2tzLiBTZXQgdG8NCisgICBv cmcuYXBhY2hlLmhhZG9vcC5tYXByZWQuQWRhcHRpdmVTY2hlZHVsZXIgdG8gZW5hYmxlIHRoZQ0K KyAgIHJlc291Y2UtYXdhcmUgQWRhcHRpdmUgU2NoZWR1bGVyLjwvZGVzY3JpcHRpb24+DQorIDwv cHJvcGVydHk+DQorDQorIDxwcm9wZXJ0eT4NCisgICA8bmFtZT5tYXByZWQuc2NoZWR1bGVyLmFk YXB0aXZlLmludGVydmFsPC9uYW1lPg0KKyAgIDx2YWx1ZT4xMDAwMDwvdmFsdWU+DQorICAgPGRl c2NyaXB0aW9uPlRpbWUgYmV0d2VlbiB0d28gam9iIG1hdGNoaW5nIGNvbXB1dGF0aW9ucywgaW4N CisgICBtaWxsaXNlY29uZHMuPC9kZXNjcmlwdGlvbj4NCisgPC9wcm9wZXJ0eT4NCisNCisgPHBy b3BlcnR5Pg0KKyAgIDxuYW1lPm1hcHJlZC5zY2hlZHVsZXIuYWRhcHRpdmUudXRpbGl6YXRpb248 L25hbWU+DQorICAgPHZhbHVlPjEwMDwvdmFsdWU+DQorICAgPGRlc2NyaXB0aW9uPlBlcmNlbnRh Z2Ugb2YgZGVzaXJlZCBub2RlIHV0aWxpemF0aW9uLiBVc2VkIGZvciB0ZXN0aW5nDQorICAgcHVy cG9zZXMuPC9kZXNjcmlwdGlvbj4NCisgPC9wcm9wZXJ0eT4NCisNCitBZGRpdGlvbmFsbHksIHRo ZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgc3BlY2lmaWMgZm9yIGVhY2ggam9iLCBhbmQNCith cmUgcmVhZCB3aGVuIGpvYnMgYXJlIHN1Ym1pdHRlZDoNCisNCisgPHByb3BlcnR5Pg0KKyAgIDxu YW1lPm1hcHJlZC5qb2IuZGVhZGxpbmU8L25hbWU+DQorICAgPHZhbHVlPjA8L3ZhbHVlPg0KKyAg IDxkZXNjcmlwdGlvbj5TZXQgdGhlIGpvYidzIGRlc2lyZWQgZGVhZGxpbmUsIGluDQorICAgc2Vj b25kcy48L2Rlc2NyaXB0aW9uPg0KKyA8L3Byb3BlcnR5Pg0KKw0KKyA8cHJvcGVydHk+DQorICAg PG5hbWU+bWFwcmVkLmpvYi5wcm9maWxlLnttYXAscmVkdWNlfS57Y3B1LGlvfTwvbmFtZT4NCisg ICA8dmFsdWU+MTAwPC92YWx1ZT4NCisgICA8ZGVzY3JpcHRpb24+U2V0IHRoZSBqb2IgcHJvZmls aW5nIGluZm9ybWF0aW9uIGZvciBlYWNoIHBoYXNlIGFuZA0KKyAgIHJlc291cmNlICgwLTEwMCku PC9kZXNjcmlwdGlvbj4NCisgPC9wcm9wZXJ0eT4NCisNCmRpZmYgLS1naXQgYS9zcmMvY29udHJp Yi9hZGFwdGl2ZS1zY2hlZHVsZXIvYnVpbGQueG1sIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2No ZWR1bGVyL2J1aWxkLnhtbA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmMx NWUyMzINCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy9jb250cmliL2FkYXB0aXZlLXNjaGVkdWxl ci9idWlsZC54bWwNCkBAIC0wLDAgKzEsMjggQEANCis8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCisN Cis8IS0tDQorICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChB U0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRz LiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorICAgdGhpcyB3b3JrIGZv ciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0K KyAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExp Y2Vuc2UsIFZlcnNpb24gMi4wDQorICAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2Ug dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisgICB0aGUgTGljZW5zZS4gIFlv dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKw0KKyAgICAgICBodHRwOi8v d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisNCisgICBVbmxlc3MgcmVxdWly ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQor ICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFT IElTIiBCQVNJUywNCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICBTZWUgdGhlIExpY2Vuc2UgZm9y IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICAgbGlt aXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorDQorPCEtLQ0KK0JlZm9yZSB5b3Ug Y2FuIHJ1biB0aGVzZSBzdWJ0YXJnZXRzIGRpcmVjdGx5LCB5b3UgbmVlZA0KK3RvIGNhbGwgYXQg dG9wLWxldmVsOiBhbnQgZGVwbG95LWNvbnRyaWIgY29tcGlsZS1jb3JlLXRlc3QNCistLT4NCis8 cHJvamVjdCBuYW1lPSJhZGFwdGl2ZS1zY2hlZHVsZXIiIGRlZmF1bHQ9ImphciI+DQorDQorICA8 aW1wb3J0IGZpbGU9Ii4uL2J1aWxkLWNvbnRyaWIueG1sIi8+DQorDQorPC9wcm9qZWN0Pg0KZGlm ZiAtLWdpdCBhL3NyYy9jb250cmliL2FkYXB0aXZlLXNjaGVkdWxlci9pdnkueG1sIGIvc3JjL2Nv bnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL2l2eS54bWwNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi4zMzIxZWQyDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvY29udHJpYi9h ZGFwdGl2ZS1zY2hlZHVsZXIvaXZ5LnhtbA0KQEAgLTAsMCArMSwxMDUgQEANCis8P3htbCB2ZXJz aW9uPSIxLjAiID8+DQorPCEtLQ0KKyAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUg Rm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyAgIGNvbnRyaWJ1dG9yIGxpY2Vu c2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyAg IHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0 IG93bmVyc2hpcC4NCisgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIg dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyAgICh0aGUgIkxpY2Vuc2UiKTsgeW91 IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorICAgdGhl IExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisNCisg ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorDQorICAg VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n LCBzb2Z0d2FyZQ0KKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1 dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z IGFuZA0KKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKy0tPg0KKw0KKzxpdnkt bW9kdWxlIHZlcnNpb249IjEuMCI+DQorICA8aW5mbyBvcmdhbmlzYXRpb249Im9yZy5hcGFjaGUu aGFkb29wIiBtb2R1bGU9IiR7YW50LnByb2plY3QubmFtZX0iPg0KKyAgICA8bGljZW5zZSBuYW1l PSJBcGFjaGUgMi4wIi8+DQorICAgIDxpdnlhdXRob3IgbmFtZT0iQXBhY2hlIEhhZG9vcCBUZWFt IiB1cmw9Imh0dHA6Ly9oYWRvb3AuYXBhY2hlLm9yZyIvPg0KKyAgICA8ZGVzY3JpcHRpb24+DQor ICAgICAgICBBcGFjaGUgSGFkb29wIGNvbnRyaWINCisgICAgPC9kZXNjcmlwdGlvbj4NCisgIDwv aW5mbz4NCisgIDxjb25maWd1cmF0aW9ucyBkZWZhdWx0Y29uZm1hcHBpbmc9ImRlZmF1bHQiPg0K KyAgICA8IS0tdGhlc2UgbWF0Y2ggdGhlIE1hdmVuIGNvbmZpZ3VyYXRpb25zLS0+DQorICAgIDxj b25mIG5hbWU9ImRlZmF1bHQiIGV4dGVuZHM9Im1hc3RlcixydW50aW1lIi8+DQorICAgIDxjb25m IG5hbWU9Im1hc3RlciIgZGVzY3JpcHRpb249ImNvbnRhaW5zIHRoZSBhcnRpZmFjdCBidXQgbm8g ZGVwZW5kZW5jaWVzIi8+DQorICAgIDxjb25mIG5hbWU9InJ1bnRpbWUiIGRlc2NyaXB0aW9uPSJy dW50aW1lIGJ1dCBub3QgdGhlIGFydGlmYWN0IiAvPg0KKw0KKyAgICA8Y29uZiBuYW1lPSJjb21t b24iIHZpc2liaWxpdHk9InByaXZhdGUiDQorICAgICAgZGVzY3JpcHRpb249ImFydGlmYWN0cyBu ZWVkZWQgdG8gY29tcGlsZS90ZXN0IHRoZSBhcHBsaWNhdGlvbiIvPg0KKyAgICA8Y29uZiBuYW1l PSJ0ZXN0IiB2aXNpYmlsaXR5PSJwcml2YXRlIiBleHRlbmRzPSJydW50aW1lIi8+DQorICA8L2Nv bmZpZ3VyYXRpb25zPg0KKw0KKyAgPHB1YmxpY2F0aW9ucz4NCisgICAgPCEtLWdldCB0aGUgYXJ0 aWZhY3QgZnJvbSBvdXIgbW9kdWxlIG5hbWUtLT4NCisgICAgPGFydGlmYWN0IGNvbmY9Im1hc3Rl ciIvPg0KKyAgPC9wdWJsaWNhdGlvbnM+DQorICA8ZGVwZW5kZW5jaWVzPg0KKyAgICA8ZGVwZW5k ZW5jeSBvcmc9Im9yZy5hcGFjaGUuaGFkb29wIiBuYW1lPSJoYWRvb3AtY29tbW9uIg0KKyAgICAg ICAgICAgICAgICByZXY9IiR7aGFkb29wLWNvbW1vbi52ZXJzaW9ufSIgY29uZj0iY29tbW9uLT5k ZWZhdWx0Ii8+DQorICAgIDxkZXBlbmRlbmN5IG9yZz0ib3JnLmFwYWNoZS5oYWRvb3AiIG5hbWU9 ImhhZG9vcC1jb21tb24tdGVzdCINCisgICAgICAgICAgICAgICAgcmV2PSIke2hhZG9vcC1jb21t b24udmVyc2lvbn0iIGNvbmY9InRlc3QtPmRlZmF1bHQiLz4NCisgICAgPGRlcGVuZGVuY3kgb3Jn PSJvcmcuYXBhY2hlLmhhZG9vcCIgbmFtZT0iaGFkb29wLWhkZnMiDQorICAgICAgICAgICAgICAg IHJldj0iJHtoYWRvb3AtY29tbW9uLnZlcnNpb259IiBjb25mPSJjb21tb24tPmRlZmF1bHQiLz4N CisgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcuYXBhY2hlLmhhZG9vcCIgbmFtZT0iaGFkb29wLWhk ZnMtdGVzdCINCisgICAgICAgICAgICAgICAgcmV2PSIke2hhZG9vcC1jb21tb24udmVyc2lvbn0i IGNvbmY9InRlc3QtPmRlZmF1bHQiLz4NCisgICAgPGRlcGVuZGVuY3kgb3JnPSJjb21tb25zLWxv Z2dpbmciDQorICAgICAgbmFtZT0iY29tbW9ucy1sb2dnaW5nIg0KKyAgICAgIHJldj0iJHtjb21t b25zLWxvZ2dpbmcudmVyc2lvbn0iDQorICAgICAgY29uZj0iY29tbW9uLT5kZWZhdWx0Ii8+DQor ICAgIDxkZXBlbmRlbmN5IG9yZz0ibG9nNGoiDQorICAgICAgbmFtZT0ibG9nNGoiDQorICAgICAg cmV2PSIke2xvZzRqLnZlcnNpb259Ig0KKyAgICAgIGNvbmY9ImNvbW1vbi0+bWFzdGVyIi8+DQor ICAgIDxkZXBlbmRlbmN5IG9yZz0ib3JnLm1vcnRiYXkuamV0dHkiDQorICAgICAgbmFtZT0ic2Vy dmxldC1hcGktMi41Ig0KKyAgICAgIHJldj0iJHtzZXJ2bGV0LWFwaS0yLjUudmVyc2lvbn0iDQor ICAgICAgY29uZj0iY29tbW9uLT5kZWZhdWx0Ii8+DQorICAgPGRlcGVuZGVuY3kgb3JnPSJqdW5p dCINCisgICAgICBuYW1lPSJqdW5pdCINCisgICAgICByZXY9IiR7anVuaXQudmVyc2lvbn0iDQor ICAgICAgY29uZj0iY29tbW9uLT5kZWZhdWx0Ii8+DQorICAgIDxkZXBlbmRlbmN5IG9yZz0ib3Jn LmFwYWNoZS5oYWRvb3AiDQorICAgICAgbmFtZT0iYXZybyINCisgICAgICByZXY9IiR7YXZyby52 ZXJzaW9ufSINCisgICAgICBjb25mPSJjb21tb24tPmRlZmF1bHQiPg0KKyAgICAgIDxleGNsdWRl IG1vZHVsZT0iYW50Ii8+DQorICAgICAgPGV4Y2x1ZGUgbW9kdWxlPSJqZXR0eSIvPg0KKyAgICAg IDxleGNsdWRlIG1vZHVsZT0ic2xmNGotc2ltcGxlIi8+DQorICAgIDwvZGVwZW5kZW5jeT4NCisg ICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcuY29kZWhhdXMuamFja3NvbiINCisgICAgICBuYW1lPSJq YWNrc29uLW1hcHBlci1hc2wiDQorICAgICAgcmV2PSIke2phY2tzb24udmVyc2lvbn0iDQorICAg ICAgY29uZj0iY29tbW9uLT5kZWZhdWx0Ii8+DQorICAgIDxkZXBlbmRlbmN5IG9yZz0iY29tLnRo b3VnaHR3b3Jrcy5wYXJhbmFtZXIiDQorICAgICAgbmFtZT0icGFyYW5hbWVyIg0KKyAgICAgIHJl dj0iJHtwYXJhbmFtZXIudmVyc2lvbn0iDQorICAgICAgY29uZj0iY29tbW9uLT5kZWZhdWx0Ii8+ DQorICAgIDxkZXBlbmRlbmN5IG9yZz0iY29tLnRob3VnaHR3b3Jrcy5wYXJhbmFtZXIiDQorICAg ICAgbmFtZT0icGFyYW5hbWVyLWFudCINCisgICAgICByZXY9IiR7cGFyYW5hbWVyLnZlcnNpb259 Ig0KKyAgICAgIGNvbmY9ImNvbW1vbi0+ZGVmYXVsdCIvPg0KKyAgICA8ZGVwZW5kZW5jeSBvcmc9 Im9yZy5tb3J0YmF5LmpldHR5Ig0KKyAgICAgIG5hbWU9ImpldHR5LXV0aWwiDQorICAgICAgcmV2 PSIke2pldHR5LXV0aWwudmVyc2lvbn0iDQorICAgICAgY29uZj0iY29tbW9uLT5tYXN0ZXIiLz4N CisgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcubW9ydGJheS5qZXR0eSINCisgICAgICBuYW1lPSJq ZXR0eSINCisgICAgICByZXY9IiR7amV0dHkudmVyc2lvbn0iDQorICAgICAgY29uZj0iY29tbW9u LT5tYXN0ZXIiLz4NCisgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcubW9ydGJheS5qZXR0eSINCisg ICAgICBuYW1lPSJqc3AtYXBpLTIuMSINCisgICAgICByZXY9IiR7amV0dHkudmVyc2lvbn0iDQor ICAgICAgY29uZj0iY29tbW9uLT5tYXN0ZXIiLz4NCisgICAgPGRlcGVuZGVuY3kgb3JnPSJvcmcu bW9ydGJheS5qZXR0eSINCisgICAgICBuYW1lPSJqc3AtMi4xIg0KKyAgICAgIHJldj0iJHtqZXR0 eS52ZXJzaW9ufSINCisgICAgICBjb25mPSJjb21tb24tPm1hc3RlciIvPg0KKyAgICA8ZGVwZW5k ZW5jeSBvcmc9InVrLmNvbS5yb2J1c3QtaXQiIG5hbWU9ImNsb25pbmciIHJldj0iMS43LjQiIGNv bmY9ImNvbW1vbi0+bWFzdGVyIi8+DQorICA8L2RlcGVuZGVuY2llcz4NCis8L2l2eS1tb2R1bGU+ DQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL2l2eS9saWJyYXJp ZXMucHJvcGVydGllcyBiL3NyYy9jb250cmliL2FkYXB0aXZlLXNjaGVkdWxlci9pdnkvbGlicmFy aWVzLnByb3BlcnRpZXMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi43NmU2 NmJmDQotLS0gL2Rldi9udWxsDQorKysgYi9zcmMvY29udHJpYi9hZGFwdGl2ZS1zY2hlZHVsZXIv aXZ5L2xpYnJhcmllcy5wcm9wZXJ0aWVzDQpAQCAtMCwwICsxLDE3IEBADQorIyAgIExpY2Vuc2Vk IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0K KyMgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg dGhlIExpY2Vuc2UuDQorIyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh dA0KKyMNCisjICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu MA0KKyMNCisjICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z ZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMgICBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll ZC4NCisjICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu aW5nIHBlcm1pc3Npb25zIGFuZA0KKyMgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4N CisNCisjVGhpcyBwcm9wZXJ0aWVzIGZpbGUgbGlzdHMgdGhlIHZlcnNpb25zIG9mIHRoZSB2YXJp b3VzIGFydGlmYWN0cyB1c2VkIGJ5IHN0cmVhbWluZy4NCisjSXQgZHJpdmVzIGl2eSBhbmQgdGhl IGdlbmVyYXRpb24gb2YgYSBtYXZlbiBQT00NCisNCisjUGxlYXNlIGxpc3QgdGhlIGRlcGVuZGVu Y2llcyBuYW1lIHdpdGggdmVyc2lvbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb25l cw0KKyNsaXN0ZWQgaW4gdGhlIGdsb2JhbCBsaWJyYXJpZXMucHJvcGVydGllcyBmaWxlIChpbiBh bHBoYWJldGljYWwgb3JkZXIpDQpkaWZmIC0tZ2l0IGEvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2No ZWR1bGVyL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJlZC9BZGFwdGl2ZVNjaGVkdWxl ci5qYXZhIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9hcGFj aGUvaGFkb29wL21hcHJlZC9BZGFwdGl2ZVNjaGVkdWxlci5qYXZhDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMC4uNmMyMmNlMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvc3JjL2Nv bnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJl ZC9BZGFwdGl2ZVNjaGVkdWxlci5qYXZhDQpAQCAtMCwwICsxLDYzMCBAQA0KK3BhY2thZ2Ugb3Jn LmFwYWNoZS5oYWRvb3AubWFwcmVkOw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0K Kw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5 TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hN YXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2lt cG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9y dCBqYXZhLnV0aWwuVHJlZVNldDsNCitpbXBvcnQgamF2YS51dGlsLlByaW9yaXR5UXVldWU7DQor aW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1v bnMubG9nZ2luZy5Mb2c7DQoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0Zh Y3Rvcnk7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUuaGFkb29wLmNvbmYuQ29uZmlndXJhdGlvbjsN CitpbXBvcnQgb3JnLmFwYWNoZS5oYWRvb3AudXRpbC5SZWZsZWN0aW9uVXRpbHM7DQorDQoraW1w b3J0IG9yZy5hcGFjaGUuaGFkb29wLm1hcHJlZC5BZGFwdGl2ZVNjaGVkdWxlci5Kb2JJbmZvOw0K K2ltcG9ydCBvcmcuYXBhY2hlLmhhZG9vcC5tYXByZWQuQWRhcHRpdmVTY2hlZHVsZXIuSm9iUHJv ZmlsZTsNCitpbXBvcnQgb3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkLlRhc2tTdGF0dXMuU3RhdGU7 DQoraW1wb3J0IG9yZy5hcGFjaGUuaGFkb29wLm1hcHJlZHVjZS5UYXNrVHlwZTsNCitpbXBvcnQg b3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkdWNlLnNlcnZlci5qb2J0cmFja2VyLlRhc2tUcmFja2Vy Ow0KKw0KKy8qKg0KKyAqIHtAbGluayBUYXNrU2NoZWR1bGVyfSB0aGF0IGltcGxlbWVudHMgYSBy ZXNvdXJjZS1hd2FyZSwgc2xvdGxlc3MsDQorICogYWRhcHRpdmUgc2NoZWR1bGVyLg0KKyAqLw0K K3B1YmxpYyBjbGFzcyBBZGFwdGl2ZVNjaGVkdWxlciBleHRlbmRzIFRhc2tTY2hlZHVsZXIgew0K Kw0KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBMb2cgTE9HDQorICAgID0gTG9nRmFjdG9yeS5nZXRM b2coIm9yZy5hcGFjaGUuaGFkb29wLm1hcHJlZC5BZGFwdGl2ZVNjaGVkdWxlciIpOw0KKw0KKyAg cHJvdGVjdGVkIHZvbGF0aWxlIGJvb2xlYW4gcnVubmluZyA9IGZhbHNlOw0KKw0KKyAgcHJpdmF0 ZSBKb2JMaXN0ZW5lciBqb2JMaXN0ZW5lciA9IG5ldyBKb2JMaXN0ZW5lcigpOw0KKyAgcHJpdmF0 ZSBFYWdlclRhc2tJbml0aWFsaXphdGlvbkxpc3RlbmVyIGVhZ2VySW5pdExpc3RlbmVyOw0KKyAg cHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7DQorDQorICBwdWJsaWMgTWFwPEpv YkluUHJvZ3Jlc3MsIEpvYkluZm8+IGpvYnMNCisgICAgPSBuZXcgSGFzaE1hcDxKb2JJblByb2dy ZXNzLCBKb2JJbmZvPigpOw0KKw0KKyAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBKb2JJbmZvPiBqb2Jz QnlJRA0KKyAgICA9IG5ldyBIYXNoTWFwPFN0cmluZywgSm9iSW5mbz4oKTsNCisNCisgIHByaXZh dGUgQ2x1c3Rlck91dGxpbmUgY2x1c3RlciA9IG5ldyBDbHVzdGVyT3V0bGluZSgpOw0KKw0KKyAg cHJpdmF0ZSBmbG9hdCBVVElMSVpBVElPTiA9IDEwMC4wZjsNCisgIHByb3RlY3RlZCB2b2xhdGls ZSBzdGF0aWMgbG9uZyBJTlRFUlZBTCA9IDEwMDAwOw0KKw0KKyAgcHVibGljIHZvaWQgc3RhcnQo KSB7DQorICAgIHRyeSB7DQorICAgICAgc3VwZXIuc3RhcnQoKTsNCisgICAgICBDb25maWd1cmF0 aW9uIGNvbmYgPSBnZXRDb25mKCk7DQorICAgICAgVVRJTElaQVRJT04gPSAoZmxvYXQpIGNvbmYu Z2V0SW50KCJtYXByZWQuc2NoZWR1bGVyLnNsb3RsZXNzLnV0aWxpemF0aW9uIiwgMTAwKTsNCisg ICAgICBJTlRFUlZBTCA9IGNvbmYuZ2V0SW50KCJtYXByZWQuc2NoZWR1bGVyLnNsb3RsZXNzLmlu dGVydmFsIiwgMTAwMDApOw0KKyAgICAgIGVhZ2VySW5pdExpc3RlbmVyID0gbmV3IEVhZ2VyVGFz a0luaXRpYWxpemF0aW9uTGlzdGVuZXIoY29uZik7DQorICAgICAgZWFnZXJJbml0TGlzdGVuZXIu c2V0VGFza1RyYWNrZXJNYW5hZ2VyKHRhc2tUcmFja2VyTWFuYWdlcik7DQorICAgICAgZWFnZXJJ bml0TGlzdGVuZXIuc3RhcnQoKTsNCisgICAgICB0YXNrVHJhY2tlck1hbmFnZXIuYWRkSm9iSW5Q cm9ncmVzc0xpc3RlbmVyKGpvYkxpc3RlbmVyKTsNCisgICAgICB0YXNrVHJhY2tlck1hbmFnZXIu YWRkSm9iSW5Qcm9ncmVzc0xpc3RlbmVyKGVhZ2VySW5pdExpc3RlbmVyKTsNCisgICAgICBpbml0 aWFsaXplZCA9IHRydWU7DQorICAgICAgcnVubmluZyA9IHRydWU7DQorICAgICAgbmV3IEFkYXB0 aXZlVGhyZWFkKCkuc3RhcnQoKTsNCisgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAg ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIHN0YXJ0IEFkYXB0aXZlU2No ZWR1bGVyOiIsIGUpOw0KKyAgICB9DQorICAgIExPRy5pbmZvKCJTdWNjZXNzZnVsbHkgY29uZmln dXJlZCBBZGFwdGl2ZVNjaGVkdWxlciIpOw0KKyAgfQ0KKw0KKyAgcHVibGljIHZvaWQgdGVybWlu YXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisgICAgcnVubmluZyA9IGZhbHNlOw0KKyAgICBp ZiAoam9iTGlzdGVuZXIgIT0gbnVsbCkNCisgICAgICB0YXNrVHJhY2tlck1hbmFnZXIucmVtb3Zl Sm9iSW5Qcm9ncmVzc0xpc3RlbmVyKGpvYkxpc3RlbmVyKTsNCisgICAgaWYgKGVhZ2VySW5pdExp c3RlbmVyICE9IG51bGwpDQorICAgICAgdGFza1RyYWNrZXJNYW5hZ2VyLnJlbW92ZUpvYkluUHJv Z3Jlc3NMaXN0ZW5lcihlYWdlckluaXRMaXN0ZW5lcik7DQorICB9DQorDQorICBwdWJsaWMgc3lu Y2hyb25pemVkIExpc3Q8VGFzaz4gYXNzaWduVGFza3MoVGFza1RyYWNrZXIgdHJhY2tlcikNCisg ICAgICB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICBpZiAoIWluaXRpYWxpemVkKQ0KKyAgICAg IHJldHVybiBudWxsOw0KKw0KKyAgICBUcmFja2VySW5mbyB0aW5mbyA9IGNsdXN0ZXIudXBkYXRl VHJhY2tlcih0cmFja2VyKTsNCisgICAgQXNzaWdubWVudCBkZXNpcmVkID0gdGluZm8uZ2V0QXNz aWdubWVudCgpOw0KKw0KKyAgICAvLyBCdWlsZCBjdXJyZW50bHkgcnVubmluZyBhc3NpZ25tZW50 DQorICAgIEFzc2lnbm1lbnQgY3VycmVudCA9IG5ldyBBc3NpZ25tZW50KCk7DQorICAgIGZvciAo VGFza1N0YXR1cyB0YXNrOiB0cmFja2VyLmdldFN0YXR1cygpLmdldFRhc2tSZXBvcnRzKCkpIHsN CisgICAgICBTdHJpbmcgamlkID0gdGFzay5nZXRUYXNrSUQoKS5nZXRKb2JJRCgpLnRvU3RyaW5n KCk7DQorICAgICAgVGFza1R5cGUgdHlwZSA9IHRhc2suZ2V0SXNNYXAoKSA/IFRhc2tUeXBlLk1B UCA6IFRhc2tUeXBlLlJFRFVDRTsNCisgICAgICBTdGF0ZSBzdGF0ZSA9IHRhc2suZ2V0UnVuU3Rh dGUoKTsNCisgICAgICBpZiAoc3RhdGUgPT0gU3RhdGUuUlVOTklORyB8fCBzdGF0ZSA9PSBTdGF0 ZS5DT01NSVRfUEVORElORykNCisgICAgICAgIGN1cnJlbnQucHV0KGppZCwgdHlwZSwgY3VycmVu dC5nZXQoamlkLCB0eXBlKSArIDEpOw0KKyAgICB9DQorDQorICAgIGZsb2F0IGNwdSA9IDAuMGY7 DQorICAgIGZsb2F0IGlvID0gMC4wZjsNCisNCisgICAgZm9yIChFbnRyeTxTdHJpbmcsIEludGVn ZXI+IGVudHJ5OiBjdXJyZW50LmdldE1hcHMoKSkgew0KKyAgICAgIFN0cmluZyBqaWQgPSBlbnRy eS5nZXRLZXkoKTsNCisgICAgICBJbnRlZ2VyIG51bSA9ICBlbnRyeS5nZXRWYWx1ZSgpOw0KKyAg ICAgIEpvYkluZm8gamluZm8gPSBqb2JzQnlJRC5nZXQoamlkKTsNCisgICAgICBpZiAoamluZm8g PT0gbnVsbCkNCisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIEpvYlByb2ZpbGUgcHJvZmlsZSA9 IGppbmZvLmdldFByb2ZpbGUoKTsNCisgICAgICBjcHUgKz0gcHJvZmlsZS5nZXRDcHVVc2FnZSgp ICogbnVtOw0KKyAgICAgIGlvICs9IHByb2ZpbGUuZ2V0SW9Vc2FnZSgpICogbnVtOw0KKyAgICB9 DQorDQorICAgIGZvciAoRW50cnk8U3RyaW5nLCBJbnRlZ2VyPiBlbnRyeTogY3VycmVudC5nZXRS ZWR1Y2VzKCkpIHsNCisgICAgICBTdHJpbmcgamlkID0gZW50cnkuZ2V0S2V5KCk7DQorICAgICAg SW50ZWdlciBudW0gPSAgZW50cnkuZ2V0VmFsdWUoKTsNCisgICAgICBKb2JJbmZvIGppbmZvID0g am9ic0J5SUQuZ2V0KGppZCk7DQorICAgICAgaWYgKGppbmZvID09IG51bGwpDQorICAgICAgICBj b250aW51ZTsNCisgICAgICBKb2JQcm9maWxlIHByb2ZpbGUgPSBqaW5mby5nZXRSZWR1Y2VQcm9m aWxlKCk7DQorICAgICAgY3B1ICs9IHByb2ZpbGUuZ2V0Q3B1VXNhZ2UoKSAqIG51bTsNCisgICAg ICBpbyArPSBwcm9maWxlLmdldElvVXNhZ2UoKSAqIG51bTsNCisgICAgfQ0KKw0KKyAgICBBc3Np Z25tZW50IGluY2x1ZGUgPSBjdXJyZW50LnRvSW5jbHVkZShkZXNpcmVkKTsNCisgICAgQXJyYXlM aXN0PFRhc2s+IHRhc2tzID0gbmV3IEFycmF5TGlzdDxUYXNrPigpOw0KKw0KKyAgICBmb3IgKFN0 cmluZyBqaWQ6IGluY2x1ZGUuZ2V0Sm9icyhUYXNrVHlwZS5NQVApKSB7DQorICAgICAgSm9iSW5m byBqaW5mbyA9IGpvYnNCeUlELmdldChqaWQpOw0KKyAgICAgIGlmIChqaW5mbyA9PSBudWxsKQ0K KyAgICAgICAgY29udGludWU7DQorICAgICAgSm9iUHJvZmlsZSBwcm9maWxlID0gamluZm8uZ2V0 UHJvZmlsZSgpOw0KKyAgICAgIGlmICgoY3B1ICsgcHJvZmlsZS5nZXRDcHVVc2FnZSgpID4gVVRJ TElaQVRJT04pIHx8IChpbyArIHByb2ZpbGUuZ2V0SW9Vc2FnZSgpID4gVVRJTElaQVRJT04pKQ0K KyAgICAgICAgY29udGludWU7DQorICAgICAgVGFzayB0YXNrID0gZ2V0VGFzayh0cmFja2VyLCBq aWQsIFRhc2tUeXBlLk1BUCk7DQorICAgICAgaWYgKHRhc2sgPT0gbnVsbCkNCisgICAgICAgIGNv bnRpbnVlOw0KKyAgICAgIHRhc2tzLmFkZCh0YXNrKTsNCisgICAgfQ0KKw0KKyAgICBmb3IgKFN0 cmluZyBqaWQ6IGluY2x1ZGUuZ2V0Sm9icyhUYXNrVHlwZS5SRURVQ0UpKSB7DQorICAgICAgSm9i SW5mbyBqaW5mbyA9IGpvYnNCeUlELmdldChqaWQpOw0KKyAgICAgIGlmIChqaW5mbyA9PSBudWxs KQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgSm9iUHJvZmlsZSBwcm9maWxlID0gamluZm8u Z2V0UmVkdWNlUHJvZmlsZSgpOw0KKyAgICAgIGlmICgoY3B1ICsgcHJvZmlsZS5nZXRDcHVVc2Fn ZSgpID4gVVRJTElaQVRJT04pIHx8IChpbyArIHByb2ZpbGUuZ2V0SW9Vc2FnZSgpID4gVVRJTEla QVRJT04pKQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgVGFzayB0YXNrID0gZ2V0VGFzayh0 cmFja2VyLCBqaWQsIFRhc2tUeXBlLlJFRFVDRSk7DQorICAgICAgaWYgKHRhc2sgPT0gbnVsbCkN CisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIHRhc2tzLmFkZCh0YXNrKTsNCisgICAgfQ0KKw0K KyAgICByZXR1cm4gdGFza3MuaXNFbXB0eSgpID8gbnVsbCA6IHRhc2tzOw0KKyAgfQ0KKw0KKyAg cHVibGljIHN5bmNocm9uaXplZCBDb2xsZWN0aW9uPEpvYkluUHJvZ3Jlc3M+IGdldEpvYnMoU3Ry aW5nIHF1ZXVlTmFtZSkgew0KKyAgICByZXR1cm4gdGhpcy5qb2JzLmtleVNldCgpOw0KKyAgfQ0K Kw0KKyAgLyoqDQorICAgKiBPYnRhaW4gYSAocHJlZmVyYWJseSBsb2NhbCkgdGFzayBvZiB0aGUg Z2l2ZW4gam9iICjCq2ppZMK7KSBhbmQgdHlwZSwNCisgICAqIG9uIHRoZSBnaXZlbiB0YXNrdHJh Y2tlci4NCisgICAqLw0KKyAgcHJpdmF0ZSBUYXNrIGdldFRhc2soVGFza1RyYWNrZXIgdGFza1Ry YWNrZXIsIFN0cmluZyBqaWQsIFRhc2tUeXBlIHR5cGUpDQorICAgIHRocm93cyBJT0V4Y2VwdGlv biB7DQorDQorICAgIENsdXN0ZXJTdGF0dXMgY2x1c3RlclN0YXR1cyA9IHRhc2tUcmFja2VyTWFu YWdlci5nZXRDbHVzdGVyU3RhdHVzKCk7DQorICAgIGZpbmFsIGludCBudW1UYXNrVHJhY2tlcnMg PSBjbHVzdGVyU3RhdHVzLmdldFRhc2tUcmFja2VycygpOw0KKyAgICBmaW5hbCBpbnQgbnVtSG9z dHMgPSB0YXNrVHJhY2tlck1hbmFnZXIuZ2V0TnVtYmVyT2ZVbmlxdWVIb3N0cygpOw0KKw0KKyAg ICBKb2JJbmZvIGppbmZvID0gam9ic0J5SUQuZ2V0KGppZCk7DQorICAgIGlmIChqaW5mbyA9PSBu dWxsKQ0KKyAgICAgIHJldHVybiBudWxsOw0KKyAgICBKb2JJblByb2dyZXNzIGpvYiA9IGppbmZv LmdldEpvYkluUHJvZ3Jlc3MoKTsNCisgICAgaWYgKGpvYiA9PSBudWxsKQ0KKyAgICAgIHJldHVy biBudWxsOw0KKw0KKyAgICBUYXNrIHRhc2sgPSBudWxsOw0KKw0KKyAgICBpbnQgcGVuZGluZ1Rh c2tzID0gMDsNCisgICAgaWYgKHR5cGUgPT0gVGFza1R5cGUuTUFQKQ0KKyAgICAgIHBlbmRpbmdU YXNrcyA9IGpvYi5wZW5kaW5nTWFwcygpOw0KKyAgICBlbHNlDQorICAgICAgcGVuZGluZ1Rhc2tz ID0gam9iLnBlbmRpbmdSZWR1Y2VzKCk7DQorDQorICAgIGlmIChwZW5kaW5nVGFza3MgPiAwKSB7 DQorICAgICAgaWYgKHR5cGUgPT0gVGFza1R5cGUuTUFQKSB7DQorICAgICAgICB0YXNrID0gam9i Lm9idGFpbk5ld01hcFRhc2sodGFza1RyYWNrZXIuZ2V0U3RhdHVzKCksDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnVtVGFza1RyYWNrZXJzLCBudW1Ib3N0cyk7DQorICAg ICAgfSBlbHNlIHsNCisgICAgICAgIHRhc2sgPSBqb2Iub2J0YWluTmV3UmVkdWNlVGFzayh0YXNr VHJhY2tlci5nZXRTdGF0dXMoKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBudW1UYXNrVHJhY2tlcnMsIG51bUhvc3RzKTsNCisgICAgICB9DQorICAgIH0NCisNCisg ICAgcmV0dXJuIHRhc2s7DQorICB9DQorDQorDQorICBwcm90ZWN0ZWQgdm9pZCBjb21wdXRlUGxh Y2VtZW50KCkgew0KKyAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsNCisgICAgICBMaXN0PEpvYklu UHJvZ3Jlc3M+IHRvUmVtb3ZlID0gbmV3IEFycmF5TGlzdDxKb2JJblByb2dyZXNzPigpOw0KKw0K KyAgICAgIGZvciAoSm9iSW5Qcm9ncmVzcyBqb2I6IGpvYnMua2V5U2V0KCkpIHsNCisgICAgICAg IGludCBydW5TdGF0ZSA9IGpvYi5nZXRTdGF0dXMoKS5nZXRSdW5TdGF0ZSgpOw0KKyAgICAgICAg aWYgKHJ1blN0YXRlID09IEpvYlN0YXR1cy5TVUNDRUVERUQgfHwgcnVuU3RhdGUgPT0gSm9iU3Rh dHVzLkZBSUxFRCB8fA0KKyAgICAgICAgICAgIHJ1blN0YXRlID09IEpvYlN0YXR1cy5LSUxMRUQp IHsNCisgICAgICAgICAgICB0b1JlbW92ZS5hZGQoam9iKTsNCisgICAgICAgIH0NCisgICAgICB9 DQorDQorICAgICAgZm9yIChKb2JJblByb2dyZXNzIGpvYjogdG9SZW1vdmUpIHsNCisgICAgICAg IGpvYnMucmVtb3ZlKGpvYik7DQorICAgICAgICBqb2JzQnlJRC5yZW1vdmUoam9iLmdldEpvYklE KCkudG9TdHJpbmcoKSk7DQorICAgICAgfQ0KKw0KKyAgICAgIGNsZWFudXAoY2x1c3Rlcik7DQor DQorICAgICAgZmxvYXQgYmFzZVV0aWxpdHkgPSBwbGFjZShjbHVzdGVyLCBqb2JzKTsNCisgICAg ICBmbG9hdCB1dGlsaXR5ID0gYmFzZVV0aWxpdHk7DQorICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCAzOyBpKyspIHsNCisgICAgICAgIHV0aWxpdHkgPSBwbGFjZShjbHVzdGVyLCBqb2JzKTsNCisg ICAgICB9DQorICAgIH0NCisgIH0NCisNCisgIHB1YmxpYyB2b2lkIGNsZWFudXAoQ2x1c3Rlck91 dGxpbmUgY28pIHsNCisgICAgZm9yIChUcmFja2VySW5mbyB0aW5mbzogY28uZ2V0T3V0bGluZSgp LnZhbHVlcygpKSB7DQorICAgICAgQXNzaWdubWVudCBhc3NpZ25tZW50ID0gdGluZm8uZ2V0QXNz aWdubWVudCgpOw0KKyAgICAgIGZvciAoU3RyaW5nIGppZDogYXNzaWdubWVudC5nZXRKb2JzKFRh c2tUeXBlLk1BUCkpIHsNCisgICAgICAgIGlmICgham9ic0J5SUQuY29udGFpbnNLZXkoamlkKSkg ew0KKyAgICAgICAgICBhc3NpZ25tZW50LmNsZWFuKGppZCk7DQorICAgICAgICB9IGVsc2Ugew0K KyAgICAgICAgICAvLyBSZW1vdmUgdW5uZWNlc3NhcnkgYXNzaWdubWVudHMNCisgICAgICAgICAg Sm9iSW5Qcm9ncmVzcyBqb2IgPSBqb2JzQnlJRC5nZXQoamlkKS5nZXRKb2JJblByb2dyZXNzKCk7 DQorICAgICAgICAgIGlmIChqb2IucGVuZGluZ01hcHMoKSA9PSAwKQ0KKyAgICAgICAgICAgIGFz c2lnbm1lbnQuY2xlYW5NYXBzKGppZCk7DQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQor ICB9DQorDQorICBwdWJsaWMgZmxvYXQgcGxhY2UoQ2x1c3Rlck91dGxpbmUgY28sIE1hcDxKb2JJ blByb2dyZXNzLCBKb2JJbmZvPiBqb2JzKSB7DQorICAgIGZsb2F0IGJlc3RVdGlsaXR5ID0gZ2V0 VXRpbGl0eShjbyk7DQorICAgIGZvciAoVHJhY2tlckluZm8gdGluZm86IGNvLmdldE91dGxpbmUo KS52YWx1ZXMoKSkgew0KKyAgICAgIEFzc2lnbm1lbnQgY3VyckFzc2lnbm1lbnQgPSB0aW5mby5n ZXRBc3NpZ25tZW50KCk7DQorICAgICAgQXNzaWdubWVudCBiZXN0QXNzaWdubWVudCA9IHRpbmZv LmdldEFzc2lnbm1lbnQoKTsNCisgICAgICBiZXN0VXRpbGl0eSA9IGdldFV0aWxpdHkoY28pOw0K KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGN1cnJBc3NpZ25tZW50LmdldE51bVRhc2tzKFRh c2tUeXBlLk1BUCk7IGkrKykgew0KKyAgICAgICAgQXNzaWdubWVudCBhc3NpZ25tZW50ID0gY3Vy ckFzc2lnbm1lbnQuY2xvbmUoKTsNCisgICAgICAgIEFzc2lnbm1lbnQgcmVtb3ZhbHMgPSBhc3Np Z25tZW50LnJlbW92ZShpKTsNCisgICAgICAgIEFzc2lnbm1lbnQgYWRkaXRpb25zID0gbmV3IEFz c2lnbm1lbnQoKTsNCisNCisgICAgICAgIGZsb2F0IHV0aWxpdHkgPSBnZXRVdGlsaXR5KGNvLCBy ZW1vdmFscywgYWRkaXRpb25zKTsNCisNCisgICAgICAgIGlmICh1dGlsaXR5ID4gYmVzdFV0aWxp dHkpIHsNCisgICAgICAgICAgYmVzdEFzc2lnbm1lbnQgPSBhc3NpZ25tZW50Ow0KKyAgICAgICAg ICBiZXN0VXRpbGl0eSA9IHV0aWxpdHk7DQorICAgICAgICB9DQorDQorICAgICAgICBmaWxsOiB7 DQorICAgICAgICAgIFByaW9yaXR5UXVldWU8Sm9iSW5mbz4gcXVldWUgPSBuZXcgUHJpb3JpdHlR dWV1ZTxKb2JJbmZvPigxMSwgbmV3IE5lZWRDb21wYXJhdG9yKCkpOw0KKyAgICAgICAgICBmb3Ig KEpvYkluZm8gamluZm86IGpvYnMudmFsdWVzKCkpDQorICAgICAgICAgICAgcXVldWUuYWRkKGpp bmZvKTsNCisgICAgICAgICAgZm9yIChKb2JJbmZvIGppbmZvOiBxdWV1ZSkgew0KKyAgICAgICAg ICAgIGlmIChqaW5mbyAhPSBudWxsKSB7DQorICAgICAgICAgICAgICBKb2JJblByb2dyZXNzIGpv YiA9IGppbmZvLmdldEpvYkluUHJvZ3Jlc3MoKTsNCisgICAgICAgICAgICAgIGlmIChqb2IucGVu ZGluZ01hcHMoKSA+IDAgJiYgZml0cyh0aW5mbywgYXNzaWdubWVudCwgam9iLCBUYXNrVHlwZS5N QVApKSB7DQorICAgICAgICAgICAgICAgIFN0cmluZyBqaWQgPSBqb2IuZ2V0Sm9iSUQoKS50b1N0 cmluZygpOw0KKyAgICAgICAgICAgICAgICBhc3NpZ25tZW50LnB1dChqaWQsIFRhc2tUeXBlLk1B UCk7DQorICAgICAgICAgICAgICAgIGFkZGl0aW9ucy5wdXQoamlkLCBUYXNrVHlwZS5NQVApOw0K KyAgICAgICAgICAgICAgICBicmVhayBmaWxsOw0KKyAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgIH0NCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgZm9yIChKb2JJbmZv IGppbmZvOiBqb2JzLnZhbHVlcygpKSB7DQorICAgICAgICAgIGlmIChqaW5mbyAhPSBudWxsKSB7 DQorICAgICAgICAgICAgSm9iSW5Qcm9ncmVzcyBqb2IgPSBqaW5mby5nZXRKb2JJblByb2dyZXNz KCk7DQorICAgICAgICAgICAgU3RyaW5nIGppZCA9IGpvYi5nZXRKb2JJRCgpLnRvU3RyaW5nKCk7 DQorDQorICAgICAgICAgICAgY28udXBkYXRlQ291bnQoKTsNCisgICAgICAgICAgICBNYXA8U3Ry aW5nLCBJbnRlZ2VyPiByZWR1Y2VDb3VudCA9IGNvLmdldFJlZHVjZUNvdW50KCk7DQorICAgICAg ICAgICAgaW50IGNvdW50ID0gMDsNCisgICAgICAgICAgICBpZiAocmVkdWNlQ291bnQuY29udGFp bnNLZXkoamlkKSkNCisgICAgICAgICAgICAgIGNvdW50ID0gcmVkdWNlQ291bnQuZ2V0KGppZCk7 DQorDQorICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHRha2UgaW50byBhY2NvdW50IG51bWJl ciBvZiBydW5uaW5nIHJlZHVjZXMuDQorICAgICAgICAgICAgaWYgKGpvYi5maW5pc2hlZE1hcHMo KSA+IDAgJiYgam9iLnBlbmRpbmdSZWR1Y2VzKCkgPiAwICYmDQorICAgICAgICAgICAgICAgIGNv dW50IDwgam9iLnBlbmRpbmdSZWR1Y2VzKCkgJiYNCisgICAgICAgICAgICAgICAgZml0cyh0aW5m bywgYXNzaWdubWVudCwgam9iLCBUYXNrVHlwZS5SRURVQ0UpKSB7DQorICAgICAgICAgICAgICBh c3NpZ25tZW50LnB1dChqaWQsIFRhc2tUeXBlLlJFRFVDRSk7DQorICAgICAgICAgICAgICBhZGRp dGlvbnMucHV0KGppZCwgVGFza1R5cGUuUkVEVUNFKTsNCisgICAgICAgICAgICB9DQorICAgICAg ICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIHV0aWxpdHkgPSBnZXRVdGlsaXR5KGNvLCBy ZW1vdmFscywgYWRkaXRpb25zKTsNCisNCisgICAgICAgIGlmICh1dGlsaXR5ID4gYmVzdFV0aWxp dHkpIHsNCisgICAgICAgICAgYmVzdEFzc2lnbm1lbnQgPSBhc3NpZ25tZW50Ow0KKyAgICAgICAg ICBiZXN0VXRpbGl0eSA9IHV0aWxpdHk7DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAgICAg IHRpbmZvLnNldEFzc2lnbm1lbnQoYmVzdEFzc2lnbm1lbnQpOw0KKyAgICB9DQorDQorICAgIHJl dHVybiBiZXN0VXRpbGl0eTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogR2V0IHRoZSBnbG9iYWwg dXRpbGl0eSBvZiBhIGdpdmVuIGpvYiBtYXRjaGluZy9wbGFjZW1lbnQuDQorICAgKi8NCisgIHB1 YmxpYyBmbG9hdCBnZXRVdGlsaXR5KENsdXN0ZXJPdXRsaW5lIGNvKSB7DQorICAgIGNvLnVwZGF0 ZUNvdW50KCk7DQorICAgIE1hcDxTdHJpbmcsIEludGVnZXI+IGNvdW50ID0gY28uZ2V0Q291bnQo KTsNCisgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gcmVkdWNlQ291bnQgPSBjby5nZXRSZWR1Y2VD b3VudCgpOw0KKyAgICBpZiAoY291bnQuc2l6ZSgpID09IDAgJiYgcmVkdWNlQ291bnQuc2l6ZSgp ID09IDApDQorICAgICAgcmV0dXJuIC0xMDAuMGY7DQorICAgIGZsb2F0IHV0aWxpdHkgPSAwLjBm Ow0KKyAgICBmb3IgKEVudHJ5PEpvYkluUHJvZ3Jlc3MsIEpvYkluZm8+IGVudHJ5OiBqb2JzLmVu dHJ5U2V0KCkpIHsNCisgICAgICBKb2JJblByb2dyZXNzIGpvYiA9IGVudHJ5LmdldEtleSgpOw0K KyAgICAgIEpvYkluZm8gamluZm8gPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKyAgICAgIFN0cmluZyBq aWQgPSBqb2IuZ2V0Sm9iSUQoKS50b1N0cmluZygpOw0KKw0KKyAgICAgIGludCBudW0gPSAwOw0K KyAgICAgIGlmIChjb3VudC5jb250YWluc0tleShqaWQpKQ0KKyAgICAgICAgbnVtID0gY291bnQu Z2V0KGppZCk7DQorDQorICAgICAgaW50IG51bVJlZHVjZSA9IDA7DQorICAgICAgaWYgKHJlZHVj ZUNvdW50LmNvbnRhaW5zS2V5KGppZCkpDQorICAgICAgICBudW1SZWR1Y2UgPSByZWR1Y2VDb3Vu dC5nZXQoamlkKTsNCisNCisgICAgICB1dGlsaXR5ICs9IGppbmZvLmdldFV0aWxpdHkobnVtLCBu dW1SZWR1Y2UpOw0KKyAgICB9DQorICAgIHJldHVybiB1dGlsaXR5Ow0KKyAgfQ0KKw0KKyAgLyoq DQorICAgKiBHZXQgdGhlIGdsb2JhbCB1dGlsaXR5IG9mIGEgZ2l2ZW4gam9iIG1hdGNoaW5nL3Bs YWNlbWVudCwgd2l0aA0KKyAgICogdGhlIGdpdmVuIHRhc2sgcmVtb3ZhbHMgYW5kIGFkZGl0aW9u cy4NCisgICAqLw0KKyAgcHVibGljIGZsb2F0IGdldFV0aWxpdHkoQ2x1c3Rlck91dGxpbmUgY28s IEFzc2lnbm1lbnQgcmVtb3ZhbHMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25t ZW50IGFkZGl0aW9ucykgew0KKyAgICBjby51cGRhdGVDb3VudCgpOw0KKyAgICBmbG9hdCB1dGls aXR5ID0gMC4wZjsNCisgICAgTWFwPFN0cmluZywgSW50ZWdlcj4gY291bnQgPSBjby5nZXRDb3Vu dCgpOw0KKyAgICBNYXA8U3RyaW5nLCBJbnRlZ2VyPiByZWR1Y2VDb3VudCA9IGNvLmdldFJlZHVj ZUNvdW50KCk7DQorICAgIGZvciAoRW50cnk8Sm9iSW5Qcm9ncmVzcywgSm9iSW5mbz4gZW50cnk6 IGpvYnMuZW50cnlTZXQoKSkgew0KKyAgICAgIEpvYkluUHJvZ3Jlc3Mgam9iID0gZW50cnkuZ2V0 S2V5KCk7DQorICAgICAgSm9iSW5mbyBqaW5mbyA9IGVudHJ5LmdldFZhbHVlKCk7DQorICAgICAg U3RyaW5nIGppZCA9IGpvYi5nZXRKb2JJRCgpLnRvU3RyaW5nKCk7DQorDQorICAgICAgaW50IG51 bVJlbW92ZWQgPSByZW1vdmFscy5nZXQoamlkLCBUYXNrVHlwZS5NQVApOw0KKyAgICAgIGludCBu dW1BZGRlZCA9IGFkZGl0aW9ucy5nZXQoamlkLCBUYXNrVHlwZS5NQVApOw0KKw0KKyAgICAgIGlu dCBudW1SZWR1Y2VBZGRlZCA9IGFkZGl0aW9ucy5nZXQoamlkLCBUYXNrVHlwZS5SRURVQ0UpOw0K Kw0KKyAgICAgIGludCBudW0gPSAwOw0KKyAgICAgIGlmIChjb3VudC5jb250YWluc0tleShqaWQp KQ0KKyAgICAgICAgbnVtID0gY291bnQuZ2V0KGppZCk7DQorDQorICAgICAgaW50IG51bVJlZHVj ZSA9IDA7DQorICAgICAgaWYgKHJlZHVjZUNvdW50LmNvbnRhaW5zS2V5KGppZCkpDQorICAgICAg ICBudW1SZWR1Y2UgPSByZWR1Y2VDb3VudC5nZXQoamlkKTsNCisNCisgICAgICB1dGlsaXR5ICs9 IGppbmZvLmdldFV0aWxpdHkobnVtIC0gbnVtUmVtb3ZlZCArIG51bUFkZGVkLCBudW1SZWR1Y2Ug KyBudW1SZWR1Y2VBZGRlZCk7DQorICAgIH0NCisNCisgICAgcmV0dXJuIHV0aWxpdHk7DQorICB9 DQorDQorICAvKioNCisgICAqIENoZWNrIHdoZXRoZXIgYSB0YXNrIG9mIHRoZSBnaXZlbiBqb2Ig YW5kIHR5cGUgY2FuIGJlIGFzc2lnbmVkIHRvIGENCisgICAqIHRhc2t0cmFja2VyLCBtZWV0aW5n IHRoZSByZXNvdXJjZSByZXF1aXJlbWVudHMuDQorICAgKi8NCisgIHB1YmxpYyBib29sZWFuIGZp dHMoVHJhY2tlckluZm8gdGluZm8sIEFzc2lnbm1lbnQgYXNzaWdubWVudCwNCisgICAgICAgICAg ICAgICAgICAgICAgSm9iSW5Qcm9ncmVzcyBqb2IsIFRhc2tUeXBlIHR5cGUpIHsNCisgICAgZmxv YXQgY3B1ID0gMC4wZjsNCisgICAgZmxvYXQgaW8gPSAwLjBmOw0KKw0KKyAgICBmb3IgKEVudHJ5 PFN0cmluZywgSW50ZWdlcj4gZW50cnk6IGFzc2lnbm1lbnQuZ2V0TWFwcygpKSB7DQorICAgICAg U3RyaW5nIGppZCA9IGVudHJ5LmdldEtleSgpOw0KKyAgICAgIEludGVnZXIgbnVtID0gIGVudHJ5 LmdldFZhbHVlKCk7DQorICAgICAgSm9iSW5mbyBqaW5mbyA9IGpvYnNCeUlELmdldChqaWQpOw0K KyAgICAgIGlmIChqaW5mbyA9PSBudWxsKQ0KKyAgICAgICAgY29udGludWU7DQorICAgICAgSm9i UHJvZmlsZSBwcm9maWxlID0gamluZm8uZ2V0UHJvZmlsZSgpOw0KKyAgICAgIGNwdSArPSBwcm9m aWxlLmdldENwdVVzYWdlKCkgKiBudW07DQorICAgICAgaW8gKz0gcHJvZmlsZS5nZXRJb1VzYWdl KCkgKiBudW07DQorICAgIH0NCisNCisgICAgZm9yIChFbnRyeTxTdHJpbmcsIEludGVnZXI+IGVu dHJ5OiBhc3NpZ25tZW50LmdldFJlZHVjZXMoKSkgew0KKyAgICAgIFN0cmluZyBqaWQgPSBlbnRy eS5nZXRLZXkoKTsNCisgICAgICBJbnRlZ2VyIG51bSA9ICBlbnRyeS5nZXRWYWx1ZSgpOw0KKyAg ICAgIEpvYkluZm8gamluZm8gPSBqb2JzQnlJRC5nZXQoamlkKTsNCisgICAgICBpZiAoamluZm8g PT0gbnVsbCkNCisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIEpvYlByb2ZpbGUgcHJvZmlsZSA9 IGppbmZvLmdldFJlZHVjZVByb2ZpbGUoKTsNCisgICAgICBjcHUgKz0gcHJvZmlsZS5nZXRDcHVV c2FnZSgpICogbnVtOw0KKyAgICAgIGlvICs9IHByb2ZpbGUuZ2V0SW9Vc2FnZSgpICogbnVtOw0K KyAgICB9DQorDQorICAgIEpvYlByb2ZpbGUgcHJvZmlsZTsNCisgICAgaWYgKHR5cGUgPT0gVGFz a1R5cGUuTUFQKQ0KKyAgICAgIHByb2ZpbGUgPSBqb2JzLmdldChqb2IpLmdldFByb2ZpbGUoKTsN CisgICAgZWxzZQ0KKyAgICAgIHByb2ZpbGUgPSBqb2JzLmdldChqb2IpLmdldFJlZHVjZVByb2Zp bGUoKTsNCisNCisgICAgY3B1ICs9IHByb2ZpbGUuZ2V0Q3B1VXNhZ2UoKTsNCisgICAgaW8gKz0g cHJvZmlsZS5nZXRJb1VzYWdlKCk7DQorDQorICAgIGlmIChjcHUgPiBVVElMSVpBVElPTiB8fCBp byA+IFVUSUxJWkFUSU9OKQ0KKyAgICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgLy8gVE9ETzog VW5uZWNlc3NhcnkgcmVzdHJpY3Rpb24uDQorICAgIFN0cmluZyBqaWQgPSBqb2IuZ2V0Sm9iSUQo KS50b1N0cmluZygpOw0KKyAgICBpZiAodHlwZSA9PSBUYXNrVHlwZS5SRURVQ0UgJiYgYXNzaWdu bWVudC5nZXQoamlkLCBUYXNrVHlwZS5SRURVQ0UpID4gMCkNCisgICAgICAgIHJldHVybiBmYWxz ZTsNCisNCisgICAgYXNzaWdubWVudC5zZXRDcHUoY3B1KTsNCisgICAgYXNzaWdubWVudC5zZXRJ byhpbyk7DQorICAgIHJldHVybiB0cnVlOw0KKyAgfQ0KKw0KKyAgcHJpdmF0ZSBjbGFzcyBBZGFw dGl2ZVRocmVhZCBleHRlbmRzIFRocmVhZCB7DQorICAgIHByaXZhdGUgQWRhcHRpdmVUaHJlYWQo KSB7DQorICAgICAgc3VwZXIoIkFkYXB0aXZlU2NoZWR1bGVyIHVwZGF0ZSB0aHJlYWQiKTsNCisg ICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7DQorICAgICAgd2hpbGUgKHJ1bm5pbmcp IHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgIFRocmVhZC5zbGVlcChJTlRFUlZBTCk7DQor ICAgICAgICAgIGNvbXB1dGVQbGFjZW1lbnQoKTsNCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlv biBlKSB7DQorICAgICAgICAgIExPRy5lcnJvcigiRXhjZXB0aW9uIGluIEFkYXB0aXZlU2NoZWR1 bGVyJ3MgQWRhcHRpdmVUaHJlYWQiLCBlKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgIH0N CisgIH0NCisNCisgIHByaXZhdGUgY2xhc3MgSm9iTGlzdGVuZXIgZXh0ZW5kcyBKb2JJblByb2dy ZXNzTGlzdGVuZXIgew0KKyAgICBwdWJsaWMgdm9pZCBqb2JBZGRlZChKb2JJblByb2dyZXNzIGpv Yikgew0KKyAgICAgIHN5bmNocm9uaXplZCAoQWRhcHRpdmVTY2hlZHVsZXIudGhpcykgew0KKyAg ICAgICAgSm9iSW5mbyBqaW5mbyA9IG5ldyBKb2JJbmZvKGpvYik7DQorICAgICAgICBqb2JzLnB1 dChqb2IsIGppbmZvKTsNCisgICAgICAgIGpvYnNCeUlELnB1dChqb2IuZ2V0Sm9iSUQoKS50b1N0 cmluZygpLCBqaW5mbyk7DQorICAgICAgfQ0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIGpv YlJlbW92ZWQoSm9iSW5Qcm9ncmVzcyBqb2IpIHsNCisgICAgICBzeW5jaHJvbml6ZWQgKEFkYXB0 aXZlU2NoZWR1bGVyLnRoaXMpIHsNCisgICAgICAgIEpvYkluZm8gamluZm8gPSBqb2JzLmdldChq b2IpOw0KKyAgICAgICAgam9icy5yZW1vdmUoam9iKTsNCisgICAgICAgIGpvYnNCeUlELnJlbW92 ZShqb2IuZ2V0Sm9iSUQoKS50b1N0cmluZygpKTsNCisgICAgICB9DQorICAgIH0NCisNCisgICAg cHVibGljIHZvaWQgam9iVXBkYXRlZChKb2JDaGFuZ2VFdmVudCBldmVudCkgeyB9DQorICB9DQor DQorICBwdWJsaWMgY2xhc3MgSm9iSW5mbyB7DQorICAgIHByaXZhdGUgSm9iSW5Qcm9ncmVzcyBq b2I7DQorICAgIHByaXZhdGUgSm9iUHJvZmlsZSBwcm9maWxlOw0KKyAgICBwcml2YXRlIEpvYlBy b2ZpbGUgcmVkdWNlUHJvZmlsZTsNCisNCisgICAgcHVibGljIEpvYkluZm8oSm9iSW5Qcm9ncmVz cyBqb2IpIHsNCisgICAgICB0aGlzLmpvYiA9IGpvYjsNCisgICAgICB0aGlzLnByb2ZpbGUgPSBu ZXcgSm9iUHJvZmlsZShqb2IuZ2V0Sm9iQ29uZigpLmdldENwdVVzYWdlKCksDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iLmdldEpvYkNvbmYoKS5nZXRJb1VzYWdlKCkp Ow0KKyAgICAgIHRoaXMucmVkdWNlUHJvZmlsZSA9IG5ldyBKb2JQcm9maWxlKDEsIDEpOw0KKyAg ICB9DQorDQorICAgIHB1YmxpYyBKb2JJblByb2dyZXNzIGdldEpvYkluUHJvZ3Jlc3MoKSB7DQor ICAgICAgcmV0dXJuIGpvYjsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgSm9iUHJvZmlsZSBnZXRQ cm9maWxlKCkgew0KKyAgICAgIHJldHVybiBwcm9maWxlOw0KKyAgICB9DQorDQorICAgIHB1Ymxp YyBKb2JQcm9maWxlIGdldFJlZHVjZVByb2ZpbGUoKSB7DQorICAgICAgcmV0dXJuIHJlZHVjZVBy b2ZpbGU7DQorICAgIH0NCisNCisgICAgcHVibGljIGJvb2xlYW4gaXNDcHVCb3VuZCgpIHsNCisg ICAgICByZXR1cm4gcHJvZmlsZS5nZXRDcHVVc2FnZSgpID4gcHJvZmlsZS5nZXRJb1VzYWdlKCk7 DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFJldHVybnMgdGhlIHV0aWxpdHkgb2YgcnVu bmluZyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1hcCBhbmQgcmVkdWNlDQorICAgICAqIHRhc2tzLg0K KyAgICAgKi8NCisgICAgcHVibGljIGZsb2F0IGdldFV0aWxpdHkoaW50IHRhc2tzLCBpbnQgcmVk dWNlVGFza3MpIHsNCisgICAgICBmbG9hdCB1dGlsaXR5ID0gMC4wZjsNCisgICAgICBmbG9hdCBu ZWVkID0gdGhpcy5lc3RpbWF0ZU1hcFNsb3RzKCk7DQorICAgICAgaW50IHBlbmRpbmdNYXBzID0g dGhpcy5qb2IucGVuZGluZ01hcHMoKTsNCisgICAgICBpbnQgcGVuZGluZ1JlZHVjZXMgPSB0aGlz LmpvYi5wZW5kaW5nUmVkdWNlcygpOw0KKw0KKyAgICAgIGlmIChuZWVkIDwgcGVuZGluZ01hcHMp IHsNCisgICAgICAgIGlmICh0YXNrcyA9PSAwKQ0KKyAgICAgICAgICB1dGlsaXR5ID0gLTUuMGY7 DQorICAgICAgICBlbHNlIGlmICh0YXNrcyA8PSBuZWVkKQ0KKyAgICAgICAgICB1dGlsaXR5ID0g KGZsb2F0KSAoTWF0aC5sb2codGFza3MpIC8gTWF0aC5sb2cobmVlZCkpIC0gMTsNCisgICAgICAg IGVsc2UNCisgICAgICAgICAgdXRpbGl0eSA9IE1hdGgubWluKDEsIChmbG9hdCkgKCgoMSAvIChw ZW5kaW5nTWFwcyAtIG5lZWQpKSAqIHRhc2tzKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLSAoKDEgLyAocGVuZGluZ01hcHMgLSBuZWVkKSkgKiBuZWVkKSkpOw0KKyAgICAgIH0g ZWxzZSBpZiAocGVuZGluZ01hcHMgPiAwKSB7DQorICAgICAgICBpZiAodGFza3MgPT0gMCkNCisg ICAgICAgICAgdXRpbGl0eSA9IC01LjBmOw0KKyAgICAgICAgZWxzZSBpZiAodGFza3MgPD0gcGVu ZGluZ01hcHMpDQorICAgICAgICAgIHV0aWxpdHkgPSAoZmxvYXQpIChNYXRoLmxvZyh0YXNrcykg LyBNYXRoLmxvZyhwZW5kaW5nTWFwcykpIC0gMTsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAg dXRpbGl0eSA9IChmbG9hdCkgLSgoKDEgLyBwZW5kaW5nTWFwcykgKiB0YXNrcykgLSAxKTsNCisg ICAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYgKHRhc2tzID09IDApDQorICAgICAgICAgIHV0aWxp dHkgPSAwLjBmOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICB1dGlsaXR5ID0gKGZsb2F0KSAt dGFza3M7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmICh0aGlzLmpvYi5maW5pc2hlZE1hcHMoKSA+ IDAgJiYgcGVuZGluZ1JlZHVjZXMgPiAwKSB7DQorICAgICAgICBpZiAocmVkdWNlVGFza3MgPT0g MCkNCisgICAgICAgICAgdXRpbGl0eSA9IHV0aWxpdHkgLSAyLjBmOw0KKyAgICAgICAgZWxzZSBp ZiAocGVuZGluZ1JlZHVjZXMgPT0gMSkNCisgICAgICAgICAgaWYgKHJlZHVjZVRhc2tzID09IDAp DQorICAgICAgICAgICAgdXRpbGl0eSA9IHV0aWxpdHkgLSAxLjBmOw0KKyAgICAgICAgICBlbHNl IGlmIChyZWR1Y2VUYXNrcyA+IDEpDQorICAgICAgICAgICAgdXRpbGl0eSA9IHV0aWxpdHkgLSAo ZmxvYXQpIChyZWR1Y2VUYXNrcyk7DQorICAgICAgICBlbHNlIGlmIChwZW5kaW5nUmVkdWNlcyA+ IDEpDQorICAgICAgICAgIHV0aWxpdHkgPSB1dGlsaXR5IC0gKGZsb2F0KSAoTWF0aC5sb2cocmVk dWNlVGFza3MpIC8gTWF0aC5sb2cocGVuZGluZ1JlZHVjZXMpIC0gMSk7DQorICAgICAgfQ0KKw0K KyAgICAgIHJldHVybiB1dGlsaXR5Ow0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBSZXR1 cm5zIHRoZSBhdmVyYWdlIHRpbWUgaXQgdGFrZXMgdG8gZmluaXNoIGEgbWFwLiBUaGUgcmVzdWx0 IGlzIGJhc2VkDQorICAgICAqIG9uIGFsbCBwcmV2aW91c2x5IGNvbXBsZXRlZCBtYXAgdGFza3Mu DQorICAgICAqLw0KKyAgICBwcml2YXRlIGxvbmcgZ2V0QXZlcmFnZU1hcFRpbWUoKSB7DQorICAg ICAgVmVjdG9yPFRhc2tJblByb2dyZXNzPiBjb21wbGV0ZWRNYXBzDQorICAgICAgICA9IHRoaXMu am9iLnJlcG9ydFRhc2tzSW5Qcm9ncmVzcyh0cnVlLCB0cnVlKTsNCisgICAgICBpbnQgbnVtQ29t cGxldGVkTWFwcyA9IGNvbXBsZXRlZE1hcHMuc2l6ZSgpOw0KKyAgICAgIGxvbmcgbWFwVGltZSA9 IGdldFRvdGFsVGFza1RpbWUoY29tcGxldGVkTWFwcyk7DQorICAgICAgcmV0dXJuIG1hcFRpbWUg LyBudW1Db21wbGV0ZWRNYXBzOw0KKyAgICB9DQorDQorICAgIHByaXZhdGUgbG9uZyBnZXRUb3Rh bFRhc2tUaW1lKExpc3Q8VGFza0luUHJvZ3Jlc3M+IHRpcHMpIHsNCisgICAgICBsb25nIHRvdGFs VGltZSA9IDA7DQorICAgICAgZm9yIChUYXNrSW5Qcm9ncmVzcyB0aXA6IHRpcHMpIHsNCisgICAg ICAgIGxvbmcgc3RhcnQgPSB0aXAuZ2V0RXhlY1N0YXJ0VGltZSgpOw0KKyAgICAgICAgbG9uZyBm aW5pc2ggPSB0aXAuZ2V0RXhlY0ZpbmlzaFRpbWUoKTsNCisgICAgICAgIHRvdGFsVGltZSArPSBm aW5pc2ggLSBzdGFydDsNCisgICAgICB9DQorICAgICAgcmV0dXJuIHRvdGFsVGltZTsNCisgICAg fQ0KKw0KKyAgICBwdWJsaWMgZmxvYXQgZXN0aW1hdGVNYXBTbG90cygpIHsNCisgICAgICBWZWN0 b3I8VGFza0luUHJvZ3Jlc3M+IGNvbXBsZXRlZE1hcHMNCisgICAgICAgID0gdGhpcy5qb2IucmVw b3J0VGFza3NJblByb2dyZXNzKHRydWUsIHRydWUpOw0KKyAgICAgIGlmIChjb21wbGV0ZWRNYXBz LnNpemUoKSA9PSAwKQ0KKyAgICAgICAgcmV0dXJuIHRoaXMuam9iLnBlbmRpbmdNYXBzKCk7DQor DQorICAgICAgbG9uZyBjdXJyZW50VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0K KyAgICAgIGxvbmcgZGVhZGxpbmVUaW1lID0gdGhpcy5qb2IuZ2V0TGF1bmNoVGltZSgpICsgdGhp cy5qb2IuZ2V0Sm9iQ29uZigpLmdldERlYWRsaW5lKCkgKiAxMDAwOw0KKyAgICAgIGxvbmcgYXZl cmFnZVRpbWUgPSB0aGlzLmdldEF2ZXJhZ2VNYXBUaW1lKCk7DQorDQorICAgICAgbG9uZyByZW1h aW5pbmdUaW1lID0gZGVhZGxpbmVUaW1lIC0gY3VycmVudFRpbWU7DQorICAgICAgaW50IHJlbWFp bmluZ01hcHMgPSB0aGlzLmpvYi5wZW5kaW5nTWFwcygpOw0KKw0KKyAgICAgIGlmIChyZW1haW5p bmdUaW1lIDwgMCkNCisgICAgICAgIHJldHVybiByZW1haW5pbmdNYXBzOw0KKw0KKyAgICAgIGZs b2F0IHR1cm5zID0gKGZsb2F0KSByZW1haW5pbmdUaW1lIC8gYXZlcmFnZVRpbWU7DQorDQorICAg ICAgVmVjdG9yPFRhc2tJblByb2dyZXNzPiB1bmNvbXBsZXRlZE1hcHMNCisgICAgICAgID0gdGhp cy5qb2IucmVwb3J0VGFza3NJblByb2dyZXNzKHRydWUsIGZhbHNlKTsNCisgICAgICBpbnQgcnVu bmluZ01hcHMgPSAwOw0KKyAgICAgIGxvbmcgcnVubmluZ1RpbWUgPSAwOw0KKyAgICAgIGZvciAo VGFza0luUHJvZ3Jlc3MgdGlwOiB1bmNvbXBsZXRlZE1hcHMpIHsNCisgICAgICAgIGlmICh0aXAu aXNSdW5uaW5nKCkgJiYgIXRpcC5pc0NvbXBsZXRlKCkpIHsNCisgICAgICAgICAgbG9uZyBzdGFy dCA9IHRpcC5nZXRFeGVjU3RhcnRUaW1lKCk7DQorICAgICAgICAgIGxvbmcgZWxhcHNlZCA9IGN1 cnJlbnRUaW1lIC0gc3RhcnQ7DQorICAgICAgICAgIHJ1bm5pbmdNYXBzICs9IDE7DQorICAgICAg ICAgIHJ1bm5pbmdUaW1lICs9IGVsYXBzZWQ7DQorICAgICAgICB9DQorICAgICAgfQ0KKw0KKyAg ICAgIGZsb2F0IHBhcnRpYWwgPSAoKGF2ZXJhZ2VUaW1lICogcnVubmluZ01hcHMpIC0gcnVubmlu Z1RpbWUpIC8gYXZlcmFnZVRpbWU7DQorICAgICAgcGFydGlhbCA9IHBhcnRpYWwgPCAwLjBmID8g cmVtYWluaW5nTWFwcyA6IHBhcnRpYWwgKyAoZmxvYXQpIHJlbWFpbmluZ01hcHM7DQorICAgICAg ZmxvYXQgc2xvdHMgPSBwYXJ0aWFsIC8gdHVybnM7DQorICAgICAgcmV0dXJuIHNsb3RzOw0KKyAg ICB9DQorICB9DQorDQorICBwdWJsaWMgY2xhc3MgSm9iUHJvZmlsZSB7DQorICAgIHByaXZhdGUg aW50IGNwdTsNCisgICAgcHJpdmF0ZSBpbnQgaW87DQorDQorICAgIHB1YmxpYyBKb2JQcm9maWxl KGludCBjcHUsIGludCBpbykgew0KKyAgICAgIHRoaXMuY3B1ID0gY3B1Ow0KKyAgICAgIHRoaXMu aW8gPSBpbzsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgaW50IGdldENwdVVzYWdlKCkgew0KKyAg ICAgIHJldHVybiBjcHU7DQorICAgIH0NCisNCisgICAgcHVibGljIGludCBnZXRJb1VzYWdlKCkg ew0KKyAgICAgIHJldHVybiBpbzsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcHVibGljIGNsYXNzIE5l ZWRDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvcjxKb2JJbmZvPiB7DQorICAgIHB1Ymxp YyBpbnQgY29tcGFyZShKb2JJbmZvIGppbmZvMSwgSm9iSW5mbyBqaW5mbzIpIHsNCisgICAgICBm bG9hdCBlMSA9IGppbmZvMS5lc3RpbWF0ZU1hcFNsb3RzKCk7DQorICAgICAgZmxvYXQgZTIgPSBq aW5mbzIuZXN0aW1hdGVNYXBTbG90cygpOw0KKyAgICAgIHJldHVybiAoZTEgPiBlMikgPyAtMSA6 IDE7DQorICAgIH0NCisgIH0NCisNCit9DQorDQorLy8gdmltOiBldCBzdz0yIHRzPTINCmRpZmYg LS1naXQgYS9zcmMvY29udHJpYi9hZGFwdGl2ZS1zY2hlZHVsZXIvc3JjL2phdmEvb3JnL2FwYWNo ZS9oYWRvb3AvbWFwcmVkL0Fzc2lnbm1lbnQuamF2YSBiL3NyYy9jb250cmliL2FkYXB0aXZlLXNj aGVkdWxlci9zcmMvamF2YS9vcmcvYXBhY2hlL2hhZG9vcC9tYXByZWQvQXNzaWdubWVudC5qYXZh DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZDAyZjAyZQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9h cGFjaGUvaGFkb29wL21hcHJlZC9Bc3NpZ25tZW50LmphdmENCkBAIC0wLDAgKzEsMjI1IEBADQor cGFja2FnZSBvcmcuYXBhY2hlLmhhZG9vcC5tYXByZWQ7DQorDQoraW1wb3J0IGphdmEudXRpbC5D b2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0 aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hN YXA7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7 DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5UcmVlU2V0Ow0KK2lt cG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KKw0K K2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZy5TdHJpbmdVdGlsczsNCisNCitpbXBvcnQg b3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkdWNlLlRhc2tUeXBlOw0KKw0KK2ltcG9ydCBjb20ucml0 cy5jbG9uaW5nLkNsb25lcjsNCisNCisvKioNCisgKiBBbiBBc3NpZ25tZW50IGRlZmluZXMgdGhl IG1peCBvZiBtYXAgYW5kIHJlZHVjZSB0YXNrcyBmcm9tIHRoZSBydW5uaW5nIGpvYnMNCisgKiB0 aGF0IGFyZSB0byBiZSBleGVjdXRlZCBvbiBhIGdpdmVuIHRhc2t0cmFja2VyLg0KKyAqLw0KK3B1 YmxpYyBjbGFzcyBBc3NpZ25tZW50IGltcGxlbWVudHMgSXRlcmFibGU8RW50cnk8U3RyaW5nLCBJ bnRlZ2VyPj4gew0KKw0KKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGFza1R5cGVbXSBUYXNrVHlw ZXMNCisgICAgPSBuZXcgVGFza1R5cGVbXSB7IFRhc2tUeXBlLk1BUCwgVGFza1R5cGUuUkVEVUNF IH07DQorDQorICAvLyBNYXAgam9iIElEcyB0byBudW1iZXIgb2YgYXNzaWduZWQge21hcCxyZWR1 Y2V9IHRhc2tzLg0KKyAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtYXAgPSBuZXcgQ29u Y3VycmVudEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOw0KKyAgcHJpdmF0ZSBNYXA8U3RyaW5n LCBJbnRlZ2VyPiByZWR1Y2UgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2Vy PigpOw0KKw0KKyAgLy8gQWNjdW11bGF0ZWQgQ1BVIGFuZCBJTyBmb3IgYWxsIHRoZSB0YXNrcyBp biB0aGlzIGFzc2lnbm1lbnQuDQorICBwcml2YXRlIGZsb2F0IGNwdSA9IDA7DQorICBwcml2YXRl IGZsb2F0IGlvID0gMDsNCisNCisgIC8qKg0KKyAgICogR2V0IHRoZSBudW1iZXIgb2YgYXNzaWdu ZWQgdGFza3Mgb2YgdGhlIGdpdmVuIHR5cGUuDQorICAgKi8NCisgIHB1YmxpYyBpbnQgZ2V0TnVt VGFza3MoVGFza1R5cGUgdHlwZSkgew0KKyAgICBpbnQgbnVtVGFza3MgPSAwOw0KKyAgICBpZiAo dHlwZSA9PSBUYXNrVHlwZS5NQVApDQorICAgICAgbnVtVGFza3MgPSBnZXROdW1NYXBzKCk7DQor ICAgIGVsc2UNCisgICAgICBudW1UYXNrcyA9IGdldE51bVJlZHVjZXMoKTsNCisgICAgcmV0dXJu IG51bVRhc2tzOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBHZXQgdGhlIG51bWJlciBvZiBhc3Np Z25lZCBtYXAgdGFza3MuDQorICAgKi8NCisgIHB1YmxpYyBpbnQgZ2V0TnVtTWFwcygpIHsNCisg ICAgaW50IG51bVRhc2tzID0gMDsNCisgICAgZm9yIChJbnRlZ2VyIG51bTogbWFwLnZhbHVlcygp KQ0KKyAgICAgIG51bVRhc2tzICs9IG51bTsNCisgICAgcmV0dXJuIG51bVRhc2tzOw0KKyAgfQ0K Kw0KKyAgLyoqDQorICAgKiBHZXQgdGhlIG51bWJlciBvZiBhc3NpZ25lZCByZWR1Y2UgdGFza3Mu DQorICAgKi8NCisgIHB1YmxpYyBpbnQgZ2V0TnVtUmVkdWNlcygpIHsNCisgICAgaW50IG51bVRh c2tzID0gMDsNCisgICAgZm9yIChJbnRlZ2VyIG51bTogcmVkdWNlLnZhbHVlcygpKQ0KKyAgICAg IG51bVRhc2tzICs9IG51bTsNCisgICAgcmV0dXJuIG51bVRhc2tzOw0KKyAgfQ0KKw0KKyAgLyoq DQorICAgKiBBZGQgX29uZV8gdGFzayBvZiB0aGUgZ2l2ZW4gam9iICjCq2ppZMK7KSBhbmQgdHlw ZSB0byB0aGUgYXNzaWdubWVudC4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBq aWQsIFRhc2tUeXBlIHR5cGUpIHsNCisgICAgaW50IG51bVRhc2tzID0gMTsNCisgICAgaWYgKHR5 cGUgPT0gVGFza1R5cGUuTUFQKSB7DQorICAgICAgaWYgKG1hcC5jb250YWluc0tleShqaWQpKQ0K KyAgICAgICAgbnVtVGFza3MgKz0gbWFwLmdldChqaWQpOw0KKyAgICAgIG1hcC5wdXQoamlkLCBu dW1UYXNrcyk7DQorICAgIH0gZWxzZSB7DQorICAgICAgaWYgKHJlZHVjZS5jb250YWluc0tleShq aWQpKQ0KKyAgICAgICAgbnVtVGFza3MgKz0gcmVkdWNlLmdldChqaWQpOw0KKyAgICAgIHJlZHVj ZS5wdXQoamlkLCBudW1UYXNrcyk7DQorICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogQXNz aWduIMKrbnVtVGFza3PCuyB0YXNrcyBvZiB0aGUgZ2l2ZW4gam9iICjCq2ppZMK7KSBhbmQgdHlw ZS4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBqaWQsIFRhc2tUeXBlIHR5cGUs IGludCBudW1UYXNrcykgew0KKyAgICBpZiAodHlwZSA9PSBUYXNrVHlwZS5NQVApDQorICAgICAg bWFwLnB1dChqaWQsIG51bVRhc2tzKTsNCisgICAgZWxzZQ0KKyAgICAgIHJlZHVjZS5wdXQoamlk LCBudW1UYXNrcyk7DQorICB9DQorDQorICAvKioNCisgICAqIFJldHVybiB0aGUgbnVtYmVyIG9m IGFzc2lnbmVkIHRhc2tzIG9mIHRoZSBnaXZlbiBqb2IgKMKramlkwrspIGFuZCB0eXBlLg0KKyAg ICovDQorICBwdWJsaWMgaW50IGdldChTdHJpbmcgamlkLCBUYXNrVHlwZSB0eXBlKSB7DQorICAg IEludGVnZXIgbnVtVGFza3MgPSBudWxsOw0KKyAgICBpZiAodHlwZSA9PSBUYXNrVHlwZS5NQVAp DQorICAgICAgbnVtVGFza3MgPSBtYXAuZ2V0KGppZCk7DQorICAgIGVsc2UNCisgICAgICBudW1U YXNrcyA9IHJlZHVjZS5nZXQoamlkKTsNCisgICAgcmV0dXJuIChudW1UYXNrcyA9PSBudWxsKSA/ IDAgOiBudW1UYXNrczsNCisgIH0NCisNCisgIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRKb2JzKFRh c2tUeXBlIHR5cGUpIHsNCisgICAgcmV0dXJuICh0eXBlID09IFRhc2tUeXBlLk1BUCkgPyBtYXAu a2V5U2V0KCkgOiByZWR1Y2Uua2V5U2V0KCk7DQorICB9DQorDQorICBwdWJsaWMgQXNzaWdubWVu dCBjbG9uZSgpIHsNCisgICAgQ2xvbmVyIGNsb25lciA9IG5ldyBDbG9uZXIoKTsNCisgICAgcmV0 dXJuIGNsb25lci5kZWVwQ2xvbmUodGhpcyk7DQorICB9DQorDQorICAvKioNCisgICAqIENsZWFu IG1hcCBhbmQgcmVkdWNlIHRhc2tzIGFzc2lnbmVkIHRvIHRoZSBnaXZlbiBqb2IgKMKramlkwrsp Lg0KKyAgICovDQorICBwdWJsaWMgdm9pZCBjbGVhbihTdHJpbmcgamlkKSB7DQorICAgIG1hcC5y ZW1vdmUoamlkKTsNCisgICAgcmVkdWNlLnJlbW92ZShqaWQpOw0KKyAgfQ0KKw0KKyAgLyoqDQor ICAgKiBDbGVhbiBtYXAgdGFza3MgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGpvYiAowqtqaWTCuyku DQorICAgKi8NCisgIHB1YmxpYyB2b2lkIGNsZWFuTWFwcyhTdHJpbmcgamlkKSB7DQorICAgIG1h cC5yZW1vdmUoamlkKTsNCisgIH0NCisNCisgIC8qKg0KKyAgICogUmVtb3ZlIHRoZSBmaXJzdCDC q27CuyB0YXNrcyBhc3NpZ25lZCB0byB0aGlzIGFzc2lnbm1lbnQuDQorICAgKi8NCisgIHB1Ymxp YyBBc3NpZ25tZW50IHJlbW92ZShpbnQgbikgew0KKyAgICBBc3NpZ25tZW50IHJlbW92ZWQgPSBu ZXcgQXNzaWdubWVudCgpOw0KKyAgICB3aGlsZSAobiA+IDApIHsNCisgICAgICBNYXAuRW50cnk8 U3RyaW5nLCBJbnRlZ2VyPiBlbnRyeSA9IG1hcC5lbnRyeVNldCgpLml0ZXJhdG9yKCkubmV4dCgp Ow0KKyAgICAgIGludCBudW1UYXNrcyA9IGVudHJ5LmdldFZhbHVlKCkgLSAxOw0KKyAgICAgIG1h cC5wdXQoZW50cnkuZ2V0S2V5KCksIG51bVRhc2tzKTsNCisgICAgICBpZiAobnVtVGFza3MgPT0g MCkNCisgICAgICAgIG1hcC5yZW1vdmUoZW50cnkuZ2V0S2V5KCkpOw0KKyAgICAgIG4gLT0gMTsN CisgICAgICByZW1vdmVkLnB1dChlbnRyeS5nZXRLZXkoKSwgVGFza1R5cGUuTUFQKTsNCisgICAg fQ0KKyAgICByZXR1cm4gcmVtb3ZlZDsNCisgIH0NCisNCisgIC8qKg0KKyAgICogUmV0dXJuIGFu IGFzc2lnbm1lbnQgcmVwcmVzZW50aW5nIHRoZSB0YXNrcyB0aGF0IG5lZWQgdG8gcnVuIGJ1dCBh cmUNCisgICAqIHN0aWxsIG1pc3NpbmcgaW4gdGhlIHRhc2t0cmFja2VyLg0KKyAgICovDQorICBw dWJsaWMgQXNzaWdubWVudCB0b0luY2x1ZGUoQXNzaWdubWVudCBkZXNpcmVkKSB7DQorICAgIEFz c2lnbm1lbnQgaW5jbHVkZSA9IG5ldyBBc3NpZ25tZW50KCk7DQorICAgIGZvciAoVGFza1R5cGUg dHlwZTogVGFza1R5cGVzKSB7DQorICAgICAgQ29sbGVjdGlvbjxTdHJpbmc+IGN1cnJlbnRKb2Jz DQorICAgICAgICA9IG5ldyBUcmVlU2V0PFN0cmluZz4oZ2V0Sm9icyh0eXBlKSk7DQorICAgICAg Q29sbGVjdGlvbjxTdHJpbmc+IG5leHRKb2JzDQorICAgICAgICA9IG5ldyBUcmVlU2V0PFN0cmlu Zz4oZGVzaXJlZC5nZXRKb2JzKHR5cGUpKTsNCisgICAgICBDb2xsZWN0aW9uPFN0cmluZz4ga2Vl cEpvYnMNCisgICAgICAgID0gbmV3IFRyZWVTZXQ8U3RyaW5nPihkZXNpcmVkLmdldEpvYnModHlw ZSkpOw0KKyAgICAgIG5leHRKb2JzLnJlbW92ZUFsbChjdXJyZW50Sm9icyk7DQorICAgICAga2Vl cEpvYnMucmV0YWluQWxsKGN1cnJlbnRKb2JzKTsNCisNCisgICAgICBmb3IgKFN0cmluZyBqaWQ6 IG5leHRKb2JzKQ0KKyAgICAgICAgaW5jbHVkZS5wdXQoamlkLCB0eXBlLCBkZXNpcmVkLmdldChq aWQsIHR5cGUpKTsNCisNCisgICAgICBmb3IgKFN0cmluZyBqaWQ6IGtlZXBKb2JzKSB7DQorICAg ICAgICBpbnQgbnVtVGFza3MgPSBkZXNpcmVkLmdldChqaWQsIHR5cGUpIC0gZ2V0KGppZCwgdHlw ZSk7DQorICAgICAgICBpZiAobnVtVGFza3MgPiAwKQ0KKyAgICAgICAgICBpbmNsdWRlLnB1dChq aWQsIHR5cGUsIG51bVRhc2tzKTsNCisgICAgICB9DQorDQorICAgIH0NCisgICAgcmV0dXJuIGlu Y2x1ZGU7DQorICB9DQorDQorICBwdWJsaWMgSXRlcmF0b3I8RW50cnk8U3RyaW5nLCBJbnRlZ2Vy Pj4gaXRlcmF0b3IoKSB7DQorICAgIFNldDxFbnRyeTxTdHJpbmcsIEludGVnZXI+PiB0YXNrU2V0 ID0gbmV3IEhhc2hTZXQ8RW50cnk8U3RyaW5nLCBJbnRlZ2VyPj4oKTsNCisgICAgdGFza1NldC5h ZGRBbGwobWFwLmVudHJ5U2V0KCkpOw0KKyAgICByZXR1cm4gdGFza1NldC5pdGVyYXRvcigpOw0K KyAgfQ0KKw0KKyAgcHVibGljIFNldDxFbnRyeTxTdHJpbmcsIEludGVnZXI+PiBnZXRNYXBzKCkg ew0KKyAgICBTZXQ8RW50cnk8U3RyaW5nLCBJbnRlZ2VyPj4gdGFza1NldCA9IG5ldyBIYXNoU2V0 PEVudHJ5PFN0cmluZywgSW50ZWdlcj4+KCk7DQorICAgIHRhc2tTZXQuYWRkQWxsKG1hcC5lbnRy eVNldCgpKTsNCisgICAgcmV0dXJuIHRhc2tTZXQ7DQorICB9DQorDQorICBwdWJsaWMgU2V0PEVu dHJ5PFN0cmluZywgSW50ZWdlcj4+IGdldFJlZHVjZXMoKSB7DQorICAgIFNldDxFbnRyeTxTdHJp bmcsIEludGVnZXI+PiB0YXNrU2V0ID0gbmV3IEhhc2hTZXQ8RW50cnk8U3RyaW5nLCBJbnRlZ2Vy Pj4oKTsNCisgICAgdGFza1NldC5hZGRBbGwocmVkdWNlLmVudHJ5U2V0KCkpOw0KKyAgICByZXR1 cm4gdGFza1NldDsNCisgIH0NCisNCisgIHB1YmxpYyBmbG9hdCBnZXRDcHUoKSB7DQorICAgIHJl dHVybiBjcHU7DQorICB9DQorDQorICBwdWJsaWMgZmxvYXQgZ2V0SW8oKSB7DQorICAgIHJldHVy biBpbzsNCisgIH0NCisNCisgIHB1YmxpYyB2b2lkIHNldENwdShmbG9hdCBjcHUpIHsNCisgICAg dGhpcy5jcHUgPSBjcHU7DQorICB9DQorDQorICBwdWJsaWMgdm9pZCBzZXRJbyhmbG9hdCBpbykg ew0KKyAgICB0aGlzLmlvID0gaW87DQorICB9DQorDQorICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5n KCkgew0KKyAgICBTdHJpbmcgcyA9IG5ldyBTdHJpbmcoKTsNCisgICAgQXJyYXlMaXN0PFN0cmlu Zz4gbWFwcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KKyAgICBBcnJheUxpc3Q8U3RyaW5n PiByZWRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorICAgIGZvciAoRW50cnk8U3RyaW5n LCBJbnRlZ2VyPiBlbnRyeTogbWFwLmVudHJ5U2V0KCkpDQorICAgICAgbWFwcy5hZGQoZW50cnku Z2V0S2V5KCkgKyAiOiAiICsgZW50cnkuZ2V0VmFsdWUoKSk7DQorICAgIGZvciAoRW50cnk8U3Ry aW5nLCBJbnRlZ2VyPiBlbnRyeTogcmVkdWNlLmVudHJ5U2V0KCkpDQorICAgICAgcmVkcy5hZGQo ZW50cnkuZ2V0S2V5KCkgKyAiOiAiICsgZW50cnkuZ2V0VmFsdWUoKSk7DQorICAgIHJldHVybiAi eyBtYXA6IHsgIiArIFN0cmluZ1V0aWxzLmpvaW4obWFwcywgIiwgIikgKyAifSwgIiArDQorICAg ICAgICAgICAicmVkdWNlOiB7ICIgKyBTdHJpbmdVdGlscy5qb2luKHJlZHMsICIsICIpICsgIn0g fSI7DQorICB9DQorDQorfQ0KKw0KKy8vIHZpbTogZXQgc3c9MiB0cz0yDQpkaWZmIC0tZ2l0IGEv c3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29w L21hcHJlZC9DbHVzdGVyT3V0bGluZS5qYXZhIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1 bGVyL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJlZC9DbHVzdGVyT3V0bGluZS5qYXZh DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uOTFlYzVmMw0KLS0tIC9kZXYv bnVsbA0KKysrIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9h cGFjaGUvaGFkb29wL21hcHJlZC9DbHVzdGVyT3V0bGluZS5qYXZhDQpAQCAtMCwwICsxLDEwNiBA QA0KK3BhY2thZ2Ugb3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkOw0KKw0KK2ltcG9ydCBqYXZhLnV0 aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1hcC5F bnRyeTsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7 DQoraW1wb3J0IGphdmEudXRpbC5RdWV1ZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS5oYWRvb3Au bWFwcmVkLlRhc2tUcmFja2VyU3RhdHVzLlJlc291cmNlU3RhdHVzOw0KK2ltcG9ydCBvcmcuYXBh Y2hlLmhhZG9vcC5tYXByZWQuQWRhcHRpdmVTY2hlZHVsZXIuSm9iSW5mbzsNCitpbXBvcnQgb3Jn LmFwYWNoZS5oYWRvb3AubWFwcmVkdWNlLlRhc2tUeXBlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmhh ZG9vcC5tYXByZWR1Y2Uuc2VydmVyLmpvYnRyYWNrZXIuVGFza1RyYWNrZXI7DQorDQoraW1wb3J0 IGNvbS5yaXRzLmNsb25pbmcuQ2xvbmVyOw0KKw0KKy8qKg0KKyAqIFJlcHJlc2VudHMgdGFza3Ry YWNrZXJzIGluIGEgY2x1c3Rlciwga2VlcGluZyB0cmFjayBvZiB0aGVpciBzdGF0dXMgYW5kDQor ICogYXNzaWdubWVudHMuDQorICovDQorcHVibGljIGNsYXNzIENsdXN0ZXJPdXRsaW5lIHsNCisN CisgIHByaXZhdGUgTWFwPFRhc2tUcmFja2VyLCBUcmFja2VySW5mbz4gb3V0bGluZQ0KKyAgICA9 IG5ldyBIYXNoTWFwPFRhc2tUcmFja2VyLCBUcmFja2VySW5mbz4oKTsNCisNCisgIHByaXZhdGUg TWFwPFN0cmluZywgSW50ZWdlcj4gY291bnQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+ KCk7DQorICBwcml2YXRlIE1hcDxTdHJpbmcsIEludGVnZXI+IHJlZHVjZUNvdW50ID0gbmV3IEhh c2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOw0KKw0KKyAgcHVibGljIENsdXN0ZXJPdXRsaW5lKCkg eyB9DQorDQorICBwdWJsaWMgQ2x1c3Rlck91dGxpbmUoQ2x1c3Rlck91dGxpbmUgY28pIHsNCisg ICAgQ2xvbmVyIGNsb25lciA9IG5ldyBDbG9uZXIoKTsNCisgICAgZm9yIChFbnRyeTxUYXNrVHJh Y2tlciwgVHJhY2tlckluZm8+IGVudHJ5OiBjby5nZXRPdXRsaW5lKCkuZW50cnlTZXQoKSkgew0K KyAgICAgIFRhc2tUcmFja2VyIHRyYWNrZXIgPSBlbnRyeS5nZXRLZXkoKTsNCisgICAgICBUcmFj a2VySW5mbyB0aW5mbyA9IGVudHJ5LmdldFZhbHVlKCk7DQorICAgICAgdGhpcy5vdXRsaW5lLnB1 dCh0cmFja2VyLCBjbG9uZXIuZGVlcENsb25lKHRpbmZvKSk7DQorICAgIH0NCisgICAgdGhpcy5j b3VudCA9IGNsb25lci5kZWVwQ2xvbmUoY28uZ2V0Q291bnQoKSk7DQorICAgIHRoaXMucmVkdWNl Q291bnQgPSBjbG9uZXIuZGVlcENsb25lKGNvLmdldFJlZHVjZUNvdW50KCkpOw0KKyAgfQ0KKw0K KyAgcHVibGljIFRyYWNrZXJJbmZvIHVwZGF0ZVRyYWNrZXIoVGFza1RyYWNrZXIgdHJhY2tlcikg ew0KKyAgICBpZiAoIW91dGxpbmUuY29udGFpbnNLZXkodHJhY2tlcikpDQorICAgICAgb3V0bGlu ZS5wdXQodHJhY2tlciwgbmV3IFRyYWNrZXJJbmZvKCkpOw0KKyAgICBUcmFja2VySW5mbyB0aW5m byA9IG91dGxpbmUuZ2V0KHRyYWNrZXIpOw0KKyAgICB0aW5mby5zZXRSZXNvdXJjZVN0YXR1cyh0 cmFja2VyLmdldFN0YXR1cygpLmdldFJlc291cmNlU3RhdHVzKCkpOw0KKyAgICByZXR1cm4gdGlu Zm87DQorICB9DQorDQorICBwdWJsaWMgTWFwPFRhc2tUcmFja2VyLCBUcmFja2VySW5mbz4gZ2V0 T3V0bGluZSgpIHsNCisgICAgcmV0dXJuIG91dGxpbmU7DQorICB9DQorDQorICAvKioNCisgICAq IFRPRE86IFRoaXMgaXMgdW5uZWNlc3NhcmlseSBjb21wdXRlZCB0b28gb2Z0ZW4uIFNob3VsZCBi ZSBmaXhlZCB0byBhdm9pZA0KKyAgICogcmVjb21wdXRpbmcgd2hlbiB0aGVyZSBhcmUgbm8gY2hh bmdlcywgZXRjLg0KKyAgICovDQorICBwdWJsaWMgdm9pZCB1cGRhdGVDb3VudCgpIHsNCisgICAg Y291bnQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7DQorICAgIHJlZHVjZUNvdW50 ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOw0KKyAgICBmb3IgKFRyYWNrZXJJbmZv IHRpbmZvOiBvdXRsaW5lLnZhbHVlcygpKSB7DQorICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIElu dGVnZXI+IGVudHJ5OiB0aW5mby5nZXRBc3NpZ25tZW50KCkuZ2V0TWFwcygpKSB7DQorICAgICAg ICBTdHJpbmcgamlkID0gZW50cnkuZ2V0S2V5KCk7DQorICAgICAgICBJbnRlZ2VyIG51bSA9IGVu dHJ5LmdldFZhbHVlKCk7DQorICAgICAgICBpZiAoIWNvdW50LmNvbnRhaW5zS2V5KGppZCkpDQor ICAgICAgICAgIGNvdW50LnB1dChqaWQsIDApOw0KKyAgICAgICAgY291bnQucHV0KGppZCwgY291 bnQuZ2V0KGppZCkgKyBudW0pOw0KKyAgICAgIH0NCisgICAgICBmb3IgKEVudHJ5PFN0cmluZywg SW50ZWdlcj4gZW50cnk6IHRpbmZvLmdldEFzc2lnbm1lbnQoKS5nZXRSZWR1Y2VzKCkpIHsNCisg ICAgICAgIFN0cmluZyBqaWQgPSBlbnRyeS5nZXRLZXkoKTsNCisgICAgICAgIEludGVnZXIgbnVt ID0gZW50cnkuZ2V0VmFsdWUoKTsNCisgICAgICAgIGlmICghcmVkdWNlQ291bnQuY29udGFpbnNL ZXkoamlkKSkNCisgICAgICAgICAgcmVkdWNlQ291bnQucHV0KGppZCwgMCk7DQorICAgICAgICBy ZWR1Y2VDb3VudC5wdXQoamlkLCByZWR1Y2VDb3VudC5nZXQoamlkKSArIG51bSk7DQorICAgICAg fQ0KKyAgICB9DQorICB9DQorDQorICBwdWJsaWMgTWFwPFN0cmluZywgSW50ZWdlcj4gZ2V0Q291 bnQoKSB7DQorICAgIHJldHVybiBjb3VudDsNCisgIH0NCisNCisgIHB1YmxpYyBNYXA8U3RyaW5n LCBJbnRlZ2VyPiBnZXRSZWR1Y2VDb3VudCgpIHsNCisgICAgcmV0dXJuIHJlZHVjZUNvdW50Ow0K KyAgfQ0KKw0KKyAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisgICAgU3RyaW5nIHMgPSBu ZXcgU3RyaW5nKCk7DQorICAgIHMgKz0gIi0gdHlwZTogY2x1c3RlclxuIjsNCisgICAgcyArPSAi ICB0aW1lOiAiICsgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAiXG4iOw0KKyAgICBpZiAo b3V0bGluZS5lbnRyeVNldCgpLnNpemUoKSA+IDApDQorICAgICAgcyArPSAiICB0cmFja2Vyczpc biI7DQorICAgIGZvciAoRW50cnk8VGFza1RyYWNrZXIsIFRyYWNrZXJJbmZvPiBlbnRyeTogb3V0 bGluZS5lbnRyeVNldCgpKSB7DQorICAgICAgVGFza1RyYWNrZXIgdHJhY2tlciA9IGVudHJ5Lmdl dEtleSgpOw0KKyAgICAgIFRyYWNrZXJJbmZvIHRpbmZvID0gZW50cnkuZ2V0VmFsdWUoKTsNCisg ICAgICBBc3NpZ25tZW50IGFzc2lnbiA9IHRpbmZvLmdldEFzc2lnbm1lbnQoKTsNCisgICAgICBz ICs9ICIgIC0gaWQ6ICIgKyB0cmFja2VyLmdldFN0YXR1cygpLmdldFRyYWNrZXJOYW1lKCkgKyAi XG4iOw0KKyAgICAgIHMgKz0gIiAgICBhc3NpZ246ICIgKyBhc3NpZ24udG9TdHJpbmcoKSArICJc biI7DQorICAgICAgcyArPSAiICAgIHJlc291cmNlOiB7IGNwdTogIiArIGFzc2lnbi5nZXRDcHUo KSArICIsIGlvOiAiICsgYXNzaWduLmdldElvKCkgKyAiIH1cbiI7DQorICAgIH0NCisgICAgcmV0 dXJuIHM7DQorICB9DQorDQorfQ0KKw0KKy8vIHZpbTogZXQgc3c9MiB0cz0yDQpkaWZmIC0tZ2l0 IGEvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFk b29wL21hcHJlZC9UcmFja2VySW5mby5qYXZhIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1 bGVyL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJlZC9UcmFja2VySW5mby5qYXZhDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYzBhYjQxNw0KLS0tIC9kZXYvbnVs bA0KKysrIGIvc3JjL2NvbnRyaWIvYWRhcHRpdmUtc2NoZWR1bGVyL3NyYy9qYXZhL29yZy9hcGFj aGUvaGFkb29wL21hcHJlZC9UcmFja2VySW5mby5qYXZhDQpAQCAtMCwwICsxLDI4IEBADQorcGFj a2FnZSBvcmcuYXBhY2hlLmhhZG9vcC5tYXByZWQ7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUuaGFk b29wLm1hcHJlZC5UYXNrVHJhY2tlclN0YXR1cy5SZXNvdXJjZVN0YXR1czsNCisNCitwdWJsaWMg Y2xhc3MgVHJhY2tlckluZm8gew0KKw0KKyAgcHJpdmF0ZSBSZXNvdXJjZVN0YXR1cyByZXNvdXJj ZXM7DQorICBwcml2YXRlIEFzc2lnbm1lbnQgYXNzaWdubWVudCA9IG5ldyBBc3NpZ25tZW50KCk7 DQorDQorICBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZVN0YXR1cyhSZXNvdXJjZVN0YXR1cyByZXNv dXJjZXMpIHsNCisgICAgdGhpcy5yZXNvdXJjZXMgPSByZXNvdXJjZXM7DQorICB9DQorDQorICBw dWJsaWMgUmVzb3VyY2VTdGF0dXMgZ2V0UmVzb3VyY2VTdGF0dXMoKSB7DQorICAgIHJldHVybiBy ZXNvdXJjZXM7DQorICB9DQorDQorICBwdWJsaWMgQXNzaWdubWVudCBnZXRBc3NpZ25tZW50KCkg ew0KKyAgICByZXR1cm4gYXNzaWdubWVudDsNCisgIH0NCisNCisgIHB1YmxpYyB2b2lkIHNldEFz c2lnbm1lbnQoQXNzaWdubWVudCBuZXdBc3NpZ25tZW50KSB7DQorICAgIGFzc2lnbm1lbnQgPSBu ZXdBc3NpZ25tZW50Ow0KKyAgfQ0KKw0KK30NCisNCisvLyB2aW06IGV0IHN3PTIgdHM9Mg0KZGlm ZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJlZC9Kb2JDb25mLmphdmEg Yi9zcmMvamF2YS9vcmcvYXBhY2hlL2hhZG9vcC9tYXByZWQvSm9iQ29uZi5qYXZhDQppbmRleCA1 YWRmMjg5Li5jNjAyMzEyIDEwMDY0NA0KLS0tIGEvc3JjL2phdmEvb3JnL2FwYWNoZS9oYWRvb3Av bWFwcmVkL0pvYkNvbmYuamF2YQ0KKysrIGIvc3JjL2phdmEvb3JnL2FwYWNoZS9oYWRvb3AvbWFw cmVkL0pvYkNvbmYuamF2YQ0KQEAgLTE5NjgsNyArMTk2OCw0NSBAQCBwdWJsaWMgY2xhc3MgSm9i Q29uZiBleHRlbmRzIENvbmZpZ3VyYXRpb24gew0KICAgICAgICAgICAgICAgICArICIgYW5kICIg KyBKb2JDb25mLk1BUFJFRF9KT0JfUkVEVUNFX01FTU9SWV9NQl9QUk9QRVJUWSk7DQogICAgIH0N CiAgIH0NCi0gIA0KIA0KLX0NCisgIHB1YmxpYyBpbnQgZ2V0Q3B1VXNhZ2UoKSB7DQorICAgIHJl dHVybiBnZXRJbnQoIm1hcHJlZC5qb2IucHJvZmlsZS5tYXAuY3B1IiwgMTAwKTsNCisgIH0NCisN CisgIHB1YmxpYyB2b2lkIHNldENwdVVzYWdlKGludCB1c2FnZSkgew0KKyAgICBzZXRJbnQoIm1h cHJlZC5qb2IucHJvZmlsZS5tYXAuY3B1IiwgdXNhZ2UpOw0KKyAgfQ0KKw0KKyAgcHVibGljIGlu dCBnZXRJb1VzYWdlKCkgew0KKyAgICByZXR1cm4gZ2V0SW50KCJtYXByZWQuam9iLnByb2ZpbGUu bWFwLmlvIiwgMTAwKTsNCisgIH0NCisNCisgIHB1YmxpYyB2b2lkIHNldElvVXNhZ2UoaW50IHVz YWdlKSB7DQorICAgIHNldEludCgibWFwcmVkLmpvYi5wcm9maWxlLm1hcC5pbyIsIHVzYWdlKTsN CisgIH0NCisNCisgIHB1YmxpYyBpbnQgZ2V0UmVkdWNlQ3B1VXNhZ2UoKSB7DQorICAgIHJldHVy biBnZXRJbnQoIm1hcHJlZC5qb2IucHJvZmlsZS5yZWR1Y2UuY3B1IiwgMTAwKTsNCisgIH0NCiAN CisgIHB1YmxpYyB2b2lkIHNldFJlZHVjZUNwdVVzYWdlKGludCB1c2FnZSkgew0KKyAgICBzZXRJ bnQoIm1hcHJlZC5qb2IucHJvZmlsZS5yZWR1Y2UuY3B1IiwgdXNhZ2UpOw0KKyAgfQ0KKw0KKyAg cHVibGljIGludCBnZXRSZWR1Y2VJb1VzYWdlKCkgew0KKyAgICByZXR1cm4gZ2V0SW50KCJtYXBy ZWQuam9iLnByb2ZpbGUucmVkdWNlLmlvIiwgMTAwKTsNCisgIH0NCisNCisgIHB1YmxpYyB2b2lk IHNldFJlZHVjZUlvVXNhZ2UoaW50IHVzYWdlKSB7DQorICAgIHNldEludCgibWFwcmVkLmpvYi5w cm9maWxlLnJlZHVjZS5pbyIsIHVzYWdlKTsNCisgIH0NCisNCisgIHB1YmxpYyBpbnQgZ2V0RGVh ZGxpbmUoKSB7DQorICAgIHJldHVybiBnZXRJbnQoIm1hcHJlZC5qb2IuZGVhZGxpbmUiLCAwKTsN CisgIH0NCisNCisgIHB1YmxpYyB2b2lkIHNldERlYWRsaW5lKGludCBkZWFkbGluZSkgew0KKyAg ICBzZXRJbnQoIm1hcHJlZC5qb2IuZGVhZGxpbmUiLCBkZWFkbGluZSk7DQorICB9DQorDQorfQ0K ZGlmZiAtLWdpdCBhL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJlZHVjZS9Kb2IuamF2 YSBiL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29wL21hcHJlZHVjZS9Kb2IuamF2YQ0KaW5kZXgg ZjJkMjEzNC4uNDZhNjhkYyAxMDA2NDQNCi0tLSBhL3NyYy9qYXZhL29yZy9hcGFjaGUvaGFkb29w L21hcHJlZHVjZS9Kb2IuamF2YQ0KKysrIGIvc3JjL2phdmEvb3JnL2FwYWNoZS9oYWRvb3AvbWFw cmVkdWNlL0pvYi5qYXZhDQpAQCAtMTMwOCw0ICsxMzA4LDQ0IEBAIHB1YmxpYyBjbGFzcyBKb2Ig ZXh0ZW5kcyBKb2JDb250ZXh0SW1wbCBpbXBsZW1lbnRzIEpvYkNvbnRleHQgew0KICAgICBjb25m LnNldChKb2IuT1VUUFVUX0ZJTFRFUiwgbmV3VmFsdWUudG9TdHJpbmcoKSk7DQogICB9DQogDQor ICBwdWJsaWMgaW50IGdldENwdVVzYWdlKCkgew0KKyAgICByZXR1cm4gY29uZi5nZXRJbnQoIm1h cHJlZC5qb2IucHJvZmlsZS5tYXAuY3B1IiwgMTAwKTsNCisgIH0NCisNCisgIHB1YmxpYyB2b2lk IHNldENwdVVzYWdlKGludCB1c2FnZSkgew0KKyAgICBjb25mLnNldEludCgibWFwcmVkLmpvYi5w cm9maWxlLm1hcC5jcHUiLCB1c2FnZSk7DQorICB9DQorDQorICBwdWJsaWMgaW50IGdldElvVXNh Z2UoKSB7DQorICAgIHJldHVybiBjb25mLmdldEludCgibWFwcmVkLmpvYi5wcm9maWxlLm1hcC5p byIsIDEwMCk7DQorICB9DQorDQorICBwdWJsaWMgdm9pZCBzZXRJb1VzYWdlKGludCB1c2FnZSkg ew0KKyAgICBjb25mLnNldEludCgibWFwcmVkLmpvYi5wcm9maWxlLm1hcC5pbyIsIHVzYWdlKTsN CisgIH0NCisNCisgIHB1YmxpYyBpbnQgZ2V0UmVkdWNlQ3B1VXNhZ2UoKSB7DQorICAgIHJldHVy biBjb25mLmdldEludCgibWFwcmVkLmpvYi5wcm9maWxlLnJlZHVjZS5jcHUiLCAxMDApOw0KKyAg fQ0KKw0KKyAgcHVibGljIHZvaWQgc2V0UmVkdWNlQ3B1VXNhZ2UoaW50IHVzYWdlKSB7DQorICAg IGNvbmYuc2V0SW50KCJtYXByZWQuam9iLnByb2ZpbGUucmVkdWNlLmNwdSIsIHVzYWdlKTsNCisg IH0NCisNCisgIHB1YmxpYyBpbnQgZ2V0UmVkdWNlSW9Vc2FnZSgpIHsNCisgICAgcmV0dXJuIGNv bmYuZ2V0SW50KCJtYXByZWQuam9iLnByb2ZpbGUucmVkdWNlLmlvIiwgMTAwKTsNCisgIH0NCisN CisgIHB1YmxpYyB2b2lkIHNldFJlZHVjZUlvVXNhZ2UoaW50IHVzYWdlKSB7DQorICAgIGNvbmYu c2V0SW50KCJtYXByZWQuam9iLnByb2ZpbGUucmVkdWNlLmlvIiwgdXNhZ2UpOw0KKyAgfQ0KKw0K KyAgcHVibGljIGludCBnZXREZWFkbGluZSgpIHsNCisgICAgcmV0dXJuIGNvbmYuZ2V0SW50KCJt YXByZWQuam9iLmRlYWRsaW5lIiwgMCk7DQorICB9DQorDQorICBwdWJsaWMgdm9pZCBzZXREZWFk bGluZShpbnQgZGVhZGxpbmUpIHsNCisgICAgY29uZi5zZXRJbnQoIm1hcHJlZC5qb2IuZGVhZGxp bmUiLCBkZWFkbGluZSk7DQorICB9DQorDQogfQ0K --001a11c1580466b5a004f717a3cf--