From owner-freebsd-mips@freebsd.org Thu Feb 4 10:36:47 2016 Return-Path: Delivered-To: freebsd-mips@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 281D1A9C1E0 for ; Thu, 4 Feb 2016 10:36:47 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: from phabric-backend.rbsd.freebsd.org (unknown [IPv6:2607:fc50:2000:101::1bb:73]) by mx1.freebsd.org (Postfix) with ESMTP id 154381C90 for ; Thu, 4 Feb 2016 10:36:47 +0000 (UTC) (envelope-from daemon-user@freebsd.org) Received: by phabric-backend.rbsd.freebsd.org (Postfix, from userid 1346) id 12063107009; Thu, 4 Feb 2016 10:36:47 +0000 (UTC) Date: Thu, 4 Feb 2016 10:36:47 +0000 To: freebsd-mips@freebsd.org From: "Sgalabov_gmail.com (Stanislav Galabov)" Reply-to: D5187+328+6f976eb405079218@reviews.freebsd.org Subject: [Differential] [Request, 597 lines] D5187: U-Boot loader (ubldr) support for MIPS Message-ID: X-Priority: 3 X-Phabricator-Sent-This-Message: Yes X-Mail-Transport-Agent: MetaMTA X-Auto-Response-Suppress: All X-Phabricator-Mail-Tags: , , , Thread-Topic: D5187: U-Boot loader (ubldr) support for MIPS X-Herald-Rules: <28> X-Phabricator-Projects: <#mips> X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-To: X-Phabricator-Cc: Precedence: bulk Thread-Index: OTk3YzM5Nzg4NmM4YmMzN2JjOTJlNjU5ODkw MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_1f56356ac303c3f039e449ffad2bc799" X-BeenThere: freebsd-mips@freebsd.org X-Mailman-Version: 2.1.20 List-Id: Porting FreeBSD to MIPS List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Feb 2016 10:36:47 -0000 --b1_1f56356ac303c3f039e449ffad2bc799 Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit Sgalabov_gmail.com created this revision. Sgalabov_gmail.com added reviewers: MIPS, loader, adrian, imp, ray. Sgalabov_gmail.com added a subscriber: freebsd-mips-list. Sgalabov_gmail.com set the repository for this revision to rS FreeBSD src repository. Sgalabov_gmail.com added a project: MIPS. REVISION SUMMARY This revision implements ubldr support for MIPS. A lot of it just mimics the ARM support for ubldr, basically the biggest change is in the start.S file. Apart from that, several Makefiles in sys/boot were not including the bsd.stand.mk, which prevented proper build for MIPS targets (due to some things compiled as PIC and others - as non-PIC). These Makefiles now include bsd.stand.mk and things build fine for MIPS (everything is build as non-PIC). I've used the head version of U-Boot and modified it to support the FreeBSD API for MIPS architectures. I've submitted the patch to U-Boot as well. In case it doesn't go through for some reason, I am also putting a copy of the patch here: https://www.dropbox.com/s/dmgz9idpj4beqpr/0001-Add-FreeBSD-API-support-for-MIPS-platforms.patch?dl=0 TEST PLAN I've tested this with the following setup: - QEMU with its 'mips' target in little endian mode - u-boot compiled for quemu-mips (little endian) - ubldr compiled for mipsel - a kernel quickly put together for the qemu-mips target that only supports basic UART (so we can see the bootlog). Output of the whole thing booting can be seen below: > qemu-system-mipsel -M mips -bios u-boot.bin -nographic -net nic,macaddr=00:16:3e:00:00:01 -net tap -hda hda.img -cpu 24Kc W: /etc/qemu-ifup: no bridge for guest interface found Could not open option rom 'vgabios-cirrus.bin': No such file or directory U-Boot 2016.03-rc1-dirty (Feb 04 2016 - 11:41:10 +0200) Board: Qemu -M mips CPU: 24Kc proc_id=0x19300 DRAM: 128 MiB Using default environment In: serial Out: serial Err: serial Net: NE2000 IDE: Bus 0: OK Bus 1: OK Device 0: Model: QEMU HARDDISK Firm: 2.0.0 Ser#: QM00001 Type: Hard Disk Capacity: 50.0 MB = 0.0 GB (102400 x 512) Device 1: not available Device 2: not available Device 3: not available Hit any key to stop autoboot: 0 qemu-mipsel # tftp; bootelf Using NE2000 device TFTP from server 192.168.78.1; our IP address is 192.168.78.10 Filename 'demo'. Load address: 0x80500000 Loading: ################# 5.6 MiB/s done Bytes transferred = 244995 (3bd03 hex) Starting application at 0x80800080 ... -------------------------------------- Consoles: U-Boot console Compatible U-Boot API signature found @87f6e0a8 FreeBSD/mipsel U-Boot loader, Revision 1.2 (root@stassi-bsd9, Wed Feb 3 17:44:10 EET 2016) DRAM: 128MB Number of U-Boot devices: 2 U-Boot env: loaderdev not set, will probe all devices. Found U-Boot device: disk Probing all disk devices... Checking unit=0 slice= partition=... good. Booting from disk0s1: / /boot/kernel/kernel data=0x3ebaa8+0x27ff8 syms=[0x4+0x43a90+0x4+0x5e7cf] Hit [Enter] to boot immediately, or any other key for command prompt. Booting [/boot/kernel/kernel]... Kernel entry at 0x80100100... Kernel args: (null) U-Boot args (from -2141491201 args): Environment: ???m?? disk0s1: entry: mips_init() Cache info: picache_stride = 4096 picache_loopcount = 0 pdcache_stride = 1024 pdcache_loopcount = 2 cpu0: MIPS Technologies processor v0.147 MMU: Standard TLB, 16 entries (4K 16K 64K 256K 1M 16M 64M 256M pg sizes) L1 i-cache: 2 ways of 64 sets, 16 bytes per line L1 d-cache: 2 ways of 64 sets, 16 bytes per line L2 cache: disabled Config1=0x9e190c8e Config2=0x80000000 Physical memory chunk(s): 0x514000 - 0x1ffffff, 28229632 bytes (6892 pages) Maxmem is 0x2000000 KDB: debugger backends: ddb KDB: current backend: ddb Copyright (c) 1992-2016 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 11.0-CURRENT #0 733656d(local/sgalabov_mtk)-dirty: Wed Feb 3 19:56:05 EET 2016 root@stassi-bsd9:/usr/obj/mips.mipsel/src/sgalabov/sys/QEMU-MIPS mips gcc version 4.2.1 20070831 patched [FreeBSD] Preloaded elf kernel "kernel" at 0x8050dfe0. real memory = 33554432 (32768K bytes) Physical memory chunk(s): 0x005a8000 - 0x01f47fff, 26869760 bytes (6560 pages) avail memory = 26456064 (25MB) ULE: setup cpu 0 random: entropy device external interface null: mem: nfslock: pseudo-device nexus0: random: harvesting attach, 8 bytes (4 bits) from nexus0 clock0: on nexus0 Timecounter "MIPS32" frequency 50000000 Hz quality 800 Event timer "MIPS32" frequency 50000000 Hz quality 800 random: harvesting attach, 8 bytes (4 bits) from clock0 obio0 at mem 0x10000000-0x1fffffff on nexus0 uart0: <16550 or compatible> on obio0 uart0: console (-1,n,8,1) uart0: fast interrupt uart0: PPS capture mode 2 (DCD) random: harvesting attach, 8 bytes (4 bits) from uart0 random: harvesting attach, 8 bytes (4 bits) from obio0 Device configuration finished. Timecounters tick every 10.000 msec tcp_init: net.inet.tcp.tcbhashsize auto tuned to 512 lo0: bpf attached Trying to mount root from ufs:ada0 []... mountroot: waiting for device ada0... Mounting from ufs:ada0 failed with error 19. Loader variables: REPOSITORY rS FreeBSD src repository REVISION DETAIL https://reviews.freebsd.org/D5187 AFFECTED FILES sys/boot/Makefile.mips sys/boot/common/Makefile.inc sys/boot/common/self_reloc.c sys/boot/fdt/Makefile sys/boot/ficl/Makefile sys/boot/mips/Makefile sys/boot/mips/uboot/Makefile sys/boot/mips/uboot/conf.c sys/boot/mips/uboot/help.uboot sys/boot/mips/uboot/ldscript.mips sys/boot/mips/uboot/loader.conf sys/boot/mips/uboot/start.S sys/boot/mips/uboot/version sys/boot/uboot/fdt/Makefile sys/boot/uboot/lib/Makefile sys/boot/uboot/lib/elf_freebsd.c sys/boot/uboot/lib/glue.c EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: Sgalabov_gmail.com, MIPS, loader, adrian, imp, ray Cc: freebsd-mips-list --b1_1f56356ac303c3f039e449ffad2bc799 Content-Type: text/x-patch; charset=utf-8; name="D5187.13000.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D5187.13000.patch" ZGlmZiAtLWdpdCBhL3N5cy9ib290L3Vib290L2xpYi9nbHVlLmMgYi9zeXMvYm9vdC91Ym9vdC9s aWIvZ2x1ZS5jCi0tLSBhL3N5cy9ib290L3Vib290L2xpYi9nbHVlLmMKKysrIGIvc3lzL2Jvb3Qv dWJvb3QvbGliL2dsdWUuYwpAQCAtODMsOCArODMsMTMgQEAKIAlpZiAodWJvb3RfYWRkcmVzcyA9 PSAwKQogCQl1Ym9vdF9hZGRyZXNzID0gMjU1ICogMTAyNCAqIDEwMjQ7CiAKKyNpZmRlZiBfX21p cHMKKwlzcCA9ICh2b2lkICopKHVib290X2FkZHJlc3MgJiB+MHgwMDAwZmZmZik7CisJc3BlbmQg PSBzcCArIDB4MDAwMTAwMDAgLSBBUElfU0lHX01BR0xFTjsKKyNlbHNlCiAJc3AgPSAodm9pZCAq KSh1Ym9vdF9hZGRyZXNzICYgfjB4MDAwZmZmZmYpOwogCXNwZW5kID0gc3AgKyAweDAwMzAwMDAw IC0gQVBJX1NJR19NQUdMRU47CisjZW5kaWYKIAl3aGlsZSAoc3AgPCBzcGVuZCkgewogCQlpZiAo IWJjbXAoc3AsIEFQSV9TSUdfTUFHSUMsIEFQSV9TSUdfTUFHTEVOKSkgewogCQkJKnNpZyA9IChz dHJ1Y3QgYXBpX3NpZ25hdHVyZSAqKXNwOwpkaWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdWJvb3QvbGli L2VsZl9mcmVlYnNkLmMgYi9zeXMvYm9vdC91Ym9vdC9saWIvZWxmX2ZyZWVic2QuYwotLS0gYS9z eXMvYm9vdC91Ym9vdC9saWIvZWxmX2ZyZWVic2QuYworKysgYi9zeXMvYm9vdC91Ym9vdC9saWIv ZWxmX2ZyZWVic2QuYwpAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4K ICNpbmNsdWRlIDxzeXMvbGlua2VyLmg+CiAKKyNpZmRlZiBfX21pcHMKKyNpbmNsdWRlIDxzeXMv cHJvYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZnJhbWUuaD4KKyNlbmRpZgogI2luY2x1ZGUgPG1h Y2hpbmUvbWRfdmFyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9tZXRhZGF0YS5oPgogI2luY2x1ZGUg PG1hY2hpbmUvZWxmLmg+CmRpZmYgLS1naXQgYS9zeXMvYm9vdC91Ym9vdC9saWIvTWFrZWZpbGUg Yi9zeXMvYm9vdC91Ym9vdC9saWIvTWFrZWZpbGUKLS0tIGEvc3lzL2Jvb3QvdWJvb3QvbGliL01h a2VmaWxlCisrKyBiL3N5cy9ib290L3Vib290L2xpYi9NYWtlZmlsZQpAQCAtNDYsNiArNDYsNyBA QAogCiBDTEVBTkZJTEVTKz0JbWFjaGluZQogCisuaW5jbHVkZSA8YnNkLnN0YW5kLm1rPgogLmlu Y2x1ZGUgPGJzZC5saWIubWs+CiAKIGJlZm9yZWRlcGVuZCAke09CSlN9OiBtYWNoaW5lCmRpZmYg LS1naXQgYS9zeXMvYm9vdC91Ym9vdC9mZHQvTWFrZWZpbGUgYi9zeXMvYm9vdC91Ym9vdC9mZHQv TWFrZWZpbGUKLS0tIGEvc3lzL2Jvb3QvdWJvb3QvZmR0L01ha2VmaWxlCisrKyBiL3N5cy9ib290 L3Vib290L2ZkdC9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogCiBDTEVBTkZJTEVTKz0JbWFj aGluZQogCisuaW5jbHVkZSA8YnNkLnN0YW5kLm1rPgogLmluY2x1ZGUgPGJzZC5saWIubWs+CiAK IGJlZm9yZWRlcGVuZCAke09CSlN9OiBtYWNoaW5lCmRpZmYgLS1naXQgYS9zeXMvYm9vdC9taXBz L3Vib290L3ZlcnNpb24gYi9zeXMvYm9vdC9taXBzL3Vib290L3ZlcnNpb24KbmV3IGZpbGUgbW9k ZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYm9vdC9taXBzL3Vib290L3ZlcnNpb24K QEAgLTAsMCArMSw5IEBACiskRnJlZUJTRCQKKworTk9URSBBTlkgQ0hBTkdFUyBZT1UgTUFLRSBU TyBUSEUgQk9PVEJMT0NLUyBIRVJFLiAgVGhlIGZvcm1hdCBvZiB0aGlzCitmaWxlIGlzIGltcG9y dGFudC4gIE1ha2Ugc3VyZSB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciBpcyBvbiBsaW5lIDYu CisKKzEuMjoJRXh0ZW5kZWQgd2l0aCBOQU5EIEZTIHN1cHBvcnQuCisxLjE6CUZsYXR0ZW5lZCBE ZXZpY2UgVHJlZSBibG9iIHN1cHBvcnQuCisxLjA6CUFkZGVkIHN0b3JhZ2Ugc3VwcG9ydC4gQm9v dGluZyBmcm9tIEhERCwgVVNCLCBldGMuIGlzIG5vdyBwb3NzaWJsZS4KKzAuNToJSW5pdGlhbCBV LUJvb3QvYXJtIHZlcnNpb24gKG5ldGJvb3Rpbmcgb25seSkuCmRpZmYgLS1naXQgYS9zeXMvYm9v dC9taXBzL3Vib290L3N0YXJ0LlMgYi9zeXMvYm9vdC9taXBzL3Vib290L3N0YXJ0LlMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMvYm9vdC9taXBzL3Vib290L3N0 YXJ0LlMKQEAgLTAsMCArMSwxMDcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE2IFN0YW5p c2xhdiBHYWxhYm92CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICov CisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisJLnRleHQKKyNpZmRlZiBTVVBQT1JUX1NF TEZfUkVMT0MKKwkuZXh0ZXJuCV9DX0xBQkVMKHNlbGZfcmVsb2MpCisjZW5kaWYKKwkuZXh0ZXJu IF9DX0xBQkVMKG1haW4pCisJLndlYWsJX0RZTkFNSUMKKworLyoKKyAqIEVudHJ5IHBvaW50IHRv IHRoZSBsb2FkZXIgdGhhdCBVLUJvb3QgcGFzc2VzIGNvbnRyb2wgdG8uCisgKi8KK0VOVFJZKF9z dGFydCkKKyNpZmRlZiBTVVBQT1JUX1NFTEZfUkVMT0MKKwkvKiBYWFg6IERvZXMgYW55b25lIG5l ZWQgdGhpcyBwYXJ0IGF0IGFsbD8gSXQgY3VycmVudGx5IGRvZXNuJ3Qgd29yay4gKi8KKwkuc2V0 IG1pcHMzMnIyCisJLyogCisJICogRG8gc2VsZi1yZWxvY2F0aW9uIHdoZW4gdGhlIHdlYWsgZXh0 ZXJuYWwgc3ltYm9sIF9EWU5BTUlDIGlzIG5vbi1OVUxMCisJICogV2hlbiBsaW5rZWQgYXMgYSBk eW5hbWljIHJlbG9jYXRhYmxlIGZpbGUsIHRoZSBsaW5rZXIgYXV0b21hdGljYWxseQorCSAqIGRl ZmluZXMgX0RZTkFNSUMgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIG9mZnNldCBvZiB0aGUgZHlu YW1pYworCSAqIHJlbG9jYXRpb24gaW5mbyBzZWN0aW9uLgorCSAqIE5vdGUgdGhhdCB3ZSdyZSBz dGlsbCBvbiB1LWJvb3QncyBzdGFjayBoZXJlLCBidXQgdGhlIHNlbGZfcmVsb2MgCisJICogY29k ZSB1c2VzIG9ubHkgYSBjb3VwbGUgZG96ZW4gYnl0ZXMgb2Ygc3RhY2sgc3BhY2UuCisJICovCisJ bHcJdDAsIC5oZXJlX29mZgkJLyogLmhlcmVfb2ZmIGlzIGEgc3ltYm9sIHdob3NlIHZhbHVlICov CisJCQkJCS8qIGlzIGl0cyBvd24gb2Zmc2V0IGluIHRoZSB0ZXh0IHNlZy4gKi8KKwkJCQkJLyog R2V0IGl0cyBwYy1yZWxhdGl2ZSBhZGRyZXNzIGFuZCAqLworCWx3CXQxLCAuZHluYW1pY19vZmYJ Lyogc3VidHJhY3QgaXRzIHZhbHVlIGFuZCB3ZSBnZXQgKi8KKwlub3AKKwlhZGQJdDIsIHQwLCB0 MQorCW1vdm4JdDEsIHQyLCB0MQorCWJlcXoJdDEsIDFmCisJbm9wCisJYglfQ19MQUJFTChzZWxm X3JlbG9jKQkvKiBEbyByZWxvYyBpZiBfRFlOQU1JQyBpcyBub24tTlVMTC4gKi8KKwlub3AKKzE6 CisjZW5kaWYKKwlzdwlzcCwgdWJvb3RfYWRkcmVzcworCWIJbWFpbgorRU5EKF9zdGFydCkKKwor I2lmZGVmIFNVUFBPUlRfU0VMRl9SRUxPQworCS8qIAorCSAqIERhdGEgZm9yIHNlbGYtcmVsb2Nh dGlvbiwgaW4gdGhlIHRleHQgc2VnbWVudCBmb3IgcGMtcmVsIGFjY2Vzcy4KKwkgKi8KKy5oZXJl X29mZjoKKwkud29yZAkuIC0gX3N0YXJ0CisuZHluYW1pY19vZmY6CisJLndvcmQJX0RZTkFNSUMK KyNlbmRpZgorCisvKgorICogc3lzY2FsbCgpCisgKi8KK0VOVFJZKHN5c2NhbGwpCisJc3cJcmEs IHJldF9hZGRyZXNzCisJbHcJdDksIHN5c2NhbGxfcHRyCisJamFscgl0OQorCW5vcAorCWx3CXJh LCByZXRfYWRkcmVzcworCWpyCXJhCisJbm9wCitFTkQoc3lzY2FsbCkKKworLyoKKyAqIERhdGEg c2VjdGlvbgorICovCisJLmRhdGEKKwkuYWxpZ24JNAorCS5nbG9ibAlzeXNjYWxsX3B0cgorc3lz Y2FsbF9wdHI6CisJLmxvbmcJMAorCisJLmdsb2JsCXVib290X2FkZHJlc3MKK3Vib290X2FkZHJl c3M6CisJLmxvbmcJMAorCityZXRfYWRkcmVzczoKKwkubG9uZwkwCmRpZmYgLS1naXQgYS9zeXMv Ym9vdC9taXBzL3Vib290L2xvYWRlci5jb25mIGIvc3lzL2Jvb3QvbWlwcy91Ym9vdC9sb2FkZXIu Y29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9ib290L21p cHMvdWJvb3QvbG9hZGVyLmNvbmYKQEAgLTAsMCArMSwxMyBAQAorIyBUaGlzIGlzIGRlZmF1bHRz L2xvYWRlci5jb25mIGZvciBBUk0sIGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yIGxvYWRlcig4KS4K KyMgRG8gbm90IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBpbnN0ZWFkIHB1dCB5 b3VyIGN1c3RvbWl6YXRpb25zCisjIGludG8gL2Jvb3QvbG9hZGVyLmNvbmYgb3IgL2Jvb3QvbG9h ZGVyLmNvbmYubG9jYWwKKyMgJEZyZWVCU0QkCisKK2F1dG9ib290X2RlbGF5PTEwCitib290Zmls ZT0ia2VybmVsIiAgICAgICMgS2VybmVsIG5hbWUgKHBvc3NpYmx5IGFic29sdXRlIHBhdGgpCitr ZXJuZWw9Imtlcm5lbCIgICAgICAgICMgL2Jvb3Qgc3ViLWRpcmVjdG9yeSBjb250YWluaW5nIGtl cm5lbCBhbmQgbW9kdWxlcworbG9hZGVyX2NvbmZfZmlsZXM9Ii9ib290L2xvYWRlci5jb25mIC9i b290L2xvYWRlci5jb25mLmxvY2FsIgorbW9kdWxlX3BhdGg9Ii9ib290L2tlcm5lbDsvYm9vdC9t b2R1bGVzOy9ib290L2R0YiIKK25leHRib290X2NvbmY9Ii9ib290L25leHRib290LmNvbmYiCitu ZXh0Ym9vdF9lbmFibGU9Ik5PIgordmVyYm9zZV9sb2FkaW5nPSJOTyIKZGlmZiAtLWdpdCBhL3N5 cy9ib290L21pcHMvdWJvb3QvbGRzY3JpcHQubWlwcyBiL3N5cy9ib290L21pcHMvdWJvb3QvbGRz Y3JpcHQubWlwcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9i b290L21pcHMvdWJvb3QvbGRzY3JpcHQubWlwcwpAQCAtMCwwICsxLDEzMyBAQAorLyogJEZyZWVC U0QkICovCisKK09VVFBVVF9BUkNIKG1pcHMpCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworewor ICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KKyAg LiA9IFVCTERSX0xPQURBRERSICsgU0laRU9GX0hFQURFUlM7CisgIC50ZXh0ICAgICAgOgorICB7 CisgICAgKigudGV4dCkKKyAgICAvKiAuZ251Lndhcm5pbmcgc2VjdGlvbnMgYXJlIGhhbmRsZWQg c3BlY2lhbGx5IGJ5IGVsZjMyLmVtLiAgKi8KKyAgICAqKC5nbnUud2FybmluZykKKyAgICAqKC5n bnUubGlua29uY2UudCopCisgIH0gPTAKKyAgX2V0ZXh0ID0gLjsKKyAgUFJPVklERSAoZXRleHQg PSAuKTsKKyAgLmludGVycCAgICAgOiB7ICooLmludGVycCkgCX0KKyAgLmhhc2ggICAgICAgICAg OiB7ICooLmhhc2gpCQl9CisgIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9CisgIC5k eW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9CisgIC5nbnUudmVyc2lvbiAgIDogeyAqKC5n bnUudmVyc2lvbikJfQorICAuZ251LnZlcnNpb25fZCAgIDogeyAqKC5nbnUudmVyc2lvbl9kKQl9 CisgIC5nbnUudmVyc2lvbl9yICAgOiB7ICooLmdudS52ZXJzaW9uX3IpCX0KKyAgLnJlbGEudGV4 dCAgICAgOgorICAgIHsgKigucmVsYS50ZXh0KSAqKC5yZWxhLmdudS5saW5rb25jZS50KikgfQor ICAucmVsYS5kYXRhICAgICA6CisgICAgeyAqKC5yZWxhLmRhdGEpICooLnJlbGEuZ251Lmxpbmtv bmNlLmQqKSB9CisgIC5yZWxhLnJvZGF0YSAgIDoKKyAgICB7ICooLnJlbGEucm9kYXRhKSAqKC5y ZWxhLmdudS5saW5rb25jZS5yKikgfQorICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3Qp CQl9CisgIC5yZWxhLmdvdDEgICAgIDogeyAqKC5yZWxhLmdvdDEpCQl9CisgIC5yZWxhLmdvdDIg ICAgIDogeyAqKC5yZWxhLmdvdDIpCQl9CisgIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0 b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWxhLmlu aXQgICAgIDogeyAqKC5yZWxhLmluaXQpCX0KKyAgLnJlbGEuZmluaSAgICAgOiB7ICooLnJlbGEu ZmluaSkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWxhLnBs dCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KKyAgLnJlbGEuc2RhdGEgICAgOiB7ICooLnJlbGEu c2RhdGEpCQl9CisgIC5yZWxhLnNic3MgICAgIDogeyAqKC5yZWxhLnNic3MpCQl9CisgIC5yZWxh LnNkYXRhMiAgIDogeyAqKC5yZWxhLnNkYXRhMikJCX0KKyAgLnJlbGEuc2JzczIgICAgOiB7ICoo LnJlbGEuc2JzczIpCQl9CisgIC5pbml0ICAgICAgOiB7ICooLmluaXQpICAgIH0gPTAKKyAgLmZp bmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAorICAucm9kYXRhICAgIDogeyAqKC5yb2RhdGEp ICooLmdudS5saW5rb25jZS5yKikgfQorICAucm9kYXRhMSAgIDogeyAqKC5yb2RhdGExKSB9Cisg IC5zZGF0YTIgICAgOiB7ICooLnNkYXRhMikgIH0KKyAgLnNic3MyICAgICA6IHsgKiguc2JzczIp ICAgfQorICAvKiBBZGp1c3QgdGhlIGFkZHJlc3MgZm9yIHRoZSBkYXRhIHNlZ21lbnQgdG8gdGhl IG5leHQgcGFnZSB1cC4gKi8KKyAgLiA9ICgoLiArIDB4MTAwMCkgJiB+KDB4MTAwMCAtIDEpKTsK KyAgLmRhdGEgICAgOgorICB7CisgICAgKiguZGF0YSkKKyAgICAqKC5nbnUubGlua29uY2UuZCop CisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgLmRhdGExICAgOiB7ICooLmRhdGExKSB9CisgIC5n b3QxICAgICAgICAgICA6IHsgKiguZ290MSkgfQorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5 bmFtaWMpIH0KKyAgLyogUHV0IC5jdG9ycyBhbmQgLmR0b3JzIG5leHQgdG8gdGhlIC5nb3QyIHNl Y3Rpb24sIHNvIHRoYXQgdGhlIHBvaW50ZXJzCisgICAgIGdldCByZWxvY2F0ZWQgd2l0aCAtbXJl bG9jYXRhYmxlLiBBbHNvIHB1dCBpbiB0aGUgLmZpeHVwIHBvaW50ZXJzLgorICAgICBUaGUgY3Vy cmVudCBjb21waWxlciBubyBsb25nZXIgbmVlZHMgdGhpcywgYnV0IGtlZXAgaXQgYXJvdW5kIGZv ciAyLjcuMiAgKi8KKyAgICAgICAgICAgICAgICBQUk9WSURFIChfR09UMl9TVEFSVF8gPSAuKTsK KyAgLmdvdDIgICAgICAgICAgIDogIHsgKiguZ290MikgfQorICAgICAgICAgICAgICAgIFBST1ZJ REUgKF9fQ1RPUl9MSVNUX18gPSAuKTsKKyAgLmN0b3JzICAgICAgICAgIDogeyAqKC5jdG9ycykg fQorICAgICAgICAgICAgICAgIFBST1ZJREUgKF9fQ1RPUl9FTkRfXyA9IC4pOworICAgICAgICAg ICAgICAgIFBST1ZJREUgKF9fRFRPUl9MSVNUX18gPSAuKTsKKyAgLmR0b3JzICAgICAgICAgIDog eyAqKC5kdG9ycykgfQorICAgICAgICAgICAgICAgIFBST1ZJREUgKF9fRFRPUl9FTkRfXyA9IC4p OworICAgICAgICAgICAgICAgIFBST1ZJREUgKF9GSVhVUF9TVEFSVF8gPSAuKTsKKyAgLmZpeHVw ICAgICAgICAgIDogeyAqKC5maXh1cCkgfQorICAgICAgICAgICAgICAgIFBST1ZJREUgKF9GSVhV UF9FTkRfID0gLik7CisgICAgICAgICAgICAgICAgUFJPVklERSAoX0dPVDJfRU5EXyA9IC4pOwor ICAgICAgICAgICAgICAgIFBST1ZJREUgKF9HT1RfU1RBUlRfID0gLik7CisgIC5nb3QgICAgICAg ICAgICA6IHsgKiguZ290KSB9CisgIC5nb3QucGx0ICAgICAgICA6IHsgKiguZ290LnBsdCkgfQor ICAgICAgICAgICAgICAgIFBST1ZJREUgKF9HT1RfRU5EXyA9IC4pOworICAvKiBXZSB3YW50IHRo ZSBzbWFsbCBkYXRhIHNlY3Rpb25zIHRvZ2V0aGVyLCBzbyBzaW5nbGUtaW5zdHJ1Y3Rpb24gb2Zm c2V0cworICAgICBjYW4gYWNjZXNzIHRoZW0gYWxsLCBhbmQgaW5pdGlhbGl6ZWQgZGF0YSBhbGwg YmVmb3JlIHVuaW5pdGlhbGl6ZWQsIHNvCisgICAgIHdlIGNhbiBzaG9ydGVuIHRoZSBvbi1kaXNr IHNlZ21lbnQgc2l6ZS4gICovCisgIC5zZGF0YSAgICAgOiB7ICooLnNkYXRhKSB9CisgIF9lZGF0 YSAgPSAgLjsKKyAgUFJPVklERSAoZWRhdGEgPSAuKTsKKyAgLnNic3MgICAgICA6CisgIHsKKyAg ICBQUk9WSURFIChfX3Nic3Nfc3RhcnQgPSAuKTsKKyAgICAqKC5zYnNzKQorICAgICooLnNjb21t b24pCisgICAgKiguZHluc2JzcykKKyAgICBQUk9WSURFIChfX3Nic3NfZW5kID0gLik7CisgIH0K KyAgLnBsdCAgIDogeyAqKC5wbHQpIH0KKyAgLmJzcyAgICAgICA6CisgIHsKKyAgIFBST1ZJREUg KF9fYnNzX3N0YXJ0ID0gLik7CisgICAqKC5keW5ic3MpCisgICAqKC5ic3MpCisgICAqKENPTU1P TikKKyAgfQorICBfZW5kID0gLiA7CisgIFBST1ZJREUgKGVuZCA9IC4pOworICAvKiBTdGFicyBk ZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLworICAuc3RhYiAwIDogeyAqKC5zdGFiKSB9CisgIC5zdGFi c3RyIDAgOiB7ICooLnN0YWJzdHIpIH0KKyAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuCisgICAg IFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUgdG8g dGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVtIGF0IDAu ICAqLworICAvKiBEV0FSRiAxICovCisgIC5kZWJ1ZyAgICAgICAgICAwIDogeyAqKC5kZWJ1Zykg fQorICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQorICAvKiBHTlUgRFdBUkYgMSBl eHRlbnNpb25zICovCisgIC5kZWJ1Z19zcmNpbmZvICAwIDogeyAqKC5kZWJ1Z19zcmNpbmZvKSB9 CisgIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1Z19zZm5hbWVzKSB9CisgIC8qIERXQVJG IDEuMSBhbmQgRFdBUkYgMiAqLworICAuZGVidWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJh bmdlcykgfQorICAuZGVidWdfcHVibmFtZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0KKyAg LyogRFdBUkYgMiAqLworICAuZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbykgfQor ICAuZGVidWdfYWJicmV2ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9CisgIC5kZWJ1Z19saW5l ICAgICAwIDogeyAqKC5kZWJ1Z19saW5lKSB9CisgIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5k ZWJ1Z19mcmFtZSkgfQorICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9Cisg IC5kZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0KKyAgLmRlYnVnX21hY2luZm8g IDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0KKyAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRlbnNp b25zICovCisgIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVzKSB9Cisg IC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9CisgIC5kZWJ1Z190 eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9CisgIC5kZWJ1Z192YXJuYW1lcyAg MCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0KKyAgLyogVGhlc2UgbXVzdCBhcHBlYXIgcmVnYXJk bGVzcyBvZiAgLiAgKi8KK30KZGlmZiAtLWdpdCBhL3N5cy9ib290L21pcHMvdWJvb3QvaGVscC51 Ym9vdCBiL3N5cy9ib290L21pcHMvdWJvb3QvaGVscC51Ym9vdApuZXcgZmlsZSBtb2RlIDEwMDY0 NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9ib290L21pcHMvdWJvb3QvaGVscC51Ym9vdApAQCAt MCwwICsxLDI3IEBACiskRnJlZUJTRCQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUdWJl bnYgRFNob3cgb3IgaW1wb3J0IFUtQm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKworCXViZW52 IDxpbXBvcnQgfCBzaG93PiBbdmFybmFtZSAuLi5dCisKKwlEaXNwbGF5IFUtQm9vdCBlbnZpcm9u bWVudCB2YXJpYWJsZXMsIG9yIGltcG9ydCB0aGVtIGludG8gdGhlCisJbG9hZGVyIGVudmlyb25t ZW50ICh3aGljaCBtYWtlcyB0aGVtIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsKS4KKworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBUdWJlbnYgU2ltcG9ydCBESW1wb3J0IFUtQm9vdCBlbnYgdmFy cworCisJdWJlbnYgaW1wb3J0IFt2YXJuYW1lIC4uLl0KKworCUlmIG5vIHZhcmlhYmxlIG5hbWVz IGFyZSBzcGVjaWZpZWQsIGFsbCBVLUJvb3QgZW52aXJvbm1lbnQKKwl2YXJpYWJsZXMgYXJlIGlt cG9ydGVkLiAgRWFjaCB2YXJpYWJsZSBpcyBwcmVmaXhlZCB3aXRoICJ1Ym9vdC4iCisJdG8gYXZv aWQgYW55IHBvc3NpYmxlIGNvbmZsaWN0cyB3aXRoIGxvYWRlciBvciBrZXJuZWwgdmFyaWFibGVz LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFR1YmVudiBTc2hvdyBEU2hvdyBVLUJvb3Qg ZW52IHZhcnMKKworCXViZW52IHNob3cgW3Zhcm5hbWUgLi4uXQorCisJSWYgbm8gdmFyaWFibGUg bmFtZXMgYXJlIHNwZWNpZmllZCwgYWxsIFUtQm9vdCBlbnZpcm9ubWVudAorCXZhcmlhYmxlcyBh cmUgc2hvd24uCisKZGlmZiAtLWdpdCBhL3N5cy9ib290L21pcHMvdWJvb3QvY29uZi5jIGIvc3lz L2Jvb3QvbWlwcy91Ym9vdC9jb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs bAorKysgYi9zeXMvYm9vdC9taXBzL3Vib290L2NvbmYuYwpAQCAtMCwwICsxLDExMCBAQAorLyot CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2VtaWhhbGYsIFJhZmFsIEphd29yb3dza2kKKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor ICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN0YW5kLmg+CisjaW5jbHVkZSAiYm9vdHN0 cmFwLmgiCisjaW5jbHVkZSAibGlidWJvb3QuaCIKKworI2lmIGRlZmluZWQoTE9BREVSX05FVF9T VVBQT1JUKQorI2luY2x1ZGUgImRldl9uZXQuaCIKKyNlbmRpZgorCitzdHJ1Y3QgZGV2c3cgKmRl dnN3W10gPSB7CisjaWYgZGVmaW5lZChMT0FERVJfRElTS19TVVBQT1JUKSB8fCBkZWZpbmVkKExP QURFUl9DRDk2NjBfU1VQUE9SVCkKKwkmdWJvb3Rfc3RvcmFnZSwKKyNlbmRpZgorI2lmIGRlZmlu ZWQoTE9BREVSX05FVF9TVVBQT1JUKQorCSZuZXRkZXYsCisjZW5kaWYKKwlOVUxMCit9OworCitz dHJ1Y3QgZnNfb3BzICpmaWxlX3N5c3RlbVtdID0geworI2lmIGRlZmluZWQoTE9BREVSX1VGU19T VVBQT1JUKQorCSZ1ZnNfZnNvcHMsCisjZW5kaWYKKyNpZiBkZWZpbmVkKExPQURFUl9DRDk2NjBf U1VQUE9SVCkKKwkmY2Q5NjYwX2Zzb3BzLAorI2VuZGlmCisjaWYgZGVmaW5lZChMT0FERVJfRVhU MkZTX1NVUFBPUlQpCisJJmV4dDJmc19mc29wcywKKyNlbmRpZgorI2lmIGRlZmluZWQoTE9BREVS X05BTkRGU19TVVBQT1JUKQorCSZuYW5kZnNfZnNvcHMsCisjZW5kaWYKKyNpZiBkZWZpbmVkKExP QURFUl9ORlNfU1VQUE9SVCkKKwkmbmZzX2Zzb3BzLAorI2VuZGlmCisjaWYgZGVmaW5lZChMT0FE RVJfVEZUUF9TVVBQT1JUKQorCSZ0ZnRwX2Zzb3BzLAorI2VuZGlmCisjaWYgZGVmaW5lZChMT0FE RVJfR1pJUF9TVVBQT1JUKQorCSZnemlwZnNfZnNvcHMsCisjZW5kaWYKKyNpZiBkZWZpbmVkKExP QURFUl9CWklQMl9TVVBQT1JUKQorCSZiemlwZnNfZnNvcHMsCisjZW5kaWYKKwlOVUxMCit9Owor CitzdHJ1Y3QgbmV0aWZfZHJpdmVyICpuZXRpZl9kcml2ZXJzW10gPSB7CisjaWYgZGVmaW5lZChM T0FERVJfTkVUX1NVUFBPUlQpCisJJnVib290X25ldCwKKyNlbmRpZgorCU5VTEwsCit9OworCitz dHJ1Y3QgZmlsZV9mb3JtYXQgKmZpbGVfZm9ybWF0c1tdID0geworCSZ1Ym9vdF9lbGYsCisJTlVM TAorfTsKKworZXh0ZXJuIHN0cnVjdCBjb25zb2xlIHVib290X2NvbnNvbGU7CisKK3N0cnVjdCBj b25zb2xlICpjb25zb2xlc1tdID0geworCSZ1Ym9vdF9jb25zb2xlLAorCU5VTEwKK307CisKK3Zv aWQKK2Fib3J0KHZvaWQpCit7CisgCisJcHJpbnRmKCJlcnJvcjogbG9hZGVyIGFib3J0XG4iKTsK Kwl3aGlsZSAoMSk7Cit9CisKK3ZvaWQKK2xvbmdqbXBlcnJvcih2b2lkKQoreworIAorCXByaW50 ZigiZXJyb3I6IGxvYWRlciBsb25nam1wIGVycm9yXG4iKTsKKwl3aGlsZSAoMSk7Cit9CmRpZmYg LS1naXQgYS9zeXMvYm9vdC9taXBzL3Vib290L01ha2VmaWxlIGIvc3lzL2Jvb3QvbWlwcy91Ym9v dC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9i b290L21pcHMvdWJvb3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxNzEgQEAKKyMgJEZyZWVCU0QkCisK Ky5pbmNsdWRlIDxzcmMub3B0cy5taz4KKworU0VMRl9SRUxPQz89CW5vCisKK0ZJTEVTPQkJdWJs ZHIKKworTkVXVkVSU1dIQVQ9CSJVLUJvb3QgbG9hZGVyIiAke01BQ0hJTkVfQVJDSH0KK0JJTkRJ Uj89CS9ib290CitJTlNUQUxMRkxBR1M9CS1iCitXQVJOUz89CQkxCisjIEFkZHJlc3MgYXQgd2hp Y2ggdWJsZHIgd2lsbCBiZSBsb2FkZWQuCisjIFRoaXMgdmFyaWVzIGZvciBkaWZmZXJlbnQgYm9h cmRzIGFuZCBTT0NzLgorVUJMRFJfTE9BREFERFI/PQkweDgwODAwMDAwCisKKyMgQXJjaGl0ZWN0 dXJlLXNwZWNpZmljIGxvYWRlciBjb2RlCitTUkNTPQkJc3RhcnQuUyBjb25mLmMgdmVycy5jCisK Ky5pZiAke1NFTEZfUkVMT0N9ICE9ICJubyIKK0ZJTEVTKz0JCXVibGRyLmJpbgorQ0ZMQUdTKz0J LURTVVBQT1JUX1NFTEZfUkVMT0MKK1NSQ1MrPQkJc2VsZl9yZWxvYy5jCisuZW5kaWYKKworLmlm ICFkZWZpbmVkKExPQURFUl9OT19ESVNLX1NVUFBPUlQpCitMT0FERVJfRElTS19TVVBQT1JUPz0J eWVzCisuZWxzZQorTE9BREVSX0RJU0tfU1VQUE9SVD0Jbm8KKy5lbmRpZgorTE9BREVSX1VGU19T VVBQT1JUPz0JeWVzCitMT0FERVJfQ0Q5NjYwX1NVUFBPUlQ/PQlubworTE9BREVSX0VYVDJGU19T VVBQT1JUPz0Jbm8KKy5pZiAke01LX05BTkR9ICE9ICJubyIKK0xPQURFUl9OQU5ERlNfU1VQUE9S VD89IHllcworLmVsc2UKK0xPQURFUl9OQU5ERlNfU1VQUE9SVD89IG5vCisuZW5kaWYKK0xPQURF Ul9ORVRfU1VQUE9SVD89CXllcworTE9BREVSX05GU19TVVBQT1JUPz0JeWVzCitMT0FERVJfVEZU UF9TVVBQT1JUPz0Jbm8KK0xPQURFUl9HWklQX1NVUFBPUlQ/PQlubworTE9BREVSX0JaSVAyX1NV UFBPUlQ/PQlubworLmlmICR7TUtfRkRUfSAhPSAibm8iCitMT0FERVJfRkRUX1NVUFBPUlQ9CXll cworLmVsc2UKK0xPQURFUl9GRFRfU1VQUE9SVD0Jbm8KKy5lbmRpZgorCisuaWYgJHtMT0FERVJf RElTS19TVVBQT1JUfSA9PSAieWVzIgorQ0ZMQUdTKz0JLURMT0FERVJfRElTS19TVVBQT1JUCisu ZW5kaWYKKy5pZiAke0xPQURFUl9VRlNfU1VQUE9SVH0gPT0gInllcyIKK0NGTEFHUys9CS1ETE9B REVSX1VGU19TVVBQT1JUCisuZW5kaWYKKy5pZiAke0xPQURFUl9DRDk2NjBfU1VQUE9SVH0gPT0g InllcyIKK0NGTEFHUys9CS1ETE9BREVSX0NEOTY2MF9TVVBQT1JUCisuZW5kaWYKKy5pZiAke0xP QURFUl9FWFQyRlNfU1VQUE9SVH0gPT0gInllcyIKK0NGTEFHUys9CS1ETE9BREVSX0VYVDJGU19T VVBQT1JUCisuZW5kaWYKKy5pZiAke0xPQURFUl9OQU5ERlNfU1VQUE9SVH0gPT0gInllcyIKK0NG TEFHUys9CS1ETE9BREVSX05BTkRGU19TVVBQT1JUCisuZW5kaWYKKy5pZiAke0xPQURFUl9HWklQ X1NVUFBPUlR9ID09ICJ5ZXMiCitDRkxBR1MrPQktRExPQURFUl9HWklQX1NVUFBPUlQKKy5lbmRp ZgorLmlmICR7TE9BREVSX0JaSVAyX1NVUFBPUlR9ID09ICJ5ZXMiCitDRkxBR1MrPQktRExPQURF Ul9CWklQMl9TVVBQT1JUCisuZW5kaWYKKy5pZiAke0xPQURFUl9ORVRfU1VQUE9SVH0gPT0gInll cyIKK0NGTEFHUys9CS1ETE9BREVSX05FVF9TVVBQT1JUCisuZW5kaWYKKy5pZiAke0xPQURFUl9O RlNfU1VQUE9SVH0gPT0gInllcyIKK0NGTEFHUys9CS1ETE9BREVSX05GU19TVVBQT1JUCisuZW5k aWYKKy5pZiAke0xPQURFUl9URlRQX1NVUFBPUlR9ID09ICJ5ZXMiCitDRkxBR1MrPQktRExPQURF Ul9URlRQX1NVUFBPUlQKKy5lbmRpZgorLmlmICR7TE9BREVSX0ZEVF9TVVBQT1JUfSA9PSAieWVz IgorQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL2ZkdAorQ0ZMQUdTKz0JLUkkey5PQkpESVJ9 Ly4uLy4uL2ZkdAorQ0ZMQUdTKz0JLURMT0FERVJfRkRUX1NVUFBPUlQKK0xJQlVCT09UX0ZEVD0J JHsuT0JKRElSfS8uLi8uLi91Ym9vdC9mZHQvbGlidWJvb3RfZmR0LmEKK0xJQkZEVD0JCSR7Lk9C SkRJUn0vLi4vLi4vZmR0L2xpYmZkdC5hCisuZW5kaWYKKworQ0ZMQUdTKz0JLURORVRJRl9PUEVO X0NMT1NFX09OQ0UKKworLmlmICR7TUtfRk9SVEh9ICE9ICJubyIKKyMgRW5hYmxlIEJvb3RGb3J0 aAorQk9PVF9GT1JUSD0JeWVzCitDRkxBR1MrPQktREJPT1RfRk9SVEggLUkkey5DVVJESVJ9Ly4u Ly4uL2ZpY2wgLUkkey5DVVJESVJ9Ly4uLy4uL2ZpY2wvbWlwcworTElCRklDTD0JJHsuT0JKRElS fS8uLi8uLi9maWNsL2xpYmZpY2wuYQorLmVuZGlmCisKKyMgQWx3YXlzIGFkZCBNSSBzb3VyY2Vz CisuUEFUSDoJCSR7LkNVUkRJUn0vLi4vLi4vY29tbW9uCisuaW5jbHVkZQkiJHsuQ1VSRElSfS8u Li8uLi9jb21tb24vTWFrZWZpbGUuaW5jIgorQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL2Nv bW1vbgorQ0ZMQUdTKz0JLUkuCisKK0NMRUFORklMRVMrPQl2ZXJzLmMgbG9hZGVyLmhlbHAKKwor Q0ZMQUdTKz0JLWZmcmVlc3RhbmRpbmcgLW1zb2Z0LWZsb2F0CisKK0xERkxBR1M9CS1ub3N0ZGxp YiAtc3RhdGljIC1UICR7LkNVUkRJUn0vbGRzY3JpcHQuJHtNQUNISU5FX0NQVUFSQ0h9CisKKyMg UHVsbCBpbiBjb21tb24gbG9hZGVyIGNvZGUKKy5QQVRIOgkJJHsuQ1VSRElSfS8uLi8uLi91Ym9v dC9jb21tb24KKy5pbmNsdWRlCSIkey5DVVJESVJ9Ly4uLy4uL3Vib290L2NvbW1vbi9NYWtlZmls ZS5pbmMiCitDRkxBR1MrPQktSSR7LkNVUkRJUn0vLi4vLi4vdWJvb3QvY29tbW9uCisKKyMgVS1C b290IHN0YW5kYWxvbmUgc3VwcG9ydCBsaWJyYXJ5CitMSUJVQk9PVD0JJHsuT0JKRElSfS8uLi8u Li91Ym9vdC9saWIvbGlidWJvb3QuYQorQ0ZMQUdTKz0JLUkkey5DVVJESVJ9Ly4uLy4uL3Vib290 L2xpYgorQ0ZMQUdTKz0JLUkkey5PQkpESVJ9Ly4uLy4uL3Vib290L2xpYgorCisjIHdoZXJlIHRv IGdldCBsaWJzdGFuZCBmcm9tCitDRkxBR1MrPQktSSR7LkNVUkRJUn0vLi4vLi4vLi4vLi4vbGli L2xpYnN0YW5kLworCisjIGNsYW5nIGRvZXNuJ3QgdW5kZXJzdGFuZCAlRCBhcyBhIHNwZWNpZmll ciB0byBwcmludGYKK05PX1dFUlJPUi5jbGFuZz0KK05PX1dFUlJPUj0KKworRFBBREQ9CQkke0xJ QkZJQ0x9ICR7TElCVUJPT1R9ICR7TElCRkRUfSAke0xJQlVCT09UX0ZEVH0gJHtMSUJTVEFORH0K K0xEQUREPQkJJHtMSUJGSUNMfSAke0xJQlVCT09UfSAke0xJQkZEVH0gJHtMSUJVQk9PVF9GRFR9 IC1sc3RhbmQKKworT0JKUys9ICAke1NSQ1M6TiouaDpSOlMvJC8uby9nfQorCit2ZXJzLmM6CSR7 LkNVUkRJUn0vLi4vLi4vY29tbW9uL25ld3ZlcnMuc2ggJHsuQ1VSRElSfS92ZXJzaW9uCisJc2gg JHsuQ1VSRElSfS8uLi8uLi9jb21tb24vbmV3dmVycy5zaCAkey5DVVJESVJ9L3ZlcnNpb24gJHtO RVdWRVJTV0hBVH0KKworbG9hZGVyLmhlbHA6IGhlbHAuY29tbW9uIGhlbHAudWJvb3QgJHsuQ1VS RElSfS8uLi8uLi9mZHQvaGVscC5mZHQKKwljYXQgJHsuQUxMU1JDfSB8IFwKKwkgICAgYXdrIC1m ICR7LkNVUkRJUn0vLi4vLi4vY29tbW9uL21lcmdlX2hlbHAuYXdrID4gJHsuVEFSR0VUfQorCits ZHNjcmlwdC5hYnM6CisJZWNobyAiVUJMRFJfTE9BREFERFIgPSAke1VCTERSX0xPQURBRERSfTsi ID4key5UQVJHRVR9CisKK2xkc2NyaXB0LnBpZToKKwllY2hvICJVQkxEUl9MT0FEQUREUiA9IDA7 IiA+JHsuVEFSR0VUfQorCit1YmxkcjogJHtPQkpTfSBsZHNjcmlwdC5hYnMgJHsuQ1VSRElSfS9s ZHNjcmlwdC4ke01BQ0hJTkVfQ1BVQVJDSH0gJHtEUEFERH0KKwkke0NDfSAke0NGTEFHU30gLVQg bGRzY3JpcHQuYWJzICR7TERGTEFHU30gXAorCSAgICAtbyAkey5UQVJHRVR9ICR7T0JKU30gJHtM REFERH0KKworLmlmICR7U0VMRl9SRUxPQ30gIT0gIm5vIgordWJsZHIucGllOiAke09CSlN9IGxk c2NyaXB0LnBpZSAkey5DVVJESVJ9L2xkc2NyaXB0LiR7TUFDSElORV9DUFVBUkNIfSAke0RQQURE fQorCSR7Q0N9ICR7Q0ZMQUdTfSAtVCBsZHNjcmlwdC5waWUgJHtMREZMQUdTfSAtcGllIC1XbCwt QnN5bWJvbGljIFwKKwkgICAgLW8gJHsuVEFSR0VUfSAke09CSlN9ICR7TERBRER9CisKK3VibGRy LmJpbjogdWJsZHIucGllCisJJHtPQkpDT1BZfSAtUyAtTyBiaW5hcnkgdWJsZHIucGllICR7LlRB UkdFVH0KKy5lbmRpZgorCitDTEVBTkZJTEVTKz0JbGRzY3JpcHQuYWJzIGxkc2NyaXB0LnBpZSB1 YmxkciB1Ymxkci5waWUgdWJsZHIuYmluCisKKy5pZiAhZGVmaW5lZChMT0FERVJfT05MWSkKKy5Q QVRIOiAkey5DVVJESVJ9Ly4uLy4uL2ZvcnRoCisuaW5jbHVkZQkiJHsuQ1VSRElSfS8uLi8uLi9m b3J0aC9NYWtlZmlsZS5pbmMiCisKKyMgSW5zdGFsbCBsb2FkZXIucmMuCitGSUxFUys9CWxvYWRl ci5yYworIyBQdXQgc2FtcGxlIG1lbnUucmMgb24gZGlzayBidXQgZG9uJ3QgZW5hYmxlIGl0IGJ5 IGRlZmF1bHQuCitGSUxFUys9CW1lbnUucmMKK0ZJTEVTTkFNRV9tZW51LnJjPQltZW51LnJjLnNh bXBsZQorLmVuZGlmCisKKy5pbmNsdWRlIDxic2Quc3RhbmQubWs+CisuaW5jbHVkZSA8YnNkLnBy b2cubWs+CmRpZmYgLS1naXQgYS9zeXMvYm9vdC9taXBzL01ha2VmaWxlIGIvc3lzL2Jvb3QvbWlw cy9NYWtlZmlsZQotLS0gYS9zeXMvYm9vdC9taXBzL01ha2VmaWxlCisrKyBiL3N5cy9ib290L21p cHMvTWFrZWZpbGUKQEAgLTEsMTIgKzEsMTQgQEAKICMgJEZyZWVCU0QkCiAKK1NVQkRJUj0gdWJv b3QKKwogIwogIyBUaGUgQkVSSSBib290IGxvYWRlciBwb3J0IHdvcmtzIG9ubHkgb24gNjQtYml0 IE1JUFM7IG5vdCBhIGhhcmQgcG9ydCB0bwogIyAzMi1iaXQgaWYgc29tZW9uZSBpcyBpbnRlcmVz dGVkLiAgQnVpbGQgb24gYWxsIDY0LWJpdCBNSVBTIHBsYXRmb3JtcyB0bwogIyBlbnN1cmUgaXQg Z2V0cyBhZGVxdWF0ZSBidWlsZC10ZXN0IGNvdmVyYWdlLgogIwogLmlmICR7TUFDSElORV9BUkNI fSA9PSAibWlwczY0IgotU1VCRElSPQliZXJpCitTVUJESVIrPQliZXJpCiAuZW5kaWYKIAogLmlu Y2x1ZGUgPGJzZC5zdWJkaXIubWs+CmRpZmYgLS1naXQgYS9zeXMvYm9vdC9maWNsL01ha2VmaWxl IGIvc3lzL2Jvb3QvZmljbC9NYWtlZmlsZQotLS0gYS9zeXMvYm9vdC9maWNsL01ha2VmaWxlCisr KyBiL3N5cy9ib290L2ZpY2wvTWFrZWZpbGUKQEAgLTcsNiArNyw4IEBACiAuUEFUSDogJHtGSUNM RElSfS8ke01BQ0hJTkVfQ1BVQVJDSDpTL2FtZDY0L2kzODYvfQogLmVsaWYgJHtNQUNISU5FX0FS Q0h9ID09ICJtaXBzNjQiIHx8ICR7TUFDSElORV9BUkNIfSA9PSAibWlwczY0ZWwiCiAuUEFUSDog JHtGSUNMRElSfS9taXBzNjQKKy5lbGlmICR7TUFDSElORV9BUkNIfSA9PSAibWlwczMyIiB8fCAk e01BQ0hJTkVfQVJDSH0gPT0gIm1pcHMzMmVsIgorLlBBVEg6ICR7RklDTERJUn0vbWlwcwogLmVs c2UKIC5QQVRIOiAke0ZJQ0xESVJ9LyR7TUFDSElORV9DUFVBUkNIfQogLmVuZGlmCmRpZmYgLS1n aXQgYS9zeXMvYm9vdC9mZHQvTWFrZWZpbGUgYi9zeXMvYm9vdC9mZHQvTWFrZWZpbGUKLS0tIGEv c3lzL2Jvb3QvZmR0L01ha2VmaWxlCisrKyBiL3N5cy9ib290L2ZkdC9NYWtlZmlsZQpAQCAtMjYs NCArMjYsNSBAQAogCiBDRkxBR1MrPQktV2Zvcm1hdCAtV2FsbAogCisuaW5jbHVkZSA8YnNkLnN0 YW5kLm1rPgogLmluY2x1ZGUgPGJzZC5saWIubWs+CmRpZmYgLS1naXQgYS9zeXMvYm9vdC9jb21t b24vc2VsZl9yZWxvYy5jIGIvc3lzL2Jvb3QvY29tbW9uL3NlbGZfcmVsb2MuYwotLS0gYS9zeXMv Ym9vdC9jb21tb24vc2VsZl9yZWxvYy5jCisrKyBiL3N5cy9ib290L2NvbW1vbi9zZWxmX3JlbG9j LmMKQEAgLTM2LDcgKzM2LDcgQEAKICNkZWZpbmUJRWxmV19EeW4JRWxmNjRfRHluCiAjZGVmaW5l CUVMRldfUl9UWVBFCUVMRjY0X1JfVFlQRQogI2RlZmluZQlFTEZfUkVMQQotI2VsaWYgZGVmaW5l ZChfX2FybV9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKQorI2VsaWYgZGVmaW5lZChfX2FybV9fKSB8 fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKQogI2RlZmluZQlFbGZXX1Jl bAlFbGYzMl9SZWwKICNkZWZpbmUJRWxmV19EeW4JRWxmMzJfRHluCiAjZGVmaW5lCUVMRldfUl9U WVBFCUVMRjMyX1JfVFlQRQpAQCAtNTYsNiArNTYsOSBAQAogI2VsaWYgZGVmaW5lZChfX2FybV9f KQogI2RlZmluZQlSRUxPQ19UWVBFX05PTkUJCVJfQVJNX05PTkUKICNkZWZpbmUJUkVMT0NfVFlQ RV9SRUxBVElWRQlSX0FSTV9SRUxBVElWRQorI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKyNkZWZp bmUgUkVMT0NfVFlQRV9OT05FCQlSX01JUFNfTk9ORQorI2RlZmluZSBSRUxPQ19UWVBFX1JFTEFU SVZFCVJfTUlQU19SRUwKICNlbGlmIGRlZmluZWQoX19pMzg2X18pCiAjZGVmaW5lCVJFTE9DX1RZ UEVfTk9ORQkJUl8zODZfTk9ORQogI2RlZmluZQlSRUxPQ19UWVBFX1JFTEFUSVZFCVJfMzg2X1JF TEFUSVZFCmRpZmYgLS1naXQgYS9zeXMvYm9vdC9jb21tb24vTWFrZWZpbGUuaW5jIGIvc3lzL2Jv b3QvY29tbW9uL01ha2VmaWxlLmluYwotLS0gYS9zeXMvYm9vdC9jb21tb24vTWFrZWZpbGUuaW5j CisrKyBiL3N5cy9ib290L2NvbW1vbi9NYWtlZmlsZS5pbmMKQEAgLTIwLDYgKzIwLDggQEAKIFNS Q1MrPQlsb2FkX2VsZjY0LmMgcmVsb2NfZWxmNjQuYwogLmVsaWYgJHtNQUNISU5FX0FSQ0h9ID09 ICJtaXBzNjQiIHx8ICR7TUFDSElORV9BUkNIfSA9PSAibWlwczY0ZWwiCiBTUkNTKz0gbG9hZF9l bGY2NC5jIHJlbG9jX2VsZjY0LmMKKy5lbGlmICR7TUFDSElORV9BUkNIfSA9PSAibWlwcyIgfHwg JHtNQUNISU5FX0FSQ0h9ID09ICJtaXBzZWwiCitTUkNTKz0gIGxvYWRfZWxmMzIuYyByZWxvY19l bGYzMi5jCiAuZW5kaWYKIAogLmlmIGRlZmluZWQoTE9BREVSX05FVF9TVVBQT1JUKQpkaWZmIC0t Z2l0IGEvc3lzL2Jvb3QvTWFrZWZpbGUubWlwcyBiL3N5cy9ib290L01ha2VmaWxlLm1pcHMKLS0t IGEvc3lzL2Jvb3QvTWFrZWZpbGUubWlwcworKysgYi9zeXMvYm9vdC9NYWtlZmlsZS5taXBzCkBA IC0zLDMgKzMsNSBAQAogLmlmICR7TUtfRkRUfSAhPSAibm8iCiBTVUJESVIrPQkJZmR0CiAuZW5k aWYKKworU1VCRElSKz0JCXVib290Cgo= --b1_1f56356ac303c3f039e449ffad2bc799--