PNG  IHDR  8] PLTE S =tRNS   PNG  IHDR  8] PLTE S =tRNS   REDROOM
PHP 7.4.33
Preview: pipe.go Size: 5.43 KB
/proc/thread-self/root/opt/golang/1.22.0/src/net/pipe.go

// Copyright 2010 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package net

import (
	"io"
	"os"
	"sync"
	"time"
)

// pipeDeadline is an abstraction for handling timeouts.
type pipeDeadline struct {
	mu     sync.Mutex // Guards timer and cancel
	timer  *time.Timer
	cancel chan struct{} // Must be non-nil
}

func makePipeDeadline() pipeDeadline {
	return pipeDeadline{cancel: make(chan struct{})}
}

// set sets the point in time when the deadline will time out.
// A timeout event is signaled by closing the channel returned by waiter.
// Once a timeout has occurred, the deadline can be refreshed by specifying a
// t value in the future.
//
// A zero value for t prevents timeout.
func (d *pipeDeadline) set(t time.Time) {
	d.mu.Lock()
	defer d.mu.Unlock()

	if d.timer != nil && !d.timer.Stop() {
		<-d.cancel // Wait for the timer callback to finish and close cancel
	}
	d.timer = nil

	// Time is zero, then there is no deadline.
	closed := isClosedChan(d.cancel)
	if t.IsZero() {
		if closed {
			d.cancel = make(chan struct{})
		}
		return
	}

	// Time in the future, setup a timer to cancel in the future.
	if dur := time.Until(t); dur > 0 {
		if closed {
			d.cancel = make(chan struct{})
		}
		d.timer = time.AfterFunc(dur, func() {
			close(d.cancel)
		})
		return
	}

	// Time in the past, so close immediately.
	if !closed {
		close(d.cancel)
	}
}

// wait returns a channel that is closed when the deadline is exceeded.
func (d *pipeDeadline) wait() chan struct{} {
	d.mu.Lock()
	defer d.mu.Unlock()
	return d.cancel
}

func isClosedChan(c <-chan struct{}) bool {
	select {
	case <-c:
		return true
	default:
		return false
	}
}

type pipeAddr struct{}

func (pipeAddr) Network() string { return "pipe" }
func (pipeAddr) String() string  { return "pipe" }

type pipe struct {
	wrMu sync.Mutex // Serialize Write operations

	// Used by local Read to interact with remote Write.
	// Successful receive on rdRx is always followed by send on rdTx.
	rdRx <-chan []byte
	rdTx chan<- int

	// Used by local Write to interact with remote Read.
	// Successful send on wrTx is always followed by receive on wrRx.
	wrTx chan<- []byte
	wrRx <-chan int

	once       sync.Once // Protects closing localDone
	localDone  chan struct{}
	remoteDone <-chan struct{}

	readDeadline  pipeDeadline
	writeDeadline pipeDeadline
}

// Pipe creates a synchronous, in-memory, full duplex
// network connection; both ends implement the [Conn] interface.
// Reads on one end are matched with writes on the other,
// copying data directly between the two; there is no internal
// buffering.
func Pipe() (Conn, Conn) {
	cb1 := make(chan []byte)
	cb2 := make(chan []byte)
	cn1 := make(chan int)
	cn2 := make(chan int)
	done1 := make(chan struct{})
	done2 := make(chan struct{})

	p1 := &pipe{
		rdRx: cb1, rdTx: cn1,
		wrTx: cb2, wrRx: cn2,
		localDone: done1, remoteDone: done2,
		readDeadline:  makePipeDeadline(),
		writeDeadline: makePipeDeadline(),
	}
	p2 := &pipe{
		rdRx: cb2, rdTx: cn2,
		wrTx: cb1, wrRx: cn1,
		localDone: done2, remoteDone: done1,
		readDeadline:  makePipeDeadline(),
		writeDeadline: makePipeDeadline(),
	}
	return p1, p2
}

func (*pipe) LocalAddr() Addr  { return pipeAddr{} }
func (*pipe) RemoteAddr() Addr { return pipeAddr{} }

func (p *pipe) Read(b []byte) (int, error) {
	n, err := p.read(b)
	if err != nil && err != io.EOF && err != io.ErrClosedPipe {
		err = &OpError{Op: "read", Net: "pipe", Err: err}
	}
	return n, err
}

