From mboxrd@z Thu Jan 1 00:00:00 1970 From: Amirouche Boubekki Subject: Re: Web interface pushed Date: Thu, 2 Aug 2018 20:13:28 +0200 Message-ID: References: <87r2jlbsq3.fsf@lassieur.org> <87h8khbo71.fsf@gnu.org> <20180730124528.hgkpl2kbxc6fglp5@thebird.nl> <87lg9ssvl7.fsf@elephly.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000004fcb98057277c5cd" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:40999) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1flI6b-0007He-C5 for guix-devel@gnu.org; Thu, 02 Aug 2018 14:13:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1flI6Y-0002Ea-3B for guix-devel@gnu.org; Thu, 02 Aug 2018 14:13:45 -0400 Received: from mail-it0-x242.google.com ([2607:f8b0:4001:c0b::242]:39922) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1flI6X-0002Da-Mq for guix-devel@gnu.org; Thu, 02 Aug 2018 14:13:42 -0400 Received: by mail-it0-x242.google.com with SMTP id g141-v6so4746276ita.4 for ; Thu, 02 Aug 2018 11:13:41 -0700 (PDT) In-Reply-To: List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Tatiana Sholokhova Cc: guix-devel , =?UTF-8?Q?Cl=C3=A9ment_Lassieur?= --0000000000004fcb98057277c5cd Content-Type: multipart/alternative; boundary="0000000000004fcb96057277c5cb" --0000000000004fcb96057277c5cb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I read some of the code, I like it :) diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm index 82f49a4..af24a28 100644 --- a/src/cuirass/base.scm +++ b/src/cuirass/base.scm @@ -20,6 +20,10 @@ ;;; You should have received a copy of the GNU General Public License ;;; along with Cuirass. If not, see . +;; Comment: + +;; This is called base because it interface with guix daemon. + (define-module (cuirass base) #:use-module (fibers) #:use-module (cuirass logging) diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm index 2d66ff9..0899cd1 100644 --- a/src/cuirass/http.scm +++ b/src/cuirass/http.scm @@ -117,6 +117,13 @@ (map build->hydra-build builds))) (define (request-parameters request) + ;; REVIEW: this 'parameters' is ambigious in aiohttp. It's called + ;; request.query because the part after ? in the URL is called the "quer= y + ;; string". Also parameters can be passed via the path part of the URL. + + ;; here is what I use + ;; https://github.com/a-guile-mind/guile-web/blob/master/src/web/decode.scm + "Parse the REQUEST query parameters and return them under the form '((parameter . value) ...)." (let* ((uri (request-uri request)) @@ -125,11 +132,14 @@ (map (lambda (param) (match (string-split param #\=3D) ((key param) - (let ((key-symbol (string->symbol key))) + (let ((key-symbol (string->symbol (uri-decode key)))) (cons key-symbol (match key-symbol - ('id (string->number param)) - ('nr (string->number param)) + ('id (string->number (uri-decode param))) + ;; I don't think this will scale in terms of + ;; kind query pairs where the key part can be + ;; many different things + ('nr (string->number (uri-decode param))) (_ param))))))) (string-split query #\&)) '()))) @@ -138,9 +148,10 @@ ;;; ;;; Web server. ;;; -;;; The api is derived from the hydra one. It is partially described here = : +;;; The exposed api is derived from the hydra one. It is partially described +;;; here : ;;; -;;; https://github.com/NixOS/hydra/blob/master/doc/manual/api.xml +;;; https://github.com/NixOS/hydra/blob/master/doc/manual/api.xml ;;; (define (request-path-components request) @@ -217,6 +228,8 @@ (with-critical-section db-channel (db) (db-get-specifications db))))) (("build" build-id) + ;; REVIEW: don't inline that much code in same procedure aka. procedures + ;; for the win1 (let ((hydra-build (with-critical-section db-channel (db) (handle-build-request db (string->number build-id))))) @@ -234,6 +247,7 @@ (let ((uri (string->uri-reference (string-append "/log/" (basename output))))) + ;; create a procedure for that when you will have forms. (respond (build-response #:code 302 #:headers `((location . ,uri))) #:body ""))) @@ -241,7 +255,10 @@ ;; Not entry for BUILD-ID in the 'Outputs' table. (respond-json-with-error 500 + ;; 500 is very strong error, it's must not be used for expected failure + ;; by the way this is rendering logic, it should be in it's own procedure. (format #f "Outputs of build ~a are unknown." build-id))) + (#f (respond-build-not-found build-id))) (respond-build-not-found build-id)))) @@ -251,13 +268,25 @@ (nr (assq-ref params 'nr))) (if nr (respond-json (object->json-string + ;; don't nest here the code. Because http handlers should follow + ;; the following pattern: + ;; + ;; (define (handler request body) + ;; (let ((input (snarf-input request body))= ) + ;; (shallow-validate-with-exception input) + ;; (deep-validate-with-exception input (db)) + ;; (let ((out (domain-code-goes-here))) + ;; (sxml->response (handler-template out)))) + ;; + ;; Basically, the current code requires top down and bottom up + ;; reading. Declaring intermediate variables helps readbility. (with-critical-section db-channel (db) (db-get-evaluations db nr)))) - (respond-json-with-error 500 "Parameter not defined!")))) + (respond-json-with-error 400 "Parameter not defined!")))) ;; aka. bad request (("api" "latestbuilds") (let* ((params (request-parameters request)) ;; 'nr parameter is mandatory to limit query size. - (valid-params? (assq-ref params 'nr))) + (valid-params? (assq-ref params 'nr))) ;; or exception? (if valid-params? ;; Limit results to builds that are "done". (respond-json @@ -359,7 +388,10 @@ ;; process each client request and then directly go back waiting for the ;; next client (conversely, Guile's 'run-server' loop processes client= s ;; one after another, sequentially.) We can do that because we don't - ;; maintain any state across connections. + ;; maintain any state across connections. I don't understand that + ;; comment. Why no state across connections? isn't sqlite that stores + ;; states? Does it mean there is no global mutable in memory data in + ;; cuirass? ;; ;; XXX: We don't do 'call-with-sigint' like 'run-server' does. (let* ((impl (lookup-server-impl 'fiberized)) diff --git a/src/schema.sql b/src/schema.sql index eb0f7e9..769360f 100644 --- a/src/schema.sql +++ b/src/schema.sql @@ -1,5 +1,8 @@ BEGIN TRANSACTION; +-- REVIEW: The name of the table must be all small caps. +-- COMMENT: Some people argue table name must be singular +-- but I disagree, both might work. CREATE TABLE Specifications ( name TEXT NOT NULL PRIMARY KEY, load_path_inputs TEXT NOT NULL, -- list of input names whose load path will be in Guile's %load-path @@ -64,7 +67,7 @@ CREATE TABLE Builds ( log TEXT NOT NULL, status INTEGER NOT NULL, timestamp INTEGER NOT NULL, - starttime INTEGER NOT NULL, + starttime INTEGER NOT NULL, -- REVIEW: why not start_time? stoptime INTEGER NOT NULL, FOREIGN KEY (derivation) REFERENCES Derivations (derivation), FOREIGN KEY (evaluation) REFERENCES Evaluations (id) @@ -75,5 +78,12 @@ CREATE TABLE Builds ( CREATE INDEX Builds_Derivations_index ON Builds(status ASC, timestamp ASC, id, derivation, evaluation, stoptime DESC); CREATE INDEX Inputs_index ON Inputs(specification, name, branch); CREATE INDEX Derivations_index ON Derivations(derivation, evaluation, job_name, system); +-- COMMENT: Indices make the following trade off: slow down writes and tak= e +-- more space (disk and memory) and in prize you get faster reads= . +-- COMMENT: you'd better add CREATE INDEX just below the table that they +-- speed up queries for. + COMMIT; + +-- Le mer. 1 ao=C3=BBt 2018 =C3=A0 21:47, Tatiana Sholokhova a =C3=A9crit : > Hi all, > > Thank you for the congratulations! I am excited to have the web-interface > pushed into the master branch. I would like to thank you all for your gre= at > support. Special thanks to Cl=C3=A9ment for helpful final reviews and mer= ging > all the changes together. > > Now I would like to add some more features to the interface to enhance it > further. Am I right that now I should again organize my changes as a new > separate branch? > > Best regards, > Tatiana > > On Mon, 30 Jul 2018 at 15:27, Ricardo Wurmus wrote: > >> >> Hi Pjotr, >> >> > One comment: I think we should strive to design GSoC programmes in a >> > way that students get to push earlier to trunk. I know Guix can be >> > complex, but even so, I think we would have less failure if we make it >> > small pieces and better gratification. >> >> This has always been our goal. The projects can usually be implemented >> in independent chunks that could be merged into the =E2=80=9Cmaster=E2= =80=9D branch at >> various stages. >> >> -- >> Ricardo >> >> --0000000000004fcb96057277c5cb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5JIHJlYWQgc29tZSBvZiB0aGUgY29kZSwgSSBsaWtlIGl0IDop PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5kaWZmIC0tZ2l0IGEvc3JjL2N1aXJhc3MvYmFzZS5z Y20gYi9zcmMvY3VpcmFzcy9iYXNlLnNjbTxicj5pbmRleCA4MmY0OWE0Li5hZjI0YTI4IDEwMDY0 NDxicj4tLS0gYS9zcmMvY3VpcmFzcy9iYXNlLnNjbTxicj4rKysgYi9zcmMvY3VpcmFzcy9iYXNl LnNjbTxicj5AQCAtMjAsNiArMjAsMTAgQEA8YnI+wqA7OzsgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8YnI+wqA7OzsgYWxv bmcgd2l0aCBDdWlyYXNzLsKgIElmIG5vdCwgc2VlICZsdDs8YSBocmVmPSJodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvIj5odHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPC9hPiZndDsuPGJy PsKgPGJyPis7OyBDb21tZW50Ojxicj4rPGJyPis7OyBUaGlzIGlzIGNhbGxlZCBiYXNlIGJlY2F1 c2UgaXQgaW50ZXJmYWNlIHdpdGggZ3VpeCBkYWVtb24uPGJyPis8YnI+wqAoZGVmaW5lLW1vZHVs ZSAoY3VpcmFzcyBiYXNlKTxicj7CoMKgICM6dXNlLW1vZHVsZSAoZmliZXJzKTxicj7CoMKgICM6 dXNlLW1vZHVsZSAoY3VpcmFzcyBsb2dnaW5nKTxicj5kaWZmIC0tZ2l0IGEvc3JjL2N1aXJhc3Mv aHR0cC5zY20gYi9zcmMvY3VpcmFzcy9odHRwLnNjbTxicj5pbmRleCAyZDY2ZmY5Li4wODk5Y2Qx IDEwMDY0NDxicj4tLS0gYS9zcmMvY3VpcmFzcy9odHRwLnNjbTxicj4rKysgYi9zcmMvY3VpcmFz cy9odHRwLnNjbTxicj5AQCAtMTE3LDYgKzExNywxMyBAQDxicj7CoMKgwqDCoCAobWFwIGJ1aWxk LSZndDtoeWRyYS1idWlsZCBidWlsZHMpKSk8YnI+wqA8YnI+wqAoZGVmaW5lIChyZXF1ZXN0LXBh cmFtZXRlcnMgcmVxdWVzdCk8YnI+K8KgIDs7IFJFVklFVzogdGhpcyAmIzM5O3BhcmFtZXRlcnMm IzM5OyBpcyBhbWJpZ2lvdXMgaW4gYWlvaHR0cC4gSXQmIzM5O3MgY2FsbGVkPGJyPivCoCA7OyBy ZXF1ZXN0LnF1ZXJ5IGJlY2F1c2UgdGhlIHBhcnQgYWZ0ZXIgPyBpbiB0aGUgVVJMIGlzIGNhbGxl ZCB0aGUgJnF1b3Q7cXVlcnk8YnI+K8KgIDs7IHN0cmluZyZxdW90Oy4gQWxzbyBwYXJhbWV0ZXJz IGNhbiBiZSBwYXNzZWQgdmlhIHRoZSBwYXRoIHBhcnQgb2YgdGhlIFVSTC48YnI+Kzxicj4rwqAg OzsgaGVyZSBpcyB3aGF0IEkgdXNlPGJyPivCoCA7OyA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5j b20vYS1ndWlsZS1taW5kL2d1aWxlLXdlYi9ibG9iL21hc3Rlci9zcmMvd2ViL2RlY29kZS5zY20i Pmh0dHBzOi8vZ2l0aHViLmNvbS9hLWd1aWxlLW1pbmQvZ3VpbGUtd2ViL2Jsb2IvbWFzdGVyL3Ny Yy93ZWIvZGVjb2RlLnNjbTwvYT48YnI+Kzxicj7CoMKgICZxdW90O1BhcnNlIHRoZSBSRVFVRVNU IHF1ZXJ5IHBhcmFtZXRlcnMgYW5kIHJldHVybiB0aGVtIHVuZGVyIHRoZSBmb3JtPGJyPsKgwqAg JiMzOTsoKHBhcmFtZXRlciAuIHZhbHVlKSAuLi4pLiZxdW90Ozxicj7CoMKgIChsZXQqICgodXJp IChyZXF1ZXN0LXVyaSByZXF1ZXN0KSk8YnI+QEAgLTEyNSwxMSArMTMyLDE0IEBAPGJyPsKgwqDC oMKgwqDCoMKgwqAgKG1hcCAobGFtYmRhIChwYXJhbSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChtYXRjaCAoc3RyaW5nLXNwbGl0IHBhcmFtICNcPSk8YnI+wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoKGtleSBwYXJhbSk8YnI+LcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKGxldCAoKGtleS1zeW1ib2wgKHN0cmluZy0mZ3Q7c3ltYm9sIGtl eSkpKTxicj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAobGV0ICgoa2V5LXN5 bWJvbCAoc3RyaW5nLSZndDtzeW1ib2wgKHVyaS1kZWNvZGUga2V5KSkpKTxicj7CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjb25zIGtleS1zeW1ib2w8YnI+wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAobWF0Y2gga2V5 LXN5bWJvbDxicj4twqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICgmIzM5O2lkIChzdHJpbmctJmd0O251bWJlciBwYXJhbSkpPGJyPi3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCYjMzk7bnIg KHN0cmluZy0mZ3Q7bnVtYmVyIHBhcmFtKSk8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCYjMzk7aWQgKHN0cmluZy0m Z3Q7bnVtYmVyICh1cmktZGVjb2RlIHBhcmFtKSkpPGJyPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDs7IEkgZG9uJiMzOTt0 IHRoaW5rIHRoaXMgd2lsbCBzY2FsZSBpbiB0ZXJtcyBvZjxicj4rwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBraW5kIHF1 ZXJ5IHBhaXJzIHdoZXJlIHRoZSBrZXkgcGFydCBjYW4gYmU8YnI+K8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOzsgbWFueSBk aWZmZXJlbnQgdGhpbmdzPGJyPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKCYjMzk7bnIgKHN0cmluZy0mZ3Q7bnVtYmVyICh1cmktZGVjb2Rl IHBhcmFtKSkpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChfwqDCoCBwYXJhbSkpKSkpKSk8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKHN0cmluZy1zcGxpdCBxdWVyeSAjXCZhbXA7KSk8YnI+wqDCoMKgwqDCoMKgwqDCoCAm IzM5OygpKSkpPGJyPkBAIC0xMzgsOSArMTQ4LDEwIEBAPGJyPsKgOzs7PGJyPsKgOzs7IFdlYiBz ZXJ2ZXIuPGJyPsKgOzs7PGJyPi07OzsgVGhlIGFwaSBpcyBkZXJpdmVkIGZyb20gdGhlIGh5ZHJh IG9uZS4gSXQgaXMgcGFydGlhbGx5IGRlc2NyaWJlZCBoZXJlIDo8YnI+Kzs7OyBUaGUgZXhwb3Nl ZCBhcGkgaXMgZGVyaXZlZCBmcm9tIHRoZSBoeWRyYSBvbmUuIEl0IGlzIHBhcnRpYWxseSBkZXNj cmliZWQ8YnI+Kzs7OyBoZXJlIDo8YnI+wqA7Ozs8YnI+LTs7OyA8YSBocmVmPSJodHRwczovL2dp dGh1Yi5jb20vTml4T1MvaHlkcmEvYmxvYi9tYXN0ZXIvZG9jL21hbnVhbC9hcGkueG1sIj5odHRw czovL2dpdGh1Yi5jb20vTml4T1MvaHlkcmEvYmxvYi9tYXN0ZXIvZG9jL21hbnVhbC9hcGkueG1s PC9hPjxicj4rOzs7wqDCoCA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTml4T1MvaHlkcmEv YmxvYi9tYXN0ZXIvZG9jL21hbnVhbC9hcGkueG1sIj5odHRwczovL2dpdGh1Yi5jb20vTml4T1Mv aHlkcmEvYmxvYi9tYXN0ZXIvZG9jL21hbnVhbC9hcGkueG1sPC9hPjxicj7CoDs7Ozxicj7CoDxi cj7CoChkZWZpbmUgKHJlcXVlc3QtcGF0aC1jb21wb25lbnRzIHJlcXVlc3QpPGJyPkBAIC0yMTcs NiArMjI4LDggQEA8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo d2l0aC1jcml0aWNhbC1zZWN0aW9uIGRiLWNoYW5uZWwgKGRiKTxicj7CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZGItZ2V0LXNwZWNpZmljYXRpb25zIGRiKSkp KSk8YnI+wqDCoMKgwqAgKCgmcXVvdDtidWlsZCZxdW90OyBidWlsZC1pZCk8YnI+K8KgwqDCoMKg IDs7IFJFVklFVzogZG9uJiMzOTt0IGlubGluZSB0aGF0IG11Y2ggY29kZSBpbiBzYW1lIHByb2Nl ZHVyZSBha2EuIHByb2NlZHVyZXM8YnI+K8KgwqDCoMKgIDs7IGZvciB0aGUgd2luMTxicj7CoMKg wqDCoMKgIChsZXQgKChoeWRyYS1idWlsZDxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHdp dGgtY3JpdGljYWwtc2VjdGlvbiBkYi1jaGFubmVsIChkYik8YnI+wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAoaGFuZGxlLWJ1aWxkLXJlcXVlc3QgZGIgKHN0cmluZy0mZ3Q7bnVtYmVyIGJ1 aWxkLWlkKSkpKSk8YnI+QEAgLTIzNCw2ICsyNDcsNyBAQDxicj7CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChsZXQgKCh1cmkgKHN0cmluZy0mZ3Q7dXJpLXJlZmVyZW5jZTxicj7CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzdHJpbmctYXBw ZW5kICZxdW90Oy9sb2cvJnF1b3Q7PGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGJhc2Vu YW1lIG91dHB1dCkpKSkpPGJyPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOzsgY3Jl YXRlIGEgcHJvY2VkdXJlIGZvciB0aGF0IHdoZW4geW91IHdpbGwgaGF2ZSBmb3Jtcy48YnI+wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHJlc3BvbmQgKGJ1aWxkLXJlc3BvbnNlICM6 Y29kZSAzMDI8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAjOmhlYWRlcnMgYCgobG9jYXRp b24gLiAsdXJpKSkpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICM6Ym9keSAmcXVvdDsmcXVvdDspKSk8YnI+QEAgLTI0MSw3ICsyNTUsMTAgQEA8 YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBOb3QgZW50cnkgZm9yIEJVSUxELUlE IGluIHRoZSAmIzM5O091dHB1dHMmIzM5OyB0YWJsZS48YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAocmVzcG9uZC1qc29uLXdpdGgtZXJyb3I8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDUwMDxicj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyA1MDAgaXMg dmVyeSBzdHJvbmcgZXJyb3IsIGl0JiMzOTtzIG11c3Qgbm90IGJlIHVzZWQgZm9yIGV4cGVjdGVk IGZhaWx1cmU8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOzsgYnkgdGhlIHdheSB0 aGlzIGlzIHJlbmRlcmluZyBsb2dpYywgaXQgc2hvdWxkIGJlIGluIGl0JiMzOTtzIG93biBwcm9j ZWR1cmUuPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZm9ybWF0ICNmICZxdW90 O091dHB1dHMgb2YgYnVpbGQgfmEgYXJlIHVua25vd24uJnF1b3Q7IGJ1aWxkLWlkKSkpPGJyPis8 YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKCNmPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKHJlc3BvbmQtYnVpbGQtbm90LWZvdW5kIGJ1aWxkLWlkKSkpPGJyPsKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKHJlc3BvbmQtYnVpbGQtbm90LWZvdW5kIGJ1aWxkLWlkKSkpKTxicj5A QCAtMjUxLDEzICsyNjgsMjUgQEA8YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChuciAoYXNz cS1yZWYgcGFyYW1zICYjMzk7bnIpKSk8YnI+wqDCoMKgwqDCoMKgwqAgKGlmIG5yPGJyPsKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKHJlc3BvbmQtanNvbiAob2JqZWN0LSZndDtqc29uLXN0cmluZzxi cj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOzsg ZG9uJiMzOTt0IG5lc3QgaGVyZSB0aGUgY29kZS4gQmVjYXVzZSBodHRwIGhhbmRsZXJzIHNob3Vs ZCBmb2xsb3c8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDs7IHRoZSBmb2xsb3dpbmcgcGF0dGVybjo8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDs7PGJyPivCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7O8KgwqAgKGRlZmluZSAoaGFuZGxlciBy ZXF1ZXN0IGJvZHkpPGJyPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA7O8KgwqDCoMKgwqAgKGxldCAoKGlucHV0IChzbmFyZi1pbnB1dCByZXF1ZXN0 IGJvZHkpKSk8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIDs7wqDCoMKgwqDCoMKgwqDCoMKgIChzaGFsbG93LXZhbGlkYXRlLXdpdGgtZXhjZXB0 aW9uIGlucHV0KTxicj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgOzvCoMKgwqDCoMKgwqDCoMKgwqAgKGRlZXAtdmFsaWRhdGUtd2l0aC1leGNlcHRp b24gaW5wdXQgKGRiKSk8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDs7wqDCoMKgwqDCoMKgwqDCoMKgIChsZXQgKChvdXQgKGRvbWFpbi1jb2Rl LWdvZXMtaGVyZSkpKTxicj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgOzvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHN4bWwtJmd0O3Jlc3BvbnNl IChoYW5kbGVyLXRlbXBsYXRlIG91dCkpKSk8YnI+K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDs7PGJyPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBCYXNpY2FsbHksIHRoZSBjdXJyZW50IGNvZGUg cmVxdWlyZXMgdG9wIGRvd24gYW5kIGJvdHRvbSB1cDxicj4rwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgOzsgcmVhZGluZy4gRGVjbGFyaW5nIGludGVy bWVkaWF0ZSB2YXJpYWJsZXMgaGVscHMgcmVhZGJpbGl0eS48YnI+wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAod2l0aC1jcml0aWNhbC1zZWN0aW9u IGRiLWNoYW5uZWwgKGRiKTxicj7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAoZGItZ2V0LWV2YWx1YXRpb25zIGRiIG5yKSkpKTxicj4twqDC oMKgwqDCoMKgwqDCoMKgwqAgKHJlc3BvbmQtanNvbi13aXRoLWVycm9yIDUwMCAmcXVvdDtQYXJh bWV0ZXIgbm90IGRlZmluZWQhJnF1b3Q7KSkpKTxicj4rwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHJl c3BvbmQtanNvbi13aXRoLWVycm9yIDQwMCAmcXVvdDtQYXJhbWV0ZXIgbm90IGRlZmluZWQhJnF1 b3Q7KSkpKcKgIDs7IGFrYS4gYmFkIHJlcXVlc3Q8YnI+wqDCoMKgwqAgKCgmcXVvdDthcGkmcXVv dDsgJnF1b3Q7bGF0ZXN0YnVpbGRzJnF1b3Q7KTxicj7CoMKgwqDCoMKgIChsZXQqICgocGFyYW1z IChyZXF1ZXN0LXBhcmFtZXRlcnMgcmVxdWVzdCkpPGJyPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA7OyAmIzM5O25yIHBhcmFtZXRlciBpcyBtYW5kYXRvcnkgdG8gbGltaXQgcXVlcnkgc2l6ZS48 YnI+LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHZhbGlkLXBhcmFtcz8gKGFzc3EtcmVmIHBhcmFt cyAmIzM5O25yKSkpPGJyPivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh2YWxpZC1wYXJhbXM/IChh c3NxLXJlZiBwYXJhbXMgJiMzOTtucikpKcKgIDs7IG9yIGV4Y2VwdGlvbj88YnI+wqDCoMKgwqDC oMKgwqAgKGlmIHZhbGlkLXBhcmFtcz88YnI+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA7OyBMaW1p dCByZXN1bHRzIHRvIGJ1aWxkcyB0aGF0IGFyZSAmcXVvdDtkb25lJnF1b3Q7Ljxicj7CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIChyZXNwb25kLWpzb248YnI+QEAgLTM1OSw3ICszODgsMTAgQEA8YnI+ wqDCoMKgwqAgOzsgcHJvY2VzcyBlYWNoIGNsaWVudCByZXF1ZXN0IGFuZCB0aGVuIGRpcmVjdGx5 IGdvIGJhY2sgd2FpdGluZyBmb3IgdGhlPGJyPsKgwqDCoMKgIDs7IG5leHQgY2xpZW50IChjb252 ZXJzZWx5LCBHdWlsZSYjMzk7cyAmIzM5O3J1bi1zZXJ2ZXImIzM5OyBsb29wIHByb2Nlc3NlcyBj bGllbnRzPGJyPsKgwqDCoMKgIDs7IG9uZSBhZnRlciBhbm90aGVyLCBzZXF1ZW50aWFsbHkuKcKg IFdlIGNhbiBkbyB0aGF0IGJlY2F1c2Ugd2UgZG9uJiMzOTt0PGJyPi3CoMKgwqAgOzsgbWFpbnRh aW4gYW55IHN0YXRlIGFjcm9zcyBjb25uZWN0aW9ucy48YnI+K8KgwqDCoCA7OyBtYWludGFpbiBh bnkgc3RhdGUgYWNyb3NzIGNvbm5lY3Rpb25zLsKgIEkgZG9uJiMzOTt0IHVuZGVyc3RhbmQgdGhh dDxicj4rwqDCoMKgIDs7IGNvbW1lbnQuIFdoeSBubyBzdGF0ZSBhY3Jvc3MgY29ubmVjdGlvbnM/ IGlzbiYjMzk7dCBzcWxpdGUgdGhhdCBzdG9yZXM8YnI+K8KgwqDCoCA7OyBzdGF0ZXM/IERvZXMg aXQgbWVhbiB0aGVyZSBpcyBubyBnbG9iYWwgbXV0YWJsZSBpbiBtZW1vcnkgZGF0YSBpbjxicj4r wqDCoMKgIDs7IGN1aXJhc3M/PGJyPsKgwqDCoMKgIDs7PGJyPsKgwqDCoMKgIDs7IFhYWDogV2Ug ZG9uJiMzOTt0IGRvICYjMzk7Y2FsbC13aXRoLXNpZ2ludCYjMzk7IGxpa2UgJiMzOTtydW4tc2Vy dmVyJiMzOTsgZG9lcy48YnI+wqDCoMKgwqAgKGxldCogKChpbXBsIChsb29rdXAtc2VydmVyLWlt cGwgJiMzOTtmaWJlcml6ZWQpKTxicj5kaWZmIC0tZ2l0IGEvc3JjL3NjaGVtYS5zcWwgYi9zcmMv c2NoZW1hLnNxbDxicj5pbmRleCBlYjBmN2U5Li43NjkzNjBmIDEwMDY0NDxicj4tLS0gYS9zcmMv c2NoZW1hLnNxbDxicj4rKysgYi9zcmMvc2NoZW1hLnNxbDxicj5AQCAtMSw1ICsxLDggQEA8YnI+ wqBCRUdJTiBUUkFOU0FDVElPTjs8YnI+wqA8YnI+Ky0tIFJFVklFVzogVGhlIG5hbWUgb2YgdGhl IHRhYmxlIG11c3QgYmUgYWxsIHNtYWxsIGNhcHMuPGJyPistLSBDT01NRU5UOiBTb21lIHBlb3Bs ZSBhcmd1ZSB0YWJsZSBuYW1lIG11c3QgYmUgc2luZ3VsYXI8YnI+Ky0twqDCoMKgwqDCoMKgwqDC oMKgIGJ1dCBJIGRpc2FncmVlLCBib3RoIG1pZ2h0IHdvcmsuPGJyPsKgQ1JFQVRFIFRBQkxFIFNw ZWNpZmljYXRpb25zICg8YnI+wqDCoCBuYW1lwqDCoMKgwqDCoMKgwqDCoMKgIFRFWFQgTk9UIE5V TEwgUFJJTUFSWSBLRVksPGJyPsKgwqAgbG9hZF9wYXRoX2lucHV0cyBURVhUIE5PVCBOVUxMLCAt LSBsaXN0IG9mIGlucHV0IG5hbWVzIHdob3NlIGxvYWQgcGF0aCB3aWxsIGJlIGluIEd1aWxlJiMz OTtzICVsb2FkLXBhdGg8YnI+QEAgLTY0LDcgKzY3LDcgQEAgQ1JFQVRFIFRBQkxFIEJ1aWxkcyAo PGJyPsKgwqAgbG9nwqDCoMKgwqDCoMKgwqDCoMKgwqAgVEVYVCBOT1QgTlVMTCw8YnI+wqDCoCBz dGF0dXPCoMKgwqDCoMKgwqDCoCBJTlRFR0VSIE5PVCBOVUxMLDxicj7CoMKgIHRpbWVzdGFtcMKg wqDCoMKgIElOVEVHRVIgTk9UIE5VTEwsPGJyPi3CoCBzdGFydHRpbWXCoMKgwqDCoCBJTlRFR0VS IE5PVCBOVUxMLDxicj4rwqAgc3RhcnR0aW1lwqDCoMKgwqAgSU5URUdFUiBOT1QgTlVMTCzCoCAt LSBSRVZJRVc6IHdoeSBub3Qgc3RhcnRfdGltZT88YnI+wqDCoCBzdG9wdGltZcKgwqDCoMKgwqAg SU5URUdFUiBOT1QgTlVMTCw8YnI+wqDCoCBGT1JFSUdOIEtFWSAoZGVyaXZhdGlvbikgUkVGRVJF TkNFUyBEZXJpdmF0aW9ucyAoZGVyaXZhdGlvbiksPGJyPsKgwqAgRk9SRUlHTiBLRVkgKGV2YWx1 YXRpb24pIFJFRkVSRU5DRVMgRXZhbHVhdGlvbnMgKGlkKTxicj5AQCAtNzUsNSArNzgsMTIgQEAg Q1JFQVRFIFRBQkxFIEJ1aWxkcyAoPGJyPsKgQ1JFQVRFIElOREVYIEJ1aWxkc19EZXJpdmF0aW9u c19pbmRleCBPTiBCdWlsZHMoc3RhdHVzIEFTQywgdGltZXN0YW1wIEFTQywgaWQsIGRlcml2YXRp b24sIGV2YWx1YXRpb24sIHN0b3B0aW1lIERFU0MpOzxicj7CoENSRUFURSBJTkRFWCBJbnB1dHNf aW5kZXggT04gSW5wdXRzKHNwZWNpZmljYXRpb24sIG5hbWUsIGJyYW5jaCk7PGJyPsKgQ1JFQVRF IElOREVYIERlcml2YXRpb25zX2luZGV4IE9OIERlcml2YXRpb25zKGRlcml2YXRpb24sIGV2YWx1 YXRpb24sIGpvYl9uYW1lLCBzeXN0ZW0pOzxicj4rLS0gQ09NTUVOVDogSW5kaWNlcyBtYWtlIHRo ZSBmb2xsb3dpbmcgdHJhZGUgb2ZmOiBzbG93IGRvd24gd3JpdGVzIGFuZCB0YWtlPGJyPistLcKg wqDCoMKgwqDCoMKgwqDCoCBtb3JlIHNwYWNlIChkaXNrIGFuZCBtZW1vcnkpIGFuZCBpbiBwcml6 ZSB5b3UgZ2V0IGZhc3RlciByZWFkcy48YnI+Ky0tIENPTU1FTlQ6IHlvdSYjMzk7ZCBiZXR0ZXIg YWRkIENSRUFURSBJTkRFWCBqdXN0IGJlbG93IHRoZSB0YWJsZSB0aGF0IHRoZXk8YnI+Ky0twqDC oMKgwqDCoMKgwqDCoMKgIHNwZWVkIHVwIHF1ZXJpZXMgZm9yLjxicj4rPGJyPsKgPGJyPsKgQ09N TUlUOzxicj4rPGJyPistLTxicj48YnI+PC9kaXY+PC9kaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWls X3F1b3RlIj48ZGl2IGRpcj0ibHRyIj5MZcKgbWVyLiAxIGFvw7t0IDIwMTggw6DCoDIxOjQ3LCBU YXRpYW5hIFNob2xva2hvdmEgJmx0OzxhIGhyZWY9Im1haWx0bzp0YW5qYTIwMTM5NkBnbWFpbC5j b20iPnRhbmphMjAxMzk2QGdtYWlsLmNvbTwvYT4mZ3Q7IGEgw6ljcml0wqA6PGJyPjwvZGl2Pjxi bG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2Jv cmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIi PjxkaXY+SGkgYWxsLDwvZGl2PjxkaXY+PGJyPjwvZGl2PlRoYW5rIHlvdSBmb3IgdGhlIGNvbmdy YXR1bGF0aW9ucyEgSSBhbSBleGNpdGVkIHRvIGhhdmUgdGhlIHdlYi1pbnRlcmZhY2UgcHVzaGVk IGludG8gdGhlIG1hc3RlciBicmFuY2guIEkgd291bGQgbGlrZSB0byB0aGFuayB5b3UgYWxsIGZv ciB5b3VyIGdyZWF0IHN1cHBvcnQuIFNwZWNpYWwgdGhhbmtzIHRvIENsw6ltZW50IGZvciBoZWxw ZnVsIGZpbmFsIHJldmlld3MgYW5kIG1lcmdpbmcgYWxsIHRoZSBjaGFuZ2VzIHRvZ2V0aGVyLjxi cj48YnI+Tm93IEkgd291bGQgbGlrZSB0byBhZGQgc29tZSBtb3JlIGZlYXR1cmVzIHRvIHRoZSBp bnRlcmZhY2UgdG8gZW5oYW5jZSBpdCBmdXJ0aGVyLiBBbSBJIHJpZ2h0IHRoYXQgbm93IEkgc2hv dWxkIGFnYWluIG9yZ2FuaXplIG15IGNoYW5nZXMgYXMgYSBuZXcgc2VwYXJhdGUgYnJhbmNoPzxi cj48YnI+QmVzdCByZWdhcmRzLDxicj48ZGl2PlRhdGlhbmE8L2Rpdj48YnI+PGRpdiBjbGFzcz0i Z21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiPk9uIE1vbiwgMzAgSnVsIDIwMTggYXQgMTU6Mjcs IFJpY2FyZG8gV3VybXVzICZsdDs8YSBocmVmPSJtYWlsdG86cmVrYWRvQGVsZXBobHkubmV0IiB0 YXJnZXQ9Il9ibGFuayI+cmVrYWRvQGVsZXBobHkubmV0PC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2 PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBw eCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxl ZnQ6MWV4Ij48YnI+DQpIaSBQam90ciw8YnI+DQo8YnI+DQomZ3Q7IE9uZSBjb21tZW50OiBJIHRo aW5rIHdlIHNob3VsZCBzdHJpdmUgdG8gZGVzaWduIEdTb0MgcHJvZ3JhbW1lcyBpbiBhPGJyPg0K Jmd0OyB3YXkgdGhhdCBzdHVkZW50cyBnZXQgdG8gcHVzaCBlYXJsaWVyIHRvIHRydW5rLiBJIGtu b3cgR3VpeCBjYW4gYmU8YnI+DQomZ3Q7IGNvbXBsZXgsIGJ1dCBldmVuIHNvLCBJIHRoaW5rIHdl IHdvdWxkIGhhdmUgbGVzcyBmYWlsdXJlIGlmIHdlIG1ha2UgaXQ8YnI+DQomZ3Q7IHNtYWxsIHBp ZWNlcyBhbmQgYmV0dGVyIGdyYXRpZmljYXRpb24uPGJyPg0KPGJyPg0KVGhpcyBoYXMgYWx3YXlz IGJlZW4gb3VyIGdvYWwuwqAgVGhlIHByb2plY3RzIGNhbiB1c3VhbGx5IGJlIGltcGxlbWVudGVk PGJyPg0KaW4gaW5kZXBlbmRlbnQgY2h1bmtzIHRoYXQgY291bGQgYmUgbWVyZ2VkIGludG8gdGhl IOKAnG1hc3RlcuKAnSBicmFuY2ggYXQ8YnI+DQp2YXJpb3VzIHN0YWdlcy48YnI+DQo8YnI+DQot LTxicj4NClJpY2FyZG88YnI+DQo8YnI+DQo8L2Jsb2NrcXVvdGU+PC9kaXY+PC9kaXY+DQo8L2Js b2NrcXVvdGU+PC9kaXY+DQo= --0000000000004fcb96057277c5cb-- --0000000000004fcb98057277c5cd Content-Type: text/x-patch; charset="US-ASCII"; name="cuirass.amz3.20180802.diff" Content-Disposition: attachment; filename="cuirass.amz3.20180802.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jkcvp2xs0 ZGlmZiAtLWdpdCBhL3NyYy9jdWlyYXNzL2Jhc2Uuc2NtIGIvc3JjL2N1aXJhc3MvYmFzZS5zY20K aW5kZXggODJmNDlhNC4uYWYyNGEyOCAxMDA2NDQKLS0tIGEvc3JjL2N1aXJhc3MvYmFzZS5zY20K KysrIGIvc3JjL2N1aXJhc3MvYmFzZS5zY20KQEAgLTIwLDYgKzIwLDEwIEBACiA7OzsgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKIDs7OyBhbG9uZyB3aXRoIEN1aXJhc3MuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCiAKKzs7IENvbW1lbnQ6CisKKzs7IFRoaXMgaXMgY2FsbGVkIGJhc2Ug YmVjYXVzZSBpdCBpbnRlcmZhY2Ugd2l0aCBndWl4IGRhZW1vbi4KKwogKGRlZmluZS1tb2R1bGUg KGN1aXJhc3MgYmFzZSkKICAgIzp1c2UtbW9kdWxlIChmaWJlcnMpCiAgICM6dXNlLW1vZHVsZSAo Y3VpcmFzcyBsb2dnaW5nKQpkaWZmIC0tZ2l0IGEvc3JjL2N1aXJhc3MvZGF0YWJhc2Uuc2NtIGIv c3JjL2N1aXJhc3MvZGF0YWJhc2Uuc2NtCmluZGV4IDU2ZjQyMWQuLmNjYjgzMDkgMTAwNjQ0Ci0t LSBhL3NyYy9jdWlyYXNzL2RhdGFiYXNlLnNjbQorKysgYi9zcmMvY3VpcmFzcy9kYXRhYmFzZS5z Y20KQEAgLTU0Nyw2ICs1NDcsNyBAQCBBc3N1bWVzIHRoYXQgaWYgZ3JvdXAgaWQgc3RheXMgdGhl IHNhbWUgdGhlIGdyb3VwIGhlYWRlcnMgc3RheSB0aGUgc2FtZS4iCiAgICAgICAgICAgICAgICAg ICAgOzsgYmVmb3JlIHRob3NlIGluICdzY2hlZHVsZWQnIHN0YXRlICgtMikuCiAgICAgICAgICAg ICAgICAgICAgInN0YXR1cyBERVNDLCB0aW1lc3RhbXAgREVTQyIpCiAgICAgICAgICAgICAgICAg ICAoXyAiaWQgREVTQyIpKSkKKyAgICAgICAgIDs7IFRPRE86IGNyZWF0ZSBtYWNybyB0byByZWFk IHRoZSBmb2xsb3dpbmcgU1FMIHF1ZXJ5IGZyb20gc29tZXRoaW5nLWdldC1idWlsZHMuc3FsCiAg ICAgICAgICAoc3RtdC10ZXh0IChmb3JtYXQgI2YgIlNFTEVDVCAqIEZST00gKAogU0VMRUNUIEJ1 aWxkcy5pZCwgT3V0cHV0cy5uYW1lLCBPdXRwdXRzLnBhdGgsIEJ1aWxkcy50aW1lc3RhbXAsCiBC dWlsZHMuc3RhcnR0aW1lLCBCdWlsZHMuc3RvcHRpbWUsIEJ1aWxkcy5sb2csIEJ1aWxkcy5zdGF0 dXMsCmRpZmYgLS1naXQgYS9zcmMvY3VpcmFzcy9odHRwLnNjbSBiL3NyYy9jdWlyYXNzL2h0dHAu c2NtCmluZGV4IDJkNjZmZjkuLjA4OTljZDEgMTAwNjQ0Ci0tLSBhL3NyYy9jdWlyYXNzL2h0dHAu c2NtCisrKyBiL3NyYy9jdWlyYXNzL2h0dHAuc2NtCkBAIC0xMTcsNiArMTE3LDEzIEBACiAgICAg KG1hcCBidWlsZC0+aHlkcmEtYnVpbGQgYnVpbGRzKSkpCiAKIChkZWZpbmUgKHJlcXVlc3QtcGFy YW1ldGVycyByZXF1ZXN0KQorICA7OyBSRVZJRVc6IHRoaXMgJ3BhcmFtZXRlcnMnIGlzIGFtYmln aW91cyBpbiBhaW9odHRwLiBJdCdzIGNhbGxlZAorICA7OyByZXF1ZXN0LnF1ZXJ5IGJlY2F1c2Ug dGhlIHBhcnQgYWZ0ZXIgPyBpbiB0aGUgVVJMIGlzIGNhbGxlZCB0aGUgInF1ZXJ5CisgIDs7IHN0 cmluZyIuIEFsc28gcGFyYW1ldGVycyBjYW4gYmUgcGFzc2VkIHZpYSB0aGUgcGF0aCBwYXJ0IG9m IHRoZSBVUkwuCisKKyAgOzsgaGVyZSBpcyB3aGF0IEkgdXNlCisgIDs7IGh0dHBzOi8vZ2l0aHVi LmNvbS9hLWd1aWxlLW1pbmQvZ3VpbGUtd2ViL2Jsb2IvbWFzdGVyL3NyYy93ZWIvZGVjb2RlLnNj bQorCiAgICJQYXJzZSB0aGUgUkVRVUVTVCBxdWVyeSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhl bSB1bmRlciB0aGUgZm9ybQogICAnKChwYXJhbWV0ZXIgLiB2YWx1ZSkgLi4uKS4iCiAgIChsZXQq ICgodXJpIChyZXF1ZXN0LXVyaSByZXF1ZXN0KSkKQEAgLTEyNSwxMSArMTMyLDE0IEBACiAgICAg ICAgIChtYXAgKGxhbWJkYSAocGFyYW0pCiAgICAgICAgICAgICAgICAobWF0Y2ggKHN0cmluZy1z cGxpdCBwYXJhbSAjXD0pCiAgICAgICAgICAgICAgICAgICgoa2V5IHBhcmFtKQotICAgICAgICAg ICAgICAgICAgKGxldCAoKGtleS1zeW1ib2wgKHN0cmluZy0+c3ltYm9sIGtleSkpKQorICAgICAg ICAgICAgICAgICAgKGxldCAoKGtleS1zeW1ib2wgKHN0cmluZy0+c3ltYm9sICh1cmktZGVjb2Rl IGtleSkpKSkKICAgICAgICAgICAgICAgICAgICAgKGNvbnMga2V5LXN5bWJvbAogICAgICAgICAg ICAgICAgICAgICAgICAgICAobWF0Y2gga2V5LXN5bWJvbAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgnaWQgKHN0cmluZy0+bnVtYmVyIHBhcmFtKSkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoJ25yIChzdHJpbmctPm51bWJlciBwYXJhbSkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoJ2lkIChzdHJpbmctPm51bWJlciAodXJpLWRlY29kZSBwYXJhbSkpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgSSBkb24ndCB0aGluayB0aGlzIHdp bGwgc2NhbGUgaW4gdGVybXMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7 IGtpbmQgcXVlcnkgcGFpcnMgd2hlcmUgdGhlIGtleSBwYXJ0IGNhbiBiZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOzsgbWFueSBkaWZmZXJlbnQgdGhpbmdzCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKCduciAoc3RyaW5nLT5udW1iZXIgKHVyaS1kZWNvZGUgcGFyYW0p KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXyAgIHBhcmFtKSkpKSkpKQogICAgICAg ICAgICAgIChzdHJpbmctc3BsaXQgcXVlcnkgI1wmKSkKICAgICAgICAgJygpKSkpCkBAIC0xMzgs OSArMTQ4LDEwIEBACiA7OzsKIDs7OyBXZWIgc2VydmVyLgogOzs7Ci07OzsgVGhlIGFwaSBpcyBk ZXJpdmVkIGZyb20gdGhlIGh5ZHJhIG9uZS4gSXQgaXMgcGFydGlhbGx5IGRlc2NyaWJlZCBoZXJl IDoKKzs7OyBUaGUgZXhwb3NlZCBhcGkgaXMgZGVyaXZlZCBmcm9tIHRoZSBoeWRyYSBvbmUuIEl0 IGlzIHBhcnRpYWxseSBkZXNjcmliZWQKKzs7OyBoZXJlIDoKIDs7OwotOzs7IGh0dHBzOi8vZ2l0 aHViLmNvbS9OaXhPUy9oeWRyYS9ibG9iL21hc3Rlci9kb2MvbWFudWFsL2FwaS54bWwKKzs7OyAg IGh0dHBzOi8vZ2l0aHViLmNvbS9OaXhPUy9oeWRyYS9ibG9iL21hc3Rlci9kb2MvbWFudWFsL2Fw aS54bWwKIDs7OwogCiAoZGVmaW5lIChyZXF1ZXN0LXBhdGgtY29tcG9uZW50cyByZXF1ZXN0KQpA QCAtMjE3LDYgKzIyOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICh3aXRoLWNyaXRpY2FsLXNl Y3Rpb24gZGItY2hhbm5lbCAoZGIpCiAgICAgICAgICAgICAgICAgICAgICAgKGRiLWdldC1zcGVj aWZpY2F0aW9ucyBkYikpKSkpCiAgICAgKCgiYnVpbGQiIGJ1aWxkLWlkKQorICAgICA7OyBSRVZJ RVc6IGRvbid0IGlubGluZSB0aGF0IG11Y2ggY29kZSBpbiBzYW1lIHByb2NlZHVyZSBha2EuIHBy b2NlZHVyZXMKKyAgICAgOzsgZm9yIHRoZSB3aW4xCiAgICAgIChsZXQgKChoeWRyYS1idWlsZAog ICAgICAgICAgICAgKHdpdGgtY3JpdGljYWwtc2VjdGlvbiBkYi1jaGFubmVsIChkYikKICAgICAg ICAgICAgICAgKGhhbmRsZS1idWlsZC1yZXF1ZXN0IGRiIChzdHJpbmctPm51bWJlciBidWlsZC1p ZCkpKSkpCkBAIC0yMzQsNiArMjQ3LDcgQEAKICAgICAgICAgICAgICAgKGxldCAoKHVyaSAoc3Ry aW5nLT51cmktcmVmZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kICIvbG9nLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJh c2VuYW1lIG91dHB1dCkpKSkpCisgICAgICAgICAgICAgICAgOzsgY3JlYXRlIGEgcHJvY2VkdXJl IGZvciB0aGF0IHdoZW4geW91IHdpbGwgaGF2ZSBmb3Jtcy4KICAgICAgICAgICAgICAgICAocmVz cG9uZCAoYnVpbGQtcmVzcG9uc2UgIzpjb2RlIDMwMgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjOmhlYWRlcnMgYCgobG9jYXRpb24gLiAsdXJpKSkpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIzpib2R5ICIiKSkpCkBAIC0yNDEsNyArMjU1LDEwIEBACiAgICAg ICAgICAgICAgIDs7IE5vdCBlbnRyeSBmb3IgQlVJTEQtSUQgaW4gdGhlICdPdXRwdXRzJyB0YWJs ZS4KICAgICAgICAgICAgICAgKHJlc3BvbmQtanNvbi13aXRoLWVycm9yCiAgICAgICAgICAgICAg ICA1MDAKKyAgICAgICAgICAgICAgIDs7IDUwMCBpcyB2ZXJ5IHN0cm9uZyBlcnJvciwgaXQncyBt dXN0IG5vdCBiZSB1c2VkIGZvciBleHBlY3RlZCBmYWlsdXJlCisgICAgICAgICAgICAgICA7OyBi eSB0aGUgd2F5IHRoaXMgaXMgcmVuZGVyaW5nIGxvZ2ljLCBpdCBzaG91bGQgYmUgaW4gaXQncyBv d24gcHJvY2VkdXJlLgogICAgICAgICAgICAgICAgKGZvcm1hdCAjZiAiT3V0cHV0cyBvZiBidWls ZCB+YSBhcmUgdW5rbm93bi4iIGJ1aWxkLWlkKSkpCisKICAgICAgICAgICAgICAoI2YKICAgICAg ICAgICAgICAgKHJlc3BvbmQtYnVpbGQtbm90LWZvdW5kIGJ1aWxkLWlkKSkpCiAgICAgICAgICAg IChyZXNwb25kLWJ1aWxkLW5vdC1mb3VuZCBidWlsZC1pZCkpKSkKQEAgLTI1MSwxMyArMjY4LDI1 IEBACiAgICAgICAgICAgICAobnIgKGFzc3EtcmVmIHBhcmFtcyAnbnIpKSkKICAgICAgICAoaWYg bnIKICAgICAgICAgICAgKHJlc3BvbmQtanNvbiAob2JqZWN0LT5qc29uLXN0cmluZworICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyBkb24ndCBuZXN0IGhlcmUgdGhlIGNvZGUuIEJlY2F1c2Ug aHR0cCBoYW5kbGVycyBzaG91bGQgZm9sbG93CisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7 IHRoZSBmb2xsb3dpbmcgcGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgICAoZGVmaW5lIChoYW5kbGVyIHJlcXVlc3QgYm9k eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgICAgICAobGV0ICgoaW5wdXQgKHNuYXJm LWlucHV0IHJlcXVlc3QgYm9keSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICA7OyAgICAg ICAgICAoc2hhbGxvdy12YWxpZGF0ZS13aXRoLWV4Y2VwdGlvbiBpbnB1dCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgOzsgICAgICAgICAgKGRlZXAtdmFsaWRhdGUtd2l0aC1leGNlcHRpb24g aW5wdXQgKGRiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgICAgICAgICAgKGxldCAo KG91dCAoZG9tYWluLWNvZGUtZ29lcy1oZXJlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg IDs7ICAgICAgICAgICAgIChzeG1sLT5yZXNwb25zZSAoaGFuZGxlci10ZW1wbGF0ZSBvdXQpKSkp CisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAg IDs7IEJhc2ljYWxseSwgdGhlIGN1cnJlbnQgY29kZSByZXF1aXJlcyB0b3AgZG93biBhbmQgYm90 dG9tIHVwCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHJlYWRpbmcuIERlY2xhcmluZyBp bnRlcm1lZGlhdGUgdmFyaWFibGVzIGhlbHBzIHJlYWRiaWxpdHkuCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICh3aXRoLWNyaXRpY2FsLXNlY3Rpb24gZGItY2hhbm5lbCAoZGIpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGRiLWdldC1ldmFsdWF0aW9ucyBkYiBucikpKSkKLSAgICAg ICAgICAgKHJlc3BvbmQtanNvbi13aXRoLWVycm9yIDUwMCAiUGFyYW1ldGVyIG5vdCBkZWZpbmVk ISIpKSkpCisgICAgICAgICAgIChyZXNwb25kLWpzb24td2l0aC1lcnJvciA0MDAgIlBhcmFtZXRl ciBub3QgZGVmaW5lZCEiKSkpKSAgOzsgYWthLiBiYWQgcmVxdWVzdAogICAgICgoImFwaSIgImxh dGVzdGJ1aWxkcyIpCiAgICAgIChsZXQqICgocGFyYW1zIChyZXF1ZXN0LXBhcmFtZXRlcnMgcmVx dWVzdCkpCiAgICAgICAgICAgICA7OyAnbnIgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSB0byBsaW1p dCBxdWVyeSBzaXplLgotICAgICAgICAgICAgKHZhbGlkLXBhcmFtcz8gKGFzc3EtcmVmIHBhcmFt cyAnbnIpKSkKKyAgICAgICAgICAgICh2YWxpZC1wYXJhbXM/IChhc3NxLXJlZiBwYXJhbXMgJ25y KSkpICA7OyBvciBleGNlcHRpb24/CiAgICAgICAgKGlmIHZhbGlkLXBhcmFtcz8KICAgICAgICAg ICAgOzsgTGltaXQgcmVzdWx0cyB0byBidWlsZHMgdGhhdCBhcmUgImRvbmUiLgogICAgICAgICAg ICAocmVzcG9uZC1qc29uCkBAIC0zNTksNyArMzg4LDEwIEBACiAgICAgOzsgcHJvY2VzcyBlYWNo IGNsaWVudCByZXF1ZXN0IGFuZCB0aGVuIGRpcmVjdGx5IGdvIGJhY2sgd2FpdGluZyBmb3IgdGhl CiAgICAgOzsgbmV4dCBjbGllbnQgKGNvbnZlcnNlbHksIEd1aWxlJ3MgJ3J1bi1zZXJ2ZXInIGxv b3AgcHJvY2Vzc2VzIGNsaWVudHMKICAgICA7OyBvbmUgYWZ0ZXIgYW5vdGhlciwgc2VxdWVudGlh bGx5LikgIFdlIGNhbiBkbyB0aGF0IGJlY2F1c2Ugd2UgZG9uJ3QKLSAgICA7OyBtYWludGFpbiBh bnkgc3RhdGUgYWNyb3NzIGNvbm5lY3Rpb25zLgorICAgIDs7IG1haW50YWluIGFueSBzdGF0ZSBh Y3Jvc3MgY29ubmVjdGlvbnMuICBJIGRvbid0IHVuZGVyc3RhbmQgdGhhdAorICAgIDs7IGNvbW1l bnQuIFdoeSBubyBzdGF0ZSBhY3Jvc3MgY29ubmVjdGlvbnM/IGlzbid0IHNxbGl0ZSB0aGF0IHN0 b3JlcworICAgIDs7IHN0YXRlcz8gRG9lcyBpdCBtZWFuIHRoZXJlIGlzIG5vIGdsb2JhbCBtdXRh YmxlIGluIG1lbW9yeSBkYXRhIGluCisgICAgOzsgY3VpcmFzcz8KICAgICA7OwogICAgIDs7IFhY WDogV2UgZG9uJ3QgZG8gJ2NhbGwtd2l0aC1zaWdpbnQnIGxpa2UgJ3J1bi1zZXJ2ZXInIGRvZXMu CiAgICAgKGxldCogKChpbXBsIChsb29rdXAtc2VydmVyLWltcGwgJ2ZpYmVyaXplZCkpCmRpZmYg LS1naXQgYS9zcmMvc2NoZW1hLnNxbCBiL3NyYy9zY2hlbWEuc3FsCmluZGV4IGViMGY3ZTkuLjc2 OTM2MGYgMTAwNjQ0Ci0tLSBhL3NyYy9zY2hlbWEuc3FsCisrKyBiL3NyYy9zY2hlbWEuc3FsCkBA IC0xLDUgKzEsOCBAQAogQkVHSU4gVFJBTlNBQ1RJT047CiAKKy0tIFJFVklFVzogVGhlIG5hbWUg b2YgdGhlIHRhYmxlIG11c3QgYmUgYWxsIHNtYWxsIGNhcHMuCistLSBDT01NRU5UOiBTb21lIHBl b3BsZSBhcmd1ZSB0YWJsZSBuYW1lIG11c3QgYmUgc2luZ3VsYXIKKy0tICAgICAgICAgIGJ1dCBJ IGRpc2FncmVlLCBib3RoIG1pZ2h0IHdvcmsuCiBDUkVBVEUgVEFCTEUgU3BlY2lmaWNhdGlvbnMg KAogICBuYW1lICAgICAgICAgIFRFWFQgTk9UIE5VTEwgUFJJTUFSWSBLRVksCiAgIGxvYWRfcGF0 aF9pbnB1dHMgVEVYVCBOT1QgTlVMTCwgLS0gbGlzdCBvZiBpbnB1dCBuYW1lcyB3aG9zZSBsb2Fk IHBhdGggd2lsbCBiZSBpbiBHdWlsZSdzICVsb2FkLXBhdGgKQEAgLTY0LDcgKzY3LDcgQEAgQ1JF QVRFIFRBQkxFIEJ1aWxkcyAoCiAgIGxvZyAgICAgICAgICAgVEVYVCBOT1QgTlVMTCwKICAgc3Rh dHVzICAgICAgICBJTlRFR0VSIE5PVCBOVUxMLAogICB0aW1lc3RhbXAgICAgIElOVEVHRVIgTk9U IE5VTEwsCi0gIHN0YXJ0dGltZSAgICAgSU5URUdFUiBOT1QgTlVMTCwKKyAgc3RhcnR0aW1lICAg ICBJTlRFR0VSIE5PVCBOVUxMLCAgLS0gUkVWSUVXOiB3aHkgbm90IHN0YXJ0X3RpbWU/CiAgIHN0 b3B0aW1lICAgICAgSU5URUdFUiBOT1QgTlVMTCwKICAgRk9SRUlHTiBLRVkgKGRlcml2YXRpb24p IFJFRkVSRU5DRVMgRGVyaXZhdGlvbnMgKGRlcml2YXRpb24pLAogICBGT1JFSUdOIEtFWSAoZXZh bHVhdGlvbikgUkVGRVJFTkNFUyBFdmFsdWF0aW9ucyAoaWQpCkBAIC03NSw1ICs3OCwxMiBAQCBD UkVBVEUgVEFCTEUgQnVpbGRzICgKIENSRUFURSBJTkRFWCBCdWlsZHNfRGVyaXZhdGlvbnNfaW5k ZXggT04gQnVpbGRzKHN0YXR1cyBBU0MsIHRpbWVzdGFtcCBBU0MsIGlkLCBkZXJpdmF0aW9uLCBl dmFsdWF0aW9uLCBzdG9wdGltZSBERVNDKTsKIENSRUFURSBJTkRFWCBJbnB1dHNfaW5kZXggT04g SW5wdXRzKHNwZWNpZmljYXRpb24sIG5hbWUsIGJyYW5jaCk7CiBDUkVBVEUgSU5ERVggRGVyaXZh dGlvbnNfaW5kZXggT04gRGVyaXZhdGlvbnMoZGVyaXZhdGlvbiwgZXZhbHVhdGlvbiwgam9iX25h bWUsIHN5c3RlbSk7CistLSBDT01NRU5UOiBJbmRpY2VzIG1ha2UgdGhlIGZvbGxvd2luZyB0cmFk ZSBvZmY6IHNsb3cgZG93biB3cml0ZXMgYW5kIHRha2UKKy0tICAgICAgICAgIG1vcmUgc3BhY2Ug KGRpc2sgYW5kIG1lbW9yeSkgYW5kIGluIHByaXplIHlvdSBnZXQgZmFzdGVyIHJlYWRzLgorLS0g Q09NTUVOVDogeW91J2QgYmV0dGVyIGFkZCBDUkVBVEUgSU5ERVgganVzdCBiZWxvdyB0aGUgdGFi bGUgdGhhdCB0aGV5CistLSAgICAgICAgICBzcGVlZCB1cCBxdWVyaWVzIGZvci4KKwogCiBDT01N SVQ7CisKKy0tCg== --0000000000004fcb98057277c5cd--