[libre-riscv-dev] [Bug 336] ALU CompUnit needs to recognise that RA (src1) can be...
[libre-riscv-dev.git] / 4d / 8cbb584b7a3e383fa3cc9e1382fb95f6b3724c
1 Return-path: <libre-riscv-dev-bounces@lists.libre-riscv.org>
2 Envelope-to: publicinbox@libre-riscv.org
3 Delivery-date: Tue, 05 May 2020 18:02:13 +0100
4 Received: from localhost ([::1] helo=libre-riscv.org)
5 by libre-soc.org with esmtp (Exim 4.89)
6 (envelope-from <libre-riscv-dev-bounces@lists.libre-riscv.org>)
7 id 1jW0xR-0000kq-6j; Tue, 05 May 2020 18:02:13 +0100
8 Received: from localhost ([127.0.0.1] helo=bugs.libre-soc.org)
9 by libre-soc.org with esmtp (Exim 4.89)
10 (envelope-from <bugzilla-daemon@libre-soc.org>) id 1jW0xP-0000kb-CZ
11 for libre-riscv-dev@lists.libre-riscv.org; Tue, 05 May 2020 18:02:11 +0100
12 From: bugzilla-daemon@libre-soc.org
13 To: libre-riscv-dev@lists.libre-riscv.org
14 Date: Tue, 05 May 2020 17:02:11 +0000
15 X-Bugzilla-Reason: CC
16 X-Bugzilla-Type: changed
17 X-Bugzilla-Watch-Reason: None
18 X-Bugzilla-Product: Libre-SOC's first SoC
19 X-Bugzilla-Component: ALU (including IEEE754 16/32/64-bit FPU)
20 X-Bugzilla-Version: unspecified
21 X-Bugzilla-Keywords:
22 X-Bugzilla-Severity: enhancement
23 X-Bugzilla-Who: lkcl@lkcl.net
24 X-Bugzilla-Status: CONFIRMED
25 X-Bugzilla-Resolution:
26 X-Bugzilla-Priority: ---
27 X-Bugzilla-Assigned-To: mtnolan2640@gmail.com
28 X-Bugzilla-Flags:
29 X-Bugzilla-Changed-Fields:
30 Message-ID: <bug-208-13-opKayy0Ev6@https.bugs.libre-soc.org/>
31 In-Reply-To: <bug-208-13@https.bugs.libre-soc.org/>
32 References: <bug-208-13@https.bugs.libre-soc.org/>
33 X-Bugzilla-URL: https://bugs.libre-soc.org/
34 Auto-Submitted: auto-generated
35 MIME-Version: 1.0
36 Subject: [libre-riscv-dev] [Bug 208] implement CORDIC in a general way
37 sufficient to do transcendentals
38 X-BeenThere: libre-riscv-dev@lists.libre-riscv.org
39 X-Mailman-Version: 2.1.23
40 Precedence: list
41 List-Id: Libre-RISCV General Development
42 <libre-riscv-dev.lists.libre-riscv.org>
43 List-Unsubscribe: <http://lists.libre-riscv.org/mailman/options/libre-riscv-dev>,
44 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=unsubscribe>
45 List-Archive: <http://lists.libre-riscv.org/pipermail/libre-riscv-dev/>
46 List-Post: <mailto:libre-riscv-dev@lists.libre-riscv.org>
47 List-Help: <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=help>
48 List-Subscribe: <http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev>,
49 <mailto:libre-riscv-dev-request@lists.libre-riscv.org?subject=subscribe>
50 Reply-To: Libre-RISCV General Development
51 <libre-riscv-dev@lists.libre-riscv.org>
52 Content-Type: text/plain; charset="utf-8"
53 Content-Transfer-Encoding: base64
54 Errors-To: libre-riscv-dev-bounces@lists.libre-riscv.org
55 Sender: "libre-riscv-dev" <libre-riscv-dev-bounces@lists.libre-riscv.org>
56
57 aHR0cHM6Ly9idWdzLmxpYnJlLXNvYy5vcmcvc2hvd19idWcuY2dpP2lkPTIwOAoKLS0tIENvbW1l
58 bnQgIzUzIGZyb20gTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiA8bGtjbEBsa2NsLm5ldD4g
59 LS0tCihJbiByZXBseSB0byBNaWNoYWVsIE5vbGFuIGZyb20gY29tbWVudCAjNTIpCj4gKEluIHJl
60 cGx5IHRvIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24gZnJvbSBjb21tZW50ICM1MCkKPiA+
61 IGJ0dyAxMiBzdGFnZXMgaXMgdG9vIG1hbnksIGJlY2F1c2Ugd2UgbmVlZCBhIG1pbmltdW0gb2Yg
62 b25lIEZ1bmN0aW9uVW5pdAo+ID4gIm1hbmFnaW5nIiAobWF0Y2hpbmcgdXApIHNvdXJjZSBvcGVy
63 YW5kcyBhbmQgcmVzdWx0cy4KPiA+IAo+ID4gZWFjaCBleHRyYSBGdW5jdGlvbiBVbml0IGFkZGVk
64 IGNyZWF0ZXMgYW4gT3JkZXIgTl4yIGluY3JlYXNlIGluIHRoZSBvdmVyYWxsCj4gPiBzaXplIG9m
65 IHRoZSBEZXBlbmRlbmN5IE1hdHJpY2VzLgo+ID4gCj4gPiBzbyAtIGFuZCBpIGRvbid0IG1lYW4g
66 cmlnaHQgbm93IC0gaWYgdGhpcyBjYW4gYmUgZWl0aGVyOgo+ID4gCj4gPiAqIGN1dCBpbnRvIHR3
67 byBzZXBhcmF0ZSBwaXBlbGluZXMgKHBhcnRpYWwgZGF0YSBmZWQgYmFjayBhcyBhIG1pY3JvLW9w
68 KQo+ID4gKiBudW1iZXIgb2YgY29tYmluYXRvcmlhbCBibG9ja3MgaW5jcmVhc2VkIHRvIDUgb3Ig
69 Ngo+ID4gCj4gPiB3ZSBzdGFuZCBhIGNoYW5jZSBvZiBrZWVwaW5nIHRoZSBGVSBjb3VudCBkb3du
70 ICg4IGlzIG9rKS4KPiA+IAo+ID4gaGF2ZSB0byB0aGluayB0aGF0IHRocm91Z2ggY2FyZWZ1bGx5
71 LCBob3cgdG8gZG8gbWljcm8tb3BzLgo+IAo+IFN1cmUuIEkgZG9uJ3Qga25vdyBhYm91dCBzcGxp
72 dHRpbmcgaXQgdXAgaW50byBtdWx0aXBsZSB1b3BzLAoKbmVpdGhlciBkbyBpIGF0IHRoZSBtb21l
73 bnQhICBpIHRoaW5rIGkgbWlnaHQgaGF2ZSBnb3QgY29uZnVzZWQgYWJvdXQKc2hhcmluZyB0aGUg
74 TVVMIHVuaXQgd2l0aCBGUE1VTC4KCj4gIGJ1dCByZWR1Y2luZwo+IHRoZSBudW1iZXIgb2Ygc3Rh
75 Z2VzIGlzIHByZXR0eSBlYXN5LiBJIGFkZGVkIGEgcGFyYW1ldGVyIHRvIHRoZSBtb2R1bGUKPiBj
76 YWxsZWQgcm91bmRzX3Blcl9zdGFnZSB3aGljaCBnb3Zlcm5zIGhvdyBtYW55IGNvcmRpYyByb3Vu
77 ZHMgZ28gaW4gZWFjaAo+IHBpcGVsaW5lIHN0YWdlLiBJbmNyZWFzaW5nIHRoYXQgbnVtYmVyIHdp
78 bGwgZGVjcmVhc2UgdGhlIG51bWJlciBvZiBwaXBlbGluZQo+IHN0YWdlcy4KCmZhbnRhc3RpYywg
79 dGhhdCdzIGV4YWN0bHkgdGhlIGtpbmQgb2YgcGFyYW1ldGVyaXNhdGlvbiBfd2VfIG5lZWQsCmhv
80 d2V2ZXIgYXMgYSBnZW5lcmFsLXB1cnBvc2UgSUVFRTc1NCBGUCBsaWJyYXJ5LCBpdCdzIGV4YWN0
81 bHkKdGhlIGtpbmQgb2YgcGFyYW1ldGVyaXNhdGlvbiB0aGF0IG90aGVyIF91c2Vyc18gbmVlZCA6
82 KQoKPiAKPiAoSW4gcmVwbHkgdG8gTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbiBmcm9tIGNv
83 bW1lbnQgIzUxKQo+ID4gdGhlIG90aGVyIG9wdGlvbjoKPiA+IAo+ID4ga2VlcCB0aGUgbG9uZyBw
84 aXBlbGluZSBsZW5ndGhzOiB3ZSAqa25vdyogdGhhdCB0aGVyZSdzIG1vcmUgc3RhZ2VzIHRoYW4K
85 PiA+IHRoZXJlIGFyZSBGVXMsIGFuZCB0aGF0J3MganVzdCAidG91Z2ggbHVjayIuICB3ZSBrbm93
86 IHRoYXQgd2l0aCBvbmx5Cj4gPiA4IEZVcyBhbmQgMTIgcGlwZWxpbmUgc3RhZ2VzLCA0IG9mIHRo
87 b3NlIGF0IGFueSBvbmUgdGltZSB3aWxsIHJ1bgo+ID4gZW1wdHksIGFuZCB3ZSBqdXN0Li4uIGxp
88 dmUgd2l0aCB0aGF0Lgo+IAo+IEkgd2FzIGdvaW5nIHRvIGFzayBpZiB3ZSBjb3VsZCBkbyBzb21l
89 dGhpbmcgbGlrZSB0aGlzLiBTaW5jZSBJIGRvbid0IHRoaW5rCj4gdGhlIGNvcmRpYyB3aWxsIGJl
90 IHVzZWQgKnRoYXQqIG9mdGVuLCB0aGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHRoaW5nIHRv
91 Cj4gZG8uCgp5ZWh5ZWguCgpvayB3aGF0IGVsc2UgY2FuIHdlIHRocm93IGluIGhlcmU/ICBMT0cx
92 UCBpcyBwcm9iYWJseSBhIGdvb2QgdGhpbmcgdG8gdHJ5Cgp0aGlzIGlzIGEgZ3JlYXQgZXhwbGFu
93 YXRpb246Cmh0dHA6Ly93d3cubWNsZW5lZ2FuLmNvbS9wdWJsaWMvdGhlc2lzLnBkZgoKc2VjdGlv
94 biA0LjQuMSBleHBsYWlucyAicm90YXRpb24gbW9kZSIKCmhvd2V2ZXIgd2UgYWxzbyBuZWVkICp2
95 ZWN0b3IqIG1vZGUgKDQuNC4yKQoKaSBrbm93IC0gc29tZXdoZXJlIC0gaSd2ZSBzZWVuIGEgcHl0
96 aG9uIGltcGxlbWVudGF0aW9uIG9mIHZlY3RvciBtb2RlLgppdCBhbHNvIHNwZWNpZmllZCwgYXMg
97 eW91IGNhbiBzZWUsIHRoZSB0aHJlZSBvdGhlciBtb2RlczogY2lyY3VsYXIsCmxpbmVhciwgaHlw
98 ZXJib2xpYy4KCmFoISAgaSBrbm93IHdoeSB3ZSB3YW50IHRvIGtlZXAgdGhlIHR3byBhbnN3ZXJz
99 OiBzZWUgcDM5IG9mIHRoYXQKdGhlc2lzOiB5b3UgY2FuIHVzZSB0aGVtICh3aXRoIHNvbWUgcG9z
100 dC1wcm9jZXNzaW5nKSB0byBkbwp0YW4uCgphbHNvLCBzZWUgY2lyY3VsYXItdmVjdG9yaW5nIG1v
101 ZGUsIGl0IGVuZHMgdXAgY29tcHV0aW5nIHRoZQpub3JtYWwgZGlzdGFuY2UgYW5kLi4uIGFuZCB0
102 aGUgYW5nbGU/ICBvaGgsIHRoYXQncyBmb3IuLi4gZGFybgp3aGF0IHdhcyBpdC4uLiBpdCdzIGZv
103 ciBhcmNzLiAgdGhlcmUncyBhIG5hbWUgZm9yIHRoaXMuLi4gc29ycnkKaSBmb3JnZXQgd2hhdCBp
104 dCdzIGNhbGxlZCByaWdodCBub3cuCgpodHRwczovL3d3dy5pamVydC5vcmcvdmhkbC1pbXBsZW1l
105 bnRhdGlvbi1vZi1jb3JkaWMtYWxnb3JpdGhtLWZvci13aXJlbGVzcy1sYW4KCnRoaXMgdmVyc2lv
106 biwgcDE0LCBleHBsYWlucyBtdWNoIGNsZWFyZXIgdGhhdCAicm90YXRlIiBtb2RlIGdvZXMKYnkg
107 YW5nbGUgYW5kIGNvbXB1dGVzIHgseQoKInZlY3RvciIgbW9kZSB0aGUgdmVjdG9yIGlzIHJvdGF0
108 ZWQgdG8gYmUgZmxhdCBhZ2FpbnN0IHRoZSB4LWF4aXMsCnJlY29yZGluZyB0aGUgYW5nbGUgKFop
109 IG5lZWRlZCB0byBkbyBzby4KCnRoaXMgb25lIGlzIGEgc3VydmV5IG9mIENPUkRJQyBhbGdvcml0
110 aG1zOgpodHRwOi8vd3d3LmVlLmljLmFjLnVrL3BjaGV1bmcvdGVhY2hpbmcvZWUzX0RTRC9jcmRj
111 c3J2eS5wZGYKCml0IHNob3dzIC0gKmJyaWVmbHkqIC0gaG93IHRvIHVzZSB0aGVtIHRvIGRvIGRp
112 ZmZlcmVudCB0aGluZ3MsIGJ1dAppdCBhbHNvLCBieSBiZWluZyBhIHN1cnZleSwgaGFzIHNvbWUg
113 cmVhbGx5IHVzZWZ1bCBpbnNpZ2h0cyBpbnRvCnZhcmlvdXMgb3B0aW1pc2F0aW9ucy4KCnNvIGNh
114 biBpIHN1Z2dlc3QsIGZpcnN0IGFkZGluZyB0aGUgaW5mcmFzdHJ1Y3R1cmUgYmFjayBpbiB0byBh
115 bGxvdwpjYW5jZWxsYXRpb24gYW5kIG9wZXJhdGlvbnMgKGN0eCksIHRoZW4gc2VlIGlmIHlvdSBj
116 YW4gYWRkIG9uZSBleHRyYQoibW9kZSIgKHRoZSBtPS0xLCBtPTAsIG09MSB0aGluZyBzZWVtcyB0
117 cml2aWFsIHdoaWNoIHdpbGwgZ2l2ZSB0aGUKY2lyY3VsYXIsIGxpbmVhciBhbmQgaHlwZXJib2xp
118 YyBtb2RlcywgcmVzcGVjdGl2ZWx5KS4KCiJjaXJjdWxhciIgbW9kZSBpcyBjb3ZlcmVkIHdpdGgg
119 dGhlIG91dHB1dCBiZWluZyBTSU4vQ09TLgoKYWggaGEhICBoZXJlJ3MgYSB1c2VmdWwgc3VpdGUg
120 b2YgaW1wbGVtZW50YXRpb25zIChhbm5veWluZ2x5IGJlaW5nCmluIGp1cGl0ZXIpCmh0dHBzOi8v
121 Z2l0aHViLmNvbS9zdXlhc2htYWhhci9jb3JkaWMtYWxnb3JpdGhtLXB5dGhvbi9ibG9iL21hc3Rl
122 ci9jb3JkaWNfaW1wbGVtZW50YXRpb24uaXB5bmIKCmV4dHJhY3RpZ24gdGhlIHR3byBtb2RlczoK
123 CgpjaXJjdWxhciA9IDEKbGluZWFyID0gMApoeXBlcmJvbGljID0gLTEKCgoKZGVmIFJPTV9sb29r
124 dXAoaXRlcmF0aW9uLCBjb29yZGluYXRlKToKICAgIGlmIChjb29yZGluYXRlID09IGNpcmN1bGFy
125 KToKICAgICAgICByZXR1cm4gbWF0aC5kZWdyZWVzKG1hdGguYXRhbigyKiooLTEqaXRlcmF0aW9u
126 KSkpCiAgICBlbGlmIChjb29yZGluYXRlID09IGxpbmVhcik6CiAgICAgICAgcmV0dXJuIDIqKigt
127 MSppdGVyYXRpb24pCiAgICBlbGlmIChjb29yZGluYXRlID09IGh5cGVyYm9saWMpOgogICAgICAg
128 IHJldHVybiAobWF0aC5hdGFuaCgyKiooLTEqaXRlcmF0aW9uKSkpCgpkZWYgcm90YXRpb25fbW9k
129 ZSh4LCB5LCB6LCBjb29yZGluYXRlLCBpdGVyYXRpb25zKToKICAgIGEgPSAwLjYwNzI1MjkzNTsg
130 ICAjID0gMS9LCgogICAgeF92YWxfbGlzdCA9IFtdCiAgICB5X3ZhbF9saXN0ID0gW10KICAgIHpf
131 dmFsX2xpc3QgPSBbXQogICAgaXRlcmF0aW9uc19saXN0ID0gW10KCiAgICBpID0gMDsgICAgICAg
132 ICAgICAgICAgICAjIEtlZXBzIGNvdW50IG9uIG51bWJlciBvZiBpdGVyYXRpb25zCgogICAgY3Vy
133 cmVudF94ID0geCAgICAgICAgICMgVmFsdWUgb2YgWCBvbiBpdGggaXRlcmF0aW9uIAogICAgY3Vy
134 cmVudF95ID0geSAgICAgICAgICMgVmFsdWUgb2YgWSBvbiBpdGggaXRlcmF0aW9uCiAgICBjdXJy
135 ZW50X3ogPSB6ICAgICAgICAgIyBWYWx1ZSBvZiBaIG9uIGl0aCBpdGVyYXRpb24KCiAgICBkaSA9
136 IDAKCiAgICBpZiAoY29vcmRpbmF0ZSA9PSBoeXBlcmJvbGljKToKICAgICAgICBpID0gMQogICAg
137 ZWxzZToKICAgICAgICBpID0gMAoKICAgIGZsYWcgPSAwCgogICAgaWYgKGl0ZXJhdGlvbnMgPiAw
138 KToKICAgICAgICB3aGlsZSAoaSA8IGl0ZXJhdGlvbnMpOgogICAgICAgICAgICBpZiAoY3VycmVu
139 dF96IDwgMCk6CiAgICAgICAgICAgICAgICBkaSA9IC0xCiAgICAgICAgICAgIGVsc2U6CiAgICAg
140 ICAgICAgICAgICBkaSA9ICsxCiAgICAgICAgICAgIG5leHRfeiA9IGN1cnJlbnRfeiAtIGRpICog
141 Uk9NX2xvb2t1cChpLCBjb29yZGluYXRlKQogICAgICAgICAgICBuZXh0X3ggPSBjdXJyZW50X3gg
142 LSBjb29yZGluYXRlICogZGkgKiBjdXJyZW50X3kgKiAoMioqKC0xKmkpKQogICAgICAgICAgICBu
143 ZXh0X3kgPSBjdXJyZW50X3kgKyBkaSAqIGN1cnJlbnRfeCAqIDIqKigtMSppKQoKICAgICAgICAg
144 ICAgY3VycmVudF94ID0gbmV4dF94CiAgICAgICAgICAgIGN1cnJlbnRfeSA9IG5leHRfeQogICAg
145 ICAgICAgICBjdXJyZW50X3ogPSBuZXh0X3oKCiAgICAgICAgICAgIHhfdmFsX2xpc3QuYXBwZW5k
146 KGN1cnJlbnRfeCkKICAgICAgICAgICAgeV92YWxfbGlzdC5hcHBlbmQoY3VycmVudF95KQogICAg
147 ICAgICAgICB6X3ZhbF9saXN0LmFwcGVuZChjdXJyZW50X3opCgogICAgICAgICAgICBpdGVyYXRp
148 b25zX2xpc3QuYXBwZW5kKGkpCgogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSA9PSBoeXBlcmJv
149 bGljKToKICAgICAgICAgICAgICAgIGlmICgoaSAhPSA0KSAmIChpICE9IDEzKSAmIChpIT00MCkp
150 OgogICAgICAgICAgICAgICAgICAgIGkgPSBpKzEKICAgICAgICAgICAgICAgIGVsaWYgKGZsYWcg
151 PT0gMCk6CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDEKICAgICAgICAgICAgICAgIGVsaWYg
152 KGZsYWcgPT0gMSk6CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDAKICAgICAgICAgICAgICAg
153 ICAgICBpID0gaSsxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpID0gaSsxCiAg
154 ICByZXR1cm4geyAneCc6eF92YWxfbGlzdCwgJ3knOnlfdmFsX2xpc3QsICd6Jzp6X3ZhbF9saXN0
155 LAonaXRlcmF0aW9uJzppdGVyYXRpb25zX2xpc3QsIH0KCgphaGhoLCBpIHJlY29nbmlzZSB0aGlz
156 IGNvZGUgOikgIGkndmUgc2VlbiBpdCBiZWZvcmUuICAKZGVmIHZlY3Rvcl9tb2RlKHgsIHksIHos
157 IGNvb3JkaW5hdGUsIGl0ZXJhdGlvbnMpOgogICAgYSA9IDEuMjA3NTsgICAjID0gMS9LCgogICAg
158 eF92YWxfbGlzdCA9IFtdCiAgICB5X3ZhbF9saXN0ID0gW10KICAgIHpfdmFsX2xpc3QgPSBbXQog
159 ICAgaXRlcmF0aW9uc19saXN0ID0gW10KCiAgICBpID0gMDsgICAgICAgICAgICAgICAgICAjIEtl
160 ZXBzIGNvdW50IG9uIG51bWJlciBvZiBpdGVyYXRpb25zCgogICAgY3VycmVudF94ID0geCAgICAg
161 ICAgICMgVmFsdWUgb2YgWCBvbiBpdGggaXRlcmF0aW9uIAogICAgY3VycmVudF95ID0geSAgICAg
162 ICAgICMgVmFsdWUgb2YgWSBvbiBpdGggaXRlcmF0aW9uCiAgICBjdXJyZW50X3ogPSB6ICAgICAg
163 ICAgIyBWYWx1ZSBvZiBaIG9uIGl0aCBpdGVyYXRpb24KCiAgICBkaSA9IDAKCiAgICAjIFRoaXMg
164 aXMgbmVjY2VzYXJ5IHNpbmNlIHJlc3VsdCBmb3IgaT0wIGRvZXNuJ3QgZXhpc3RzIGZvciBoeXBl
165 cmJvbGljIAogICAgIyBjby1vcmRpbmF0ZSBzeXN0ZW0uCiAgICBpZiAoY29vcmRpbmF0ZSA9PSBo
166 eXBlcmJvbGljKToKICAgICAgICBpID0gMQogICAgZWxzZToKICAgICAgICBpID0gMAoKICAgIGZs
167 YWcgPSAwCgogICAgaWYgKGl0ZXJhdGlvbnMgPiAwKToKICAgICAgICB3aGlsZSAoaSA8IGl0ZXJh
168 dGlvbnMpOgogICAgICAgICAgICBkaSA9IC0xKm1hdGguY29weXNpZ24oMSwgY3VycmVudF95KTsj
169 KmN1cnJlbnRfeCk7CiAgICAgICAgICAgIG5leHRfeCA9IGN1cnJlbnRfeCAtIGNvb3JkaW5hdGUg
170 KiBkaSAqIGN1cnJlbnRfeSAqICgyKiooLTEqaSkpCiAgICAgICAgICAgIG5leHRfeSA9IGN1cnJl
171 bnRfeSArIGRpICogY3VycmVudF94ICogMioqKC0xKmkpCiAgICAgICAgICAgIG5leHRfeiA9IGN1
172 cnJlbnRfeiAtIGRpICogUk9NX2xvb2t1cChpLCBjb29yZGluYXRlKQoKICAgICAgICAgICAgY3Vy
173 cmVudF94ID0gbmV4dF94CiAgICAgICAgICAgIGN1cnJlbnRfeSA9IG5leHRfeQogICAgICAgICAg
174 ICBjdXJyZW50X3ogPSBuZXh0X3oKCiAgICAgICAgICAgIHhfdmFsX2xpc3QuYXBwZW5kKGN1cnJl
175 bnRfeCkKICAgICAgICAgICAgeV92YWxfbGlzdC5hcHBlbmQoY3VycmVudF95KQogICAgICAgICAg
176 ICB6X3ZhbF9saXN0LmFwcGVuZChjdXJyZW50X3opCgogICAgICAgICAgICBpdGVyYXRpb25zX2xp
177 c3QuYXBwZW5kKGkpCgogICAgICAgICAgICBpZiAoY29vcmRpbmF0ZSA9PSBoeXBlcmJvbGljKToK
178 ICAgICAgICAgICAgICAgIGlmICgoaSAhPSA0KSAmIChpICE9IDEzKSAmIChpIT00MCkpOgogICAg
179 ICAgICAgICAgICAgICAgIGkgPSBpKzEKICAgICAgICAgICAgICAgIGVsaWYgKGZsYWcgPT0gMCk6
180 CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDEKICAgICAgICAgICAgICAgIGVsaWYgKGZsYWcg
181 PT0gMSk6CiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDAKICAgICAgICAgICAgICAgICAgICBp
182 ID0gaSsxCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBpID0gaSsxCiAgICByZXR1
183 cm4geyAneCc6eF92YWxfbGlzdCwgJ3knOnlfdmFsX2xpc3QsICd6Jzp6X3ZhbF9saXN0LAonaXRl
184 cmF0aW9uJzppdGVyYXRpb25zX2xpc3QgfQoKaWYgeW91IGNhbiBkcm9wIHRoYXQgaW50byBhIHJl
185 cG9zaXRvcnksIGdldCBpdCB3b3JraW5nLCB3cml0ZSBhCmZldyBzaW1wbGUgZXhwZXJpbWVudHMg
186 YW5kIHNlZSBob3cgaXQgb3BlcmF0ZXMgaW4gZWFjaCBvZiB0aGUgNgptb2Rlcywgd2UncmUgb24g
187 YSByb2xsIDopCgotLSAKWW91IGFyZSByZWNlaXZpbmcgdGhpcyBtYWlsIGJlY2F1c2U6CllvdSBh
188 cmUgb24gdGhlIENDIGxpc3QgZm9yIHRoZSBidWcuCl9fX19fX19fX19fX19fX19fX19fX19fX19f
189 X19fX19fX19fX19fX19fX19fX19fCmxpYnJlLXJpc2N2LWRldiBtYWlsaW5nIGxpc3QKbGlicmUt
190 cmlzY3YtZGV2QGxpc3RzLmxpYnJlLXJpc2N2Lm9yZwpodHRwOi8vbGlzdHMubGlicmUtcmlzY3Yu
191 b3JnL21haWxtYW4vbGlzdGluZm8vbGlicmUtcmlzY3YtZGV2Cg==
192