func (p *pipe) read(b []byte) (n int, err error) {
	switch {
	case isClosedChan(p.localDone):
		return 0, io.ErrClosedPipe
	case isClosedChan(p.remoteDone):
		return 0, io.EOF
	case isClosedChan(p.readDeadline.wait()):
		return 0, os.ErrDeadlineExceeded
	}

	select {
	case bw := <-p.rdRx:
		nr := copy(b, bw)
		p.rdTx <- nr
		return nr, nil
	case <-p.localDone:
		return 0, io.ErrClosedPipe
	case <-p.remoteDone:
		return 0, io.EOF
	case <-p.readDeadline.wait():
		return 0, os.ErrDeadlineExceeded
	}
}

func (p *pipe) Write(b []byte) (int, error) {
	n, err := p.write(b)
	if err != nil && err != io.ErrClosedPipe {
		err = &OpError{Op: "write", Net: "pipe", Err: err}
	}
	return n, err
}

func (p *pipe) write(b []byte) (n int, err error) {
	switch {
	case isClosedChan(p.localDone):
		return 0, io.ErrClosedPipe
	case isClosedChan(p.remoteDone):
		return 0, io.ErrClosedPipe
	case isClosedChan(p.writeDeadline.wait()):
		return 0, os.ErrDeadlineExceeded
	}

	p.wrMu.Lock() // Ensure entirety of b is written together
	defer p.wrMu.Unlock()
	for once := true; once || len(b) > 0; once = false {
		select {
		case p.wrTx <- b:
			nw := <-p.wrRx
			b = b[nw:]
			n += nw
		case <-p.localDone:
			return n, io.ErrClosedPipe
		case <-p.remoteDone:
			return n, io.ErrClosedPipe
		case <-p.writeDeadline.wait():
			return n, os.ErrDeadlineExceeded
		}
	}
	return n, nil
}

func (p *pipe) SetDeadline(t time.Time) error {
	if isClosedChan(p.localDone) || isClosedChan(p.remoteDone) {
		return io.ErrClosedPipe
	}
	p.readDeadline.set(t)
	p.writeDeadline.set(t)
	return nil
}

func (p *pipe) SetReadDeadline(t time.Time) error {
	if isClosedChan(p.localDone) || isClosedChan(p.remoteDone) {
		return io.ErrClosedPipe
	}
	p.readDeadline.set(t)
	return nil
}

func (p *pipe) SetWriteDeadline(t time.Time) error {
	if isClosedChan(p.localDone) || isClosedChan(p.remoteDone) {
		return io.ErrClosedPipe
	}
	p.writeDeadline.set(t)
	return nil
}

func (p *pipe) Close() error {
	p.once.Do(func() { close(p.localDone) })
	return nil
}

Directory Contents

Dirs: 9 × Files: 214

