* Re: [PATCH] virtio-spec: fix thinko in multiport documentation
From: Michael S. Tsirkin @ 2012-11-12 16:59 UTC (permalink / raw)
To: Amit Shah, virtualization
In-Reply-To: <20120909110837.GA2395@redhat.com>
On Sun, Sep 09, 2012 at 02:08:37PM +0300, Michael S. Tsirkin wrote:
> spec numbers ports port0, port 1 etc, then goes on to say
> "ports 2 onwards only if MULTIPORT is set".
> An obvious thinko, should be port 1 onwards.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Ping.
> ---
> virtio-spec.lyx | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/virtio-spec.lyx b/virtio-spec.lyx
> index a713807..d801aa6 100644
> --- a/virtio-spec.lyx
> +++ b/virtio-spec.lyx
> @@ -6298,7 +6298,13 @@ Virtqueues 0:receiveq(port0).
> status open
>
> \begin_layout Plain Layout
> -Ports 2 onwards only if VIRTIO_CONSOLE_F_MULTIPORT is set
> +Ports
> +\change_inserted 1986246365 1347188327
> +1
> +\change_deleted 1986246365 1347188327
> +2
> +\change_unchanged
> + onwards only if VIRTIO_CONSOLE_F_MULTIPORT is set
> \end_layout
>
> \end_inset
> --
> MST
^ permalink raw reply
* Re: [PATCH] virtio-spec: balloon: MUST_TELL_HOST is optional
From: Michael S. Tsirkin @ 2012-11-12 17:03 UTC (permalink / raw)
To: virtualization, pbonzini
In-Reply-To: <20120909113650.GA2775@redhat.com>
On Sun, Sep 09, 2012 at 02:36:50PM +0300, Michael S. Tsirkin wrote:
> Drivers treat MUST_TELL_HOST as optional: windows drivers do not ack it
> and expect this means they can tell host *after* deflate. This was not
> the intent but the documentation was not very clear on this point.
>
> Luckily hyprevisors did not implement this feature yet so to provide
> guidance for future devices make spec match drivers expectations, and
> clarify that this feature only has effect if negotiated.
> This is needed as recent developments in kvm (memory
> region rework and the addition of vfio) finally make
> it practical to implement this in devices.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
ping
> ---
>
> OK how about this minimal patch for starters?
> Other changes are possible on top but I think
> both me and Paolo agree on this one.
> Paolo?
>
> virtio-spec.lyx | 20 +++++++++++++++-----
> 1 file changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/virtio-spec.lyx b/virtio-spec.lyx
> index d801aa6..d9626a9 100644
> --- a/virtio-spec.lyx
> +++ b/virtio-spec.lyx
> @@ -6331,8 +6331,13 @@ VIRTIO_CONSOLE_F_SIZE
>
> \begin_layout Description
> VIRTIO_CONSOLE_F_MULTIPORT(1) Device has support for multiple ports; configurati
> -on fields nr_ports and max_nr_ports are valid and control virtqueues will
> - be used.
> +on fields nr_ports and max_nr_ports are valid
> +\change_inserted 1986246365 1347188404
> +; if this bit is negotiated,
> +\change_deleted 1986246365 1347188406
> + and
> +\change_unchanged
> + control virtqueues will be used.
> \end_layout
>
> \end_deeper
> @@ -6840,9 +6845,14 @@ The driver constructs an array of addresses of memory pages it has previously
> \end_layout
>
> \begin_layout Enumerate
> -If the VIRTIO_BALLOON_F_MUST_TELL_HOST feature is set, the guest may not
> - use these requested pages until that descriptor in the deflateq has been
> - used by the device.
> +If the VIRTIO_BALLOON_F_MUST_TELL_HOST feature is
> +\change_inserted 1986246365 1347188540
> +negotiated
> +\change_deleted 1986246365 1347188542
> +set
> +\change_unchanged
> +, the guest may not use these requested pages until that descriptor in the
> + deflateq has been used by the device.
> \end_layout
>
> \begin_layout Enumerate
> --
> MST
^ permalink raw reply
* Re: [PATCH -next] virtio: balloon: fix missing unlock on error in fill_balloon()
From: Andrew Morton @ 2012-11-12 23:34 UTC (permalink / raw)
To: Wei Yongjun; +Cc: aquini, mst, linux-kernel, virtualization, yongjun_wei
In-Reply-To: <CAPgLHd80RvvGdTKN3aR7dQ_b1S3_pAkMwmGjewc7zgf=4jafcg@mail.gmail.com>
On Mon, 12 Nov 2012 21:50:40 +0800
Wei Yongjun <weiyj.lk@gmail.com> wrote:
> From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
>
> Add the missing unlock before return from function fill_balloon()
> in the error handling case.
>
> Introduced by 9864a8(virtio_balloon: introduce migration primitives
> to balloon pages)
>
> dpatch engine is used to auto generate this patch.
> (https://github.com/weiyj/dpatch)
>
> Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
> ---
> drivers/virtio/virtio_balloon.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index f70151b..72e8dcb 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -152,8 +152,10 @@ static void fill_balloon(struct virtio_balloon *vb, size_t num)
> }
>
> /* Didn't get any? Oh well. */
> - if (vb->num_pfns == 0)
> + if (vb->num_pfns == 0) {
> + mutex_unlock(&vb->balloon_lock);
> return;
> + }
>
> tell_host(vb, vb->inflate_vq);
> mutex_unlock(&vb->balloon_lock);
Well. Why did this bug occur in the first place? Because
fill_balloon() has multiple return points and one of those was
overlooked when adding new locking.
This (and the addition of memory leaks) is quite common. It is part of
the reason why so much kernel code uses goto's to avoid multiple return
points. A maintainability thing.
And we can fix this shortcoming in fill_balloon() without even needing a
goto:
--- a/drivers/virtio/virtio_balloon.c~virtio_balloon-introduce-migration-primitives-to-balloon-pages-fix-fix
+++ a/drivers/virtio/virtio_balloon.c
@@ -151,13 +151,9 @@ static void fill_balloon(struct virtio_b
totalram_pages--;
}
- /* Didn't get any? Oh well. */
- if (vb->num_pfns == 0) {
- mutex_unlock(&vb->balloon_lock);
- return;
- }
-
- tell_host(vb, vb->inflate_vq);
+ /* Did we get any? */
+ if (vb->num_pfns != 0)
+ tell_host(vb, vb->inflate_vq);
mutex_unlock(&vb->balloon_lock);
}
_
^ permalink raw reply
* Re: [rfc net-next v6 2/3] virtio_net: multiqueue support
From: Michael S. Tsirkin @ 2012-11-13 6:40 UTC (permalink / raw)
To: Rusty Russell
Cc: krkumar2, kvm, netdev, linux-kernel, virtualization, edumazet,
davem
In-Reply-To: <87y5igyhyg.fsf@rustcorp.com.au>
On Mon, Nov 05, 2012 at 11:38:39AM +1030, Rusty Russell wrote:
> > @@ -924,11 +1032,10 @@ static void virtnet_get_ringparam(struct net_device *dev,
> > {
> > struct virtnet_info *vi = netdev_priv(dev);
> >
> > - ring->rx_max_pending = virtqueue_get_vring_size(vi->rvq);
> > - ring->tx_max_pending = virtqueue_get_vring_size(vi->svq);
> > + ring->rx_max_pending = virtqueue_get_vring_size(vi->rq[0].vq);
> > + ring->tx_max_pending = virtqueue_get_vring_size(vi->sq[0].vq);
> > ring->rx_pending = ring->rx_max_pending;
> > ring->tx_pending = ring->tx_max_pending;
> > -
> > }
>
> This assumes all vqs are the same size. I think this should probably
> check: for mq mode, use the first vq, otherewise use the 0th.
For rx_pending/tx_pending I think what is required here is the
actual number of outstanding buffers.
Dave, Eric - right?
So this should be the total over all rings and to be useful,
rx_max_pending/tx_max_pending should be the total too.
> For bonus points, check this assertion at probe time.
Looks like we can easily support different queues too.
--
MST
^ permalink raw reply
* [patch] virtio_balloon: unlock on error in fill_balloon()
From: Dan Carpenter @ 2012-11-13 7:43 UTC (permalink / raw)
To: Rusty Russell, Rafael Aquini
Cc: virtualization, kernel-janitors, Michael S. Tsirkin
We recently added locking in fill_balloon() but there was one error path
which was missed.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
Only needed in linux-next.
diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
index f70151b..1c50e98 100644
--- a/drivers/virtio/virtio_balloon.c
+++ b/drivers/virtio/virtio_balloon.c
@@ -153,9 +153,10 @@ static void fill_balloon(struct virtio_balloon *vb, size_t num)
/* Didn't get any? Oh well. */
if (vb->num_pfns == 0)
- return;
+ goto unlock;
tell_host(vb, vb->inflate_vq);
+unlock:
mutex_unlock(&vb->balloon_lock);
}
^ permalink raw reply related
* Re: [PATCH -next] virtio: balloon: fix missing unlock on error in fill_balloon()
From: Rafael Aquini @ 2012-11-13 12:47 UTC (permalink / raw)
To: Andrew Morton; +Cc: Wei Yongjun, mst, linux-kernel, virtualization, yongjun_wei
In-Reply-To: <20121112153453.fa3edc3d.akpm@linux-foundation.org>
On Mon, Nov 12, 2012 at 03:34:53PM -0800, Andrew Morton wrote:
> On Mon, 12 Nov 2012 21:50:40 +0800
> Wei Yongjun <weiyj.lk@gmail.com> wrote:
>
> > From: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
> >
> > Add the missing unlock before return from function fill_balloon()
> > in the error handling case.
> >
> > Introduced by 9864a8(virtio_balloon: introduce migration primitives
> > to balloon pages)
> >
> > dpatch engine is used to auto generate this patch.
> > (https://github.com/weiyj/dpatch)
> >
> > Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
> > ---
> > drivers/virtio/virtio_balloon.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> > index f70151b..72e8dcb 100644
> > --- a/drivers/virtio/virtio_balloon.c
> > +++ b/drivers/virtio/virtio_balloon.c
> > @@ -152,8 +152,10 @@ static void fill_balloon(struct virtio_balloon *vb, size_t num)
> > }
> >
> > /* Didn't get any? Oh well. */
> > - if (vb->num_pfns == 0)
> > + if (vb->num_pfns == 0) {
> > + mutex_unlock(&vb->balloon_lock);
> > return;
> > + }
> >
> > tell_host(vb, vb->inflate_vq);
> > mutex_unlock(&vb->balloon_lock);
>
> Well. Why did this bug occur in the first place? Because
> fill_balloon() has multiple return points and one of those was
> overlooked when adding new locking.
>
> This (and the addition of memory leaks) is quite common. It is part of
> the reason why so much kernel code uses goto's to avoid multiple return
> points. A maintainability thing.
>
> And we can fix this shortcoming in fill_balloon() without even needing a
> goto:
>
> --- a/drivers/virtio/virtio_balloon.c~virtio_balloon-introduce-migration-primitives-to-balloon-pages-fix-fix
> +++ a/drivers/virtio/virtio_balloon.c
> @@ -151,13 +151,9 @@ static void fill_balloon(struct virtio_b
> totalram_pages--;
> }
>
> - /* Didn't get any? Oh well. */
> - if (vb->num_pfns == 0) {
> - mutex_unlock(&vb->balloon_lock);
> - return;
> - }
> -
> - tell_host(vb, vb->inflate_vq);
> + /* Did we get any? */
> + if (vb->num_pfns != 0)
> + tell_host(vb, vb->inflate_vq);
> mutex_unlock(&vb->balloon_lock);
> }
>
Your fix is far better, as it simplifies the code without loosing that test --
which only evaluates as true, if we fail to allocate a page right after getting
into the loop -- /me thinks driver folks place it there to not bother
tell_host() and the virt_queues if no pageframe is present at that pfns array.
^ permalink raw reply
* Re: [patch] virtio_balloon: unlock on error in fill_balloon()
From: Rafael Aquini @ 2012-11-13 14:28 UTC (permalink / raw)
To: Dan Carpenter; +Cc: kernel-janitors, virtualization, Michael S. Tsirkin
In-Reply-To: <20121113074303.GA13198@elgon.mountain>
On Tue, Nov 13, 2012 at 10:43:03AM +0300, Dan Carpenter wrote:
> We recently added locking in fill_balloon() but there was one error path
> which was missed.
>
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> Only needed in linux-next.
>
> diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
> index f70151b..1c50e98 100644
> --- a/drivers/virtio/virtio_balloon.c
> +++ b/drivers/virtio/virtio_balloon.c
> @@ -153,9 +153,10 @@ static void fill_balloon(struct virtio_balloon *vb, size_t num)
>
> /* Didn't get any? Oh well. */
> if (vb->num_pfns == 0)
> - return;
> + goto unlock;
>
> tell_host(vb, vb->inflate_vq);
> +unlock:
> mutex_unlock(&vb->balloon_lock);
> }
>
Thanks for the catch Dan.
Andrew has already picked a slightly different (and simpler) fix for this one,
though.
---8<---
a/drivers/virtio/virtio_balloon.c~virtio_balloon-introduce-migration-primitives-to-balloon-pages-fix-fix
+++ a/drivers/virtio/virtio_balloon.c
@@ -151,13 +151,9 @@ static void fill_balloon(struct virtio_b
totalram_pages--;
}
- /* Didn't get any? Oh well. */
- if (vb->num_pfns == 0) {
- mutex_unlock(&vb->balloon_lock);
- return;
- }
-
- tell_host(vb, vb->inflate_vq);
+ /* Did we get any? */
+ if (vb->num_pfns != 0)
+ tell_host(vb, vb->inflate_vq);
mutex_unlock(&vb->balloon_lock);
}
---8<---
^ permalink raw reply
* Re: [Pv-drivers] [PATCH 0/6] VSOCK for Linux upstreaming
From: Andy King @ 2012-11-14 16:42 UTC (permalink / raw)
To: Sasha Levin
Cc: pv-drivers, netdev, linux-kernel, virtualization, gregkh, davem,
George Zhang
In-Reply-To: <50A01FB1.1080502@gmail.com>
Hi Sasha,
Thanks for taking a look.
> So all the documentation I see in the VMCI Socket Programming Guide
> is about userspace programming, and the documentation in af_vsock.c
> is all around implementation considerations.
Agreed, we're sorely lacking in proper documentation for the internal
protocol. We're in the process of writing such a specification and
will post it to LKML next week at the latest.
> example, whats the deal with REQUEST/REQUEST2? it appears like
> something to deal with legacy code, but I'd really like to have it
> documented somewhere instead of trying to figure how everything
Correct, we have a legacy protocol and a v2, the latter now being
the default. This particular packet is sent by the client when
initiating a STREAM connection. The sequence is REQUEST(2)->
NEGOTIATE(2)->OFFER->ACCEPT. It will be properly documented in
the specification we post next week.
Thanks!
- Andy
^ permalink raw reply
* virtio_blk BUG on detach-disk/attach-disk of mounted vd
From: Brian Foster @ 2012-11-15 20:40 UTC (permalink / raw)
To: virtualization
Hi,
I know this isn't a valid use case or generally sane thing to do, but we
have a bug (link, with details, below) filed for a panic against a
detach-disk/attach-disk sequence of an ext4 mounted vd device on a rhel
kernel.
The same sequence leads to the following BUG on an upstream kernel
(3.7.0-rc5+ SMP x86_64 GNU/Linux):
[ 75.114951] BUG: unable to handle kernel NULL pointer dereference at
0000000000000090
[ 75.114957] IP: [<ffffffff8136ae35>]
virtio_check_driver_offered_feature+0x5/0x50
[ 75.114986] PGD 117b99067 PUD 114daa067 PMD 0
[ 75.114992] Oops: 0000 [#1] SMP
[ 75.115006] Modules linked in: be2iscsi iscsi_boot_sysfs bnx2i fcoe
libfcoe libfc cnic uio lockd cxgb4i cxgb4 scsi_transport_fc cxgb3i
scsi_tgt libcxgbi cxgb3 8021q garp stp llc mdio ib_iser rdma_cm ib_cm
iw_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi
scsi_transport_iscsi snd_hda_intel snd_hda_codec snd_hwdep snd_seq
snd_seq_device snd_pcm joydev snd_timer snd microcode soundcore pcspkr
virtio_net virtio_balloon 9pnet_virtio 9pnet snd_page_alloc i2c_piix4
i2c_core uinput sunrpc floppy
[ 75.115042] CPU 0
[ 75.115047] Pid: 1264, comm: blkid Not tainted 3.7.0-rc5+ #149 Bochs
Bochs
[ 75.115049] RIP: 0010:[<ffffffff8136ae35>] [<ffffffff8136ae35>]
virtio_check_driver_offered_feature+0x5/0x50
[ 75.115055] RSP: 0018:ffff880118c6bde0 EFLAGS: 00010286
[ 75.115055] RAX: ffff880117838000 RBX: ffff88011ac28680 RCX:
0000000000000000
[ 75.115058] RDX: 0000000000005331 RSI: 0000000000000007 RDI:
0000000000000000
[ 75.115058] RBP: ffff880118c6be18 R08: 0000000000005331 R09:
000000000000101d
[ 75.115060] R10: 0000000000000000 R11: 0000000000000246 R12:
000000000000101d
[ 75.115060] R13: 0000000000005331 R14: 0000000000000000 R15:
0000000000000000
[ 75.115063] FS: 00007fb5ccf80740(0000) GS:ffff88011fc00000(0000)
knlGS:0000000000000000
[ 75.115064] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 75.115066] CR2: 0000000000000090 CR3: 000000011786b000 CR4:
00000000000006f0
[ 75.115073] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
0000000000000000
[ 75.115077] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7:
0000000000000400
[ 75.115079] Process blkid (pid: 1264, threadinfo ffff880118c6a000,
task ffff880115a3c530)
[ 75.115080] Stack:
[ 75.115081] ffffffff813d0bfb ffff880118c6bf58 0000000000005331
00000000ffffffe7
[ 75.115084] 0000000000000000 ffff88011ac28680 ffff88011ab5d000
ffff880118c6be78
[ 75.115087] ffffffff812bd1be ffff880115a85180 ffff88011ac28680
ffff880118c6bee8
[ 75.115090] Call Trace:
[ 75.115101] [<ffffffff813d0bfb>] ? virtblk_ioctl+0x4b/0x90
[ 75.115118] [<ffffffff812bd1be>] blkdev_ioctl+0xde/0x830
[ 75.115130] [<ffffffff8118b406>] ? cp_new_stat+0x116/0x130
[ 75.115140] [<ffffffff811bc940>] block_ioctl+0x40/0x50
[ 75.115146] [<ffffffff81197ac8>] do_vfs_ioctl+0x98/0x550
[ 75.115149] [<ffffffff81198011>] sys_ioctl+0x91/0xb0
[ 75.115162] [<ffffffff810db086>] ? __audit_syscall_exit+0x3d6/0x410
[ 75.115175] [<ffffffff81625519>] system_call_fastpath+0x16/0x1b
[ 75.115176] Code: 4c 8b 60 18 ff 50 10 83 c8 80 48 89 df 0f b6 f0 41
ff d4 eb cb 90 0f 1f 44 00 00 55 48 89 e5 e8 d2 18 05 00 5d c3 0f 1f 44
00 00 <48> 8b 87 90 00 00 00 55 48 89 e5 8b 88 80 00 00 00 85 c9 74 26
[ 75.115203] RIP [<ffffffff8136ae35>]
virtio_check_driver_offered_feature+0x5/0x50
[ 75.115206] RSP <ffff880118c6bde0>
[ 75.115207] CR2: 0000000000000090
[ 75.115247] ---[ end trace f2226e229a762cf5 ]---
I suppose it's not a critical issue, but I'm reporting in the event that
there are any thoughts on improved error handling in this scenario. Thanks.
(Please CC me on replies).
Brian
* - https://bugzilla.redhat.com/show_bug.cgi?id=867280
^ permalink raw reply
* Re: [Pv-drivers] [PATCH 0/6] VSOCK for Linux upstreaming
From: Anthony Liguori @ 2012-11-15 21:32 UTC (permalink / raw)
To: Gerd Hoffmann
Cc: Andy King, Benjamin Herrenschmidt, pv-drivers, netdev,
linux-kernel, virtualization, gregkh, David Miller, georgezhang
In-Reply-To: <509A06AB.2020700@redhat.com>
On 11/07/2012 12:58 AM, Gerd Hoffmann wrote:
> On 11/05/12 19:19, Andy King wrote:
>> Hi David,
>>
>>> The big and only question is whether anyone can actually use any of
>>> this stuff without your proprietary bits?
>>
>> Do you mean the VMCI calls? The VMCI driver is in the process of being
>> upstreamed into the drivers/misc tree. Greg (cc'd on these patches) is
>> actively reviewing that code and we are addressing feedback.
>>
>> Also, there was some interest from RedHat into using vSockets as a unified
>> interface, routed over a hypervisor-specific transport (virtio or
>> otherwise, although for now VMCI is the only one implemented).
>
> Can you outline how this can be done? From a quick look over the code
> it seems like vsock has a hard dependency on vmci, is that correct?
>
> When making vsock a generic, reusable kernel service it should be the
> other way around: vsock should provide the core implementation and an
> interface where hypervisor-specific transports (vmci, virtio, xenbus,
> ...) can register themself.
This was already done in a hypervisor neutral way using virtio:
http://lists.openwall.net/netdev/2008/12/14/8
The concept was Nacked and that led to the abomination of virtio-serial. If an
address family for virtualization is on the table, we should reconsider
AF_VMCHANNEL.
I'd be thrilled to get rid of virtio-serial...
Regards,
Anthony Liguori
>
> cheers,
> Gerd
^ permalink raw reply
* Re: [PATCH 02/12] VMCI: datagram implementation.
From: Greg KH @ 2012-11-15 23:47 UTC (permalink / raw)
To: George Zhang; +Cc: pv-drivers, linux-kernel, virtualization
In-Reply-To: <20121107184116.9658.20579.stgit@promb-2n-dhcp175.eng.vmware.com>
On Wed, Nov 07, 2012 at 10:41:26AM -0800, George Zhang wrote:
> +/*
> + * Create a datagram entry given a handle pointer.
> + */
> +static int dg_create_handle(u32 resource_id,
> + u32 flags,
> + u32 priv_flags,
> + vmci_datagram_recv_cb recv_cb,
> + void *client_data, struct vmci_handle *out_handle)
> +{
> + int result;
> + u32 context_id;
> + struct vmci_handle handle;
> + struct datagram_entry *entry;
> +
> + BUG_ON(!recv_cb);
> + BUG_ON(!out_handle);
> + BUG_ON(priv_flags & ~VMCI_PRIVILEGE_ALL_FLAGS);
Given that this is a static function, there's no need for these
"asserts", right? Please send a follow-on patch removing all BUG_ON()
calls from these files, it's not acceptable to crash a user's box from a
driver that is handling parameters _you_ are feeding it.
thanks,
greg k-h
^ permalink raw reply
* Re: [PATCH 07/12] VMCI: queue pairs implementation.
From: Greg KH @ 2012-11-15 23:48 UTC (permalink / raw)
To: George Zhang; +Cc: pv-drivers, linux-kernel, virtualization
In-Reply-To: <20121107184210.9658.57625.stgit@promb-2n-dhcp175.eng.vmware.com>
On Wed, Nov 07, 2012 at 10:42:15AM -0800, George Zhang wrote:
> VMCI queue pairs allow for bi-directional ordered communication between host and guests.
You obviously didn't run checkpatch on this file :(
Please send me a follow-on patch to resolve the issues it found, before
someone else does...
thanks,
greg k-h
^ permalink raw reply
* Re: [PATCH 12/12] VMCI: Some header and config files.
From: Greg KH @ 2012-11-16 0:01 UTC (permalink / raw)
To: George Zhang; +Cc: pv-drivers, linux-kernel, virtualization
In-Reply-To: <20121107184258.9658.95698.stgit@promb-2n-dhcp175.eng.vmware.com>
On Wed, Nov 07, 2012 at 10:43:03AM -0800, George Zhang wrote:
> +#ifndef _VMCI_COMMONINT_H_
> +#define _VMCI_COMMONINT_H_
> +
> +#include <linux/printk.h>
Why printk from a .h file?
> +
> +#define ASSERT(cond) BUG_ON(!(cond))
No, please no.
> +
> +#define PCI_VENDOR_ID_VMWARE 0x15AD
> +#define PCI_DEVICE_ID_VMWARE_VMCI 0x0740
Align these properly? Why do they need to be in a .h file?
> +#define VMCI_DRIVER_VERSION_STRING "1.0.0.0-k"
Is this needed at all anymore?
> +#define MODULE_NAME "vmw_vmci"
This isn't needed, use the built-in macro instead.
> +/* Print magic... whee! */
> +#ifdef pr_fmt
> +#undef pr_fmt
> +#define pr_fmt(fmt) MODULE_NAME ": " fmt
> +#endif
That's not how you do this, sorry. Please do it like the rest of the
kernel.
> --- /dev/null
> +++ b/include/linux/vmw_vmci_api.h
With the new uapi rework, should this file still be here? What about
the other .h files?
> +typedef u32 vmci_id;
> +typedef u32 vmci_privilege_flags;
> +typedef u32 vmci_event;
Ick, no typdefs please.
> +static inline struct vmci_handle VMCI_MAKE_HANDLE(vmci_id cid, vmci_id rid)
> +{
> + struct vmci_handle h;
> + h.context = cid;
> + h.resource = rid;
> + return h;
> +}
You return a structure on the stack that just went away? Yeah, I know
it's an inline, but come on, that's not ok.
> +#define VMCI_HANDLE_TO_CONTEXT_ID(_handle) ((_handle).context)
> +#define VMCI_HANDLE_TO_RESOURCE_ID(_handle) ((_handle).resource)
It's longer to write the macro out than to just do .context or
.resource, just use them instead.
> +#define VMCI_HANDLE_EQUAL(_h1, _h2) ((_h1).context == (_h2).context && \
> + (_h1).resource == (_h2).resource)
Inline function instead? How often do you really need this?
> +#define VMCI_INVALID_ID ~0
> +static const struct vmci_handle VMCI_INVALID_HANDLE = { VMCI_INVALID_ID,
> + VMCI_INVALID_ID
> +};
C99 initializers please.
> +
> +#define VMCI_HANDLE_INVALID(_handle) \
> + VMCI_HANDLE_EQUAL((_handle), VMCI_INVALID_HANDLE)
Gotta love magic values :(
> +/*
> + * The below defines can be used to send anonymous requests.
> + * This also indicates that no response is expected.
> + */
> +#define VMCI_ANON_SRC_CONTEXT_ID VMCI_INVALID_ID
> +#define VMCI_ANON_SRC_RESOURCE_ID VMCI_INVALID_ID
> +#define VMCI_ANON_SRC_HANDLE vmci_make_handle(VMCI_ANON_SRC_CONTEXT_ID, \
> + VMCI_ANON_SRC_RESOURCE_ID)
So you just created an invalid message?
> +/* The lowest 16 context ids are reserved for internal use. */
> +#define VMCI_RESERVED_CID_LIMIT ((u32) 16)
> +
> +/*
> + * Hypervisor context id, used for calling into hypervisor
> + * supplied services from the VM.
> + */
> +#define VMCI_HYPERVISOR_CONTEXT_ID 0
> +
> +/*
> + * Well-known context id, a logical context that contains a set of
> + * well-known services. This context ID is now obsolete.
> + */
> +#define VMCI_WELL_KNOWN_CONTEXT_ID 1
> +
> +/*
> + * Context ID used by host endpoints.
> + */
> +#define VMCI_HOST_CONTEXT_ID 2
> +
> +#define VMCI_CONTEXT_IS_VM(_cid) (VMCI_INVALID_ID != (_cid) && \
> + (_cid) > VMCI_HOST_CONTEXT_ID)
> +
Are you sure all of this stuff needs to be in a .h file that lives in
include/linux/?
> +/*
> + * Linux defines _IO* macros, but the core kernel code ignore the encoded
> + * ioctl value. It is up to individual drivers to decode the value (for
> + * example to look at the size of a structure to determine which version
> + * of a specific command should be used) or not (which is what we
> + * currently do, so right now the ioctl value for a given command is the
> + * command itself).
> + *
> + * Hence, we just define the IOCTL_VMCI_foo values directly, with no
> + * intermediate IOCTLCMD_ representation.
> + */
> +#define IOCTLCMD(_cmd) IOCTL_VMCI_ ## _cmd
I don't recall ever getting a valid answer for this (if you did, my
appologies, can you repeat it). What in the world are you talking about
here? Why is your driver somehow special from the thousands of other
ones that use the in-kernel IO macros properly for an ioctl?
> +enum {
> + /*
> + * We need to bracket the range of values used for ioctls,
> + * because x86_64 Linux forces us to explicitly register ioctl
> + * handlers by value for handling 32 bit ioctl syscalls.
> + * Hence FIRST and LAST. Pick something for FIRST that
> + * doesn't collide with vmmon (2001+).
> + */
What do you mean here? What are you trying to work around? And why?
> + IOCTLCMD(FIRST) = 1951,
> + IOCTLCMD(VERSION) = IOCTLCMD(FIRST),
Huh?
> +
> + /* BEGIN VMCI */
> + IOCTLCMD(INIT_CONTEXT),
> +
> + /*
> + * The following two were used for process and datagram
> + * process creation. They are not used anymore and reserved
> + * for future use. They will fail if issued.
> + */
> + IOCTLCMD(RESERVED1),
> + IOCTLCMD(RESERVED2),
Who's reserving them? If they aren't in the driver, no need to list
them here at all, who would ever call them? I think this is due to your
"weird" way of defining ioctls, please don't.
> + /*
> + * The following used to be for shared memory. It is now
> + * unused and and is reserved for future use. It will fail if
> + * issued.
> + */
> + IOCTLCMD(RESERVED3),
Same as above.
> + /*
> + * The follwoing three were also used to be for shared
> + * memory. An old WS6 user-mode client might try to use them
> + * with the new driver, but since we ensure that only contexts
> + * created by VMX'en of the appropriate version
> + * (VMCI_VERSION_NOTIFY or VMCI_VERSION_NEWQP) or higher use
> + * these ioctl, everything is fine.
> + */
> + IOCTLCMD(QUEUEPAIR_SETVA),
> + IOCTLCMD(NOTIFY_RESOURCE),
> + IOCTLCMD(NOTIFICATIONS_RECEIVE),
> + IOCTLCMD(VERSION2),
> + IOCTLCMD(QUEUEPAIR_ALLOC),
> + IOCTLCMD(QUEUEPAIR_SETPAGEFILE),
> + IOCTLCMD(QUEUEPAIR_DETACH),
> + IOCTLCMD(DATAGRAM_SEND),
> + IOCTLCMD(DATAGRAM_RECEIVE),
> + IOCTLCMD(DATAGRAM_REQUEST_MAP),
> + IOCTLCMD(DATAGRAM_REMOVE_MAP),
> + IOCTLCMD(CTX_ADD_NOTIFICATION),
> + IOCTLCMD(CTX_REMOVE_NOTIFICATION),
> + IOCTLCMD(CTX_GET_CPT_STATE),
> + IOCTLCMD(CTX_SET_CPT_STATE),
> + IOCTLCMD(GET_CONTEXT_ID),
> + IOCTLCMD(LAST),
> + /* END VMCI */
> +
> + /*
> + * VMCI Socket IOCTLS are defined next and go from
> + * IOCTLCMD(LAST) (1972) to 1990. VMware reserves a range of
> + * 4 ioctls for VMCI Sockets to grow. We cannot reserve many
> + * ioctls here since we are close to overlapping with vmmon
> + * ioctls (2001+). Define a meta-ioctl if running out of this
> + * binary space.
> + */
> + IOCTLCMD(SOCKETS_FIRST) = IOCTLCMD(LAST),
> + IOCTLCMD(SOCKETS_VERSION) = IOCTLCMD(SOCKETS_FIRST),
> + IOCTLCMD(SOCKETS_BIND),
> + IOCTLCMD(SOCKETS_SET_SYMBOLS),
> + IOCTLCMD(SOCKETS_CONNECT),
As you don't have any in-kernel code using these ioctls, why define them
yet?
And again, what's with the "reserving" ioctls? That's not ok.
> + /*
> + * The next two values are public (vmci_sockets.h) and cannot be
> + * changed. That means the number of values above these cannot be
> + * changed either unless the base index (specified below) is updated
> + * accordingly.
> + */
> + IOCTLCMD(SOCKETS_GET_AF_VALUE),
> + IOCTLCMD(SOCKETS_GET_LOCAL_CID),
> + IOCTLCMD(SOCKETS_GET_SOCK_NAME),
> + IOCTLCMD(SOCKETS_GET_SOCK_OPT),
> + IOCTLCMD(SOCKETS_GET_VM_BY_NAME),
> + IOCTLCMD(SOCKETS_IOCTL),
> + IOCTLCMD(SOCKETS_LISTEN),
> + IOCTLCMD(SOCKETS_RECV),
> + IOCTLCMD(SOCKETS_RECV_FROM),
> + IOCTLCMD(SOCKETS_SELECT),
> + IOCTLCMD(SOCKETS_SEND),
> + IOCTLCMD(SOCKETS_SEND_TO),
> + IOCTLCMD(SOCKETS_SET_SOCK_OPT),
> + IOCTLCMD(SOCKETS_SHUTDOWN),
> + IOCTLCMD(SOCKETS_SOCKET), /* 1990 on Linux. */
> +
> + IOCTLCMD(SOCKETS_LAST) = 1994, /* 1994 on Linux. */
> +
> + /*
> + * The VSockets ioctls occupy the block above. We define a
> + * new range of VMCI ioctls to maintain binary compatibility
> + * between the user land and the kernel driver. Careful,
> + * vmmon ioctls start from 2001, so this means we can add only
> + * 4 new VMCI ioctls. Define a meta-ioctl if running out of
> + * this binary space.
> + */
> + IOCTLCMD(FIRST2),
> + IOCTLCMD(SET_NOTIFY) = IOCTLCMD(FIRST2), /* 1995 on Linux. */
> + IOCTLCMD(LAST2),
> +};
I still don't understand, sorry.
Please redo this in the "normal" Linux kernel way of defining ioctls.
No need to be "special" here.
And shouldn't something like this be in a separate .h file, that gets
included from userspace? Not all of the stuff in this .h file should
get exported to userspace, right?
> +static inline struct vmci_handle vmci_make_handle(u32 cid, u32 rid)
> +{
> + struct vmci_handle h;
> +
> + h.context = cid;
> + h.resource = rid;
> +
> + return h;
> +}
Where have I see this before... :)
thanks,
greg k-h
^ permalink raw reply
* Re: [PATCH 11/12] VMCI: host side driver implementation.
From: Greg KH @ 2012-11-16 0:03 UTC (permalink / raw)
To: George Zhang; +Cc: pv-drivers, linux-kernel, virtualization
In-Reply-To: <20121107184249.9658.53806.stgit@promb-2n-dhcp175.eng.vmware.com>
On Wed, Nov 07, 2012 at 10:42:53AM -0800, George Zhang wrote:
> +/*
> + * Sets up a given context for notify to work. Calls drv_map_bool_ptr()
> + * which maps the notify boolean in user VA in kernel space.
> + */
> +static int vmci_host_setup_notify(struct vmci_ctx *context,
> + unsigned long uva)
> +{
> + struct page *page;
> + int retval;
> +
> + if (context->notify_page) {
> + pr_devel("%s: Notify mechanism is already set up.\n", __func__);
> + return VMCI_ERROR_DUPLICATE_ENTRY;
> + }
> +
> + if (!access_ok(VERIFY_WRITE, (void __user *)uva, sizeof(bool)))
> + return VMCI_ERROR_GENERIC;
This line causes sparse to complain. The odds that userspace knows what
gcc is using for "bool" is pretty low.
Please fix.
thanks,
greg k-h
^ permalink raw reply
* Re: [[PATCH v9 3/3] 1/1] virtio_console: Remove buffers from out_vq at port removal
From: Rusty Russell @ 2012-11-16 0:52 UTC (permalink / raw)
Cc: Michael S. Tsirkin, sjur, linus.walleij, linux-kernel,
virtualization, Amit Shah, masami.hiramatsu.pt,
Sjur Brændeland
In-Reply-To: <029d7029bc1186fbd2ec74123dc88922b9600660.1352366215.git.amit.shah@redhat.com>
Amit Shah <amit.shah@redhat.com> writes:
> From: Sjur Brændeland <sjur.brandeland@stericsson.com>
>
> Remove buffers from the out-queue when a port is removed. Rproc_serial
> communicates with remote processors that may crash and leave buffers in
> the out-queue. The virtio serial ports may have buffers in the out-queue
> as well, e.g. for non-blocking ports and the host didn't consume them
> yet.
>
> [Amit: Remove WARN_ON for generic ports case.]
>
> Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
> Signed-off-by: Amit Shah <amit.shah@redhat.com>
I already have this in my pending queue; I've promoted it to my
virtio-next branch now.
Thanks,
Rusty.
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* [PATCH 00/14] Modify signed comparisons of unsigned variables
From: Tushar Behera @ 2012-11-16 6:50 UTC (permalink / raw)
To: linux-kernel
Cc: Chas Williams, linux-input, Jeremy Fitzhardinge, Jack Steiner,
Ian Campbell, Arnd Bergmann, Konrad Rzeszutek Wilk, Jiri Kosina,
Linus Walleij, patches, linux-wireless, ivtv-devel,
Mauro Carvalho Chehab, linux-atm-general, Luciano Coelho, netdev,
linux-usb, virtualization, xen-devel, linux-media
The occurrences were identified through the coccinelle script at
following location.
http://www.emn.fr/z-info/coccinelle/rules/find_unsigned.cocci
Signed checks for unsigned variables are removed if it is also checked
for upper error limit. For error checks, IS_ERR_VALUE() macros is used.
Tushar Behera (14):
[media] ivtv: Remove redundant check on unsigned variable
[media] meye: Remove redundant check on unsigned variable
[media] saa7134: Remove redundant check on unsigned variable
[media] tlg2300: Remove redundant check on unsigned variable
[media] atmel-isi: Update error check for unsigned variables
pinctrl: samsung: Update error check for unsigned variables
pinctrl: SPEAr: Update error check for unsigned variables
xen: netback: Remove redundant check on unsigned variable
xen: events: Remove redundant check on unsigned variable
atm: Removed redundant check on unsigned variable
HID: hiddev: Remove redundant check on unsigned variable
gru: Remove redundant check on unsigned variable
misc: tsl2550: Remove redundant check on unsigned variable
wlcore: Remove redundant check on unsigned variable
drivers/atm/fore200e.c | 2 +-
drivers/hid/usbhid/hiddev.c | 2 +-
drivers/media/pci/ivtv/ivtv-ioctl.c | 2 +-
drivers/media/pci/meye/meye.c | 2 +-
drivers/media/pci/saa7134/saa7134-video.c | 2 +-
drivers/media/platform/soc_camera/atmel-isi.c | 2 +-
drivers/media/usb/tlg2300/pd-video.c | 2 +-
drivers/misc/sgi-gru/grukdump.c | 2 +-
drivers/misc/tsl2550.c | 4 ++--
drivers/net/wireless/ti/wlcore/debugfs.c | 2 +-
drivers/net/xen-netback/netback.c | 4 ++--
drivers/pinctrl/pinctrl-samsung.c | 2 +-
drivers/pinctrl/spear/pinctrl-plgpio.c | 2 +-
drivers/xen/events.c | 2 +-
14 files changed, 16 insertions(+), 16 deletions(-)
--
1.7.4.1
CC: Mauro Carvalho Chehab <mchehab@infradead.org>
CC: Linus Walleij <linus.walleij@linaro.org>
CC: Ian Campbell <ian.campbell@citrix.com>
CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
CC: Jeremy Fitzhardinge <jeremy@goop.org>
CC: Chas Williams <chas@cmf.nrl.navy.mil>
CC: Jack Steiner <steiner@sgi.com>
CC: Arnd Bergmann <arnd@arndb.de>
CC: Luciano Coelho <coelho@ti.com>
CC: Jiri Kosina <jkosina@suse.cz>
CC: ivtv-devel@ivtvdriver.org
CC: linux-media@vger.kernel.org
CC: xen-devel@lists.xensource.com
CC: netdev@vger.kernel.org
CC: virtualization@lists.linux-foundation.org
CC: linux-atm-general@lists.sourceforge.net
CC: linux-usb@vger.kernel.org
CC: linux-input@vger.kernel.org
CC: linux-wireless@vger.kernel.org
^ permalink raw reply
* [PATCH 09/14] xen: events: Remove redundant check on unsigned variable
From: Tushar Behera @ 2012-11-16 6:50 UTC (permalink / raw)
To: linux-kernel
Cc: Jeremy Fitzhardinge, Konrad Rzeszutek Wilk, virtualization,
xen-devel, patches
In-Reply-To: <1353048646-10935-1-git-send-email-tushar.behera@linaro.org>
No need to check whether unsigned variable is less than 0.
CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
CC: Jeremy Fitzhardinge <jeremy@goop.org>
CC: xen-devel@lists.xensource.com
CC: virtualization@lists.linux-foundation.org
Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
---
drivers/xen/events.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index 4293c57..cadd7d1 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -216,7 +216,7 @@ static void xen_irq_info_pirq_init(unsigned irq,
*/
static unsigned int evtchn_from_irq(unsigned irq)
{
- if (unlikely(WARN(irq < 0 || irq >= nr_irqs, "Invalid irq %d!\n", irq)))
+ if (unlikely(WARN(irq >= nr_irqs, "Invalid irq %d!\n", irq)))
return 0;
return info_for_irq(irq)->evtchn;
--
1.7.4.1
^ permalink raw reply related
* Re: [PATCH 09/14] xen: events: Remove redundant check on unsigned variable
From: Konrad Rzeszutek Wilk @ 2012-11-16 16:09 UTC (permalink / raw)
To: Tushar Behera
Cc: Jeremy Fitzhardinge, xen-devel, virtualization, linux-kernel,
patches
In-Reply-To: <1353048646-10935-10-git-send-email-tushar.behera@linaro.org>
On Fri, Nov 16, 2012 at 12:20:41PM +0530, Tushar Behera wrote:
> No need to check whether unsigned variable is less than 0.
>
> CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> CC: Jeremy Fitzhardinge <jeremy@goop.org>
> CC: xen-devel@lists.xensource.com
> CC: virtualization@lists.linux-foundation.org
> Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
> ---
> drivers/xen/events.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/xen/events.c b/drivers/xen/events.c
> index 4293c57..cadd7d1 100644
> --- a/drivers/xen/events.c
> +++ b/drivers/xen/events.c
> @@ -216,7 +216,7 @@ static void xen_irq_info_pirq_init(unsigned irq,
> */
> static unsigned int evtchn_from_irq(unsigned irq)
> {
> - if (unlikely(WARN(irq < 0 || irq >= nr_irqs, "Invalid irq %d!\n", irq)))
> + if (unlikely(WARN(irq >= nr_irqs, "Invalid irq %d!\n", irq)))
> return 0;
>
> return info_for_irq(irq)->evtchn;
> --
> 1.7.4.1
^ permalink raw reply
* Re: [PATCH 09/14] xen: events: Remove redundant check on unsigned variable
From: Jeremy Fitzhardinge @ 2012-11-16 16:53 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, Tushar Behera
Cc: xen-devel, virtualization, linux-kernel, patches
In-Reply-To: <20121116160923.GP22320@phenom.dumpdata.com>
[-- Attachment #1.1: Type: text/plain, Size: 1501 bytes --]
To be honest I'd nack this kind of patch. The test is only redundant in the most trivial sense that the compiler can easily optimise away. The point of the test is to make sure that the range is OK even if the type subsequently becomes signed (to hold a -ve error, for example).
J
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> wrote:
>On Fri, Nov 16, 2012 at 12:20:41PM +0530, Tushar Behera wrote:
>> No need to check whether unsigned variable is less than 0.
>>
>> CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>
>Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>
>> CC: Jeremy Fitzhardinge <jeremy@goop.org>
>> CC: xen-devel@lists.xensource.com
>> CC: virtualization@lists.linux-foundation.org
>> Signed-off-by: Tushar Behera <tushar.behera@linaro.org>
>> ---
>> drivers/xen/events.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/xen/events.c b/drivers/xen/events.c
>> index 4293c57..cadd7d1 100644
>> --- a/drivers/xen/events.c
>> +++ b/drivers/xen/events.c
>> @@ -216,7 +216,7 @@ static void xen_irq_info_pirq_init(unsigned irq,
>> */
>> static unsigned int evtchn_from_irq(unsigned irq)
>> {
>> - if (unlikely(WARN(irq < 0 || irq >= nr_irqs, "Invalid irq %d!\n",
>irq)))
>> + if (unlikely(WARN(irq >= nr_irqs, "Invalid irq %d!\n", irq)))
>> return 0;
>>
>> return info_for_irq(irq)->evtchn;
>> --
>> 1.7.4.1
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
[-- Attachment #1.2: Type: text/html, Size: 2231 bytes --]
[-- Attachment #2: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Best papers published in JCR/ISI JOURNALS - Deadline: November 25
From: WorldCIST @ 2012-11-16 17:33 UTC (permalink / raw)
To: virtualization
[-- Attachment #1: Type: text/plain, Size: 6599 bytes --]
Apologies if you are receiving this mail more than once...
Please disseminate by colleagues, researchers, students, etc. Thanks a lot!
**********************************************************************************
WorldCIST'13
The 2013 World Conference on Information Systems and Technologies
March 27 - 30, Algarve, Portugal
http://www.aisti.eu/worldcist13/
**********************************************************************************
SCOPE
The 2013 World Conference on Information Systems and Technologies (WorldCIST'13: http://www.aisti.eu/worldcist13/) is a global forum for researchers and practitioners to present and discuss the most recent innovations, trends, results, experiences and concerns in the several perspectives of Information Systems and Technologies.
We are pleased to invite you to submit your papers to WorldCISTI'13. All submissions will be reviewed on the basis of relevance, originality, importance and clarity.
THEMES
Submitted papers should be related with one or more of the main themes proposed for the Conference:
A) Information and Knowledge Management (IKM);
B) Organizational Models and Information Systems (OMIS);
C) Intelligent and Decision Support Systems (IDSS);
D) Software Systems, Architectures, Applications and Tools (SSAAT);
E) Computer Networks, Mobility and Pervasive Systems (CNMPS);
F) Human-Computer Interaction (HCI).
TYPES OF SUBMISSIONS AND DECISIONS
Four types of papers can be submitted:
Full paper: Finished or consolidated R&D works, to be included in one of the Conference themes. These papers are assigned a 10-page limit.
Short paper: Ongoing works with relevant preliminary results, open to discussion. These papers are assigned a 7-page limit.
Poster paper: Initial work with relevant ideas, open to discussion. These papers are assigned to a 4-page limit.
Company paper: Companies' papers that show practical experience, R & D, tools, etc., focused on some topics of the conference. These papers are assigned to a 4-page limit.
Submitted papers must comply with the format of Advances in Intelligent Systems and Computing Series (see http://www.aisti.eu/worldcist13/springerformat.doc) be written in English, must not have been published before, not be under review for any other conference or publication and not include any information leading to the authors identification. Therefore, the authors names, affiliations and bibliographic references should not be included in the version for evaluation by the Program Committee. This information should only be included in the camera-ready version.
All papers will be subjected to a double-blind review by at least two members of the Program Committee.
Based on Program Committee evaluation, a paper can be rejected or accepted by the Conference Chairs. In the later case, it can be accepted as the type originally submitted or as another type. Thus, full papers can be accepted as short papers or poster papers only. Similarly, short papers can be accepted as poster papers only. In these cases, the authors will be allowed to maintain the original number of pages in the camera-ready version.
The authors of accepted poster papers must also build and print a poster to be exhibited during the Conference. This poster must follow an A1 or A2 vertical format. The Conference includes Work Sessions where these posters are presented and orally discussed, with a 5 minute limit per poster.
The authors of accepted full papers will have 15 minutes to present their work in a Conference Work Session; approximately 5 minutes of discussion will follow each presentation. The authors of accepted short papers and company papers will have 11 minutes to present their work in a Conference Work Session; approximately 4 minutes of discussion will follow each presentation.
PUBLICATION AND INDEXING
To ensure that a full paper, short paper, poster paper or company paper is published in the Proceedings, at least one of the authors must be fully registered by the 11th of January 2013, and the paper must comply with the suggested layout and page-limit. Additionally, all recommended changes must be addressed by the authors before they submit the camera-ready version.
No more than one paper per registration will be published in the Conference Proceedings. An extra fee must be paid for publication of additional papers, with a maximum of two additional papers per registration.
Full and short papers will be published in Proceedings by Springer, in Advances in Intelligent Systems and Computing Series. Poster and company papers will be published in Proceedings by AISTI.
Published full and short papers will be indexed by ISI, EI-Compendex, SCOPUS, DBLP and EBSCO, among others, and will be available in the SpringerLink Digital Library. Published poster and company papers will be indexed in EI-Compendex and EBSCO.
The authors of the best selected papers will be invited to extend them for publication in edited books and in international journals indexed by ISI/JCR, SCOPUS and/or DBLP, among others, such as:
- ACM Transactions on Modeling and Computer Simulation (TOMACS)
- Online Information Review (OIR)
- Informatics for Health and Social Care (IHSC)
- Computer Science and Information Systems (ComSIS)
- Telecommunication Systems Journal (TSJ)
- INFORMATION - An International Interdisciplinary Journal
- Journal of Organizational and End User Computing (JOEUC)
- Information Researh (IR)
- International Journal of Internet Protocol Technology (IJIPT)
- Studies in Computational Intelligence (SCI)
- Journal of Advanced Computational Intelligence and Intelligent Informatics (JACIII)
- Journal of Electrical and Computer Engineering (JECE): Special Issue in Advances in Radar Technology
- WSEAS Transactions on Systems (TS)
- Library Review (LR)
- Education for Information (EI)
- International Journal of IT/Business Alignment and Governance (IJITBAG)
- International Journal of Systems and Service-Oriented Engineering (IJSSOE)
- International Journal of Interactive Multimedia and Artificial Intelligence (IJIMAI)
IMPORTANT DATES
Paper Submission: November 25, 2012
Notification of Acceptance: December 30, 2012
Camera-ready Submission: January 9, 2013
Payment of Registration, to ensure the inclusion of an accepted paper in the conference proceedings: January 11, 2013.
-
Kind regards,
Maria Lemos
WorldCIST'13
http://www.aisti.eu/worldcist13/
[-- Attachment #2: Type: text/plain, Size: 183 bytes --]
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization
^ permalink raw reply
* Virtualization DevRoom at FOSDEM 2013
From: Chris Wright @ 2012-11-16 19:46 UTC (permalink / raw)
To: virtualization, kvm, qemu-devel
Following on the heels of a successful KVM Forum and oVirt Workshop,
FOSDEM will be hosting a Virtualization DevRoom in February. If you've
been to FOSDEM before, you know this is about developers and code, not
products.
Presentation proposals are due by December 16th 2012.
The full details are here:
http://osvc.v2.cs.unibo.it/index.php/Main_Page
With the relevant topics being:
"Topics covered will include, but not limited to:
- machine virtualization (e.g. KVM, Xen, VirtualBox,...)
- network virtualization (e.g. openvstack, vale, vde, Open vSwitch,...)
- process level virtualization, flexible kernels (e.g. rump anykernel, view-os, ...)
- virt management (e.g. ganeti, libvirt, ovirt, XCP, ...)"
thanks,
-chris
^ permalink raw reply
* [PATCH v4] x86/xen: Use __pa_symbol instead of __pa on C visible symbols
From: Alexander Duyck @ 2012-11-16 21:45 UTC (permalink / raw)
To: jeremy, konrad.wilk; +Cc: linux-kernel, x86, xen-devel, virtualization
This change updates a few of the functions to use __pa_symbol when
translating C visible symbols instead of __pa. By using __pa_symbol we are
able to drop a few extra lines of code as don't have to test to see if the
virtual pointer is a part of the kernel text or just standard virtual memory.
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
---
v4: I have spun this patch off as a separate patch for v4 due to the fact that
this patch doesn't apply cleanly to Linus's tree. As such I am
submitting it based off of the linux-next tree to be accepted in the Xen
tree since this patch can actually exist on its own without the need
for the other patches in the original __phys_addr performance series.
arch/x86/xen/mmu.c | 21 +++++++++++----------
1 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 4a05b39..a63e5f9 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1486,7 +1486,8 @@ static int xen_pgd_alloc(struct mm_struct *mm)
if (user_pgd != NULL) {
user_pgd[pgd_index(VSYSCALL_START)] =
- __pgd(__pa(level3_user_vsyscall) | _PAGE_TABLE);
+ __pgd(__pa_symbol(level3_user_vsyscall) |
+ _PAGE_TABLE);
ret = 0;
}
@@ -1958,10 +1959,10 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
* pgd.
*/
if (xen_feature(XENFEAT_writable_page_tables)) {
- native_write_cr3(__pa(init_level4_pgt));
+ native_write_cr3(__pa_symbol(init_level4_pgt));
} else {
xen_mc_batch();
- __xen_write_cr3(true, __pa(init_level4_pgt));
+ __xen_write_cr3(true, __pa_symbol(init_level4_pgt));
xen_mc_issue(PARAVIRT_LAZY_CPU);
}
/* We can't that easily rip out L3 and L2, as the Xen pagetables are
@@ -1984,10 +1985,10 @@ static RESERVE_BRK_ARRAY(pmd_t, swapper_kernel_pmd, PTRS_PER_PMD);
static void __init xen_write_cr3_init(unsigned long cr3)
{
- unsigned long pfn = PFN_DOWN(__pa(swapper_pg_dir));
+ unsigned long pfn = PFN_DOWN(__pa_symbol(swapper_pg_dir));
- BUG_ON(read_cr3() != __pa(initial_page_table));
- BUG_ON(cr3 != __pa(swapper_pg_dir));
+ BUG_ON(read_cr3() != __pa_symbol(initial_page_table));
+ BUG_ON(cr3 != __pa_symbol(swapper_pg_dir));
/*
* We are switching to swapper_pg_dir for the first time (from
@@ -2011,7 +2012,7 @@ static void __init xen_write_cr3_init(unsigned long cr3)
pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE, pfn);
pin_pagetable_pfn(MMUEXT_UNPIN_TABLE,
- PFN_DOWN(__pa(initial_page_table)));
+ PFN_DOWN(__pa_symbol(initial_page_table)));
set_page_prot(initial_page_table, PAGE_KERNEL);
set_page_prot(initial_kernel_pmd, PAGE_KERNEL);
@@ -2036,7 +2037,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
copy_page(initial_page_table, pgd);
initial_page_table[KERNEL_PGD_BOUNDARY] =
- __pgd(__pa(initial_kernel_pmd) | _PAGE_PRESENT);
+ __pgd(__pa_symbol(initial_kernel_pmd) | _PAGE_PRESENT);
set_page_prot(initial_kernel_pmd, PAGE_KERNEL_RO);
set_page_prot(initial_page_table, PAGE_KERNEL_RO);
@@ -2045,8 +2046,8 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(__pa(pgd)));
pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE,
- PFN_DOWN(__pa(initial_page_table)));
- xen_write_cr3(__pa(initial_page_table));
+ PFN_DOWN(__pa_symbol(initial_page_table)));
+ xen_write_cr3(__pa_symbol(initial_page_table));
memblock_reserve(__pa(xen_start_info->pt_base),
xen_start_info->nr_pt_frames * PAGE_SIZE);
^ permalink raw reply related
* Re: [PATCH v4] x86/xen: Use __pa_symbol instead of __pa on C visible symbols
From: Konrad Rzeszutek Wilk @ 2012-11-17 0:22 UTC (permalink / raw)
To: Alexander Duyck; +Cc: linux-kernel, jeremy, x86, xen-devel, virtualization
In-Reply-To: <20121116214217.8308.55518.stgit@ahduyck-cp1.jf.intel.com>
On Fri, Nov 16, 2012 at 01:45:25PM -0800, Alexander Duyck wrote:
> This change updates a few of the functions to use __pa_symbol when
> translating C visible symbols instead of __pa. By using __pa_symbol we are
> able to drop a few extra lines of code as don't have to test to see if the
> virtual pointer is a part of the kernel text or just standard virtual memory.
>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
> ---
>
> v4: I have spun this patch off as a separate patch for v4 due to the fact that
> this patch doesn't apply cleanly to Linus's tree. As such I am
> submitting it based off of the linux-next tree to be accepted in the Xen
> tree since this patch can actually exist on its own without the need
> for the other patches in the original __phys_addr performance series.
OK, let me stick it in my tree then.
>
> arch/x86/xen/mmu.c | 21 +++++++++++----------
> 1 files changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
> index 4a05b39..a63e5f9 100644
> --- a/arch/x86/xen/mmu.c
> +++ b/arch/x86/xen/mmu.c
> @@ -1486,7 +1486,8 @@ static int xen_pgd_alloc(struct mm_struct *mm)
>
> if (user_pgd != NULL) {
> user_pgd[pgd_index(VSYSCALL_START)] =
> - __pgd(__pa(level3_user_vsyscall) | _PAGE_TABLE);
> + __pgd(__pa_symbol(level3_user_vsyscall) |
> + _PAGE_TABLE);
> ret = 0;
> }
>
> @@ -1958,10 +1959,10 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
> * pgd.
> */
> if (xen_feature(XENFEAT_writable_page_tables)) {
> - native_write_cr3(__pa(init_level4_pgt));
> + native_write_cr3(__pa_symbol(init_level4_pgt));
> } else {
> xen_mc_batch();
> - __xen_write_cr3(true, __pa(init_level4_pgt));
> + __xen_write_cr3(true, __pa_symbol(init_level4_pgt));
> xen_mc_issue(PARAVIRT_LAZY_CPU);
> }
> /* We can't that easily rip out L3 and L2, as the Xen pagetables are
> @@ -1984,10 +1985,10 @@ static RESERVE_BRK_ARRAY(pmd_t, swapper_kernel_pmd, PTRS_PER_PMD);
>
> static void __init xen_write_cr3_init(unsigned long cr3)
> {
> - unsigned long pfn = PFN_DOWN(__pa(swapper_pg_dir));
> + unsigned long pfn = PFN_DOWN(__pa_symbol(swapper_pg_dir));
>
> - BUG_ON(read_cr3() != __pa(initial_page_table));
> - BUG_ON(cr3 != __pa(swapper_pg_dir));
> + BUG_ON(read_cr3() != __pa_symbol(initial_page_table));
> + BUG_ON(cr3 != __pa_symbol(swapper_pg_dir));
>
> /*
> * We are switching to swapper_pg_dir for the first time (from
> @@ -2011,7 +2012,7 @@ static void __init xen_write_cr3_init(unsigned long cr3)
> pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE, pfn);
>
> pin_pagetable_pfn(MMUEXT_UNPIN_TABLE,
> - PFN_DOWN(__pa(initial_page_table)));
> + PFN_DOWN(__pa_symbol(initial_page_table)));
> set_page_prot(initial_page_table, PAGE_KERNEL);
> set_page_prot(initial_kernel_pmd, PAGE_KERNEL);
>
> @@ -2036,7 +2037,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
>
> copy_page(initial_page_table, pgd);
> initial_page_table[KERNEL_PGD_BOUNDARY] =
> - __pgd(__pa(initial_kernel_pmd) | _PAGE_PRESENT);
> + __pgd(__pa_symbol(initial_kernel_pmd) | _PAGE_PRESENT);
>
> set_page_prot(initial_kernel_pmd, PAGE_KERNEL_RO);
> set_page_prot(initial_page_table, PAGE_KERNEL_RO);
> @@ -2045,8 +2046,8 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
> pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, PFN_DOWN(__pa(pgd)));
>
> pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE,
> - PFN_DOWN(__pa(initial_page_table)));
> - xen_write_cr3(__pa(initial_page_table));
> + PFN_DOWN(__pa_symbol(initial_page_table)));
> + xen_write_cr3(__pa_symbol(initial_page_table));
>
> memblock_reserve(__pa(xen_start_info->pt_base),
> xen_start_info->nr_pt_frames * PAGE_SIZE);
^ permalink raw reply
* Re: [rfc net-next v6 2/3] virtio_net: multiqueue support
From: Ben Hutchings @ 2012-11-17 0:35 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: krkumar2, kvm, netdev, linux-kernel, virtualization, edumazet,
davem
In-Reply-To: <20121113064026.GA27416@redhat.com>
On Tue, 2012-11-13 at 08:40 +0200, Michael S. Tsirkin wrote:
> On Mon, Nov 05, 2012 at 11:38:39AM +1030, Rusty Russell wrote:
> > > @@ -924,11 +1032,10 @@ static void virtnet_get_ringparam(struct net_device *dev,
> > > {
> > > struct virtnet_info *vi = netdev_priv(dev);
> > >
> > > - ring->rx_max_pending = virtqueue_get_vring_size(vi->rvq);
> > > - ring->tx_max_pending = virtqueue_get_vring_size(vi->svq);
> > > + ring->rx_max_pending = virtqueue_get_vring_size(vi->rq[0].vq);
> > > + ring->tx_max_pending = virtqueue_get_vring_size(vi->sq[0].vq);
> > > ring->rx_pending = ring->rx_max_pending;
> > > ring->tx_pending = ring->tx_max_pending;
> > > -
> > > }
> >
> > This assumes all vqs are the same size. I think this should probably
> > check: for mq mode, use the first vq, otherewise use the 0th.
>
> For rx_pending/tx_pending I think what is required here is the
> actual number of outstanding buffers.
> Dave, Eric - right?
>
> So this should be the total over all rings and to be useful,
> rx_max_pending/tx_max_pending should be the total too.
So far as I know, all current implementations use the number of
descriptors per ring here. virtio_net should be consistent with this.
Ben.
> > For bonus points, check this assertion at probe time.
>
> Looks like we can easily support different queues too.
>
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply
* ICAC2013 CFP (10th International Conference on Autonomic Computing)
From: Ming Zhao @ 2012-11-17 17:13 UTC (permalink / raw)
To: virtualization
ÿþI\0C\0A\0C\0 \02\00\01\03\0 \0C\0a\0l\0l\0 \0f\0o\0r\0 \0P\0a\0p\0e\0r\0s\0
\0
\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0-\0
\0
\01\00\0t\0h\0 \0I\0n\0t\0e\0r\0n\0a\0t\0i\0o\0n\0a\0l\0 \0C\0o\0n\0f\0e\0r\0e\0n\0c\0e\0 \0o\0n\0 \0A\0u\0t\0o\0n\0o\0m\0i\0c\0 \0C\0o\0m\0p\0u\0t\0i\0n\0g\0
\0
\0
\0
\0J\0u\0n\0e\0 \02\06\0-\02\08\0,\0 \02\00\01\03\0 \0 \0S\0a\0n\0 \0J\0o\0s\0e\0,\0 \0C\0A\0
\0
\0S\0p\0o\0n\0s\0o\0r\0e\0d\0 \0b\0y\0 \0U\0S\0E\0N\0I\0X\0,\0 \0t\0h\0e\0 \0A\0d\0v\0a\0n\0c\0e\0d\0 \0C\0o\0m\0p\0u\0t\0i\0n\0g\0 \0S\0y\0s\0t\0e\0m\0s\0 \0A\0s\0s\0o\0c\0i\0a\0t\0i\0o\0n\0
\0
\0h\0t\0t\0p\0s\0:\0/\0/\0w\0w\0w\0.\0u\0s\0e\0n\0i\0x\0.\0o\0r\0g\0/\0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0/\0i\0c\0a\0c\01\03\0
\0
\0
\0
\0
\0
\0*\0 \0I\0m\0p\0o\0r\0t\0a\0n\0t\0 \0D\0a\0t\0e\0s\0
\0
\0
\0
\0 \0 \0P\0a\0p\0e\0r\0 \0r\0e\0g\0i\0s\0t\0r\0a\0t\0i\0o\0n\0s\0 \0(\0t\0i\0t\0l\0e\0 \0a\0n\0d\0 \0a\0b\0s\0t\0r\0a\0c\0t\0)\0 \0d\0u\0e\0:\0 \0F\0e\0b\0r\0u\0a\0r\0y\0 \02\05\0,\0 \02\00\01\03\0,\0 \01\01\0:\05\09\0 \0p\0.\0m\0.\0 \0P\0S\0T\0
\0
\0 \0 \0P\0a\0p\0e\0r\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0 \0d\0u\0e\0:\0 \0M\0a\0r\0c\0h\0 \04\0,\0 \02\00\01\03\0,\0 \01\01\0:\05\09\0 \0p\0.\0m\0.\0 \0P\0S\0T\0
\0
\0 \0 \0N\0o\0t\0i\0f\0i\0c\0a\0t\0i\0o\0n\0 \0t\0o\0 \0a\0u\0t\0h\0o\0r\0s\0:\0 \0A\0p\0r\0i\0l\0 \08\0,\0 \02\00\01\03\0
\0
\0 \0 \0F\0i\0n\0a\0l\0 \0p\0a\0p\0e\0r\0 \0f\0i\0l\0e\0s\0 \0d\0u\0e\0:\0 \0M\0a\0y\0 \02\02\0,\0 \02\00\01\03\0
\0
\0
\0
\0
\0
\0*\0 \0O\0v\0e\0r\0v\0i\0e\0w\0
\0
\0
\0
\0 \0 \0I\0C\0A\0C\0 \0i\0s\0 \0t\0h\0e\0 \0l\0e\0a\0d\0i\0n\0g\0 \0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0 \0o\0n\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0 \0t\0e\0c\0h\0n\0i\0q\0u\0e\0s\0,\0 \0f\0o\0u\0n\0d\0a\0t\0i\0o\0n\0s\0,\0 \0a\0n\0d\0 \0a\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0s\0.\0 \0L\0a\0r\0g\0e\0-\0s\0c\0a\0l\0e\0 \0s\0y\0s\0t\0e\0m\0s\0 \0o\0f\0 \0a\0l\0l\0 \0t\0y\0p\0e\0s\0,\0 \0s\0u\0c\0h\0 \0a\0s\0 \0d\0a\0t\0a\0 \0c\0e\0n\0t\0e\0r\0s\0,\0 \0c\0o\0m\0p\0u\0t\0e\0 \0c\0l\0o\0u\0d\0s\0,\0 \0s\0e\0n\0s\0o\0r\0 \0n\0e\0t\0w\0o\0r\0k\0s\0,\0 \0e\0m\0b\0e\0d\0d\0e\0d\0 \0o\0r\0 \0p\0e\0r\0v\0a\0s\0i\0v\0e\0 \0e\0n\0v\0i\0r\0o\0n\0m\0e\0n\0t\0s\0,\0 \0a\0n\0d\0 \0t\0h\0e\0 \0I\0n\0t\0e\0r\0n\0e\0t\0 \0o\0f\0 \0T\0h\0i\0n\0g\0s\0 \0a\0r\0e\0 \0b\0e\0c\0o\0m\0i\0n\0g\0 \0i\0n\0c\0r\0e\0a\0s\0i\0n\0g\0l\0y\0 \0c\0o\0m\0p\0l\0e\0x\0 \0a\0n\0d\0 \0b\0u\0r\0d\0e\0n\0s\0o\0m\0e\0 \0f\0o\0r\0 \0p\0e\0o\0p\0l\0e\0 \0t\0o\0 \0m\0a\0n\0a\0g\0e\0.\0 \0A\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0 \0s\0y\0s\0t\0e\0m\0s\0 \0r\0e\0d\0u\0c\0e\0 \0t\0h\0i\0s\0 \0b\0u\0r\0d\0e\0n\0 \0b\0y\0 \0m\0a\0n\0a\0g\0i\0n\0g\0 \0t\0h\0e\0i\0r\0 \0o\0w\0n\0 \0b\0e\0h\0a\0v\0i\0o\0r\0 \0i\0n\0 \0a\0c\0c\0o\0r\0d\0a\0n\0c\0e\0 \0w\0i\0t\0h\0 \0h\0i\0g\0h\0-\0l\0e\0v\0e\0l\0 \0g\0o\0a\0l\0s\0.\0 \0I\0n\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0s\0y\0s\0t\0e\0m\0s\0,\0 \0r\0e\0s\0o\0u\0r\0c\0e\0s\0 \0a\0n\0d\0 \0a\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0s\0 \0a\0r\0e\0 \0m\0a\0n\0a\0g
\0e\0d\0 \0t\0o\0 \0m\0a\0x\0i\0m\0i\0z\0e\0 \0p\0e\0r\0f\0o\0r\0m\0a\0n\0c\0e\0 \0a\0n\0d\0 \0m\0i\0n\0i\0m\0i\0z\0e\0 \0c\0o\0s\0t\0,\0 \0w\0h\0i\0l\0e\0 \0m\0a\0i\0n\0t\0a\0i\0n\0i\0n\0g\0 \0p\0r\0e\0d\0i\0c\0t\0a\0b\0l\0e\0 \0a\0n\0d\0 \0r\0e\0l\0i\0a\0b\0l\0e\0 \0b\0e\0h\0a\0v\0i\0o\0r\0 \0i\0n\0 \0t\0h\0e\0 \0f\0a\0c\0e\0 \0o\0f\0 \0v\0a\0r\0y\0i\0n\0g\0 \0w\0o\0r\0k\0l\0o\0a\0d\0s\0,\0 \0f\0a\0i\0l\0u\0r\0e\0s\0,\0 \0a\0n\0d\0 \0m\0a\0l\0i\0c\0i\0o\0u\0s\0 \0t\0h\0r\0e\0a\0t\0s\0.\0 \0A\0c\0h\0i\0e\0v\0i\0n\0g\0 \0s\0e\0l\0f\0-\0m\0a\0n\0a\0g\0e\0m\0e\0n\0t\0 \0r\0e\0q\0u\0i\0r\0e\0s\0 \0a\0n\0d\0 \0m\0o\0t\0i\0v\0a\0t\0e\0s\0 \0r\0e\0s\0e\0a\0r\0c\0h\0 \0t\0h\0a\0t\0 \0s\0p\0a\0n\0s\0 \0a\0 \0w\0i\0d\0e\0 \0v\0a\0r\0i\0e\0t\0y\0 \0o\0f\0 \0s\0c\0i\0e\0n\0t\0i\0f\0i\0c\0 \0a\0n\0d\0 \0e\0n\0g\0i\0n\0e\0e\0r\0i\0n\0g\0 \0d\0i\0s\0c\0i\0p\0l\0i\0n\0e\0s\0,\0 \0i\0n\0c\0l\0u\0d\0i\0n\0g\0 \0d\0i\0s\0t\0r\0i\0b\0u\0t\0e\0d\0 \0s\0y\0s\0t\0e\0m\0s\0,\0 \0a\0r\0t\0i\0f\0i\0c\0i\0a\0l\0 \0i\0n\0t\0e\0l\0l\0i\0g\0e\0n\0c\0e\0,\0 \0m\0a\0c\0h\0i\0n\0e\0 \0l\0e\0a\0r\0n\0i\0n\0g\0,\0 \0m\0o\0d\0e\0l\0i\0n\0g\0,\0 \0c\0o\0n\0t\0r\0o\0l\0 \0t\0h\0e\0o\0r\0y\0,\0 \0o\0p\0t\0i\0m\0i\0z\0a\0t\0i\0o\0n\0,\0 \0p\0l\0a\0n\0n\0i\0n\0g\0,\0 \0d\0e\0c\0i\0s\0i\0o\0n\0 \0t\0h\0e\0o\0r\0y\0,\0 \0u\0s\0e\0r\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e\0 \0d\0e\0s\0i\0g\0n\0,\0 \0d\0a\0t\0a\0 \0m\0a\0n\0a\0g\0e\0m\0e\0n\0t\0,\0 \0s\0o\0f\0t\0w\0a\0r\0e\0 \0e\0n\0g\0i\0n\0e\0e\0r\0i\0n\0g\0,\0
\0e\0m\0e\0r\0g\0e\0n\0t\0 \0b\0e\0h\0a\0v\0i\0o\0r\0,\0 \0a\0n\0d\0 \0b\0i\0o\0-\0i\0n\0s\0p\0i\0r\0e\0d\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0.\0 \0I\0C\0A\0C\0 \0b\0r\0i\0n\0g\0s\0 \0t\0o\0g\0e\0t\0h\0e\0r\0 \0r\0e\0s\0e\0a\0r\0c\0h\0e\0r\0s\0 \0a\0n\0d\0 \0p\0r\0a\0c\0t\0i\0t\0i\0o\0n\0e\0r\0s\0 \0f\0r\0o\0m\0 \0d\0i\0s\0p\0a\0r\0a\0t\0e\0 \0d\0i\0s\0c\0i\0p\0l\0i\0n\0e\0s\0,\0 \0a\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0 \0d\0o\0m\0a\0i\0n\0s\0,\0 \0a\0n\0d\0 \0p\0e\0r\0s\0p\0e\0c\0t\0i\0v\0e\0s\0,\0 \0e\0n\0a\0b\0l\0i\0n\0g\0 \0t\0h\0e\0m\0 \0t\0o\0 \0d\0i\0s\0c\0o\0v\0e\0r\0 \0a\0n\0d\0 \0s\0h\0a\0r\0e\0 \0u\0n\0d\0e\0r\0l\0y\0i\0n\0g\0 \0c\0o\0m\0m\0o\0n\0a\0l\0i\0t\0i\0e\0s\0 \0i\0n\0 \0t\0h\0e\0i\0r\0 \0a\0p\0p\0r\0o\0a\0c\0h\0e\0s\0 \0t\0o\0 \0m\0a\0k\0i\0n\0g\0 \0r\0e\0s\0o\0u\0r\0c\0e\0s\0,\0 \0a\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0s\0,\0 \0a\0n\0d\0 \0s\0y\0s\0t\0e\0m\0s\0 \0m\0o\0r\0e\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0.\0
\0
\0
\0
\0
\0
\0*\0 \0T\0o\0p\0i\0c\0s\0
\0
\0
\0
\0 \0 \0P\0a\0p\0e\0r\0s\0 \0a\0r\0e\0 \0s\0o\0l\0i\0c\0i\0t\0e\0d\0 \0f\0r\0o\0m\0 \0a\0l\0l\0 \0a\0r\0e\0a\0s\0 \0o\0f\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0,\0 \0i\0n\0c\0l\0u\0d\0i\0n\0g\0 \0(\0b\0u\0t\0 \0n\0o\0t\0 \0l\0i\0m\0i\0t\0e\0d\0 \0t\0o\0)\0:\0
\0
\0
\0
\0 \0 \0*\0*\0 \0S\0e\0l\0f\0-\0m\0a\0n\0a\0g\0i\0n\0g\0 \0c\0o\0m\0p\0o\0n\0e\0n\0t\0s\0,\0 \0s\0u\0c\0h\0 \0a\0s\0 \0c\0o\0m\0p\0u\0t\0e\0,\0 \0s\0t\0o\0r\0a\0g\0e\0,\0 \0a\0n\0d\0 \0n\0e\0t\0w\0o\0r\0k\0i\0n\0g\0 \0d\0e\0v\0i\0c\0e\0s\0;\0 \0e\0m\0b\0e\0d\0d\0e\0d\0 \0a\0n\0d\0 \0r\0e\0a\0l\0-\0t\0i\0m\0e\0 \0s\0y\0s\0t\0e\0m\0s\0;\0 \0a\0n\0d\0 \0m\0o\0b\0i\0l\0e\0 \0d\0e\0v\0i\0c\0e\0s\0 \0s\0u\0c\0h\0 \0a\0s\0 \0s\0m\0a\0r\0t\0 \0p\0h\0o\0n\0e\0s\0
\0
\0 \0 \0*\0*\0 \0A\0I\0 \0a\0n\0d\0 \0m\0a\0t\0h\0e\0m\0a\0t\0i\0c\0a\0l\0 \0t\0e\0c\0h\0n\0i\0q\0u\0e\0s\0,\0 \0s\0u\0c\0h\0 \0a\0s\0 \0m\0a\0c\0h\0i\0n\0e\0 \0l\0e\0a\0r\0n\0i\0n\0g\0,\0 \0c\0o\0n\0t\0r\0o\0l\0 \0t\0h\0e\0o\0r\0y\0,\0 \0o\0p\0e\0r\0a\0t\0i\0o\0n\0s\0 \0r\0e\0s\0e\0a\0r\0c\0h\0,\0 \0p\0r\0o\0b\0a\0b\0i\0l\0i\0t\0y\0 \0a\0n\0d\0 \0s\0t\0o\0c\0h\0a\0s\0t\0i\0c\0 \0p\0r\0o\0c\0e\0s\0s\0e\0s\0,\0 \0q\0u\0e\0u\0i\0n\0g\0 \0t\0h\0e\0o\0r\0y\0,\0 \0r\0u\0l\0e\0-\0b\0a\0s\0e\0d\0 \0s\0y\0s\0t\0e\0m\0s\0,\0 \0a\0n\0d\0 \0b\0i\0o\0-\0i\0n\0s\0p\0i\0r\0e\0d\0 \0t\0e\0c\0h\0n\0i\0q\0u\0e\0s\0,\0 \0a\0n\0d\0 \0t\0h\0e\0i\0r\0 \0u\0s\0e\0 \0i\0n\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0
\0
\0 \0 \0*\0*\0 \0E\0n\0d\0-\0t\0o\0-\0e\0n\0d\0 \0d\0e\0s\0i\0g\0n\0 \0a\0n\0d\0 \0i\0m\0p\0l\0e\0m\0e\0n\0t\0a\0t\0i\0o\0n\0s\0 \0f\0o\0r\0 \0m\0a\0n\0a\0g\0e\0m\0e\0n\0t\0 \0o\0f\0 \0r\0e\0s\0o\0u\0r\0c\0e\0s\0,\0 \0w\0o\0r\0k\0l\0o\0a\0d\0s\0,\0 \0a\0v\0a\0i\0l\0a\0b\0i\0l\0i\0t\0y\0,\0 \0p\0e\0r\0f\0o\0r\0m\0a\0n\0c\0e\0,\0 \0r\0e\0l\0i\0a\0b\0i\0l\0i\0t\0y\0,\0 \0p\0o\0w\0e\0r\0/\0c\0o\0o\0l\0i\0n\0g\0,\0 \0s\0e\0c\0u\0r\0i\0t\0y\0,\0 \0a\0n\0d\0 \0o\0t\0h\0e\0r\0s\0
\0
\0 \0 \0*\0*\0 \0M\0o\0n\0i\0t\0o\0r\0i\0n\0g\0 \0s\0y\0s\0t\0e\0m\0s\0 \0t\0h\0a\0t\0 \0c\0a\0n\0 \0s\0c\0a\0l\0e\0 \0t\0o\0 \0l\0a\0r\0g\0e\0 \0e\0n\0v\0i\0r\0o\0n\0m\0e\0n\0t\0s\0
\0
\0 \0 \0*\0*\0 \0H\0y\0p\0e\0r\0v\0i\0s\0o\0r\0s\0,\0 \0o\0p\0e\0r\0a\0t\0i\0n\0g\0 \0s\0y\0s\0t\0e\0m\0s\0,\0 \0m\0i\0d\0d\0l\0e\0w\0a\0r\0e\0,\0 \0o\0r\0 \0a\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0 \0s\0u\0p\0p\0o\0r\0t\0 \0f\0o\0r\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0
\0
\0 \0 \0*\0*\0 \0N\0o\0v\0e\0l\0 \0h\0u\0m\0a\0n\0 \0i\0n\0t\0e\0r\0f\0a\0c\0e\0s\0 \0f\0o\0r\0 \0m\0o\0n\0i\0t\0o\0r\0i\0n\0g\0 \0a\0n\0d\0 \0c\0o\0n\0t\0r\0o\0l\0l\0i\0n\0g\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0s\0y\0s\0t\0e\0m\0s\0
\0
\0 \0 \0*\0*\0 \0G\0o\0a\0l\0 \0s\0p\0e\0c\0i\0f\0i\0c\0a\0t\0i\0o\0n\0 \0a\0n\0d\0 \0p\0o\0l\0i\0c\0i\0e\0s\0,\0 \0i\0n\0c\0l\0u\0d\0i\0n\0g\0 \0s\0p\0e\0c\0i\0f\0i\0c\0a\0t\0i\0o\0n\0 \0a\0n\0d\0 \0m\0o\0d\0e\0l\0i\0n\0g\0 \0o\0f\0 \0s\0e\0r\0v\0i\0c\0e\0-\0l\0e\0v\0e\0l\0 \0a\0g\0r\0e\0e\0m\0e\0n\0t\0s\0,\0 \0b\0e\0h\0a\0v\0i\0o\0r\0 \0e\0n\0f\0o\0r\0c\0e\0m\0e\0n\0t\0,\0 \0I\0T\0 \0g\0o\0v\0e\0r\0n\0a\0n\0c\0e\0,\0 \0a\0n\0d\0 \0b\0u\0s\0i\0n\0e\0s\0s\0-\0d\0r\0i\0v\0e\0n\0 \0I\0T\0 \0m\0a\0n\0a\0g\0e\0m\0e\0n\0t\0
\0
\0 \0 \0*\0*\0 \0F\0r\0a\0m\0e\0w\0o\0r\0k\0s\0,\0 \0p\0r\0i\0n\0c\0i\0p\0l\0e\0s\0,\0 \0a\0r\0c\0h\0i\0t\0e\0c\0t\0u\0r\0e\0s\0,\0 \0a\0n\0d\0 \0t\0o\0o\0l\0k\0i\0t\0s\0,\0 \0f\0r\0o\0m\0 \0s\0o\0f\0t\0w\0a\0r\0e\0 \0e\0n\0g\0i\0n\0e\0e\0r\0i\0n\0g\0 \0p\0r\0a\0c\0t\0i\0c\0e\0s\0 \0a\0n\0d\0 \0e\0x\0p\0e\0r\0i\0m\0e\0n\0t\0a\0l\0 \0m\0e\0t\0h\0o\0d\0o\0l\0o\0g\0i\0e\0s\0 \0t\0o\0 \0a\0g\0e\0n\0t\0-\0b\0a\0s\0e\0d\0 \0t\0e\0c\0h\0n\0i\0q\0u\0e\0s\0
\0
\0 \0 \0*\0*\0 \0A\0u\0t\0o\0m\0a\0t\0e\0d\0 \0m\0a\0n\0a\0g\0e\0m\0e\0n\0t\0 \0t\0e\0c\0h\0n\0i\0q\0u\0e\0s\0 \0f\0o\0r\0 \0e\0m\0e\0r\0g\0i\0n\0g\0 \0a\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0s\0,\0 \0s\0y\0s\0t\0e\0m\0s\0,\0 \0a\0n\0d\0 \0p\0l\0a\0t\0f\0o\0r\0m\0s\0,\0 \0i\0n\0c\0l\0u\0d\0i\0n\0g\0 \0s\0o\0c\0i\0a\0l\0 \0n\0e\0t\0w\0o\0r\0k\0s\0,\0 \0B\0i\0g\0 \0D\0a\0t\0a\0 \0s\0y\0s\0t\0e\0m\0s\0,\0 \0m\0u\0l\0t\0i\0-\0c\0o\0r\0e\0 \0p\0r\0o\0c\0e\0s\0s\0o\0r\0s\0,\0 \0a\0n\0d\0 \0I\0n\0t\0e\0r\0n\0e\0t\0 \0o\0f\0 \0T\0h\0i\0n\0g\0s\0
\0
\0 \0 \0*\0*\0 \0F\0u\0n\0d\0a\0m\0e\0n\0t\0a\0l\0 \0s\0c\0i\0e\0n\0c\0e\0 \0a\0n\0d\0 \0t\0h\0e\0o\0r\0y\0 \0o\0f\0 \0s\0e\0l\0f\0-\0m\0a\0n\0a\0g\0i\0n\0g\0 \0s\0y\0s\0t\0e\0m\0s\0 \0f\0o\0r\0 \0u\0n\0d\0e\0r\0s\0t\0a\0n\0d\0i\0n\0g\0,\0 \0c\0o\0n\0t\0r\0o\0l\0l\0i\0n\0g\0,\0 \0o\0r\0 \0e\0x\0p\0l\0o\0i\0t\0i\0n\0g\0 \0e\0m\0e\0r\0g\0e\0n\0t\0 \0s\0y\0s\0t\0e\0m\0 \0b\0e\0h\0a\0v\0i\0o\0r\0s\0 \0t\0o\0 \0e\0n\0f\0o\0r\0c\0e\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0p\0r\0o\0p\0e\0r\0t\0i\0e\0s\0
\0
\0 \0 \0*\0*\0 \0A\0p\0p\0l\0i\0c\0a\0t\0i\0o\0n\0s\0 \0o\0f\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0 \0a\0n\0d\0 \0e\0x\0p\0e\0r\0i\0e\0n\0c\0e\0s\0 \0w\0i\0t\0h\0 \0p\0r\0o\0t\0o\0t\0y\0p\0e\0d\0 \0o\0r\0 \0d\0e\0p\0l\0o\0y\0e\0d\0 \0s\0y\0s\0t\0e\0m\0s\0 \0s\0o\0l\0v\0i\0n\0g\0 \0r\0e\0a\0l\0-\0w\0o\0r\0l\0d\0 \0p\0r\0o\0b\0l\0e\0m\0s\0 \0i\0n\0 \0s\0c\0i\0e\0n\0c\0e\0,\0 \0e\0n\0g\0i\0n\0e\0e\0r\0i\0n\0g\0,\0 \0b\0u\0s\0i\0n\0e\0s\0s\0,\0 \0o\0r\0 \0s\0o\0c\0i\0e\0t\0y\0
\0
\0 \0 \0*\0*\0 \0P\0a\0p\0e\0r\0s\0 \0w\0i\0l\0l\0 \0b\0e\0 \0j\0u\0d\0g\0e\0d\0 \0o\0n\0 \0o\0r\0i\0g\0i\0n\0a\0l\0i\0t\0y\0,\0 \0s\0i\0g\0n\0i\0f\0i\0c\0a\0n\0c\0e\0,\0 \0i\0n\0t\0e\0r\0e\0s\0t\0,\0 \0c\0o\0r\0r\0e\0c\0t\0n\0e\0s\0s\0,\0 \0c\0l\0a\0r\0i\0t\0y\0 \0a\0n\0d\0 \0r\0e\0l\0e\0v\0a\0n\0c\0e\0 \0t\0o\0 \0t\0h\0e\0 \0b\0r\0o\0a\0d\0e\0r\0 \0c\0o\0m\0m\0u\0n\0i\0t\0y\0.\0 \0P\0a\0p\0e\0r\0s\0 \0a\0r\0e\0 \0s\0t\0r\0o\0n\0g\0l\0y\0 \0e\0n\0c\0o\0u\0r\0a\0g\0e\0d\0 \0t\0o\0 \0r\0e\0p\0o\0r\0t\0 \0o\0n\0 \0e\0x\0p\0e\0r\0i\0e\0n\0c\0e\0s\0,\0 \0m\0e\0a\0s\0u\0r\0e\0m\0e\0n\0t\0s\0,\0 \0u\0s\0e\0r\0 \0s\0t\0u\0d\0i\0e\0s\0,\0 \0a\0n\0d\0 \0p\0r\0o\0v\0i\0d\0e\0 \0a\0n\0 \0a\0p\0p\0r\0o\0p\0r\0i\0a\0t\0e\0 \0q\0u\0a\0n\0t\0i\0t\0a\0t\0i\0v\0e\0 \0e\0v\0a\0l\0u\0a\0t\0i\0o\0n\0 \0i\0f\0 \0a\0t\0 \0a\0l\0l\0 \0p\0o\0s\0s\0i\0b\0l\0e\0.\0 \0 \0
\0
\0
\0
\0
\0
\0*\0 \0P\0a\0p\0e\0r\0 \0S\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0
\0
\0
\0
\0 \0 \0F\0u\0l\0l\0 \0p\0a\0p\0e\0r\0s\0 \0(\0a\0 \0m\0a\0x\0i\0m\0u\0m\0 \0o\0f\0 \01\00\0 \0p\0a\0g\0e\0s\0)\0 \0a\0n\0d\0 \0s\0h\0o\0r\0t\0 \0p\0a\0p\0e\0r\0s\0 \0(\04\0 \0p\0a\0g\0e\0s\0)\0 \0a\0r\0e\0 \0i\0n\0v\0i\0t\0e\0d\0 \0o\0n\0 \0a\0 \0w\0i\0d\0e\0 \0v\0a\0r\0i\0e\0t\0y\0 \0o\0f\0 \0t\0o\0p\0i\0c\0s\0 \0r\0e\0l\0a\0t\0i\0n\0g\0 \0t\0o\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0.\0 \0B\0o\0t\0h\0 \0f\0u\0l\0l\0 \0a\0n\0d\0 \0s\0h\0o\0r\0t\0 \0p\0a\0p\0e\0r\0s\0 \0s\0h\0o\0u\0l\0d\0 \0b\0e\0 \0t\0y\0p\0e\0s\0e\0t\0 \0i\0n\0 \0t\0w\0o\0-\0c\0o\0l\0u\0m\0n\0 \0f\0o\0r\0m\0a\0t\0 \0i\0n\0 \01\00\0 \0p\0o\0i\0n\0t\0 \0t\0y\0p\0e\0 \0o\0n\0 \01\02\0 \0p\0o\0i\0n\0t\0 \0(\0s\0i\0n\0g\0l\0e\0-\0s\0p\0a\0c\0e\0d\0)\0 \0l\0e\0a\0d\0i\0n\0g\0,\0 \0w\0i\0t\0h\0 \0t\0h\0e\0 \0t\0e\0x\0t\0 \0b\0l\0o\0c\0k\0 \0b\0e\0i\0n\0g\0 \0n\0o\0 \0m\0o\0r\0e\0 \0t\0h\0a\0n\0 \06\0.\05\0"\0 \0w\0i\0d\0e\0 \0b\0y\0 \09\0"\0 \0d\0e\0e\0p\0.\0 \0B\0o\0t\0h\0 \0k\0i\0n\0d\0s\0 \0o\0f\0 \0p\0a\0p\0e\0r\0s\0 \0s\0h\0o\0u\0l\0d\0 \0b\0e\0 \0s\0u\0b\0m\0i\0t\0t\0e\0d\0 \0v\0i\0a\0 \0t\0h\0e\0 \0W\0e\0b\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0f\0o\0r\0m\0,\0 \0w\0h\0i\0c\0h\0 \0w\0i\0l\0l\0 \0b\0e\0 \0a\0v\0a\0i\0l\0a\0b\0l\0e\0 \0h\0e\0r\0e\0 \0s\0o\0o\0n\0.\0 \0C\0o\0m\0p\0l\0e\0t\0e\0 \0f\0o\0r\0m\0a\0t\0t\0i\0n\0g\0 \0a\0n\0d\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0i\0n\0s\0t\0r\0u\0c\0t\0i\0o\0n\0s\0 \0c\0a\0n\0 \0b\0e\0 \0f\0o\0u\0n\0d\0 \0h\0e\0r\0e\0.\0 \0A\0u\0t\0h
\0o\0r\0s\0 \0a\0r\0e\0 \0a\0l\0s\0o\0 \0e\0n\0c\0o\0u\0r\0a\0g\0e\0d\0 \0t\0o\0 \0s\0u\0b\0m\0i\0t\0 \0a\0 \0p\0o\0s\0t\0e\0r\0 \0o\0r\0 \0d\0e\0m\0o\0 \0t\0h\0a\0t\0 \0s\0u\0m\0m\0a\0r\0i\0z\0e\0s\0 \0o\0r\0 \0a\0u\0g\0m\0e\0n\0t\0s\0 \0t\0h\0e\0i\0r\0 \0p\0a\0p\0e\0r\0 \0(\0s\0e\0e\0 \0b\0e\0l\0o\0w\0)\0.\0
\0
\0
\0
\0 \0 \0S\0i\0m\0u\0l\0t\0a\0n\0e\0o\0u\0s\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0o\0f\0 \0t\0h\0e\0 \0s\0a\0m\0e\0 \0w\0o\0r\0k\0 \0t\0o\0 \0m\0u\0l\0t\0i\0p\0l\0e\0 \0v\0e\0n\0u\0e\0s\0,\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0o\0f\0 \0p\0r\0e\0v\0i\0o\0u\0s\0l\0y\0 \0p\0u\0b\0l\0i\0s\0h\0e\0d\0 \0w\0o\0r\0k\0,\0 \0o\0r\0 \0p\0l\0a\0g\0i\0a\0r\0i\0s\0m\0 \0c\0o\0n\0s\0t\0i\0t\0u\0t\0e\0s\0 \0d\0i\0s\0h\0o\0n\0e\0s\0t\0y\0 \0o\0r\0 \0f\0r\0a\0u\0d\0.\0 \0U\0S\0E\0N\0I\0X\0,\0 \0l\0i\0k\0e\0 \0o\0t\0h\0e\0r\0 \0s\0c\0i\0e\0n\0t\0i\0f\0i\0c\0 \0a\0n\0d\0 \0t\0e\0c\0h\0n\0i\0c\0a\0l\0 \0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0s\0 \0a\0n\0d\0 \0j\0o\0u\0r\0n\0a\0l\0s\0,\0 \0p\0r\0o\0h\0i\0b\0i\0t\0s\0 \0t\0h\0e\0s\0e\0 \0p\0r\0a\0c\0t\0i\0c\0e\0s\0 \0a\0n\0d\0 \0m\0a\0y\0 \0t\0a\0k\0e\0 \0a\0c\0t\0i\0o\0n\0 \0a\0g\0a\0i\0n\0s\0t\0 \0a\0u\0t\0h\0o\0r\0s\0 \0w\0h\0o\0 \0h\0a\0v\0e\0 \0c\0o\0m\0m\0i\0t\0t\0e\0d\0 \0t\0h\0e\0m\0.\0 \0S\0e\0e\0 \0t\0h\0e\0 \0U\0S\0E\0N\0I\0X\0 \0C\0o\0n\0f\0e\0r\0e\0n\0c\0e\0 \0S\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0 \0P\0o\0l\0i\0c\0y\0 \0f\0o\0r\0 \0d\0e\0t\0a\0i\0l\0s\0.\0 \0P\0a\0p\0e\0r\0s\0 \0a\0c\0c\0o\0m\0p\0a\0n\0i\0e\0d\0 \0b\0y\0 \0n\0o\0n\0d\0i\0s\0c\0l\0o\0s\0u\0r\0e\0 \0a\0g\0r\0e\0e\0m\0e\0n\0t\0 \0f\0o\0r\0m\0s\0 \0w\0i\0l\0l\0 \0n\0o\0t\0 \0b\0e\0 \0c\0o\0n\0s\0i\0d\0e\0r\0e\0d\0.\0 \0I\0f\0 \0y\0o\0u\0 \0a\0r\0e\0 \0u\0n\0c\0e\0r\0t\0a\0i\0n\0 \0w\0h\0e\0t\0h\0e\0r\0 \0y\0o\0u\0r\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0m\0e\0e\0t\0s\0 \0U\0S
\0E\0N\0I\0X\0'\0s\0 \0g\0u\0i\0d\0e\0l\0i\0n\0e\0s\0,\0 \0p\0l\0e\0a\0s\0e\0 \0c\0o\0n\0t\0a\0c\0t\0 \0t\0h\0e\0 \0p\0r\0o\0g\0r\0a\0m\0 \0c\0o\0-\0c\0h\0a\0i\0r\0s\0,\0 \0i\0c\0a\0c\01\03\0c\0h\0a\0i\0r\0s\0@\0u\0s\0e\0n\0i\0x\0.\0o\0r\0g\0,\0 \0o\0r\0 \0t\0h\0e\0 \0U\0S\0E\0N\0I\0X\0 \0o\0f\0f\0i\0c\0e\0,\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0p\0o\0l\0i\0c\0y\0@\0u\0s\0e\0n\0i\0x\0.\0o\0r\0g\0.\0
\0
\0
\0
\0 \0 \0A\0t\0 \0l\0e\0a\0s\0t\0 \0o\0n\0e\0 \0a\0u\0t\0h\0o\0r\0 \0o\0f\0 \0a\0n\0 \0a\0c\0c\0e\0p\0t\0e\0d\0 \0p\0a\0p\0e\0r\0 \0i\0s\0 \0e\0x\0p\0e\0c\0t\0e\0d\0 \0t\0o\0 \0p\0r\0e\0s\0e\0n\0t\0 \0t\0h\0e\0 \0p\0a\0p\0e\0r\0 \0i\0n\0 \0p\0e\0r\0s\0o\0n\0 \0a\0t\0 \0t\0h\0e\0 \0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0.\0 \0T\0h\0e\0 \0a\0c\0c\0e\0p\0t\0e\0d\0 \0p\0a\0p\0e\0r\0s\0 \0w\0i\0l\0l\0 \0b\0e\0 \0a\0v\0a\0i\0l\0a\0b\0l\0e\0 \0o\0n\0l\0i\0n\0e\0 \0t\0o\0 \0r\0e\0g\0i\0s\0t\0e\0r\0e\0d\0 \0a\0t\0t\0e\0n\0d\0e\0e\0s\0 \0b\0e\0f\0o\0r\0e\0 \0t\0h\0e\0 \0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0 \0a\0n\0d\0 \0w\0i\0l\0l\0 \0a\0l\0s\0o\0 \0a\0p\0p\0e\0a\0r\0 \0i\0n\0 \0p\0r\0o\0c\0e\0e\0d\0i\0n\0g\0s\0 \0d\0i\0s\0t\0r\0i\0b\0u\0t\0e\0d\0 \0v\0i\0a\0 \0U\0S\0B\0 \0d\0r\0i\0v\0e\0s\0 \0a\0t\0 \0t\0h\0e\0 \0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0.\0 \0I\0f\0 \0y\0o\0u\0r\0 \0a\0c\0c\0e\0p\0t\0e\0d\0 \0p\0a\0p\0e\0r\0 \0s\0h\0o\0u\0l\0d\0 \0n\0o\0t\0 \0b\0e\0 \0p\0u\0b\0l\0i\0s\0h\0e\0d\0 \0p\0r\0i\0o\0r\0 \0t\0o\0 \0t\0h\0e\0 \0e\0v\0e\0n\0t\0,\0 \0p\0l\0e\0a\0s\0e\0 \0n\0o\0t\0i\0f\0y\0 \0p\0r\0o\0d\0u\0c\0t\0i\0o\0n\0@\0u\0s\0e\0n\0i\0x\0.\0o\0r\0g\0.\0 \0T\0h\0e\0 \0p\0a\0p\0e\0r\0s\0 \0w\0i\0l\0l\0 \0b\0e\0 \0a\0v\0a\0i\0l\0a\0b\0l\0e\0 \0o\0n\0l\0i\0n\0e\0 \0t\0o\0 \0e\0v\0e\0r\0y\0o\0n\0e\0 \0b\0e\0g\0i\0n\0n\0i\0n\0g\0 \0o\0n\0 \0J\0u\0n\0e\0 \02\06\0,\0 \02\00\01\03\0.\0 \0A\0c\0c\0e\0p\0t\0e\0d\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0 \0w\0i\0l\0l\0 \0b\0e\0 \0t\0r\0e\0a\0t\0e\0d\0
\0a\0s\0 \0c\0o\0n\0f\0i\0d\0e\0n\0t\0i\0a\0l\0 \0p\0r\0i\0o\0r\0 \0t\0o\0 \0p\0u\0b\0l\0i\0c\0a\0t\0i\0o\0n\0 \0o\0n\0 \0t\0h\0e\0 \0U\0S\0E\0N\0I\0X\0 \0I\0C\0A\0C\0 \0'\01\03\0 \0W\0e\0b\0 \0s\0i\0t\0e\0;\0 \0r\0e\0j\0e\0c\0t\0e\0d\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0 \0w\0i\0l\0l\0 \0b\0e\0 \0p\0e\0r\0m\0a\0n\0e\0n\0t\0l\0y\0 \0t\0r\0e\0a\0t\0e\0d\0 \0a\0s\0 \0c\0o\0n\0f\0i\0d\0e\0n\0t\0i\0a\0l\0.\0
\0
\0
\0
\0
\0
\0*\0 \0S\0p\0e\0c\0i\0a\0l\0 \0T\0r\0a\0c\0k\0s\0
\0
\0
\0
\0 \0 \0T\0o\0 \0f\0a\0c\0i\0l\0i\0t\0a\0t\0e\0 \0c\0o\0m\0m\0u\0n\0i\0t\0y\0 \0c\0o\0l\0l\0a\0b\0o\0r\0a\0t\0i\0o\0n\0 \0a\0n\0d\0 \0e\0x\0c\0h\0a\0n\0g\0e\0 \0o\0f\0 \0i\0d\0e\0a\0s\0 \0i\0n\0 \0e\0m\0e\0r\0g\0e\0n\0t\0 \0t\0e\0c\0h\0n\0o\0l\0o\0g\0i\0c\0a\0l\0 \0a\0r\0e\0a\0s\0,\0 \0I\0C\0A\0C\0\x19 1\03\0 \0w\0i\0l\0l\0 \0h\0o\0s\0t\0 \0t\0w\0o\0 \0s\0p\0e\0c\0i\0a\0l\0 \0t\0r\0a\0c\0k\0s\0,\0 \0e\0a\0c\0h\0 \0o\0f\0 \0w\0h\0i\0c\0h\0 \0w\0i\0l\0l\0 \0b\0e\0 \0r\0e\0v\0i\0e\0w\0e\0d\0 \0b\0y\0 \0i\0t\0s\0 \0o\0w\0n\0 \0s\0u\0b\0c\0o\0m\0m\0i\0t\0t\0e\0e\0.\0 \0D\0r\0.\0 \0L\0e\0v\0e\0n\0t\0 \0G\0ü\0r\0g\0e\0n\0 \0w\0i\0l\0l\0 \0l\0e\0a\0d\0 \0a\0 \0s\0p\0e\0c\0i\0a\0l\0 \0t\0r\0a\0c\0k\0 \0o\0n\0 \0s\0e\0l\0f\0-\0a\0w\0a\0r\0e\0 \0I\0n\0t\0e\0r\0n\0e\0t\0 \0o\0f\0 \0T\0h\0i\0n\0g\0s\0 \0a\0n\0d\0 \0D\0r\0.\0 \0K\0a\0r\0s\0t\0e\0n\0 \0S\0c\0h\0w\0a\0n\0 \0w\0i\0l\0l\0 \0l\0e\0a\0d\0 \0a\0 \0s\0p\0e\0c\0i\0a\0l\0 \0t\0r\0a\0c\0k\0 \0o\0n\0 \0m\0a\0n\0a\0g\0e\0m\0e\0n\0t\0 \0o\0f\0 \0B\0i\0g\0 \0D\0a\0t\0a\0 \0s\0y\0s\0t\0e\0m\0s\0.\0
\0
\0
\0
\0
\0
\0*\0 \0P\0o\0s\0t\0e\0r\0s\0,\0 \0D\0e\0m\0o\0n\0s\0t\0r\0a\0t\0i\0o\0n\0s\0,\0 \0a\0n\0d\0 \0E\0x\0h\0i\0b\0i\0t\0i\0o\0n\0s\0
\0
\0
\0
\0 \0 \0I\0C\0A\0C\0 \0'\01\03\0 \0w\0i\0l\0l\0 \0a\0l\0s\0o\0 \0f\0e\0a\0t\0u\0r\0e\0 \0a\0 \0p\0o\0s\0t\0e\0r\0,\0 \0d\0e\0m\0o\0n\0s\0t\0r\0a\0t\0i\0o\0n\0,\0 \0a\0n\0d\0 \0e\0x\0h\0i\0b\0i\0t\0i\0o\0n\0 \0s\0e\0s\0s\0i\0o\0n\0 \0c\0o\0n\0s\0i\0s\0t\0i\0n\0g\0 \0o\0f\0 \0r\0e\0s\0e\0a\0r\0c\0h\0 \0p\0r\0o\0t\0o\0t\0y\0p\0e\0s\0 \0a\0n\0d\0 \0t\0e\0c\0h\0n\0o\0l\0o\0g\0y\0 \0a\0r\0t\0i\0f\0a\0c\0t\0s\0 \0t\0h\0a\0t\0 \0d\0e\0m\0o\0n\0s\0t\0r\0a\0t\0e\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0s\0o\0f\0t\0w\0a\0r\0e\0 \0o\0r\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0 \0p\0r\0i\0n\0c\0i\0p\0l\0e\0s\0.\0 \0P\0l\0e\0a\0s\0e\0 \0c\0h\0e\0c\0k\0 \0b\0a\0c\0k\0 \0h\0e\0r\0e\0 \0f\0o\0r\0 \0f\0o\0r\0m\0a\0t\0t\0i\0n\0g\0 \0a\0n\0d\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0i\0n\0s\0t\0r\0u\0c\0t\0i\0o\0n\0s\0,\0 \0p\0l\0u\0s\0 \0t\0h\0e\0 \0W\0e\0b\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0f\0o\0r\0m\0 \0s\0p\0e\0c\0i\0f\0i\0c\0 \0t\0o\0 \0t\0h\0i\0s\0 \0s\0e\0s\0s\0i\0o\0n\0,\0 \0w\0h\0i\0c\0h\0 \0w\0i\0l\0l\0 \0b\0e\0 \0a\0v\0a\0i\0l\0a\0b\0l\0e\0 \0h\0e\0r\0e\0 \0s\0o\0o\0n\0.\0
\0
\0
\0
\0
\0
\0*\0 \0P\0h\0D\0 \0T\0h\0e\0s\0i\0s\0 \0D\0i\0g\0e\0s\0t\0 \0F\0o\0r\0u\0m\0
\0
\0
\0
\0 \0 \0C\0u\0r\0r\0e\0n\0t\0 \0P\0h\0D\0 \0s\0t\0u\0d\0e\0n\0t\0s\0 \0w\0h\0o\0 \0a\0r\0e\0 \0w\0o\0r\0k\0i\0n\0g\0 \0o\0n\0 \0t\0o\0p\0i\0c\0s\0 \0r\0e\0l\0e\0v\0a\0n\0t\0 \0t\0o\0 \0a\0u\0t\0o\0n\0o\0m\0i\0c\0 \0c\0o\0m\0p\0u\0t\0i\0n\0g\0 \0a\0r\0e\0 \0i\0n\0v\0i\0t\0e\0d\0 \0t\0o\0 \0s\0u\0b\0m\0i\0t\0 \0a\0 \0s\0h\0o\0r\0t\0 \0s\0u\0m\0m\0a\0r\0y\0 \0(\0u\0p\0 \0t\0o\0 \02\0 \0p\0a\0g\0e\0s\0)\0 \0o\0f\0 \0t\0h\0e\0i\0r\0 \0t\0h\0e\0s\0e\0s\0.\0 \0T\0o\0p\0 \0s\0e\0l\0e\0c\0t\0e\0d\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0s\0 \0w\0i\0l\0l\0 \0b\0e\0 \0p\0r\0e\0s\0e\0n\0t\0e\0d\0 \0a\0t\0 \0a\0 \0P\0h\0D\0 \0f\0o\0r\0u\0m\0 \0d\0u\0r\0i\0n\0g\0 \0t\0h\0e\0 \0I\0C\0A\0C\0 \0'\01\03\0 \0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0.\0 \0P\0l\0e\0a\0s\0e\0 \0c\0h\0e\0c\0k\0 \0b\0a\0c\0k\0 \0h\0e\0r\0e\0 \0f\0o\0r\0 \0s\0u\0b\0m\0i\0s\0s\0i\0o\0n\0 \0i\0n\0s\0t\0r\0u\0c\0t\0i\0o\0n\0s\0.\0
\0
\0
\0
\0
\0
\0*\0 \0C\0o\0n\0f\0e\0r\0e\0n\0c\0e\0 \0O\0r\0g\0a\0n\0i\0z\0e\0r\0s\0:\0 \0
\0
\0
\0
\0 \0 \0*\0*\0 \0G\0e\0n\0e\0r\0a\0l\0 \0C\0h\0a\0i\0r\0:\0 \0J\0e\0f\0f\0r\0e\0y\0 \0K\0e\0p\0h\0a\0r\0t\0,\0 \0I\0B\0M\0 \0R\0e\0s\0e\0a\0r\0c\0h\0
\0
\0
\0
\0 \0 \0*\0*\0 \0P\0r\0o\0g\0r\0a\0m\0 \0C\0o\0-\0C\0h\0a\0i\0r\0s\0:\0 \0C\0a\0l\0t\0o\0n\0 \0P\0u\0,\0 \0G\0e\0o\0r\0g\0i\0a\0 \0I\0n\0s\0t\0i\0t\0u\0t\0e\0 \0o\0f\0 \0T\0e\0c\0h\0n\0o\0l\0o\0g\0y\0;\0 \0X\0i\0a\0o\0y\0u\0n\0 \0Z\0h\0u\0,\0 \0V\0M\0w\0a\0r\0e\0
\0
\0
\0
\0 \0 \0*\0*\0 \0P\0o\0s\0t\0e\0r\0/\0D\0e\0m\0o\0/\0E\0x\0h\0i\0b\0i\0t\0 \0C\0h\0a\0i\0r\0:\0 \0S\0a\0m\0u\0e\0l\0 \0K\0o\0u\0n\0e\0v\0,\0 \0K\0a\0r\0l\0s\0r\0u\0h\0e\0 \0I\0n\0s\0t\0i\0t\0u\0t\0e\0 \0o\0f\0 \0T\0e\0c\0h\0n\0o\0l\0o\0g\0y\0
\0
\0 \0 \0
\0
\0 \0 \0*\0*\0 \0P\0h\0D\0 \0F\0o\0r\0u\0m\0 \0C\0h\0a\0i\0r\0:\0 \0R\0e\0a\0n\0 \0G\0r\0i\0f\0f\0i\0t\0h\0,\0 \0V\0M\0w\0a\0r\0e\0
\0
\0 \0 \0
\0
\0 \0 \0*\0*\0 \0P\0u\0b\0l\0i\0c\0i\0t\0y\0 \0C\0h\0a\0i\0r\0s\0:\0 \0M\0a\0r\0t\0i\0n\0a\0 \0M\0a\0g\0g\0i\0o\0,\0 \0L\0u\0n\0d\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0;\0 \0M\0i\0n\0g\0 \0Z\0h\0a\0o\0,\0 \0F\0l\0o\0r\0i\0d\0a\0 \0I\0n\0t\0e\0r\0n\0a\0t\0i\0o\0n\0a\0l\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0
\0
\0 \0 \0*\0*\0 \0P\0r\0o\0g\0r\0a\0m\0 \0C\0o\0m\0m\0i\0t\0t\0e\0e\0:\0
\0
\0 \0 \0
\0
\0 \0 \0 \0 \0 \0T\0a\0r\0e\0k\0 \0A\0b\0d\0e\0l\0z\0a\0h\0e\0r\0,\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0 \0o\0f\0 \0I\0l\0l\0i\0n\0o\0i\0s\0 \0a\0t\0 \0U\0r\0b\0a\0n\0a\0-\0C\0h\0a\0m\0p\0a\0i\0g\0n\0
\0
\0 \0 \0 \0 \0 \0A\0r\0t\0u\0r\0 \0A\0n\0d\0r\0z\0e\0j\0a\0k\0,\0 \0H\0e\0i\0d\0e\0l\0b\0e\0r\0g\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0S\0a\0r\0a\0 \0B\0o\0u\0c\0h\0e\0n\0a\0k\0,\0 \0I\0N\0R\0I\0A\0
\0
\0 \0 \0 \0 \0 \0G\0i\0u\0l\0i\0a\0n\0o\0 \0C\0a\0s\0a\0l\0e\0,\0 \0I\0m\0p\0e\0r\0i\0a\0l\0 \0C\0o\0l\0l\0e\0g\0e\0 \0L\0o\0n\0d\0o\0n\0
\0
\0 \0 \0 \0 \0 \0Y\0u\0a\0n\0 \0C\0h\0e\0n\0,\0 \0H\0P\0 \0L\0a\0b\0s\0
\0
\0 \0 \0 \0 \0 \0C\0h\0a\0r\0l\0e\0s\0 \0C\0o\0n\0s\0e\0l\0,\0 \0I\0N\0R\0I\0A\0
\0
\0 \0 \0 \0 \0 \0A\0l\0v\0a\0 \0C\0o\0u\0c\0h\0,\0 \0T\0u\0f\0t\0s\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0P\0e\0t\0e\0r\0 \0D\0i\0n\0d\0a\0,\0 \0N\0o\0r\0t\0h\0w\0e\0s\0t\0e\0r\0n\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0J\0o\0a\0o\0 \0E\0.\0 \0F\0e\0r\0r\0e\0i\0r\0a\0,\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0 \0o\0f\0 \0S\0?\0o\0 \0P\0a\0u\0l\0o\0
\0
\0 \0 \0 \0 \0 \0J\0o\0s\0e\0 \0F\0o\0r\0t\0e\0s\0,\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0 \0o\0f\0 \0F\0l\0o\0r\0i\0d\0a\0
\0
\0 \0 \0 \0 \0 \0D\0i\0m\0i\0t\0r\0i\0o\0s\0 \0G\0e\0o\0r\0g\0a\0k\0o\0p\0o\0u\0l\0o\0s\0,\0 \0C\0S\0I\0R\0O\0
\0
\0 \0 \0 \0 \0 \0R\0e\0a\0n\0 \0G\0r\0i\0f\0f\0i\0t\0h\0,\0 \0V\0M\0w\0a\0r\0e\0
\0
\0 \0 \0 \0 \0 \0X\0i\0a\0o\0h\0u\0i\0 \0G\0u\0,\0 \0N\0o\0r\0t\0h\0 \0C\0a\0r\0o\0l\0i\0n\0a\0 \0S\0t\0a\0t\0e\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0Y\0u\0x\0i\0o\0n\0g\0 \0H\0e\0,\0 \0M\0i\0c\0r\0o\0s\0o\0f\0t\0 \0R\0e\0s\0e\0a\0r\0c\0h\0
\0
\0 \0 \0 \0 \0 \0T\0o\0m\0 \0H\0o\0l\0v\0o\0e\0t\0,\0 \0K\0U\0 \0L\0e\0u\0v\0e\0n\0
\0
\0 \0 \0 \0 \0 \0J\0i\0m\0a\0n\0 \0H\0o\0n\0g\0,\0 \0S\0o\0o\0n\0g\0s\0i\0l\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0G\0e\0o\0f\0f\0 \0J\0i\0a\0n\0g\0,\0 \0N\0E\0C\0 \0L\0a\0b\0s\0
\0
\0 \0 \0 \0 \0 \0N\0a\0g\0a\0r\0a\0j\0a\0n\0 \0K\0a\0n\0d\0a\0s\0a\0m\0y\0,\0 \0D\0r\0e\0x\0e\0l\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0Y\0a\0s\0u\0h\0i\0k\0o\0 \0K\0a\0n\0e\0m\0a\0s\0a\0,\0 \0F\0u\0j\0i\0t\0s\0u\0 \0L\0a\0b\0s\0
\0
\0 \0 \0 \0 \0 \0J\0e\0f\0f\0 \0K\0e\0p\0h\0a\0r\0t\0,\0 \0I\0B\0M\0 \0R\0e\0s\0e\0a\0r\0c\0h\0
\0
\0 \0 \0 \0 \0 \0S\0a\0m\0u\0e\0l\0 \0K\0o\0u\0n\0e\0v\0,\0 \0K\0a\0r\0l\0s\0r\0u\0h\0e\0 \0I\0n\0s\0t\0i\0t\0u\0t\0e\0 \0o\0f\0 \0T\0e\0c\0h\0n\0o\0l\0o\0g\0y\0
\0
\0 \0 \0 \0 \0 \0M\0i\0k\0e\0 \0K\0o\0z\0u\0c\0h\0,\0 \0I\0n\0t\0e\0l\0 \0L\0a\0b\0s\0
\0
\0 \0 \0 \0 \0 \0M\0a\0r\0i\0n\0 \0L\0i\0t\0o\0i\0u\0,\0 \0Y\0o\0r\0k\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0X\0u\0e\0 \0L\0i\0u\0,\0 \0M\0c\0G\0i\0l\0l\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0A\0r\0i\0f\0 \0M\0e\0r\0c\0h\0a\0n\0t\0,\0 \0G\0o\0o\0g\0l\0e\0
\0
\0 \0 \0 \0 \0 \0T\0r\0i\0d\0i\0b\0 \0M\0u\0k\0h\0e\0r\0j\0e\0e\0,\0 \0X\0e\0r\0o\0x\0 \0R\0e\0s\0e\0a\0r\0c\0h\0
\0
\0 \0 \0 \0 \0 \0O\0n\0u\0r\0 \0M\0u\0t\0l\0u\0,\0 \0C\0a\0r\0n\0e\0g\0i\0e\0 \0M\0e\0l\0l\0o\0n\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0P\0r\0i\0y\0a\0 \0N\0a\0r\0a\0s\0h\0i\0m\0h\0a\0n\0,\0 \0C\0a\0r\0n\0e\0g\0i\0e\0 \0M\0e\0l\0l\0o\0n\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0O\0m\0e\0r\0 \0R\0a\0n\0a\0,\0 \0C\0a\0r\0d\0i\0f\0f\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0A\0n\0d\0e\0r\0s\0 \0R\0o\0b\0e\0r\0t\0s\0s\0o\0n\0,\0 \0L\0u\0n\0d\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0K\0a\0i\0 \0S\0a\0c\0h\0s\0,\0 \0S\0A\0P\0 \0A\0G\0
\0
\0 \0 \0 \0 \0 \0H\0a\0r\0t\0m\0u\0t\0 \0S\0c\0h\0m\0e\0c\0k\0,\0 \0K\0I\0T\0
\0
\0 \0 \0 \0 \0 \0K\0a\0r\0s\0t\0e\0n\0 \0S\0c\0h\0w\0a\0n\0,\0 \0G\0e\0o\0r\0g\0i\0a\0 \0I\0n\0s\0t\0i\0t\0u\0t\0e\0 \0o\0f\0 \0T\0e\0c\0h\0n\0o\0l\0o\0g\0y\0
\0
\0 \0 \0 \0 \0 \0O\0n\0n\0 \0S\0h\0e\0h\0o\0r\0y\0,\0 \0I\0B\0M\0 \0R\0e\0s\0e\0a\0r\0c\0h\0 \0H\0a\0i\0f\0a\0
\0
\0 \0 \0 \0 \0 \0Y\0a\0s\0u\0s\0h\0i\0 \0S\0h\0i\0n\0j\0o\0,\0 \0T\0s\0u\0k\0u\0b\0a\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0E\0v\0g\0e\0n\0i\0a\0 \0S\0m\0i\0r\0n\0i\0,\0 \0C\0o\0l\0l\0e\0g\0e\0 \0o\0f\0 \0W\0i\0l\0l\0i\0a\0m\0 \0a\0n\0d\0 \0M\0a\0r\0y\0
\0
\0 \0 \0 \0 \0 \0C\0h\0r\0i\0s\0t\0o\0p\0h\0e\0r\0 \0S\0t\0e\0w\0a\0r\0t\0,\0 \0O\0h\0i\0o\0 \0S\0t\0a\0t\0e\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0Y\0a\0-\0Y\0u\0n\0n\0 \0S\0u\0,\0 \0N\0a\0t\0i\0o\0n\0a\0l\0 \0T\0a\0i\0w\0a\0n\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0V\0a\0n\0i\0s\0h\0 \0T\0a\0l\0w\0a\0r\0,\0 \0H\0P\0 \0L\0a\0b\0s\0
\0
\0 \0 \0 \0 \0 \0B\0h\0u\0v\0a\0n\0 \0U\0r\0g\0a\0o\0n\0k\0a\0r\0,\0 \0P\0e\0n\0n\0s\0y\0l\0v\0a\0n\0i\0a\0 \0S\0t\0a\0t\0e\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0M\0u\0s\0t\0a\0f\0a\0 \0U\0y\0s\0a\0l\0,\0 \0V\0M\0w\0a\0r\0e\0
\0
\0 \0 \0 \0 \0 \0X\0i\0a\0o\0r\0u\0i\0 \0W\0a\0n\0g\0,\0 \0O\0h\0i\0o\0 \0S\0t\0a\0t\0e\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0J\0i\0a\0n\0w\0e\0i\0 \0Y\0i\0n\0,\0 \0Z\0h\0e\0j\0i\0a\0n\0g\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0K\0e\0n\0j\0i\0 \0Y\0o\0s\0h\0i\0h\0i\0r\0a\0,\0 \0N\0E\0C\0 \0L\0a\0b\0s\0
\0
\0 \0 \0 \0 \0 \0J\0i\0a\0n\0f\0e\0n\0g\0 \0Z\0h\0a\0n\0,\0 \0C\0h\0i\0n\0e\0s\0e\0 \0A\0c\0a\0d\0e\0m\0y\0 \0o\0f\0 \0S\0c\0i\0e\0n\0c\0e\0s\0
\0
\0 \0 \0 \0 \0 \0M\0i\0n\0g\0 \0Z\0h\0a\0o\0,\0 \0F\0l\0o\0r\0i\0d\0a\0 \0I\0n\0t\0e\0r\0n\0a\0t\0i\0o\0n\0a\0l\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0
\0
\0 \0 \0 \0 \0 \0X\0i\0a\0o\0b\0o\0 \0Z\0h\0o\0u\0,\0 \0U\0n\0i\0v\0e\0r\0s\0i\0t\0y\0 \0o\0f\0 \0C\0o\0l\0o\0r\0a\0d\0o\0
\0
\0 \0 \0 \0 \0 \0
\0
\0 \0 \0 \0 \0 \0
\0
\0*\0 \0M\0o\0r\0e\0 \0i\0n\0f\0o\0r\0m\0a\0t\0i\0o\0n\0:\0
\0
\0 \0 \0
\0
\0 \0 \0*\0*\0 \0W\0e\0b\0:\0 \0h\0t\0t\0p\0s\0:\0/\0/\0w\0w\0w\0.\0u\0s\0e\0n\0i\0x\0.\0o\0r\0g\0/\0c\0o\0n\0f\0e\0r\0e\0n\0c\0e\0/\0i\0c\0a\0c\01\03\0
\0
\0 \0 \0*\0*\0 \0E\0m\0a\0i\0l\0:\0 \0i\0c\0a\0c\02\00\01\03\0@\0c\0s\0.\0f\0i\0u\0.\0e\0d\0u\0
\0
\0 \0 \0*\0*\0 \0L\0i\0n\0k\0e\0d\0I\0n\0:\0 \0h\0t\0t\0p\0:\0/\0/\0w\0w\0w\0.\0l\0i\0n\0k\0e\0d\0i\0n\0.\0c\0o\0m\0/\0g\0r\0o\0u\0p\0s\0/\0I\0C\0A\0C\0-\0C\0o\0n\0f\0e\0r\0e\0n\0c\0e\0-\04\02\06\04\05\08\03\0
\0
\0
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox