From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id pBANwU6i031853 for ; Sun, 11 Dec 2011 00:58:30 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: As0EAPbw407RVdK2kWdsb2JhbABDmlAmDodlAYZtDoESCCIBAQEBCQkNBxIngXIBAQEBAgESAiwBGxILAQMBCwYFCwgSIQIgAQIPAQUBChIZEhCHZgiYIgqLZIJrhBk9iHECBQyDbId1BIJbkhaKa4MGPYN6 X-IronPort-AV: E=Sophos;i="4.71,332,1320620400"; d="scan'208";a="122874611" Received: from mail-iy0-f182.google.com ([209.85.210.182]) by mail4-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-SHA; 11 Dec 2011 00:58:24 +0100 Received: by iakl21 with SMTP id l21so808308iak.27 for ; Sat, 10 Dec 2011 15:58:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=a7d5POMMLVK4Uw/FZSOnnJeNNb7Dx2+bcjGxW5PUKzI=; b=qUj3mKGPpYiOfTP6zgmDe072i3l0f+pFdUjeSRSZZCSzI1PCl+FDBLg5PQ59V/wa3O ZNKmpsSOxb8H+/b1YMfVTG498Gu4GaxIeOf3jWVOnsgRHS/KT6cRbbx9t+/Kl7Zb4K02 Sqa5XlhhNyqTQJDi8c2D7/+bpw3ccdxfl/KB4= MIME-Version: 1.0 Received: by 10.50.41.130 with SMTP id f2mr8962390igl.75.1323561503069; Sat, 10 Dec 2011 15:58:23 -0800 (PST) Received: by 10.42.175.71 with HTTP; Sat, 10 Dec 2011 15:58:23 -0800 (PST) In-Reply-To: <20111210211252.GC2144@ombreroze.happyleptic.org> References: <4EDE33A0.6070004@gmail.com> <4EE3C892.30003@gmail.com> <20111210211252.GC2144@ombreroze.happyleptic.org> Date: Sun, 11 Dec 2011 00:58:23 +0100 Message-ID: From: Hans Ole Rafaelsen To: rixed@happyleptic.org Cc: caml-list@inria.fr Content-Type: multipart/alternative; boundary=14dae9340a493a96c704b3c5ad85 Subject: Re: [Caml-list] Some comments on recent discussions --14dae9340a493a96c704b3c5ad85 Content-Type: text/plain; charset=ISO-8859-1 On Sat, Dec 10, 2011 at 10:12 PM, wrote: > What I'd really like is a way to mix any version I want of the packages I > install, especially experimental versions for the packages I want to test > or > contribute to. > I stopped using GODI some time ago because I wanted master of ocaml and > batteries but stable versions of everything else. So I ended up rolling my > own makefile-based installation/upgrade tool which is both annoying and > archaic. > > Here is a little trick that I did to get full control of which version of each package gets installed. In rocketboost, file 'godi-tools/mk/build/mk/bsd.prefs.mk' around line 700 change to use your private repository. # The primary backup site. MASTER_SITE_BACKUP= \ http://192.168.100.100/godi/distfiles/ # http://godi-backup2.camlcity.org/godi-backup/\ # http://www.ocaml-programming.de/godi-backup/\ # http://godi.0ok.org/godi-backup/ # Where to put distfiles that don't have any other master site MASTER_SITE_LOCAL= \ ${MASTER_SITE_BACKUP:=LOCAL_PORTS/} GODI_BUILD_SITE?= \ http://192.168.100.100/godi/${GODI_SECTION} # http://www.ocaml-programming.de/godi-build/${GODI_SECTION}/ # This must only be one URL. GODI_BUILD_BACKUP_SITES= \ http://192.168.100.100/godi/${GODI_SECTION} # http://godi-backup2.camlcity.org/godi-build/${GODI_SECTION}/\ # http://godi.0ok.org/godi-build/${GODI_SECTION}/ GODI_BUILD_SITES= \ ${GODI_BUILD_SITE} \ ${GODI_BUILD_BACKUP_SITES} ROCKETBOOST_BUILD_SITES?= \ http://192.168.100.100/godi/ # http://www.ocaml-programming.de/godi-build/rocketboost/\ # http://godi-backup2.camlcity.org/godi-build/rocketboost/\ # http://godi.0ok.org/godi-build/rocketboost/ You also need to patch godi-tools package in the same way, so that the bsd.prefs.mk that gets installed with it and is used after the bootstrap is also pointing to the private repository. At your server you keep the distfiles in the godi/distfiles/ folder. This is similar to the http://www.ocaml-programming.de/godi-backup/ for the official GODI. For the build files you keep them and 'available.new' under a section directory e.g. 3.12 similar to http://www.ocaml-programming.de/godi-build/3.12 or have a dev section or whatever section you want. With this in place you can manage your own GODI "universe". You can mix whatever version of packages you want, by editing the available.new. Guess you might have to delete the local copy of a package in build/buildfiles/.tar.gz and also if you decide to rollback to an old version of the package. With this setup you should also have an official version of GODI that fetch from the official places. This is not the installation you work with but occasionally you can switch to it (by changing the PATH variable or a sym-link), do an update and see what new packages are available. You copy the new distfiels you want to your distfiles/ directory at your server and the buildfiles to the section you want them in and update the available.new for that section. Having this on a server makes it possible for a team to work with the same versions of the packages in an easy way. Maybe it is possible to override the locations without patching the ' bsd.prefs.mk' files, but this was the way I ended up doing it, and I would be glad to hear if there is some easier way. Hopes this helps > Is this in the planned feature list? > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa-roc.inria.fr/wws/info/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > > --14dae9340a493a96c704b3c5ad85 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: base64 PGJyPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gU2F0LCBEZWMg MTAsIDIwMTEgYXQgMTA6MTIgUE0sICA8c3BhbiBkaXI9Imx0ciI+Jmx0Ozxh IGhyZWY9Im1haWx0bzpyaXhlZEBoYXBweWxlcHRpYy5vcmciPnJpeGVkQGhh cHB5bGVwdGljLm9yZzwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2Nr cXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAw IC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0 OjFleCI+CldoYXQgSSYjMzk7ZCByZWFsbHkgbGlrZSBpcyBhIHdheSB0byBt aXggYW55IHZlcnNpb24gSSB3YW50IG9mIHRoZSBwYWNrYWdlcyBJPGJyPgpp bnN0YWxsLCBlc3BlY2lhbGx5IGV4cGVyaW1lbnRhbCB2ZXJzaW9ucyBmb3Ig dGhlIHBhY2thZ2VzIEkgd2FudCB0byB0ZXN0IG9yPGJyPgpjb250cmlidXRl IHRvLjxicj4KSSBzdG9wcGVkIHVzaW5nIEdPREkgc29tZSB0aW1lIGFnbyBi ZWNhdXNlIEkgd2FudGVkIG1hc3RlciBvZiBvY2FtbCBhbmQ8YnI+CmJhdHRl cmllcyBidXQgc3RhYmxlIHZlcnNpb25zIG9mIGV2ZXJ5dGhpbmcgZWxzZS4g oFNvIEkgZW5kZWQgdXAgcm9sbGluZyBteTxicj4Kb3duIG1ha2VmaWxlLWJh c2VkIGluc3RhbGxhdGlvbi91cGdyYWRlIHRvb2wgd2hpY2ggaXMgYm90aCBh bm5veWluZyBhbmQ8YnI+CmFyY2hhaWMuPGJyPgo8YnI+PC9ibG9ja3F1b3Rl PjxkaXY+SGVyZSBpcyBhIGxpdHRsZSB0cmljayB0aGF0IEkgZGlkIHRvIGdl dCBmdWxsIGNvbnRyb2wgb2Ygd2hpY2ggdmVyc2lvbiBvZiBlYWNoIHBhY2th Z2UgZ2V0cyBpbnN0YWxsZWQuPGJyPjxicj5JbiByb2NrZXRib29zdCwgZmls ZSAmIzM5O2dvZGktdG9vbHMvbWsvYnVpbGQvbWsvPGEgaHJlZj0iaHR0cDov L2JzZC5wcmVmcy5tayI+YnNkLnByZWZzLm1rPC9hPiYjMzk7IGFyb3VuZCBs aW5lIDcwMCBjaGFuZ2UgdG8gdXNlIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5 Ljxicj4KPGJyPiMgVGhlIHByaW1hcnkgYmFja3VwIHNpdGUuoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJyPk1BU1RFUl9TSVRFX0JBQ0tV UD2goKCgIFygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJy PgqgoKCgoKCgIDxhIGhyZWY9Imh0dHA6Ly8xOTIuMTY4LjEwMC4xMDAvZ29k aS9kaXN0ZmlsZXMvIj5odHRwOi8vMTkyLjE2OC4xMDAuMTAwL2dvZGkvZGlz dGZpbGVzLzwvYT6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoCA8YnI+CiOgoKCgoKAgPGEgaHJlZj0iaHR0cDovL2dv ZGktYmFja3VwMi5jYW1sY2l0eS5vcmcvZ29kaS1iYWNrdXAvIj5odHRwOi8v Z29kaS1iYWNrdXAyLmNhbWxjaXR5Lm9yZy9nb2RpLWJhY2t1cC88L2E+IFyg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKAgPGJyPgojoKCgoKCgIDxhIGhyZWY9Imh0dHA6Ly93d3cub2NhbWwtcHJv Z3JhbW1pbmcuZGUvZ29kaS1iYWNrdXAvIj5odHRwOi8vd3d3Lm9jYW1sLXBy b2dyYW1taW5nLmRlL2dvZGktYmFja3VwLzwvYT4gXKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJyPgojoKCg oKCgIDxhIGhyZWY9Imh0dHA6Ly9nb2RpLjBvay5vcmcvZ29kaS1iYWNrdXAv Ij5odHRwOi8vZ29kaS4wb2sub3JnL2dvZGktYmFja3VwLzwvYT6goKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKAgPGJyPgqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDxicj4jIFdoZXJlIHRv IHB1dCBkaXN0ZmlsZXMgdGhhdCBkb24mIzM5O3QgaGF2ZSBhbnkgb3RoZXIg bWFzdGVyIHNpdGWgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoCA8YnI+Ck1BU1RFUl9TSVRFX0xPQ0FMPSBcoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJyPqCgoKCgoKAgJHtNQVNU RVJfU0lURV9CQUNLVVA6PUxPQ0FMX1BPUlRTL32goKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAg PGJyPgqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgIDxicj5HT0RJX0JVSUxEX1NJVEU/PSBcoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDxicj4KoKCg oKCgoCA8YSBocmVmPSJodHRwOi8vMTkyLjE2OC4xMDAuMTAwL2dvZGkvJHtH T0RJX1NFQ1RJT059Ij5odHRwOi8vMTkyLjE2OC4xMDAuMTAwL2dvZGkvJHtH T0RJX1NFQ1RJT059PC9hPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoCA8YnI+CiOgoKCgoKCgIDxhIGhyZWY9Imh0dHA6Ly93 d3cub2NhbWwtcHJvZ3JhbW1pbmcuZGUvZ29kaS1idWlsZC8ke0dPRElfU0VD VElPTn0vIj5odHRwOi8vd3d3Lm9jYW1sLXByb2dyYW1taW5nLmRlL2dvZGkt YnVpbGQvJHtHT0RJX1NFQ1RJT059LzwvYT6goKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoCA8YnI+CiMgVGhpcyBtdXN0IG9ubHkgYmUgb25l IFVSTC6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJyPqCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKAgPGJyPgpHT0RJX0JVSUxEX0JBQ0tVUF9TSVRFUz0gXKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDxicj6goKCgoKCgIDxhIGhy ZWY9Imh0dHA6Ly8xOTIuMTY4LjEwMC4xMDAvZ29kaS8ke0dPRElfU0VDVElP Tn0iPmh0dHA6Ly8xOTIuMTY4LjEwMC4xMDAvZ29kaS8ke0dPRElfU0VDVElP Tn08L2E+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgIDxicj4KI6CgoKCgoCA8YSBocmVmPSJodHRwOi8vZ29kaS1iYWNrdXAy LmNhbWxjaXR5Lm9yZy9nb2RpLWJ1aWxkLyR7R09ESV9TRUNUSU9OfS8iPmh0 dHA6Ly9nb2RpLWJhY2t1cDIuY2FtbGNpdHkub3JnL2dvZGktYnVpbGQvJHtH T0RJX1NFQ1RJT059LzwvYT4gXKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoCA8YnI+CiOgoKCgoKAgPGEgaHJlZj0iaHR0cDovL2dvZGkuMG9r Lm9yZy9nb2RpLWJ1aWxkLyR7R09ESV9TRUNUSU9OfS8iPmh0dHA6Ly9nb2Rp LjBvay5vcmcvZ29kaS1idWlsZC8ke0dPRElfU0VDVElPTn0vPC9hPqCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8 YnI+CqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKAgPGJyPkdPRElfQlVJTERfU0lURVM9IFygoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJyPgqgoKCg oKCgICR7R09ESV9CVUlMRF9TSVRFfSBcoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgIDxicj6goKCgoKCgICR7R09ESV9CVUlMRF9CQUNLVVBfU0lU RVN9oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDxicj4KoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oCA8YnI+Uk9DS0VUQk9PU1RfQlVJTERfU0lURVM/PSBcoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoCA8YnI+CqCgoKCgoKAgPGEgaHJlZj0iaHR0 cDovLzE5Mi4xNjguMTAwLjEwMC9nb2RpLyI+aHR0cDovLzE5Mi4xNjguMTAw LjEwMC9nb2RpLzwvYT6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgPGJyPgojoKCgoKCgIDxhIGhy ZWY9Imh0dHA6Ly93d3cub2NhbWwtcHJvZ3JhbW1pbmcuZGUvZ29kaS1idWls ZC9yb2NrZXRib29zdC8iPmh0dHA6Ly93d3cub2NhbWwtcHJvZ3JhbW1pbmcu ZGUvZ29kaS1idWlsZC9yb2NrZXRib29zdC88L2E+IFygoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8YnI+CiOgoKCgoKAgPGEgaHJl Zj0iaHR0cDovL2dvZGktYmFja3VwMi5jYW1sY2l0eS5vcmcvZ29kaS1idWls ZC9yb2NrZXRib29zdC8iPmh0dHA6Ly9nb2RpLWJhY2t1cDIuY2FtbGNpdHku b3JnL2dvZGktYnVpbGQvcm9ja2V0Ym9vc3QvPC9hPiBcoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA8YnI+CiOgoKCgoKAgPGEgaHJl Zj0iaHR0cDovL2dvZGkuMG9rLm9yZy9nb2RpLWJ1aWxkL3JvY2tldGJvb3N0 LyI+aHR0cDovL2dvZGkuMG9rLm9yZy9nb2RpLWJ1aWxkL3JvY2tldGJvb3N0 LzwvYT6goKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgIDxicj4KPGJyPllvdSBhbHNvIG5lZWQgdG8gcGF0Y2gg Z29kaS10b29scyBwYWNrYWdlIGluIHRoZSBzYW1lIHdheSwgc28gdGhhdCB0 aGUgPGEgaHJlZj0iaHR0cDovL2JzZC5wcmVmcy5tayI+YnNkLnByZWZzLm1r PC9hPiB0aGF0IGdldHMgaW5zdGFsbGVkIHdpdGggaXQgYW5kIGlzIHVzZWQg YWZ0ZXIgdGhlIGJvb3RzdHJhcCBpcyBhbHNvIHBvaW50aW5nIHRvIHRoZSBw cml2YXRlIHJlcG9zaXRvcnkuPGJyPgo8YnI+QXQgeW91ciBzZXJ2ZXIgeW91 IGtlZXAgdGhlIGRpc3RmaWxlcyBpbiB0aGUgZ29kaS9kaXN0ZmlsZXMvIGZv bGRlci6gIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgPGEgaHJlZj0iaHR0cDov L3d3dy5vY2FtbC1wcm9ncmFtbWluZy5kZS9nb2RpLWJhY2t1cC8iPmh0dHA6 Ly93d3cub2NhbWwtcHJvZ3JhbW1pbmcuZGUvZ29kaS1iYWNrdXAvPC9hPiBm b3IgdGhlIG9mZmljaWFsIEdPREkuoCBGb3IgdGhlIGJ1aWxkIGZpbGVzIHlv dSBrZWVwIHRoZW0gYW5kICYjMzk7YXZhaWxhYmxlLm5ldyYjMzk7IHVuZGVy IGEgc2VjdGlvbiBkaXJlY3RvcnkgZS5nLiAzLjEyIHNpbWlsYXIgdG8gPGEg aHJlZj0iaHR0cDovL3d3dy5vY2FtbC1wcm9ncmFtbWluZy5kZS9nb2RpLWJ1 aWxkLzMuMTIiPmh0dHA6Ly93d3cub2NhbWwtcHJvZ3JhbW1pbmcuZGUvZ29k aS1idWlsZC8zLjEyPC9hPiBvciBoYXZlIGEgZGV2IHNlY3Rpb24gb3Igd2hh dGV2ZXIgc2VjdGlvbiB5b3Ugd2FudC48YnI+Cjxicj5XaXRoIHRoaXMgaW4g cGxhY2UgeW91IGNhbiBtYW5hZ2UgeW91ciBvd24gR09ESSAmcXVvdDt1bml2 ZXJzZSZxdW90Oy4gWW91IGNhbiBtaXggd2hhdGV2ZXIgdmVyc2lvbiBvZiBw YWNrYWdlcyB5b3Ugd2FudCwgYnkgZWRpdGluZyB0aGUgYXZhaWxhYmxlLm5l dy4gR3Vlc3MgeW91IG1pZ2h0IGhhdmUgdG8gZGVsZXRlIHRoZSBsb2NhbCBj b3B5IG9mIGEgcGFja2FnZSBpbiBidWlsZC9idWlsZGZpbGVzLyZsdDtwYWNr YWdlJmd0Oy50YXIuZ3ogYW5kIGFsc28gJmx0O2FwcHMtfGdvZGktJmx0O3Bh Y2thZ2UmZ3Q7IGlmIHlvdSBkZWNpZGUgdG8gcm9sbGJhY2sgdG8gYW4gb2xk IHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuPGJyPgo8YnI+V2l0aCB0aGlzIHNl dHVwIHlvdSBzaG91bGQgYWxzbyBoYXZlIGFuIG9mZmljaWFsIHZlcnNpb24g b2YgR09ESSB0aGF0IGZldGNoIGZyb20gdGhlIG9mZmljaWFsIHBsYWNlcy4g VGhpcyBpcyBub3QgdGhlIGluc3RhbGxhdGlvbiB5b3Ugd29yayB3aXRoIGJ1 dCBvY2Nhc2lvbmFsbHkgeW91IGNhbiBzd2l0Y2ggdG8gaXQgKGJ5IGNoYW5n aW5nIHRoZSBQQVRIIHZhcmlhYmxlIG9yIGEgc3ltLWxpbmspLCBkbyBhbiB1 cGRhdGUgYW5kIHNlZSB3aGF0IG5ldyBwYWNrYWdlcyBhcmUgYXZhaWxhYmxl LiBZb3UgY29weSB0aGUgbmV3IGRpc3RmaWVscyB5b3Ugd2FudCB0byB5b3Vy IGRpc3RmaWxlcy8gZGlyZWN0b3J5IGF0IHlvdXIgc2VydmVyIGFuZCB0aGUg YnVpbGRmaWxlcyB0byB0aGUgc2VjdGlvbiB5b3Ugd2FudCB0aGVtIGluIGFu ZCB1cGRhdGUgdGhlIGF2YWlsYWJsZS5uZXcgZm9yIHRoYXQgc2VjdGlvbi48 YnI+Cjxicj5IYXZpbmcgdGhpcyBvbiBhIHNlcnZlciBtYWtlcyBpdCBwb3Nz aWJsZSBmb3IgYSB0ZWFtIHRvIHdvcmsgd2l0aCB0aGUgc2FtZSB2ZXJzaW9u cyBvZiB0aGUgcGFja2FnZXMgaW4gYW4gZWFzeSB3YXkuPGJyPjxicj5NYXli ZSBpdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgbG9jYXRpb25zIHdp dGhvdXQgcGF0Y2hpbmcgdGhlICYjMzk7PGEgaHJlZj0iaHR0cDovL2JzZC5w cmVmcy5tayI+YnNkLnByZWZzLm1rPC9hPiYjMzk7IGZpbGVzLCBidXQgdGhp cyB3YXMgdGhlIHdheSBJIGVuZGVkIHVwIGRvaW5nIGl0LCBhbmQgSSB3b3Vs ZCBiZSBnbGFkIHRvIGhlYXIgaWYgdGhlcmUgaXMgc29tZSBlYXNpZXIgd2F5 Ljxicj4KPGJyPkhvcGVzIHRoaXMgaGVscHM8YnI+PGJyPqA8L2Rpdj48Ymxv Y2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB0 IDBwdCAwcHQgMC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQs MjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+CklzIHRoaXMgaW4gdGhlIHBs YW5uZWQgZmVhdHVyZSBsaXN0Pzxicj4KPGRpdiBjbGFzcz0iSE9FblpiIj48 ZGl2IGNsYXNzPSJoNSI+PGJyPgo8YnI+Ci0tPGJyPgpDYW1sLWxpc3QgbWFp bGluZyBsaXN0LiCgU3Vic2NyaXB0aW9uIG1hbmFnZW1lbnQgYW5kIGFyY2hp dmVzOjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9zeW1wYS1yb2MuaW5yaWEuZnIv d3dzL2luZm8vY2FtbC1saXN0IiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9z eW1wYS1yb2MuaW5yaWEuZnIvd3dzL2luZm8vY2FtbC1saXN0PC9hPjxicj4K QmVnaW5uZXImIzM5O3MgbGlzdDogPGEgaHJlZj0iaHR0cDovL2dyb3Vwcy55 YWhvby5jb20vZ3JvdXAvb2NhbWxfYmVnaW5uZXJzIiB0YXJnZXQ9Il9ibGFu ayI+aHR0cDovL2dyb3Vwcy55YWhvby5jb20vZ3JvdXAvb2NhbWxfYmVnaW5u ZXJzPC9hPjxicj4KQnVnIHJlcG9ydHM6IDxhIGhyZWY9Imh0dHA6Ly9jYW1s LmlucmlhLmZyL2Jpbi9jYW1sLWJ1Z3MiIHRhcmdldD0iX2JsYW5rIj5odHRw Oi8vY2FtbC5pbnJpYS5mci9iaW4vY2FtbC1idWdzPC9hPjxicj4KPGJyPgo8 L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPgo= --14dae9340a493a96c704b3c5ad85--