Name Size Perms Modified Actions
http DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
internal DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
mail DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
netip DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
rpc DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
smtp DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
testdata DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
textproto DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
url DIR
- drwxr-xr-x 2024-02-02 18:09:55
Edit Download
9.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.50 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
582 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
272 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
343 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
298 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
642 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
276 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
276 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
580 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
579 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
753 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
842 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
343 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.33 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.35 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.24 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
461 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
911 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
998 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.99 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.44 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
15.63 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
12.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.82 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
25.68 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
30.14 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.77 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.65 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.51 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
24.26 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
69.13 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.73 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.07 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.60 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.96 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
224 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
437 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
543 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
981 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
20.32 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
382 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
723 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
355 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
757 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.45 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.05 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
627 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.56 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
496 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.14 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.72 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
481 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.50 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.07 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.20 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.76 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
521 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
894 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
211 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
658 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
720 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.48 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.60 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.26 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.46 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.82 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
718 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.44 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.96 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.65 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.71 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.13 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
814 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.76 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.85 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
13.88 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.11 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
874 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.89 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.98 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.05 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.48 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
645 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.86 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.81 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
25.60 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
20.50 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
29.04 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
9.94 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
40.62 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.35 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
13.80 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.93 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.88 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.26 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
693 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.39 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
467 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
392 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.37 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.53 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.19 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
284 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.00 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
10.77 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.96 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.06 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
542 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
24.56 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
222 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
220 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
453 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
220 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
218 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
26.36 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.79 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
14.00 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
16.28 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.48 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.40 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.02 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.04 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.55 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.20 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.33 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.46 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.34 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.24 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.44 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.70 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
631 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.33 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.96 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
3.12 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.25 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
346 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.10 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.12 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.93 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
344 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
8.25 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.04 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.02 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.67 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.45 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
867 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
735 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.38 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
769 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
786 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.43 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.21 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
955 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.25 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
406 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.13 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.25 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.51 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
918 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.38 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
993 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
575 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
262 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
390 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
802 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.69 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
376 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
13.48 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
962 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.75 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
770 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
698 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
365 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
525 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
442 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.15 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
399 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
722 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
741 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.18 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.16 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
17.68 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.34 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
29.11 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
11.83 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
4.64 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.31 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
7.53 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
17.24 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
10.12 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.29 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.24 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
6.64 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
654 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
332 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
275 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.51 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
10.64 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
2.03 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
5.03 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download
666 B lrw-r--r-- 2024-02-02 18:09:55
Edit Download
1.61 KB lrw-r--r-- 2024-02-02 18:09:55
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).
 !"#$%&'(()*+,-./00123456789 t\ wIDATx ]ys  47Y ƒ -  "  Rv  < f{Ɛ $k l L > L  ~h^ 1  [  r G t& h  l F z3O Y ! p A(_g̷ E8 )S 8 c  Kb"z ~ 5 J xAL WU <  *  5 m;W a pB h ~P J 2 3 6 ҙ .Ƹ P i  4g F R L P ΪK/D  M v (a3 k J Œ4N5* SH ` SdJ z  O J Xՠ V>u ߱ BE&L b2 ?2` tX+  c CB A$ i b C ĀMB E : /  # Dx &l =q Ty  0 \p I ( L Ǎ { e 4k ;`u^ヲ eP!( d {  )T A 8 O;Ě n >;s6 !  :Nx `[S D HU ~ q›J F} a g*D 49 / pn k h (t 8NxƐF _!r չ7 ZR R׷ q/5") Ӎ NY 0 x sZ!   o  fu  ,  K"$ ? pg  㕣=  1» {h " fh7    y  } € +7  $ y " X —ą - G P u 4 m >J 5 L =V ' ^@I p ?MS xЌ XV P ! h "C NS9B8̢ ]!K  e   zA , ӏkbY  !< XQ ٿyS| *" f { w  4@[S <  # 0 ! js [m  =,~ o "ݎ DHf Wo $ g ! Vԅ t mB /y Wf V4񺍸 c+@x?  B ~u " xUN e 0 BĂ) ~J pz! 7y6]l Ԥ@ P a< O /DHC `≻  N m"$  0ObB }{ x AO FCG D R ^ "B  { WDH  UR l@ T #  +"d T ; 0 i  D}. 7 ` ' ] w rE &S i ƕiTD EL P _ u h $ Ա FG wVD G L R Zf ' .!] J /ZR oGЍs Mr Ĥ ʬ 3 Q [3 cL ` ^ p + ( F;# B 5 '  2Y f [  ϶R0e }  E 7 6M aۮ H <& n % L] E}Up x紉, Uw' Q  Ǯշo k ވۙ 0N94 VX5 xEDE l D #֤ } C o )W :  ^ s 9  bRf iX5u ཱི 4 :[  T 1. | [E 2ؽ Iy\ : o x K G 5 ylP ' uK E ftb/i[3 .g _  [3M n G, #NwQ5~  ؚ) | n =Ц"x qg gB ` 듘 ~ x w ? ? R~  _ u. &VQ K˻   H C ( TN˄+ `C dA nB׭ D 3"Z G ê ^k H_ /- ~ " R_  .8 Z_ 6@ o  xg  uP ? 3լ @7AM!  E7^ - =V L  x  g-D0  CtmW 7  O  G _ WD0 g C  w1 r d w : a | \  *" f nֳ ^ H# f L ` Z ۽hV  }S F r0Ù Bć5r] @! NL iQ]{s^=4 d  WD  "  "   M; t" 8 5 e dL| "-*st" ) SWD ?R[S e ooF  20.D ? bo =) A i o d ģ ZҰaO @E =) i D a &ܟa CϞ y6 ,<%{^x%{f8? `iw^ ?/ M * IEND B`